인프런 커뮤니티 질문&답변

노동준님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 고급편

ThreadLocal - 예제 코드

쓰레드로컬이 제공하는 별도의 저장소와 싱글톤의 관계

작성

·

219

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요, 쓰레드 로컬이 가지는 별도의 보관소 개념이 정확하게 이해가 되지 않아 질문을 남깁니다.

1. 쓰레드 로컬이 만드는 별도의 전용 보관소라는 것은 하나의 객체를 생성하여 그곳에 정보값을 저장해 두었다가 해당 쓰레드가 싱글톤으로된 객체의 정보값을 호출할 때마다 참고하게 되는 것인지, 아니면 다른 방식으로 설계된 것인지 궁금합니다.

2. 결국 특정 쓰레드마다 별도의 저장소를 통해 정보값을 보관하게 한다면, 그리고 그 보관하는 것이 객체를 생성하는 방식이라면, 동시성 문제를 발생시키는 싱글톤 대신 프로토타입을 사용하면 되는 것이 아닌가 생각이 드는데 프로토타입이 아닌 쓰레드 로컬로 해결해야하는 이유가 무엇인지 궁금합니다.

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 노동준님

쓰레드 로컬은 각각의 쓰레드마다 별도의 저장소를 가지는 것을 의미합니다.

각각의 쓰레드 마다 다른 저장소가 필요할 때 사용합니다.

반면에 프로토타입은 쓰레드와는 무방한 개념입니다. 프로토타입은 단지 요청할 때 마다 새로 객체를 생성해서 반환하는 개념입니다.

강의 내용을 더 들어보시면 프로토타입으로는 ThreadLocal의 기능을 대체할 수 없다는 것을 이해하실 수 있을거에요.

감사합니다.

1

안녕하세요, 인프런 AI 인턴입니다.

노동준님의 질문은 쓰레드 로컬(ThreadLocal)을 사용하는 이유와 그것이 싱글톤과 어떻게 관련되어 있는지에 대한 깊이있는 이해를 요구하는 것으로 보입니다. 주로, 쓰레드 로컬을 통해 각 쓰레드가 독립적인 데이터를 보유할 수 있게 하면서도, 왜 싱글톤 패턴과 함께 사용되는지, 그리고 그 대안으로 프로토타입을 사용하지 않는 이유에 대해 궁금해 하시는 것 같습니다.

  1. 쓰레드 로컬의 별도 보관소: 쓰레드 로컬은 각 쓰레드마다 독립적인 데이터 복사본을 가질 수 있게 해주는 기능입니다. 실질적으로는, 같은 객체의 인스턴스를 참조하더라도, 각 쓰레드에서 접근하는 데이터는 서로 다를 수 있도록 합니다. 이는 싱글톤 객체가 각 쓰레드에 대해 독립된 상태를 유지할 수 있게 해줍니다.

  2. 싱글톤과 프로토타입, 쓰레드 로컬의 관계: 싱글톤 패턴을 사용하는 이유 중 하나는 애플리케이션 내에 단 하나의 인스턴스만 존재하게 하여, 리소스 사용을 최적화하고, 공유 상태를 쉽게 관리하고자 하는 목적이 있습니다. 프로토타입 패턴을 사용하면 각 요청 또는 쓰레드마다 새로운 객체를 생성하게 되어, 싱글톤이 가지는 이점을 상실하게 됩니다. 그럼에도 불구하고, 쓰레드마다 독립적인 상태를 유지해야 할 필요성이 있을 때, 쓰레드 로컬을 활용합니다. 따라서, 쓰레드 로컬은 싱글톤의 이점을 유지하면서 동시에 각 쓰레드의 독립성을 보장하는 해결책으로 사용될 수 있습니다.

구체적으로 쓰레드 로컬을 사용하는 예시를 살펴보고 싶으시다면, 이전에 다룬 ThreadLocal을 사용하는 이유에 대한 질문 에서 좋은 설명을 찾을 수 있습니다. 여기에서는 쓰레드 로컬을 통해 커넥션 같은 리소스를 관리하는 방법과 그 이유에 대해 설명하고 있습니다.

추가로, 싱글톤과 프로토타입 빈에 대한 논의는 싱글톤 빈에 관하여 질문이 있습니다싱글톤과 프로토타입의 차이점 질문에서도 자세히 다뤄지고 있으니 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.