이번 강의에서는 로그인 성공 시 apiKey를 쿠키로 생성하도록 구현한다.
핵심 포인트는 다음 한 문장이다.
로그인 성공 → 서버가 apiKey를 쿠키(Set-Cookie)로 내려준다
이를 통해 브라우저는:
@PostMapping("/login")
public RsData<MemberLoginResBody> login(
@Valid @RequestBody MemberLoginReqBody reqBody
) {
Member member = memberService.findByUsername(reqBody.username())
.orElseThrow(() -> new ServiceException("401-1", "존재하지 않는 아이디입니다."));
if (!member.getPassword().equals(reqBody.password()))
throw new ServiceException("401-2", "비밀번호가 일치하지 않습니다.");
rq.setCookie("apiKey", member.getApiKey());
return new RsData<>(
"200-1",
"%s님 환영합니다.".formatted(member.getName()),
new MemberLoginResBody(
new MemberDto(member),
member.getApiKey()
)
);
}
👉 결론부터 말하면: 네, 지금은 둘 다 받습니다.
rq.setCookie("apiKey", member.getApiKey());
이 코드는 내부적으로 다음과 같은 응답 헤더를 생성한다.
Set-Cookie: apiKey=xxxx
브라우저는 이 응답을 받으면:
Cookie: apiKey=xxxx
{
"resultCode": "200-1",
"msg": "홍길동님 환영합니다.",
"data": {
"member": { ... },
"apiKey": "xxxx"
}
}
즉,
이건 의도된 설계 + 학습 단계다.
| 환경 | 인증 방식 |
|---|---|
| 웹(브라우저) | 쿠키 |
| 앱(모바일/데스크톱) | Authorization 헤더 |
앱 환경에서는:
쿠키 방식은:
스프링 MVC에서는 요청마다 한 쌍이 만들어진다.
HttpServletRequest → 받은 편지HttpServletResponse → 보낼 편지로그인 시:
Set-Cookie: apiKey=xxxxresponse.addCookie(new Cookie("apiKey", member.getApiKey()));
rq.setCookie("apiKey", member.getApiKey());
public void setCookie(String name, String value) {
resp.addCookie(new Cookie(name, value));
}
👉 쿠키 생성이라는 반복적인 보일러플레이트 코드를 Rq로 모은 것
Cookie apiKeyCookie = result.getResponse().getCookie("apiKey");
assertThat(apiKeyCookie.getValue()).isEqualTo(member.getApiKey());