Page와 Slice
·
Spring
Page와 Slice가 각각 어떻게 출력값이 나오는 지 알아보기모든 리뷰를 조회하는 API를 동일한 조건으로 Page와 Slice 두 가지 방식으로 각각 구현해보았다. Page는 이미 JpaRepository 기본 메서드로 제공된다.Slice는 따로 findAllBy(Pageable pageable) 만 추가해주면 된다. 두 방식 모두 Slice.map(), Page.map() 을 사용해 DTO 형태로 content를 변환했다. 아래는 동일한 리뷰 데이터를 Page/Slice 각각으로 조회했을 때의 실제 JSON이다.코드 예시는 포함했지만, 목적에 맞춰 계층을 세분화하지 않고 하나의 컨트롤러 안에서 모든 로직을 단순하게 처리하도록 구성했다. 이렇게 함으로써 구조적 복잡도를 줄이고, Page와 Slice의..
Spring에서 AOP 적용하기
·
Spring
AOP에 대해서 알아볼 때 수동 프록시로 구현했던 AOP를 스프링으로 바꿔보자. 스프링을 사용하면 내가 직접 프록시 클래스를 만들고 그 프록시 인스턴스를 호출하지 않아도 된다. DiscountPolicy 구현체(비즈니스 로직)와 AOP 설정(@Aspect, 포인트컷/어드바이스)만 있으면, 스프링이 컨테이너 초기화 시점에 프록시 객체를 자동으로 생성해준다. 그래서 겉보기에는 discountPolicy.discount(...)를 호출한 것처럼 보이지만,실제로는 프록시가 먼저 실행되어 부가 기능을 수행한 뒤 실제 DiscountPolicy의 discount(...) 메서드를 호출한다. 호출 흐름은 이렇게 이해하면 된다. (수동 프록시) 클라이언트 → 내가 만든 Proxy → 실제 DiscountPolicy(스..
스프링에서 서블릿을 사용하는 방법
·
Spring
서블릿이란?서블릿(Servlet)은 자바로 만든 서버 프로그램으로, 클라이언트의 요청(HTTP Request)을 받아 처리하고 응답(HTTP Response)을 생성하는 서버 측 컴포넌트다. 클라이언트와 서버는 HTTP 메시지로 소통한다. 사실 서버 입장에서는 이 메시지가 단순한 문자열일 뿐이다. 하지만 대부분의 서버 프레임워크는 객체지향 언어로 만들어져 있기 때문에, 문자열을 그대로 다루기보다는 객체로 변환해 두어야 추가 작업을 하기에 훨씬 용이하다. 문제는, 개발자가 매번 HTTP 요청 메시지를 직접 파싱하고 객체로 변환하는 건 너무 번거롭고 비효율적이라는 점이다. 서블릿은 이 불편함을 해결하기 위해 등장했다. 서블릿 컨테이너(WAS)는 요청 메시지를 대신 파싱해 HttpServletRequest 객..