세션 관리

SessionManager를 통한 세션 데이터 접근 규칙

마지막 수정: 2026-05

세션 관리

기본 원칙

  • SessionManager.getSession()을 통해 세션 데이터에 접근한다
  • 세션에 비밀번호, 개인정보 전체, API 토큰 저장 금지
  • 세션 타임아웃: 30분

SessionManager 사용법

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/user")
public class UserController {

    private final UserService userService;

    @PostMapping("/getMyInfo")
    public ResponseJson<UserVo> getMyInfo(@RequestBody UserVo vo) {
        // 세션에서 사용자 정보 조회
        SessionVo session = SessionManager.getSession();
        vo.setUserSn(session.getUserSn());

        return ResponseJson.success(userService.get(vo));
    }
}

SessionVo 제공 메서드

SessionManager.getSession()이 반환하는 SessionVo의 메서드:

메서드타입설명
getUserSn()Long사용자 일련번호
getUserNm()String사용자 명
getRoles()String로그인 권한
getTimezone()String사용자 타임존
// 세션 사용 예시
SessionVo session = SessionManager.getSession();

Long   userSn   = session.getUserSn();   // 사용자 일련번호
String userNm   = session.getUserNm();   // 사용자 명
String roles    = session.getRoles();    // 권한
String timezone = session.getTimezone(); // 타임존

접속자 IP 조회

// 접속자 IP 반환
String clientIp = SessionManager.getClientIP();
log.info("접속자 IP: {}", clientIp);

Service 레이어에서 세션 사용

@Service
@RequiredArgsConstructor
@Slf4j
public class BoardService {

    private final BoardMapper boardMapper;

    @Transactional(rollbackFor = Exception.class)
    public void regist(BoardVo vo) {
        // 세션에서 작성자 정보 설정
        SessionVo session = SessionManager.getSession();
        vo.setRegUserSn(session.getUserSn());
        vo.setRegUserNm(session.getUserNm());

        boardMapper.regist(vo);
        log.info("게시글 등록: boardSn={}, userSn={}", vo.getBoardSn(), session.getUserSn());
    }
}

세션에 저장 가능한 데이터

저장 허용저장 금지
사용자 일련번호 (Long)비밀번호
사용자 명개인정보 전체
권한 정보결제 정보
타임존API 토큰

세션 설정

# application.yml
server:
  servlet:
    session:
      timeout: 30m
      cookie:
        http-only: true    # JavaScript 접근 차단
        secure: true       # HTTPS 전용 (운영)
        same-site: lax     # CSRF 방지

체크리스트

  • [ ] 세션 접근: SessionManager.getSession() 사용
  • [ ] 접속자 IP: SessionManager.getClientIP() 사용
  • [ ] 세션에 비밀번호/민감정보 저장 금지
  • [ ] 세션 타임아웃 30분 설정
  • [ ] 쿠키: HttpOnly, Secure, SameSite 설정