ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ThreadLocal이란?
    Spring Framework 2023. 5. 19. 00:01
    728x90

    ThreadLocal이란?

    멀티스레드 애플리케이션에서 변수를 특정 스레드에 로컬로 설정할 수 있는 프로그래밍 개념입니다.

    즉, 스레드 로컬 변수는 변수에 액세스 하는 각 스레드마다 다른 값을 가질 수 있는 변수입니다.

    각 스레드는 다른 스레드에 속한 복사본에 영향을 주지 않고 변수의 자체 복사본의 읽고 수정할 수 있습니다.

     

    https://javacan.tistory.com/entry/ThreadLocalUsage

     

     

    Java에서는 ThreadLocal 클래스를 사용하여 스레드 로컬 변수를 선언할 수 있습니다.

     

    Thread Local의 활용

    일반적으로 멀티스레드 애플리케이션에서 사용자의 세션 데이터나 스레드의 현재 상태와 같이 특정 스레드에 특정한 데이터를 저장하는 데 사용됩니다.

     

    • Spring Security에서 Thread Local을 활용하여 사용자 인증 정보를 전파
      • 매개변수로 전달할 필요 없이 사용자의 인증 세부 정보 검색
    • 트랜잭션 매니저가 트랜잭션 컨텍스트를 전파하는데 ThreadLocal 사용
      • 데이터베이스 연결 및 트랜잭션 컨텍스트를 가져 한 스레드에 변경된 내용이 다른 스레드에 영향을 미치지 않도록 함
    • 멀티스레드 환경의 로깅
      • 각 스레드에 대한 고유 식별자를 스레드 로컬에 저장하여 이 식별자를 로그 메시지에 포함하여 어떤 스레드가 메시지를 생성했는지 식별

     

    Thread Local 사용 시 주의사항

    메모리 누수가 발생할 수 있으므로 신중하게 사용하는 것이 중요합니다.

    스레드 로컬 변수는 스레드의 전체 수명 동안 메모리에 저장되므로 스레드 로컬 변수에 저장된 모든 객체는 스레드가 종료될 때까지 메모리에 남아 있습니다. 

    스레드 로컬 변수를 제대로 지우거나 제거하지 않으면 메모리 누수가 발생할 수 있습니다.

     

    마무리

    전반적으로 스레드 로컬은 Java 기반 애플리케이션에서 스레드별 데이터를 관리하기 위한 강력한 도구입니다. 

    각 스레드가 별도의 데이터 복사본을 가질 수 있으므로 한 스레드의 변경 사항이 다른 스레드에 영향을 미치지 않도록 할 수 있습니다. 

    스레드 로컬을 사용하면 개발자는 코드를 간소화하고 메서드 매개변수로 데이터를 전달하는 복잡성을 피할 수 있습니다.

    댓글

Designed by Tistory.