기록하는 습관

스프링 핵심 원리 - 고급편 (1) ThreadLocal 본문

개발/Spring

스프링 핵심 원리 - 고급편 (1) ThreadLocal

로그뉴 2022. 10. 7. 15:57

스프링 핵심 디자인 패턴

  • 템플릿 메서드 패턴
  • 전략 패턴
  • 템플릿 콜백 패턴
  • 프록시 패턴
  • 데코레이터 패턴

 

데이터 동기화 방법

  1. Parameter 동기화
    1. 개념: 데이터를 함수 파라미터로 넘겨주어 동기화 시킴.
    2. 문제점: 동기화를 위해 관련 method의 모든 parameter를 수정해야 한다. (만약, 인터페이스가 있다면 인터페이스까지 모두 고쳐야 함) 
  2. Field 동기화
    1. 개념: 객체 내의 필드로 초기화 시키고 값을 변경하면서 동기화 시킴.
    2. 문제점: 동시성 문제가 발생.
      1. 필드 객체가 singleton으로 등록된 spring bean이기 때문이다. 이 인스턴스의 필드를 여러 thread가 동시에 접근하게 되기 때문에 문제가 발생한다.
    3. 싱글톤 객체의 필드를 사용하면서 동시성 문제를 해결하려면? -> ThreadLocal 사용!
  3. ThreadLocal 동기화
    1. 개념
      1. ThreadLocal은 해당 쓰레드만 접근할 수 있는 별도의 내부 저장소.
    2. 주의사항
      1. ThreadLocal.remove()를 통해 반드시 쓰레드 로컬 값을 제거해야 한다. ThreadPool에서 Thread가 재사용 되면서 데이터가 남아있을 경우, 원치 않는 데이터 노출이 될 수 있기 때문이다.

 

 

동시성 문제

 

 

TIP

1. Intellij에서 F2 누르면 에러로 이동

Comments