새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

1 분 소요

📌 2025-02-27 TIL

1. 오늘의 학습 주제

  • ThreadLocal를 자바에서 사용한다는 의미를 알아보자

2. 학습 내용

자바는 멀티쓰레드 프로그래밍 언어입니다.

자바가 서버 어플리케이션과 네트워크 프로그래밍(Servlet) 과 더불어 널리 사용되면서 스레드별 독립적인 데이터를 관리할 필요가 생겼습니다.

서버 환경에서 클라이언트의 요청은 별도의 스레드로 처리됩니다. 요청마다 고유한 상태(예: 사용자 세션, 트랜잭션 정보)등을 유지해야합니다.

기존 방식(예: 공유 객체에 동기화 사용)은 복잡하고 비효율적입니다.

멀티 스레드 환경에서 여러 스레드가 하나의 동일한 객체나 변수를 공유하면 race condition이나 동기화 문제를 해결하기 위해 synchronized와 같은 기법을 사용할 수 있으나 이는 성능 저하와 코드 복잡도가 올라갑니다.

또 다른 방법으로는 요청별 공유 객체를 만들어서 파라미터로 계층별 통신을 하는 방법이 있습니다. 요청하는 객체가 추가될 수록 코드 복잡도가 올라가며 모든 계층이 하나의 dto와 강한 결합이 발생하게 되며 수정사항이 생길경우 모든 코드에 영향을 미치게 될 수 있습니다.

스레드별 격리공간

전역 변수나 전역 객체를 통해 데이터를 공유하면서 발생하는 문제를 제거합니다.

두 번째는 쓰레드별 상태 관리가 편해집니다. 파라미터로 전달하나 전역 객체를 사용하는 방식의 복잡한 로직을 제거할 수 있습니다.

유연성도 제공됩니다. 쓰레드별로 필요한 데이터를 저장하고 관리할 수 있는 공간이 생기게 됩니다.

개발자가 ThreadLocal을 사용한다는건

자바 백엔드 개발자가 ThreadLocal을 사용하는 의미는 쓰레드에는 스택만 가지고 있던 저장 공간을 이제 단순한 코드 몇 줄로 스레드에서 공유할 수 있는 개별 공간을 얻게 되었습니다.

이로 쓰레드별 작업시 공통된 변수를 인자로 넘기지 않고 자유롭게 접근이 가능하게 됩니다.

문 나갈 때는 수동이다.

ThreadLocal은 쓰레드별로 저장할 수 있으므로 해당 쓰레드가 종료되기전에 쓰레드 로컬도 메모리를 정리해줘야합니다.

댓글남기기