inblog logo
|
LifeLog, DevLog
    Web

    Session

    세션을 통한 로그인, 로그아웃
    KYJTHEYJ's avatar
    KYJTHEYJ
    Jan 06, 2026
    Session
    Contents
    Session활용해보기

    Session

    클라이언트의 상태 정보를 서버 측에 저장하여 유지하는 데이터

    세션 을 직접 만들어보는 과정을 복기한다
    다시 접하려니 기억이 안나서.. 참 애먹었다

    HttpServletRequest

    HTTP 요청 전체를 들고 있는 서블릿

    이 중 헤더에 세션의 정보가 담겨 있을 것이다 (헤더 안에 쿠키가 있으니)

    @RequestHeader

    스프링에서 이 요청 중 헤더를 갖고오는 어노테이션이다
    불필요하게 전체를 갖고 올 필요가 없다

    @GetMapping("/headers")
    public String getHeaders(
        @RequestHeader("session-id") String sessionId,
        @RequestHeader(value = "User-Agent") String userAgent 
    ) {
    	// ...
    }
    
    // name or value -> (생략 가능) 이름 지정하기
    // required -> 헤더가 필수인지 결정한다
    // defaultValue -> required 가 false 일 때, 헤더 값이 없다면 기본값 지정

    @SessionAttribute

    이 헤더를 갖고오는 @RequestHeader 중에서도 세션 ID 정보만
    가져오는 어노테이션

    활용해보기

    위 3가지 선수 지식을 알았으니 이제 몇가지 활용을 해보자

    로그인

    @PostMapping("/login")
        public ResponseEntity<LoginResponse> login(@Valid @RequestBody LoginRequest request, HttpSession session) {
            LoginResponse loginResponse = memberService.login(request);
            SessionMember sessionMember = new SessionMember(loginResponse.getId(), loginResponse.getNickname());
            session.setAttribute("loginMember", sessionMember);
            return ResponseEntity.status(HttpStatus.OK).body(loginResponse);    

    HttpSession 을 컨트롤러의 파라미터로 선언하면, 스프링이 자동으로 세션을 주입
    기존 생성 세션이 없다면 세션을 새로 생성하고 그 객체를 주입한다

    SessionUser DTO 를 통해서 로그인 된 정보를 받아오고 (민감한 정보 없이)
    session.setAttribute 를 통해서 세션에 loginMember 로 로그인 정보를 기록한다

    로그인 상태로 이제 세션엔 loginResponse의 일부 정보가 남는다

    서버에서 클라이언트로 Set-Cookie 를 보면, JSESSIONID 로 정보가 남아있다

    로그아웃

    이제 @SessionAttribute 를 활용하여 invalidate 시켜주면 세션 정보가 삭제된다

    @PostMapping("/logout")
    public ResponseEntity<Void> logout(@SessionAttribute(name = "loginUser", required = false) SessionUser sessionUser, HttpSession session) {
        if (sessionUser == null) {
            return ResponseEntity.badRequest().build();
        }
    
        session.invalidate();
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

    @SessionAttribute 로 세션 정보를 가져온 후 sessionUser에 대입

    로그인 된 상태 였으니 HttpSession 을 파라미터로 선언하면
    로그인 때 생성된 객체를 주입한 session 파라미터를 받아온다

    이제 sessionUser가 없다면, 세션이 없다고 판단하여 badRequest 로 응답

    있다면 invalidate 처리로 서버에 세션 저장소에서 세션 객체, 정보를 삭제한다

    이제 곧 JWT 활용 포스트를 위해 더 정진해야겠다

    Share article
    Contents
    Session활용해보기

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog