ThreadLocal3 스프링 핵심원리( 심화 ) - 로그 추적기와 동시성( ThreadLocal 사용 ) 앞서 로그 추적기를 구현함에 파라미터로 로그의 동기화를 위해 TraceId를 넘기는 방법을 선택했었다.이러한 구현에는 모든 로직에 파라미터를 추가하는 번거로움이나 컨트롤러가 없는 다른 서비스의 호출에 사용하지 못하는 문제가 있었다. 따라서 로그 추적 객체가 스스로 상태값을 변경할 수 있도록 로직을 개선하였다.하지만, 객체 내부의 인스턴스 필드로 상태값을 저장하는 구현은 다중 스레드가 접근하는 경우 동시성 문제를 야기하였다. 그리고 이번 포스팅에서는 동시성 문제를 해결할 수 있는 ThreadLocal에 대해서 다뤄보겠다. ThreadLocalThreadLocal은 특정 하나의 쓰레드만 접근할 수 있는 저장소를 제공한다. 즉, 사용자 a와 사용자 b 각자를 인식하여 저장소를 제공하고 정해진 저장소를 통해.. Spring/SpringCore - advance 2025. 2. 16. 스프링 핵심원리( 심화 ) - 로그 추적기와 동시성( 로그 추적기 개발과 동시성 문제 ) 로그 추적기 개발 앞서 로그 추적기를 구현하였다.그리고 해당 로그를 출력함에 있어 트랜잭션ID 와 level 수준을 나타내기 위해 TraceId객체를 파라미터로 넘기도록 구현이 필요하였다. 그런데, 이러한 방식은 모든 메서드들에 파라미터를 추가해야하는 문제를 야기한다.TraceId를 파라미터로 넘기지 않으면서도 문제를 해결할 방법에 대해서 알아보자. 이런 문제 지점들을 해결하기 위해 로그 추적기를 더 발전시킬 것이다.먼저, 향후 다양한 구현체로 변경할 수 있도록 LogTrace 인터페이스를 만든다.public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception.. Spring/SpringCore - advance 2025. 2. 15. 시큐리티 기본 원리( 5 ) - SecurityContextHolder( 인증 정보 공유 방식 ) SecurityFilterChain 내부에 존재하는 많은 필터로 시큐리티 관련 작업을 진행한다.모든 작업은 필터마다 기능 단위로 분업하여 진행하기에 앞에서의 작업이 이후 필터가 알기 위한 저장소 개념이 필요하다. 단편적인 예시로 인가 필터가 작업을 하려면 유저의 role 정보가 필요하게 되는데,앞단의 필터에서 유저에게 role값을 부여한 결과를 인가 필터에 도달하기 까지 공유해야 확인할 수 있다. 시큐리티의 정보 공유 방식 즉, 인가 필터 이전에 아이디, 로그인 여부, role 데이터 등의 정보를 저장하고 있을 곳이 필요한데,이러한 정보는 ‘Authentication 객체’가 저장한다 Authentication 객체가 담고 있는 정보는 크게 아래와 같다. Principal : 유저에 대한 정보Cred.. Spring/시큐리티 기본원리 2024. 6. 15. 이전 1 다음