본문 바로가기

🤔 @RequestBody - DTO, Map 무엇을 선택할까? 🗣 서론 이메일 중복 체크하는 API를 아래와 같이 만들었다. EmailCheckRequest DTO는 email만 있는 DTO이다. 최근 무의식적으로 DTO를 생성하고 있는 것 같았다. Map을 사용할 수도 있는데 나만의 기준을 정하는 것이 필요하다고 생각하였다. public ApiResult checkEmail(@RequestBody EmailCheckRequest emailCheckRequest) { ... 📌 DTO, Map 장단점 DTO Map 장점 명시적으로 표현 할 수 있다. 추가적인 class가 필요없다. 단점 클래스를 매번 만들어야 한다. 파악하기 어려울 수 있다. DTD에 대한 네이밍을 제대로 표현하기가 어려울(?) 때가 있다. 직접 key 값을 다루어야 하기 때문에 휴먼 에러가 발생할..
🤔 @Component, @Bean, @Configuration 차이는 무엇일까? 📌 @Component 개발자가 직접 만든 클래스를 빈으로 등록한다면 해당 어노테이션을 사용한다. 즉, 직접 컨트롤이 가능한 클래스를 의미한다. 📌 @Bean 개발자가 컨트롤이 불가능한 외부 라이브러리 같은 경우, 설정을 위한 클래스를 빈으로 등록한다면 해당 어노테이션을 활용한다. 📌 @Configuration 1개 이상 @Bean을 제공하는 클래스라면 해당 어노테이션을 명시한다.
👨🏻‍💻 Undertow 적용하기 (다른 WAS 적용해보기) 📌 서론 SpringBoot를 사용하면서 내장 WAS가 디폴트로 설정되어 있는 Tomcat 이외에 다른 WAS를 사용해보겠다는 생각이 다소 없었던 것 같다. SpringBoot 관련 스터디를 진행하면서 아래와 같은 피드백을 받았고, 이번 기회에 다른 WAS를 적용해보려고 한다. 📌 Tomcat, Jetty, Netty, Undertow Tomcat, Jetty, Netty는 자세히는 몰라도 한 번씩은 들어봤다. 사실 Undertow는 처음 들어봤다. 피드백 중에 Undertow를 왜 적용 해보라고 하는 것일까? 라는 생각과, Tomcat 보다 장점이 있기 때문이지 않을까? 라고 생각했다. 그래서 그냥 사용하기 보다 다른 선택지들을 비교하며 사용해보려고 한다. Tomcat 커뮤니티가 활발하며, 자바 진영에..
❓ @Controller, @RestController 차이점 시작하기 앞서 스프링에서 컨트롤러에 대한 어노테이션은 @Controller와 @RestController가 있다. 두 어노테이션의 가장 큰 차이점은 전통적인 스프링 MVC 컨트롤러에서 HTTP Response Body 생성 방식에 따라 구분되는데 더 자세히 알아보자. @Controller(Spring MVC Controller) 전통적인 스프링 MVC 컨트롤러 @Controller는 주로 View를 반환하기 위해 사용하며, 그림[1] 같은 과정을 거친다. @Controller는 주로 View를 반환하기 위해 사용하지만, @ResponseBody를 사용하여 객체를 반환 할 수도 있다. @Controller public class BasicController { @GetMapping("/good") publ..
⏰ WebTestClient Timeout WebTestClient를 사용했을 때, timeout 관련 예외가 발생했다. 아무래도 외부 API와 Connection 때문에 생긴 문제라고 생각이 든다. java.lang.IllegalStateException: Timeout on blocking read for 5000 MILLISECONDS ... 기본적으로 WebTestClient는 timeout이 5000 (5초)를 기본값으로 가진다. 계속해서 timeout 관련 예외가 발생한다면 아래와 같이 해결 할 수 있었다. @AutoConfigureWebTestClient(timeout = "10000") // 10 seconds @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDO..
👐 OSIV(Open Session In View) OSIV를 만나게 된 이유? 이동욱님의 글을 보면서 배포 환경을 구축했다. "JPA 사용시 OSIV 옵션은 끌것" 이라는 문구가 있었다. OSIV (...?) 설정을 하더라도 이게 뭔지는 알아야 한다고 생각해서 OSIV에 대해 알아봤다. OSIV란? Spring Boot에서는 Default로Open Session In View를 true로 설정하고 있다고 한다. OSIV는영속성 컨텍스트를 뷰 렌더링이 끝나는 시점까지 개방한 상태로 유지한다는 의미이다. 그렇다면 왜 등장하게 되었을까? 등장하게 된 이유? OSIV가 등장하게된 이유는 View 레이어에 연관된 객체를 사용하면,LazyInitializationException이 발생하게 되는데 이 부분에 대해 예제로 알아보자. findAll 메서드를 사용한다고..