(주) 망나니 힘집
ThreadLocal 로그인 정보 저장하기 실패 본문
로그인 정보를 저장해두고 여기저기 로그인 아이디를 가져올 수 없을까? 라는 생각에 여러 방안을 두고 생각을 해보았다.
현재 세션을 쓰기 때문에 여기저기 넘겨야 하는 상황이 매우 불편했다.
1. 스프링 시큐리티 (안 쓰기에 PASS)
2. H2 인메리 데이터베이스로 현재 로그인을 임시 저장해두고 XML 만 수정하는 방법 ( H2 설치가 안 되어 PASS)
3. 현재 쓰는 DB2 에도 2와 같이 시행 ( 메모리 낭비가 심할 것 같고 페이지 재접속 시에 문제가 있을 것 같아 PASS)
4. ThreadLocal (하.. 우리가 쓰는 구조와 좀 달라서 PASS )
이제 싱글톤 패턴을 구현해보려고 한다. 과연 될까..? ㅋㅋㅋ
일단, Login 서비스단에서 idLogin 을 저장하기 때문에
// ThreadLocal을 사용하여 로그인 정보를 저장
private static ThreadLocal<OSession.LoginInfo> local = new ThreadLocal<>();
public void check(String id) {
System.out.println("-------1. 쓰레드 값 저장 --------");
//ThreadLocal 활용 - 쓰레드 값 저장
ThreadLocal<LoginInfo> local = new ThreadLocal<>();
System.out.println("-------2. LoginInfo 객체 생성 --------");
// LoginInfo 객체 생성 (여기서는 가정으로 idLogin이 LoginInfo 객체라면)
// OSession 객체 생성
OSession osess = new OSession();
OSession.LoginInfo idLogin = osess.new LoginInfo(id);
System.out.println("-------3. 값 할당 --------");
local.set(idLogin);
System.out.println("------ 4. 값 추출 --------");
System.out.print(local.get().getIdLogin());
}
이렇게 코드를 작성을 하였는데 값이 잘 가져왔다. 이제 이걸 다른 클래스 파일에서 읽기만 하면 된다.
그렇게 해주기 위해선 ThreadLocal 함수가 더 필요하다.
public static ThreadLocal<OSession.LoginInfo> getThreadLocal() {
return local;
}
작성을 해주고 다른 파일에는 Login 서비스의 객체를 불러온다.
LoginS loginS = new LoginS();
// LoginS 클래스에서 ThreadLocal 값을 가져옴
ThreadLocal<OSession.LoginInfo> local = LoginS.getThreadLocal();
// ThreadLocal에서 로그인 정보 추출
OSession.LoginInfo loginInfo = local.get();
System.out.println(loginInfo); // null 이 뜨더라
이렇게만 하면 잘 될 줄 알았지만 그 놈의 같은 쓰레드.... 나는 ThreadLocal() 만 해주면 잘 읽어올 줄 알았건만 그러지 않았다.
결국은 다른 MAIN 클래스에서 LoginS 와 위 클래스를 가져와서 같은 쓰레드 내에서 실행해야 id 값이 잘 가져온댄다...
그래서 ! 결국 싱글톤 패턴 구현으로 변경..
전 개발 핵 초보이기에 좋은 방법이나 지적할 부분 있다면 언제나 환영입니다 !!
'스펙도 쌓니' 카테고리의 다른 글
이클립스 유용한 기능 이모저모 ! ! ! 특정 함수가 포함된 모든 파일 탐색 ! ! ! (0) | 2025.04.03 |
---|---|
무난하게 통과해버린 로그인 정보 인스턴스화 시켜서 변수를 전역으로 사용하기 (0) | 2025.04.02 |
[영어회화] 당신의 영어가 재미없는 이유 (0) | 2025.02.12 |
[영어회화] 여기저기서 주워들은 영어회화 공부법 정리 (어쩌다 보니 김영철 추천 목록) (1) | 2025.02.09 |
[h2] SpringSecurity 적용 시에 h2-console 로 바로 못 들어가는 상황 (0) | 2025.02.08 |