Java.lang 패키지에서 제공하는 쓰레드 범위 변수. 쓰레드 수준의 데이터 저장소.

우리가 변수를 선언한다면 그 변수는 scope가 생긴다. 이 scope가 쓰레드 수준에서 공유되도록 하는 것이 ThreadLocal이다.

간단한 예제

public class AccountContext {

	private static final ThreadLocal<Account> ACCOUNT_THREAD_LOCAL = new ThreadLocal<>();

	public static void setAccount(Account account) {
		ACCOUNT_THREAD_LOCAL.set(account);
	}

	public static Account getAccount() {
		return ACCOUNT_THREAD_LOCAL.get();
	}
}
AccountContext.setAccount(accountRepository.findByUsername(principal.getName()));
@Service
public class SampleService {

	void dashboard() {
		Account account = AccountContext.getAccount();
		System.out.println("================");
		System.out.println(account.getUsername());
	}
}

어딘가에서 SecurityContext에 넣어 줄까?