[Spring, AWS] 배포 환경에서 쿠키 사용하기

19·2022년 7월 28일
0

Spring

목록 보기
12/29

원인

로컬 환경에서는 쿠키가 잘 통신되는데, 배포 환경에서는 쿠키가 클라이언트에 저장이 안되는 문제가 발생했다

게시글 조회 수가 중복으로 증가되지 않도록 하기 위해 쿠키를 사용했다.
'postView'라는 쿠키에 게시글 번호가 담기고, 해당 게시글 번호에 재접근해도 조회 수가 중복으로 증가되지 않게 되도록 구현한건데, 로컬 환경에서는 잘 하는데, 배포 환경에서는 위 사진처럼 쿠키가 저장되지 않았다.



헤결

이리저리 찾아보니, 쿠키 도메인을 설정해주어야 한다는 것을 알게 되었다.

| PostService.java

...
if (oldCookie != null) {
    if (!oldCookie.getValue().contains("["+ postId.toString() +"]")) {
        increaseHits(postId);
        oldCookie.setValue(oldCookie.getValue() + "_[" + postId + "]");
        oldCookie.setPath("/");
        oldCookie.setDomain("cocoding.xyz");
        oldCookie.setMaxAge(60 * 60 * 24);
        response.addCookie(oldCookie);
    }
} else {
    increaseHits(postId);
    Cookie newCookie = new Cookie("postView", "[" + postId + "]");
    newCookie.setPath("/");
    newCookie.setDomain("cocoding.xyz");
    newCookie.setMaxAge(60 * 60 * 24);
    response.addCookie(newCookie);
}
...
  • 기존에는 setDomain을 해주는 부분이 없었다.
    로컬환경에서는 상관없는데, 배포환경에서는 필요하다고 한다.
    그래서 setDomain을 추가해주었다!

기존에 CORS 설정하면서 쿠키 사용은 허락했었기 때문에, 위에서 setDomain해 준 것만으로도 동작한다!

서버

| WebConfig.java

...
.allowCredentials(true)
  • 쿠키 통신을 허락!

클라이언트

| profile-details.js

// 게시글 상세 읽기
function getPost() {
    ...
    $.ajax({
        type: 'GET',
        url: process.env.BACKEND_HOST + '/post/' + params['id'],
        xhrFields: {
            withCredentials: true
        },
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Content-type', 'application/json');
            xhr.setRequestHeader('Authorization', 'Bearer ' + token);
        },
  • withCredentials를 true로 설정해 쿠키 통신을 허락!!

쿠키가 정상적으로 동작하는 것 확인!


참고

https://velog.io/@inde153/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%95%98%EB%A9%B4%EC%84%9C-%EB%B0%B0%ED%8F%AC%ED%99%98%EA%B2%BD-%EC%BF%A0%ED%82%A4-%EB%AC%B8%EC%A0%9C%EC%A0%90

https://jeongkyun-it.tistory.com/104

profile
하나씩 차근차근

0개의 댓글