- 스레드 마다의 고유한 지역 변수를 넣어서 사용하는 클래스를 말한다
- 스레드 로컬 변수는 스레드 간에 데이터를 공유하지 않고, 각 스레드에서 독립적으로 접근 가능한 데이터를 나타낸다
- ThreadLocal을 사용하면 스레드에서 데이터를 설정하고 검색할 수 있습니다. 각 스레드에서 set 메서드를 사용하여 데이터를 저장하고, get 메서드를 사용하여 데이터를 검색할 가능하다
- ThreadLocal을 남용하지 말아야 한다 스레드별 데이터 저장은 메모리 누수로 이어질 수 있으므로 사용이 끝나면 데이터를 반드시 제거해야 한다
게시판 만들기 사이드 프로젝트를 진행 하던 중에 게시판 작성자 이름을 가지고 오기 위해 여러가지 방법을 진행 하다가 TheradLocal 이란 방법으로 최종 적으로 사용했다
기존 사용법
Entity Mapping 사용해서 Member ,Board 2테이블에 관계를 One to Many 관계를 짖고 token 담겨있는 email 유니크 키 를 사용해서 서비스 레이어에서 Member 조회 후에 사용자 이름 (작성자) 사용했다
ThreadLocalContext 클래스를 생성 한 다음에 doFilterInternal JWT fillter 해주는 부분에서 내가 필요한 정보를 쓰레드 풀에 Set 저장하고 Get 이용해서 내가 원하는 정보를 가져왔다
public class ThreadLocalContext {
private static ThreadLocal<Member> threadLocal = new ThreadLocal<>();
public static void set(Member value) {
threadLocal.set(value);
}
public static Member get() {
return threadLocal.get();
}
public static void clear() {
threadLocal.remove();
}
}
이번에 TheradLocal 알아보면서 스레드라는 단어가 나오면 동시성 문제를 어떻게 해결할지 먼저 고민 해보고 정말 TheradSafe 인지 다시 확인 해보는게 좋을것 같다