본문 바로가기

Back-End/Spring

(16)
Spring의 @Configuration 스프링을 공부하다 보면 가장 처음 마주치는 어노테이션 중 하나가 @Configuration 입니다.처음엔 "설정 클래스인가 보다" 하고 넘어가기 쉬운데 이 어노테이션이 하는 일과 쓰는 이유를 정확히 이해하면 스프링 프레임워크에 대한 이해가 더 깊어질 수 있을 것 같아 글을 작성합니다. 이번 글에서는 @Configuration의 역할, @Component와의 차이점, 그리고 실제로 언제 왜 써야하는지를 예시와 함께 정리해보겠습니다.@Configuration의 정체@Configurationpublic class AppConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = objectMapper(); ..
Spring AOP Proxy - SelfInvocation 문제 [Spring 애플리케이션이 실행되면서 AOP 프록시가 생성되고 동작하는 과정]1. AOP 적용 대상 클래스(OrderService)@Servicepublic class OrderService { public void processOrder() { System.out.println("Processing order..."); completeOrder(); } @Transactional public void completeOrder() { System.out.println("Order completed!"); printTransactionStatus("completeOrder"); } private void printT..
Spring은 어떻게 객체를 관리할까? ✅ Spring에서 @Component와 의존성 주입이 동작하는 원리"Spring에서 객체 생성과 관리, 그리고 의존성 주입은 어떻게 이루어질까?""왜 @Component를 붙이면 자동으로 빈이 등록될까?""Spring AOP 프록시는 언제 적용될까?"Spring을 사용하다 보면 @Component, @Service, @Repository 등의 어노테이션을 붙이면 자동으로 빈(Bean)으로 등록되고 주입되는 것을 볼 수 있습니다.먼저 들어가기 앞서Spring 컨테이너(ApplicationContext)란?Spring에서 객체의 생성과 생명주기를 관리를 담당하는 핵심 요소가 Spring 컨테이너입니다.이 컨테이너는 빈(Bean)을 관리하고, 필요할 때 의존성을 주입하는 역할을 합니다.✔️ Spring에서 ..
Self-Invocation(자기호출) 문제 현재 결제 프로세스를 진행중인데 @Transactional과 @Retryable을 동시에 사용하는 재시도 로직이 있었습니다.하지만 @Transactional과 @Retryable이 적용이 되지 않는 문제가 발생했습니다.Expected Result Actual Result✅ 하지만 기대와 달리 @Retryable이 작동하지 않는 이슈가 발생했습니다.테스트 케이스 작성그래서 저는 총 7가지 테스트 케이스를 만들어 @Transactional 과 @Retryable이 어떻게 동작하고 어디서 수행되지 않는지 확인을 했습니다.@Retryable 단독 테스트(Case 1~3)케이스설명결고Case1@Retryable 이 적용된 메서드 단독 실행성공Case2같은 클래스 내부에서 일반 메서드가 @Retryable 메서드 ..
SpringSecurity Authentication 객체와 Principal 객체 Authentication 객체와 Principal 객체 둘 다 로그인한 사용자와 관련된 정보를 담고 있어 헷갈리기 쉽습니다.이번 주제로는 둘을 비교하며 쉽게 풀어보겠습니다.1. 아주 간단한 정의1. Principal : 인증된 사용자(user)가 누구인지에 대한 핵심 식별 정보Ex. 사용자 이름, 이메일 혹은 CustomUserDetails 객체 자체2. Authentication : 인증에 관한 전반적 상태 / 정보그 안에 Principal(사용자 식별 정보), 비밀번호나 토큰(자격증명), 권한 리스트, 추가세부 정보(IP, 세션 등)까지 종합하여 담고 있습니다.스프링 시큐리티에서 인증이 끝나면 SecurityContextHolder.getContext().setAuthentication(…) 이렇게..
SpringSecurity + JWT를 활용한 로그인 이번 시간에는 단일 Access 토큰을 이용하여 전체 시스템이 어떤 식으로 회원가입부터 로그인, JWT 발급 및 이후 요청마다 토큰 검증을 수행하는 전체 흐름을 하나의 실제 코드를 통해 설명합니다.글의 중심 클래스AuthController: 회원가입과 로그인 엔드포인트 AuthService: 회원가입 / 로그인 비즈니스 로직LoginFilter: 스프링 시큐리티 필터(UsernamePasswordAuthenticationFilter 확장)JwtFilter: JWT 유효성 검증을 담당하는 커스텀 필터SecurityConfig: Security 설정 (필터 체인, 인증/인가 정책, 세션 정책 등)CustomUserDetails, CustomUserDetailService: 사용자 정보를 스프링 시큐리티 표준..
Spring Security + OAuth2.0 + Jwt 활용 소셜 로그인 기능 만들기 의존성Spring SecurityOAuth2 ClientLombokSpring Data Jpa//JJWT 의존성dependencies { implementation 'io.jsonwebtoken:jjwt-api:0.12.3' implementation 'io.jsonwebtoken:jjwt-impl:0.12.3' implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'}구현 방식모든 채임을 백엔드에서 맡아(로그인 페이지 요청 -> 코드 발급 -> Access 토큰 -> 유저 정보 획득 -> JWT 발급)동작 모식도모식도를 통한 소셜 로그인 동작 순서1. 사용자의 소셜 로그인 시도클라이언트가 특정 소셜 서비스에 로그인을 시도사용자가 소셜 로그인 버튼을 ..
스프링 트랜잭션의 이해(feat. 전파) 트랜잭션이란?하나의 작업 단위를 논리적으로 묶어주는 역할을 해준다!이를 통해서 데이터 베이스의 ACID 속성을 지킬 수 있도록 한다!원자성 (Atomicity)예: 송금 시, 돈이 A 계좌에서 빠졌지만 B 계좌로 들어가지 않으면 롤백.작업이 모두 성공하거나, 하나라도 실패하면 전체를 롤백.일관성 (Consistency)작업 전후의 데이터 상태가 항상 유효하도록 보장.격리성 (Isolation)트랜잭션 간 서로 간섭하지 않도록 격리 수준을 설정할 수 있다.지속성 (Durability)트랜잭션이 성공하면 결과가 영구적으로 반영된다.또 다른 구체적인 예시상품을 구매 했을 때1. 재고 감소2. 결제 처리3. 주문 기록 생성결국 트랜잭션은 1, 2, 3 과 같은 각각의 작업을 하나의 작업 단위로 묶어주는 역할을 ..