SpringBoot 6

@CurrentUser + HandlerMethodArgumentResolver로 인증 인터페이스 미리 설계하기

인증 시스템을 아직 붙이지 않은 초기 개발 단계에서도, 나중에 Spring Security나 JWT가 들어올 자리를 미리 만들어 둘 수 있습니다. 지금은 가짜 데이터를 돌리더라도, 커스텀 파라미터 애노테이션(@CurrentUser)과 HandlerMethodArgumentResolver를 조합해 유연한 인터페이스를 먼저 선언해 두는 것입니다.목적 및 장점핵심 목적이 패턴의 본질은 "인증 정보를 꺼내오는 구체적인 방법"을 컨트롤러로부터 숨기는 것에 있습니다.컨트롤러는 그저 @CurrentUser User loginUser라고 선언만 하면 됩니다.이 유저가 임시 가짜 유저인지, HTTP 세션에서 나왔는지, JWT 토큰을 해독해서 나왔는지는 컨트롤러가 알 필요가 없습니다. 알맹이(인증 방식)가 어떻게 바뀌든 ..

[Spring Security] 인증/인가 프로세스

인증(Authentication) 처리 흐름UsernamePasswordAuthenticationFilter: 로그인 요청을 가로채어 Authentication 객체를 만듭니다.AuthenticationManager: 인증 처리의 중심이며, 하나 이상의 AuthenticationProvider에 인증을 위임합니다.AuthenticationProvider: 실제 인증 로직(예: DB 조회, 비밀번호 비교 등)을 담당합니다.SecurityContext: 현재 인증된 사용자(Authentication)를 보관합니다.HttpSession: SecurityContext를 세션에 저장하여 요청 간 상태를 유지합니다.포인트설명인증 시작UsernamePasswordAuthenticationFilter가 로그인 요청을 ..

[Spring Security] 기본 사용법

1. 의존 라이브러리 추가(build.gradle)dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-security' ...}2. Spring Security Configuration 적용기본 구조package com.springboot.config;import org.springframework.context.annotation.Configuration;@Configurationpublic class SecurityConfiguration { // 여기에 Spring Security의 설정 진행}3. HTTP 보안 구성HttpSecurity를 파라미터로 가지고, SecurityFilterChain을 리턴하..

Spring Transaction

1. 트랜잭션(Transaction)DB 상태를 변화시키는 작업의 논리적 단위반드시 모두 성공하거나 모두 실패해야 함데이터 무결성(일관성) 보장과 예외 상황 대비트랜잭션 속성: ACID트랜잭션이 신뢰성과 무결성을 갖추기 위한 핵심 원칙속성의미 목적실무 포인트AAtomicity (원자성)모두 성공 또는 모두 실패(All or Nothing)작업 단위 보호CConsistency (일관성)트랜잭션 전후 데이터 일관성(무결성) 유지데이터 오염 방지IIsolation (격리성)동시에 실행되는 트랜잭션 독립성 유지동시성 이슈 방지DDurability (지속성)성공된 작업은 영구 보존장애 발생 시 복구 보장Isolation (격리성)각 트랜잭션이 서로 영향을 받지 않도록 분리격리 수준(Isolation Level)수..

[MapStruct] Default 메서드 활용한 커스텀 매핑 전략

📚 MapStruct 시리즈기본 사용법Default 메서드 활용한 커스텀 매핑 전략 @MappingTarget: 기존 객체 수정 매핑개념자동 매핑이 어려운 로직이나 직접 커스텀 매핑이 필요한 경우 사용직접 생성자 호출이 필요한 경우두 개 이상의 매개변수를 조합해서 하나의 객체를 만들 경우MapStruct가 default 메서드도 Spring Bean으로 등록사용법@Mapper(componentModel = "spring")public interface UserStatusMapper { // 자동 매핑 (MapStruct가 처리) UserStatusDto toDto(UserStatus userStatus); // 수동 매핑 (직접 로직 작성, default 메서드) default U..

N+1 문제의 발생 원인과 해결 방안

N+1 문제는 ORM 환경에서 발생하는 대표적인 문제로, 한 번의 쿼리로 N개의 엔티티를 조회한 후 각 엔티티에 연관된 데이터를 조회하면서 총 N+1번의 쿼리가 실행되는 문제이다.발생 원인JPA의 연관 관계 기본 Fetch 전략이 ‘Lazy’인 경우, 연관된 엔티티를 실제로 접근할 때마다 쿼리가 실행된다. 특히 컬렉션(List)의 Lazy 로딩은 초기 조회 시 쿼리가 실행되지 않다가 각 엔티티의 컬렉션에 접근할 때마다 개별 쿼리가 발생하여 N+1문제가 발생하므로 조심해야 한다.List members = memberRepository.findAll(); // 1번 쿼리 발생for (Member m : members) { System.out.println(m.getOrders()); // N번 쿼리 발..

728x90