Spring @Async와 CompletableFuture를 활용한 비동기 프로그래밍
·
Spring/Async
1. @Async 애노테이션의 기본 개념 및 동작 방식@Async는 Spring Framework가 제공하는 강력한 기능으로, 메서드 호출을 비동기적으로 처리하게 합니다.1.1 @Async의 핵심: 프록시 기반 동작@Async는 메서드 자체에 마법을 거는 것이 아니라, Spring의 AOP(Aspect-Oriented Programming) 프록시를 통해 동작합니다.빈(Bean) 등록 시 프록시 생성: Spring 컨테이너가 @Async가 붙은 메서드를 포함하는 빈을 초기화할 때, 실제 빈 객체(Target)를 직접 등록하는 대신, 이 Target을 감싸는 프록시(Proxy) 객체를 생성하여 컨테이너에 등록합니다.메서드 호출 가로채기 (Intercepting): 다른 빈이나 컴포넌트가 @Async 메서드..
비동기 환경에서 컨텍스트 정보 전달하기: MDC와 SecurityContext를 중심으로
·
Spring/Spring Context
1. 컨텍스트(Context) 정보란 무엇이며 왜 필요한가?우리가 개발하는 애플리케이션은 단순히 요청을 처리하고 응답을 돌려주는 것 이상의 일을 합니다. 특정 사용자가 어떤 요청을 했는지, 그 요청이 처리되는 동안 어떤 과정들을 거쳤는지 등을 추적하고 싶을 때가 많죠. 이때 필요한 것이 바로 '컨텍스트 정보'입니다.MDC (Mapped Diagnostic Context): Logback과 같은 로깅 프레임워크에서 제공하는 기능으로, 로깅 메시지에 특정 컨텍스트 정보를 자동으로 추가할 수 있도록 해줍니다. 예를 들어, 웹 요청의 requestId나 userId를 MDC에 넣어두면, 해당 요청을 처리하는 동안 발생하는 모든 로그에 이 정보가 자동으로 붙어 나와 로그 분석을 훨씬 용이하게 만듭니다.Securi..
CSRF 토큰, 쿠키 기반 저장 방식, 그리고 CORS 설정
·
Spring/Spring Security
1. CSRF 공격이란?CSRF(Cross-Site Request Forgery)는사용자가 로그인된 상태에서, 악성 사이트가 인증된 사용자의 권한을 악용하여 서버에 요청을 보내는 공격입니다.예시: 피해자의 브라우저는 로그인 쿠키(JSESSIONID)를 자동으로 전송하므로서버는 이 요청을 진짜 사용자 요청으로 오해할 수 있습니다. 2. CSRF 방어 원리: CSRF 토큰서버는 각 사용자에게 예측 불가능한 토큰(CSRF 토큰)을 생성해 전달하고,클라이언트는 요청 시 이 토큰을 포함시켜야 합니다.서버는 토큰의 유효성을 검증함으로써 의도된 요청만 처리하고,브라우저의 자동화된 요청(쿠키만 포함된 요청)은 차단할 수 있습니다. 3. 쿠키 기반 CSRF 토큰 저장 방식Spring Security는 기본적으로 H..
CSRF(Cross-Site Request Forgery)
·
Spring/Spring Security
1. 서론 – 사용자 브라우저를 이용한 요청 위조웹 애플리케이션은 일반적으로 사용자의 로그인 상태를 유지하기 위해 세션을 사용하며,이 세션 정보는 브라우저에 저장된 쿠키를 통해 서버에 전달된다.이러한 구조에서 발생할 수 있는 위협 중 하나가 바로 CSRF(Cross-Site Request Forgery)이다.CSRF는 공격자가 직접 요청을 보내지 않고, 피해자의 브라우저를 조종해 요청을 보내게 만드는 공격이다.이 장에서는 CSRF의 구조적 본질과 그것이 왜 위험한지,그리고 이를 방어하기 위한 브라우저 보안 정책 및 서버 측 대응 방법을 체계적으로 서술한다.2. 공격 시나리오CSRF의 기본 시나리오는 다음과 같다.사용자가 example.com에 로그인하여 세션이 유지된다.브라우저는 세션 ID가 담긴 쿠키(..
@EnableWebSecurity 란?
·
Spring/Spring Security
Spring Security를 사용하다 보면 가장 먼저 마주치는 어노테이션 중 하나가 바로 @EnableWebSecurity입니다.처음에는 "이거 안 붙이면 왜 작동 안 하지?", "왜 꼭 붙여야 하지?" 같은 의문이 들 수 있습니다.이번 글에서는 이 어노테이션의 역할, 동작 원리, 필요한 이유를 깊이 있게 정리해보겠습니다. @EnableWebSecurity란?@EnableWebSecurity는 Spring Security의 웹 보안 기능을 활성화해주는 어노테이션입니다.Spring Boot 프로젝트에서 이 어노테이션을 사용하면, 우리가 정의한 보안 설정 클래스(SecurityConfig)가 Security 필터 체인에 등록되어 실제 요청에 적용됩니다.@Configuration@EnableWebSecuri..
Spring Security 설정 중 정적 리소스 관련 문제
·
Spring/Spring Security
문제 상황http://localhost:8080 접속 시, 다음과 같은 현상이 나타났습니다.브라우저에는 Whitelabel Error Page 또는 단순한 "HTTP 500 Internal Server Error" 페이지가 출력됨개발자 도구의 Network 탭에선 index.js, index.css, favicon.ico 등 정적 리소스 요청들이 전부 500 에러로 실패Spring Boot 콘솔에는 다음과 같은 예외 로그:org.springframework.web.util.pattern.PatternParseException: No more pattern data allowed after {*...} or ** pattern element 해결 방법private static final Set exclu..