본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] Cookie를 이용한 인증 처리

by 코딩고수이고파 2026. 9. 4.

Cookie를 이용해 인증 정보를 관리할 때 Spring에서는 HttpServletRequestHttpServletResponse를 사용할 수 있다.

HttpServletRequest를 이용하면 클라이언트가 보낸 Header와 Cookie를 확인할 수 있고, HttpServletResponse를 이용하면 서버의 응답에 Cookie를 추가할 수 있다.

1. HttpServletRequest와 HttpServletResponse

Controller에서 두 객체를 주입받아 사용할 수 있다.

private final HttpServletRequest request;
private final HttpServletResponse response;
객체 역할
HttpServletRequest 클라이언트의 요청 정보 확인
HttpServletResponse 서버의 응답 정보 설정

인증에서는 주로 request를 이용해 인증 정보를 가져오고, 로그인이나 로그아웃에서는 response를 이용해 Cookie를 설정한다.

2. Authorization Header에서 API Key 가져오기

Authorization Header를 사용하는 경우 다음과 같이 인증 정보를 가져올 수 있다.

String authorization = request.getHeader("Authorization");

if (authorization == null || !authorization.startsWith("Bearer ")) {
    throw new ServiceException(
        "401-2",
        "헤더의 인증 정보 형식이 올바르지 않습니다."
    );
}

String apiKey = authorization.replace("Bearer ", "");

 

요청이 다음과 같이 전달됐다고 가정한다.

Authorization: Bearer API_KEY

 

getHeader("Authorization")으로 Header의 값을 가져온 후 Bearer 를 제거하면 실제 API Key를 얻을 수 있다.

3. Cookie에서 API Key 가져오기

Cookie 방식에서는 request.getCookies()를 이용해 요청에 포함된 Cookie를 확인한다.

Cookie[] cookies = request.getCookies();

String apiKey = null;

if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("apiKey")) {
            apiKey = cookie.getValue();
            break;
        }
    }
}

여러 Cookie 중 이름이 apiKey인 Cookie를 찾고 해당 값을 가져온다.

가져온 API Key를 이용하면 서버에서 회원을 조회하여 인증할 수 있다.

4. Cookie 생성하기

로그인에 성공하면 HttpServletResponse를 이용해 API Key를 Cookie에 저장할 수 있다.

Cookie cookie = new Cookie("apiKey", actor.getApiKey());

cookie.setPath("/");
cookie.setHttpOnly(true);

response.addCookie(cookie);

response.addCookie()를 호출하면 서버의 응답에 Cookie가 포함된다.

브라우저는 응답으로 받은 Cookie를 저장하고, 이후 해당 조건에 맞는 요청을 보낼 때 Cookie를 자동으로 전송한다.

HttpOnly

cookie.setHttpOnly(true);

HttpOnly를 설정하면 JavaScript에서 해당 Cookie에 직접 접근할 수 없도록 제한한다.

따라서 인증 정보를 Cookie에 저장할 때 XSS 공격으로 인증 Cookie가 JavaScript를 통해 직접 탈취되는 위험을 줄이는 데 도움이 된다.

5. Cookie 삭제하기

로그아웃할 때는 Cookie의 만료 시간을 0으로 설정하여 삭제할 수 있다.

Cookie cookie = new Cookie("apiKey", "");

cookie.setPath("/");
cookie.setHttpOnly(true);
cookie.setMaxAge(0);

response.addCookie(cookie);

setMaxAge(0)을 설정하면 브라우저가 해당 Cookie를 즉시 삭제하도록 한다.

Cookie를 생성할 때 설정했던 Path 등의 조건도 동일하게 맞춰주는 것이 중요하다.

6. Cookie 인증의 전체 흐름

Cookie를 이용한 인증은 다음과 같은 과정으로 동작한다.

로그인 요청
    ↓
아이디·비밀번호 확인
    ↓
API Key 확인
    ↓
API Key를 Cookie에 저장
    ↓
로그인 완료
    ↓
인증이 필요한 API 요청
    ↓
브라우저가 Cookie 자동 전송
    ↓
서버에서 Cookie의 API Key 확인
    ↓
회원 조회
    ↓
인증 완료

Cookie를 이용하면 프론트엔드에서 매번 API Key를 꺼내 Authorization Header에 직접 넣지 않아도 된다.

댓글