컨트롤러에서 Page 객체를 응답할 때, 발생하는 경고 해결하기
·
Framework/SpringBoot
1. 경고 메시지 발생(1) 개발환경개발 환경버전Java17OpenJDK23.0.2Spring Boot3.4.3   (2) 경고 발견3.4.3 스프링 부트를 사용하는 프로젝트에서 Page를 이용하여 페이지네이션 진행을 하였습니다.서버를 작동하니 아래의 경고 문구가 발생하였습니다.2025-03-01T20:06:40.421+09:00 WARN 7226 --- [Project] [nio-8080-exec-1] ration$PageModule$WarningLoggingModifier : Serializing PageImpl instances as-is is not supported, meaning that there is no guarantee about the stability of the resulting..
N+1 문제 해결 방법
·
Framework/SpringBoot
1. N+1 문제(1) N+1 문제 정의N+1문제는 ORM을 사용할 때 발생하는 대표적인 성능저하 문제 입니다. 하나의 쿼리로 N개의 엔티티를 먼저 로딩한 후,각 엔티티와 연관된 데이터를 조회하기 위해 추가 개별 쿼리가 N번 실행되어,결국 N+1번의 쿼리가 발생하는 현상입니다. [N+1 예시]10개의 게시글이 있고, 각 게시글에 달린 댓글을 조회한다고 가정하면,초기 게시글 조회 쿼리 1개와 각 게시글에 대한 댓글 조회 쿼리 10개총 11개의 쿼리가 실행됩니다.   (2) N+1 문제 원인N+1 문제의 주요 원인은 ORM의 Lazy Loading 방식과 연관관계 매핑에서 발생하는 쿼리 실행 방식에 있습니다.🤔 Lazy Loading 이란?연관된 데이터를 지연로딩 방식으로 설정하면,초기에는 부모 엔티티만 ..
AOP를 적용하여 요청정보 로깅하기
·
Framework/SpringBoot
1. Spring AOP (Aspect-Oriented Programming)(1) AOP란? 관점 지향 프로그래밍으로, 비즈니스 로직과 공통기능(로깅, 트랜잭션, 보안)등을 분리하여유지보수를 쉽게 할 수 있도록 돕는 프로그래밍 기법입니다. AOP에서는 관점을 핵심적인 관점과, 부가적인 관점으로 나누어 각각을 모듈화합니다.핵심적인 관점은 애플리케이션의 주요 기능(비즈니스 로직)을 담당하며,부가적인 관점은 로깅, 보안, 예외처리 같은 공통 기능을 의미합니다. 🤔 모듈화란?소프트웨어를 기능별로 독립적인 단위(모듈)로 분리하여 개발하는 방식이다.이를 통해 코드의 구조가 명확해지고 유지보수와 확장이 용이해진다. 핵심 비즈니스 로직에 로깅, 트랜잭션 등 공통 기능을 직접 작성하면,기능들이 여러 로직에 중복되어 ..
모든 HTTP 요청 헤더 정보 출력하기
·
Framework/SpringBoot
💡 전체 코드 Spring Boot에서 클라이언트의 요청(Request)에 포함된 헤더를 확인해야 할 때가 있습니다.로그를 활용하여 모든 요청 헤더 정보를 출력하는 방법을 알아보겠습니다. 아래 코드는 request의 모든 헤더를 가져와 로그에 출력하는 코드입니다.import javax.servlet.http.HttpServletRequest;import java.util.Enumeration;public void logRequestHeaders(HttpServletRequest request) { log.info("=== [모든 요청 헤더 출력] ==="); request.getHeaderNames().asIterator() .forEachRemaining(headerNa..
연관관계 매핑의 기본 전략 : 단방향, 양방향, 연관관계 유형 (1:1, 1:N, N:1, N:M)
·
Framework/SpringBoot
1️⃣ 단방향 연관관계단방향 연관관계는 한 엔티티가 다른 엔티티를 참조하지만, 그 반대는 성립하지 않는 관계를 의미합니다.즉, 한 쪽 방향으로만 연관관계가 설정되어 있어,참조하는 엔티티는 다른 엔티티를 인식할 수 있지만, 참조 받는 엔티티는 이를 알 수 없습니다. 관계가 한 방향으로만 정의되므로, 구현과 관리가 상대적으로 간단합니다. 연관관계의 소유자(주로 참조하는 엔티티)만이 외래키(FK)를 관리합니다.데이터베이스에서는 한쪽 테이블에만 외래키 컬럼이 존재하게 되어 연관관계의 단순한 처리와 관리가 가능합니다. 🔍 예시 ) 단방향 @OneToOnePerson(사람) 엔티티가 Passport(여권) 엔티티를 참조하는 관계로,Person에서만 Passport를 알고 있으며, Passport에서는 Person..