AOP를 적용하여 요청정보 로깅하기
·
Spring
1. Spring AOP (Aspect-Oriented Programming)(1) AOP란? 관점 지향 프로그래밍으로, 비즈니스 로직과 공통기능(로깅, 트랜잭션, 보안)등을 분리하여유지보수를 쉽게 할 수 있도록 돕는 프로그래밍 기법입니다. AOP에서는 관점을 핵심적인 관점과, 부가적인 관점으로 나누어 각각을 모듈화합니다.핵심적인 관점은 애플리케이션의 주요 기능(비즈니스 로직)을 담당하며,부가적인 관점은 로깅, 보안, 예외처리 같은 공통 기능을 의미합니다. 🤔 모듈화란?소프트웨어를 기능별로 독립적인 단위(모듈)로 분리하여 개발하는 방식이다.이를 통해 코드의 구조가 명확해지고 유지보수와 확장이 용이해진다. 핵심 비즈니스 로직에 로깅, 트랜잭션 등 공통 기능을 직접 작성하면,기능들이 여러 로직에 중복되어 ..
모든 HTTP 요청 헤더 정보 출력하기
·
Spring
💡 전체 코드 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)
·
Spring
1️⃣ 단방향 연관관계단방향 연관관계는 한 엔티티가 다른 엔티티를 참조하지만, 그 반대는 성립하지 않는 관계를 의미합니다.즉, 한 쪽 방향으로만 연관관계가 설정되어 있어,참조하는 엔티티는 다른 엔티티를 인식할 수 있지만, 참조 받는 엔티티는 이를 알 수 없습니다. 관계가 한 방향으로만 정의되므로, 구현과 관리가 상대적으로 간단합니다. 연관관계의 소유자(주로 참조하는 엔티티)만이 외래키(FK)를 관리합니다.데이터베이스에서는 한쪽 테이블에만 외래키 컬럼이 존재하게 되어 연관관계의 단순한 처리와 관리가 가능합니다. 🔍 예시 ) 단방향 @OneToOnePerson(사람) 엔티티가 Passport(여권) 엔티티를 참조하는 관계로,Person에서만 Passport를 알고 있으며, Passport에서는 Person..
JPA @Filter 적용 문제와 해결: Hibernate 세션 활용법
·
Spring
soft delete를 이용하여 사용자 삭제를 진행할 때,조회 시, 엔티티에 걸어둔 @Filter어노테이션이 작동하지 않는 문제가 있었다. @Filter(name = "activeUserFilter", condition = "deleted_at is null")@FilterDef(name = "activeUserFilter")  🔍 문제 원인Hibernate의 @Filter은 엔티티에 선언되더라도 모든 세션이나 쿼리에 자동 적용되지 않는다. 필터는 세션 단위로 작동한다. 따라서 해당 세션에서 필터를 명시적으로 활성화해야 한다. 엔티티 매니저는 JPA 표준 인터페이스로 데이터 베이스와 상호작용할 수 있다.하지만 Hibernate는 JPA 구현체로, JPA 표준과, Hibernate 고유 기능도 제공한다...
ORM(Object-Relational Mapping) 개요
·
Spring
1️⃣ ORM의 기본 원리객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 사이의 불일치를 해소하여,개발자가 객체를 다루는 것처럼 데이터베이스에 접근할 수 있도록 하는 기술입니다. 객체와 테이블의 매핑객체 지향 프로그래밍에서 사용하는 클래스는 데이터베이스의 테이블과 매핑됩니다.예를 들어, 객체인 User 클래스는 데이터베이스인 users 테이블에 대응됩니다.클래스의 속성(필드)는 테이블의 컬럼에 대응됩니다.각 객체의 인스턴스 변수가 테이블의 각 행(row)에 저장되는 데이터 필드입니다. CRUD 작업의 추상화ORM은 기본적인 CRUD작업을 객체의 메소드 호출로 처리할 수 있도록 해줍니다.개발자가 SQL쿼리를 직접 작성하지 않고,ORM 프레임워크가 객체의 상태 변화를 감지하여 적절한 SQL ..