Java/Spring
-
Spring Security 6 시점에서 SecurityContextHolderFilter 로 변경되었고, SecurityContextHolderFilter 는사용자의 HTTP 요청이 들어왔을 때 SecurityContext 를 불러와 워커 스레드의 ThreadLocal 에 저장한다. 1️⃣ Tomcat 워커 스레드와 요청 처리클라이언트 → HTTP 요청Tomcat 워커 스레드 하나가 요청을 할당받는다.Tomcat 의 메인 쓰레드는 어플리케이션 실행만 담당한다.이 워커 스레드는 요청 수명 동안 재사용됨(Thread Pool)👉 그래서 ThreadLocal 정리가 매우 중요함 2️⃣ SecurityContextHolderFilter의 역할 (Spring Security 6 핵심)Spring Securi..
Spring Security6 SecurityContextHolderFilter 동작과 ThreadLocal Clear 시점
Spring Security 6 시점에서 SecurityContextHolderFilter 로 변경되었고, SecurityContextHolderFilter 는사용자의 HTTP 요청이 들어왔을 때 SecurityContext 를 불러와 워커 스레드의 ThreadLocal 에 저장한다. 1️⃣ Tomcat 워커 스레드와 요청 처리클라이언트 → HTTP 요청Tomcat 워커 스레드 하나가 요청을 할당받는다.Tomcat 의 메인 쓰레드는 어플리케이션 실행만 담당한다.이 워커 스레드는 요청 수명 동안 재사용됨(Thread Pool)👉 그래서 ThreadLocal 정리가 매우 중요함 2️⃣ SecurityContextHolderFilter의 역할 (Spring Security 6 핵심)Spring Securi..
2025.12.16 -
ConcurrentSessionFilter 와 SessionManagementFilter 는 세션 기반 보안과 관련 있지만, 역할과 책임이 명확히 다르다. 1️⃣ SessionManagementFilter "이 요청의 세션 상태가 정상적인가?" 를 관리하는 필터이다.SessionManagementFilter 는 사용자 로그인 인증 시점과 인증된 요청 진입 시에 동작한다. SessionManagementFilter 는 사용자가 인증되었을 시점에 SessionAuthenticationStrategy 들을실행시켜준다. Spring Security 6 부터는 기본 설정에서 SessionManagementFilter 가 아닌 각 인증 필터(예: UsernamePasswordAuthenticationFilter)..
Spring Security ConcurrentSessionFilter, SessionManagementFilter
ConcurrentSessionFilter 와 SessionManagementFilter 는 세션 기반 보안과 관련 있지만, 역할과 책임이 명확히 다르다. 1️⃣ SessionManagementFilter "이 요청의 세션 상태가 정상적인가?" 를 관리하는 필터이다.SessionManagementFilter 는 사용자 로그인 인증 시점과 인증된 요청 진입 시에 동작한다. SessionManagementFilter 는 사용자가 인증되었을 시점에 SessionAuthenticationStrategy 들을실행시켜준다. Spring Security 6 부터는 기본 설정에서 SessionManagementFilter 가 아닌 각 인증 필터(예: UsernamePasswordAuthenticationFilter)..
2025.12.16 -
Spring Boot 를 사용하는데 운영서버에서 HTML 내용만 수정되어야 하는 상황이 있었다.그러나 운영은 보통 application.yml 이나 application.properties 설정에 spring.thymeleaf.cache 를 true해놓기 때문에 Spring Boot 시작할 때 템플릿 엔진이 캐시하여 가지고 있어서 재기동이 필요했다. ✔ spring.thymeleaf.cache=true 일 때 동작 원리 Spring Boot 가 시작될 때Thymeleaf 는 /templates 안의 HTML 파일을 템플릿으로 컴파일하고 메모리에 캐시해 둔다.여기서 /templates 는 application.yml 에서 설정할 수 있다.=> spring.thymeleaf.prefix=템플릿경로사용자가 ..
Spring Boot Thymeleaf HTML 수정(재시작없이 파일 수정)Spring Boot 를 사용하는데 운영서버에서 HTML 내용만 수정되어야 하는 상황이 있었다.그러나 운영은 보통 application.yml 이나 application.properties 설정에 spring.thymeleaf.cache 를 true해놓기 때문에 Spring Boot 시작할 때 템플릿 엔진이 캐시하여 가지고 있어서 재기동이 필요했다. ✔ spring.thymeleaf.cache=true 일 때 동작 원리 Spring Boot 가 시작될 때Thymeleaf 는 /templates 안의 HTML 파일을 템플릿으로 컴파일하고 메모리에 캐시해 둔다.여기서 /templates 는 application.yml 에서 설정할 수 있다.=> spring.thymeleaf.prefix=템플릿경로사용자가 ..
2025.12.11 -
JVM 은 크게 아래 영역들로 나눠져 있다.HeapStackMethod Area (Metaspace)PC RegisterNative Method Stack그리고 JIT 컴파일러, GC 등은 이 영역들을 오가며 동작한다. 🟦 1. Heap 영역 JVM 에서 가장 큰 메모리 공간, 동적으로 생성되는 모든 객체가 저장되는곳이다. ✔ 저장되는 데이터new 로 만든 모든 객체Spring Bean 인스턴스(@Service, @Controller 등)JPA 엔티티 객체DTO / VO 객체Collection(List, Map 등)과 그 안의 요소JSON 파싱된 객체(Jackson)ThreadLocal 에 저장된 실제 값 객체어플리케이션 동안 살아남은 다양한 프레임워크 내부 객체들 구역 구조 Young Gener..
JVM 메모리 전체 구조JVM 은 크게 아래 영역들로 나눠져 있다.HeapStackMethod Area (Metaspace)PC RegisterNative Method Stack그리고 JIT 컴파일러, GC 등은 이 영역들을 오가며 동작한다. 🟦 1. Heap 영역 JVM 에서 가장 큰 메모리 공간, 동적으로 생성되는 모든 객체가 저장되는곳이다. ✔ 저장되는 데이터new 로 만든 모든 객체Spring Bean 인스턴스(@Service, @Controller 등)JPA 엔티티 객체DTO / VO 객체Collection(List, Map 등)과 그 안의 요소JSON 파싱된 객체(Jackson)ThreadLocal 에 저장된 실제 값 객체어플리케이션 동안 살아남은 다양한 프레임워크 내부 객체들 구역 구조 Young Gener..
2025.12.09 -
PatternLayout 이란?Logback-classic 모듈의 가장 유연한 Layout 구현체로, 로깅 이벤트를 개발자가 지정한 변환 패턴(Conversion Pattern)에따라 문자열로 포맷팅한다.쉽게 말해, Logback 에서 로그 메세지를 출력할 때 로그 형식을 만드는 클래스이다.즉, 로그 한 줄이 어떤 구조(패턴)로 출력될지 결정하는 핵심 Layout 클래스라고 보면된다. Logback 에서 Layout 은 로깅 이벤트를 문자열로 변환하는 컴포넌트이며, PatternLayout은 %d, %level, %logger 같은패턴 키워드를 사용해 시간, 레벨, 클래스명 등을 자유롭게 배치할 수 있게 한다.Spring Boot 에서는 기본적으로 PatternLayoutEncoder 가 이 클래스를 사..
PatternLayout 을 상속받아 Logback 마스킹 처리PatternLayout 이란?Logback-classic 모듈의 가장 유연한 Layout 구현체로, 로깅 이벤트를 개발자가 지정한 변환 패턴(Conversion Pattern)에따라 문자열로 포맷팅한다.쉽게 말해, Logback 에서 로그 메세지를 출력할 때 로그 형식을 만드는 클래스이다.즉, 로그 한 줄이 어떤 구조(패턴)로 출력될지 결정하는 핵심 Layout 클래스라고 보면된다. Logback 에서 Layout 은 로깅 이벤트를 문자열로 변환하는 컴포넌트이며, PatternLayout은 %d, %level, %logger 같은패턴 키워드를 사용해 시간, 레벨, 클래스명 등을 자유롭게 배치할 수 있게 한다.Spring Boot 에서는 기본적으로 PatternLayoutEncoder 가 이 클래스를 사..
2025.12.05 -
인스턴스 변수 (instance field)클래스의 각 객체 인스턴스마다 따로 존재하는 필드이다.public int age; 클래스 변수 / 정적 변수 (static field)클래스 로더에 의해 한번 로드외어 모든 인스턴스가 공유하는 필드public static int count; 클래스 상수 (static final)한번 초기화되고 변경 불가한(참조 재할당 불가) 정적 필드관례상 대문자 스네이크 케이스 (예-STATIC_FINAL_FIELD)public static final String NAME = "OBO"; 메모리와 수명 인스턴스 변수각 객체의 힙(Heap) 영역에 저장된다.객체가 가비지 컬렉션 되면 소멸한다. static / static final클래스 메타영역(런타임의 클래스 영역)에 저장..
클래스 변수, 클래스 상수, 인스턴스 변수인스턴스 변수 (instance field)클래스의 각 객체 인스턴스마다 따로 존재하는 필드이다.public int age; 클래스 변수 / 정적 변수 (static field)클래스 로더에 의해 한번 로드외어 모든 인스턴스가 공유하는 필드public static int count; 클래스 상수 (static final)한번 초기화되고 변경 불가한(참조 재할당 불가) 정적 필드관례상 대문자 스네이크 케이스 (예-STATIC_FINAL_FIELD)public static final String NAME = "OBO"; 메모리와 수명 인스턴스 변수각 객체의 힙(Heap) 영역에 저장된다.객체가 가비지 컬렉션 되면 소멸한다. static / static final클래스 메타영역(런타임의 클래스 영역)에 저장..
2025.12.02