본문 바로가기

전체 글192

Webflux Functional Endpoints 시작하기 Webflux 는 아래 처럼 두개의 프로그래밍 모델을 지원하는데, 이번글에서는 Functional 방식을 알아보도록 하자 Functional routing and handling Annotation-based reactive components 1. RouterFunction RouterFunction 은 기존 개발자에게 익숙한 @RequestMapping 어노테이션과 동일한 역활을 한다. 하지만 가장 큰 차이점은 RouterFunction 은 동작까지 정의한다라는 것이다. @RequiredArgsConstructor @Configuration public class Router { private final PersonHandler handler; @Bean public RouterFunction per.. 2020. 9. 30.
JPA Fetch Join과 페이징 문제 JPA 로 개발을 할때, 컬렉션을 Fetch Join 하면 페이징 조회 시 메모리에서 페이징 처리하는 문제가 있다. 데이터가 적으면 크게 상관은 없겠지만, 데이터가 많다고 한다면 큰 문제가 발생하게 된다. 아래와 같은 경고 메시지가 출력된다. 경고 메시지 HHH000104: firstResult/maxResults specified with collection fetch; applying in memory! 아래와 같이 엔티티를 정의해 보자 @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @ManyToMany(mappedBy = .. 2020. 9. 22.
JPA - ManyToMany 관계시 Set과 List의 차이 JPA 로 개발을 할때, @ManyToMany 관계를 맺는 경우가 있는데, 이때 Set 과 List 의 차이점을 알고 사용하도록 하자. Category - Article 관계가 n:m 이라고 가정을 하자. @ManyToMany 관계시 List 를 사용하였을 경우 @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @ManyToMany(mappedBy = "categories") private List articles = new ArrayList(); public void deleteArticle(Article article) { ar.. 2020. 8. 11.
SpringBoot - http request와 response 로깅하기 웹 어플리케이션을 운영하다 보면 http의 request와 response 로그가 필요한 경우가 있다. 기본적으로 SpringBoot 에서는 http의 request, response 를 로깅하지 않으므로 개발자는 추가로 설정을 해줘야 한다. 먼저, Spring MVC Request Lifecycle 을 이해해야 함으로 아래 그림을 참고 하자 본 글에서는 Filter와 HandlerInterceptor를 사용하여 로깅을 할 예정이다. Http logging 방법은 2가지가 있다. Custom Request, Response 로깅 1. RequestWrapper와 ResponseWrapper 클래스를 만든다. Wrapper를 만드는 이유는 HttpServletRequest 의 InputStream 은 오직.. 2020. 8. 5.