프로그래밍/Spring
[SpringBoot] 다른 서브 도메인간 쿠키를 교환할 때 에러 (An invalid domain [.xxx.xxx] was specified for this cookie)
들어가며 프론트 도메인인 www.ticket-auctoin.kro.kr 과 서버 도메인인 api.ticket-auction.kro.kr 간 쿠키를 교환하는데 쿠키를 받지못하는 문제가 발생했다. 해당 이유는 서버에서 cookie를 set할 때, 도메인을 따로 설정해주지 않아 서버 도메인경로로 setting이 되서 그렇다. 문제 그래서 cookie를 세팅할 때, 모든 서브도메인끼리 쿠키를 공유할 수 있도록 .ticket-auction.kro.kr 로 세팅하여 보냈다. 도메인을 세팅하고 테스트를 해보니 쿠키에서 다음과 같은 에러가 발생했다. ava.lang.IllegalArgumentException: An invalid domain [.ticket-auction.kro.kr] was specified for..
[Spring] ObjectMapper 직렬화 시 한글문자 ??? 문제
개인 프로젝트 과제를 진행 중에, fillter에서 인증 실패 시, response에 에러메세지를 전달하기 위해 ObjectMapper를 이용하던 중 문제가 발생했습니다. 한글 문자가 물음표로 (???) 나오는 문제 ErrorResponse 객체에 들어있는 데이터 중 한글로 된 에러메시지가 있습니다, 해당 response를 ObjectMapper로 직렬화를 하여 반환할 때, 다음과 같이 ????로 반환됩니다. 해결 해결 방법은 다음과 같습니다. 1. reponse content type 지정 response.setContentType(MediaType.APPLICATION_JSON_VALUE); 2.response char set 지정 response.setCharacterEncoding("utf-8")..
[Spring] ObjectMapper - LocalDateTime 직렬화 문제
개인 프로젝트 과제를 진행 중에, fillter에서 인증 실패 시, response에 에러메세지를 전달하기 위해 ObjectMapper를 이용하던 중 문제가 발생했습니다. LocalDateTime 직렬화 문제 ErrorResponse 객체에 들어있는 데이터중 LocaldateTime.now()로 문제가 발생한 시간 데이터가 있습니다. 해당 response를 ObjectMapper로 직렬화를 하여 반환할 때, 다음과 같은 예외가 발생합니다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "c..
[Spring] 스프링(Spring)이란?
Spring이란? 엔터프라이즈용 Java 애플리케이션을 간편하게 만들게 해주는 도구 스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했습니다. 비즈니스 로직을 구현하는 기술 자체가 복잡하고 어려웠기 때문입니다. 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡합니다. 따라서, 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있습니다. 오픈소스 스프링은 모든 사용자에게 무료로 열려 있습니다. 즉, 어떤 개인 및 기업도 스프링을 사용하여 웹 애플리케이션을 개발을 할 수 있으며, 필요하다면 스프링의 코드를 일부 수정하여 사용하여도 무관합니다. 이처럼 오픈..
[Spring] 유효성 검증 - Validation
Validation이란? 로직을 처리하기 위해 필요한 데이터 ( 사용자 또는 다른 서버의 request 등 )의 값이 유효한지, 잘못된 데이터인지 확인하는 단계를 뜻합니다. 예를들어 이메일 데이터를 받을 때, 이메일의 형식이 일치하지 않는다면, 처리를 하지 못하기에 사전에 확인하고 검증합니다. Bean Validation Spring에서는 validation을 위해 Bean Validation 라이브러리를 제공합니다. Bean Validation은 유효성 검증에 대한 여러 에노테이션을 제공합니다. @NotNull null 불가 @NotEmpty null, “” 불가 @NotBlank null, “”. “ “ 불가 @Size 문자 길이 측정 @Max 최대값 @Min 최소값 @Positive 양수 @Nega..
[Spring] REST API 테스트 코드 작성하기
내일배움캠프 Spring 개인과제 (익명 게시판 API구현하기)를 하면서 TDD 구현 프로세스로 하자고 마음먹고 진행했다. 그래서 기본적인 설계 (유즈케이스, ERD, API 명세)를 작성하였고 컨트롤러 테스트코드 -> 컨트롤러 -> 서비스테스트코드 -> 서비스 , 레포지토리 순서로 구현을 생각해서 가장 먼저 컨트롤러 테스트 코드를 작성해보았다. 컨트롤러 테스트 코드 작성하기 컨트롤러 테스트도 그렇고 각 테스트는 단위 테스트로 작성하였다. 그래서 컨트롤러가 의존하는 컴포넌트(서비스)는 Mokito 프레임워크를 이용해 Mocking하여 진행하였다. @Import(AppConfig.class) //PasswordEncoder Bean 설정 클래스 @WebMvcTest(PostController.class) ..
[Spring] 테스트 코드에서 JPA metamodel must not be empty! 예외가 발생할 때
문제상황 게시글 생성 Controller 테스트를 작성하고 테스트를 하려는데 해당 에러를 만나게 됐다. 처음엔 Entity 설정을 뭔가 잘못했나 생각했는데 딱히 이상은 없었고, 잘 모르겠어서 검색을 해보았다. 문제점 에러가 발생한 이유는 Auditing 때문이다. 게시글의 작성일 필드 값을 자동으로 넣어주기 위해 Auditing 설정을 했는데, @EnableJpaAuditing 을 App Class에서 설정을 해주었다. 이렇게 한 설정은 실행할 때는 문제가 되진 않지만, 내가 작성한 테스트에서는 문제가 된다. Spring 컨테이너를 요구하는 테스트는 가장 기본이 되는 @SpringBootApplication이 붙은 클래스가 항상 로딩이된다. @EnableJpaAuditing이 해당 클래스에 등록되어 있어..
[Spring] spring-data-jpa Auditing 사용하기
Auditing 테이블을 설계할 때, 공통적으로 들어가는 컬럼이있는데, 바로 생성일자,수정일자,생성자,수정자 이다. 거의 모든 테이블에 들어가있고 정렬, 필터, 또는 검증? 도 할 수 있는 꽤나 중요한 정보들이다. 하지만 서비스를 요청을 하거나 응답을 줄 때, 필요한 정보가 아니기도하다. 서비스에는 영향이없지만 필요하고 중요한? 데이터를 spring-data-jpa 모듈에서 자동으로 넣을 수 있도록 제공을해준다. 해당 기능이 바로 Auditing이다. 사용하기 1. Main App 클래스에 @EnableJpaAuditing 추가하기 @EnableJpaAuditing @SpringBootApplication public class Application { 2. 엔티티 클래스 위에 @EntityListene..