본문 바로가기

STUDY/Spring

(79)
JUnit5 | @ExtendWith, MockMvc, @TestConstructor @ExtendWith JUnit 4의 @RunWith가 JUnit 5에서는 @ExtendedWith로 변경되었음 @SpringBootTest애노테이션에 포함되어 있기 때문에 둘다 명시할 필요는 없음 MockMvc Spring MVC 애플리케이션을 테스트 해볼 수 있게 도와줌 실제 서버의 실행 없이 요청하고 응답받아볼 수 있음 MockMvc과 WebApplicaionContext를 @Autowired애노테이션을 이용해 의존관계 주입하고, setup()메서드로 MockMvc를 초기화 한다. @BeforeEach애노테이션을 명시함으로써 테스트가 실행되기 전 setup()메서드가 실행되어 반복적으로 초기화 할 필요가 없다. @WebMvcTest public class HelloControllerTest { @A..
JUnit5 | @WebMvcTest와 @SpringBootTest 테스트 코드... 짜고싶어요 제발... @WebMvcTest @WebMvcTest는 Web Layer만 테스트할 때 사용 @WebMvcTest(ContollerClassName.class)로 특정 컨트롤러만 인스턴스화 하여 테스트하는 것도 가능 실제 연결이 생성되는 것은 아님 컨트롤러의 의존성은 @MockBean으로 모의 의존관계 생성 및 주입 MockMvc객체를 주입받아 해당 객체를 이용하여 테스트 진행 이렇게 테스트 클래스에 애노테이션을 붙여 사용한다. @WebMvcTest public class WebLayerTest { } 아래와 같이 컨트롤러에 의존관계가 설정되어 있다면, @RestContoller public class HelloController { @Autowired private Hell..
Spring Boot | 컨트롤러 테스트할 때 시큐리티 설정 해제 @WithMockUser가 안 돼서 몇 시간을 날렸다! 테스트코드 공부가 절실.. @WebMvcTest에서 제외할 필터를 설정하면 된다! excludeFilters설정을 통해 시큐리티 설정을 제외한다. @WebMvcTest(controllers = ImageController.class, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig.class) }) public class ImageControllerTest {@WithMockUser를 사용한다 @Test @WithMockUser public void 모든_이미지_조회() throws Exception {무야호...
Spring Boot | logback 설정 Logback Logback은 spring-boot-starter-web에 포함되어 있기 때문에, 해당 의존성이 추가되어있다면 따로 추가할 필요가 없다. application.properties파일에 loggin.level을 이용해 로깅 설정을 변경할 수 있다. 로깅 시스템의 세분화된 설정을 위해 보통 logback.xml파일로 설정하며, 스프링 부트에서는 logback-spring.xml을 사용할 것을 권장한다. Logback은 프로그래밍 방식, XML, Groovy 방식으로 구성할 수 있다. Logback 0.9.17버전부터 대소문자를 구분하지 않는다. logback-spring.xml 파일 생성 사이에 Logback 세부 설정을 추가하면 된다. appender 로그의 형태를 설정하고, 로그 메시지를..
Spring Boot | RestTemplate RestTemplate Spring Framework에서 제공하는 동기식 템플릿 메소드 API HTTP client로서 보편적인 API요청을 더 쉽게 도와준다 비동기 non-blocking HTTP Client가 필요하다면 WebClient를 사용하면 된다. WebClietnt는 동기 및 비동기, 스트리밍 시나리오를 모두 지원함 비동기를 지원하는 AsyncRestTemplate도 있었지만 스프링 5.0부터 deprecated되었음 -> WebClient를 사용해라.. 어떻게 사용하나.. 일단 spring-boot-starter-web라이브러리가 추가되어있으면 자동으로 하위 항목으로 딸려온다. 보통은 bean으로 등록하여 사용한다. @Bean public RestTemplate restTemplate() ..
Spring Boot | JPA 사용해보기 (2) Spring Data JPA Spring Data JPA 지난 글에서 JPA만 사용해서 EntityManager를 이용해 DB와 소통했다면, 이번에는 Spring Data JPA를 사용해 볼 것이다. Spring Data JPA는 리포지토리에 구현클래스 없이 인터페이스만으로 개발을 완료할 수 있다. JPA를 더 쉽게 도와주는 것일 뿐! 실무에서는 JPA와 스프링데이터JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용한다고 한다. (출처: 인프런 강의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술) Repository를 Spring Data JPA 방식으로 변경 @Repository 애노테이션을 붙이지 않아도 된다! JpaRepository을 상속받아 interface로 ..
Spring Boot | logback.xml 파일 경로 설정 스프링 프로필을 이용하는 방법과 설정 파일을 이용하는 방법이 있다. logback.xml? logback-spring.xml? 스프링에서는 logback-spring.xml로 작성할 것을 권장한다. (특히 커스텀 할 경우) Spring Profiles를 이용하는 방법 태그를 이용해 프로필마다 설정을 달리할 수 있다. 아래처럼 설정하면 되는데, 태그 안에 태그를 넣어 설정해주면 된다. 설정파일(properties / yml)을 이용하는 방법 설정파일에 경로를 미리 지정해두어 해당 값을 태그를 이용해 불러오는 방법이다. 나는 이 방법을 사용했다. 지정한 활성 프로필에 등록된 경로를 가져온다. 사용방법은 아래와 같다! ${fluentHost} ... 스프링 공식 문서
Spring Boot | AOP를 활용해 request마다 로그 출력하기 ( REST API ) AOP를 통해 모든 request parameter(혹은 requset body)와 response를 로그를 찍어보기로 한다. 현재 컨트롤러에서 수동으로 각각의 endpoint마다 로그를 찍는 코드가 추가되어 있는데, AOP를 이용하면 좋을 것 같았다! 의존성 추가 build.gradle에 의존성을 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-aop' Aspect작성 aop라는 패키지를 생성하고, 패키지 하위에 LoggingAspect라는 클래스를 만들었다.. @Aspect // AOP 사용 @Component // Bean 으로 등록 public class LoggingAspect { } Pointcut controller 패..