티스토리 뷰

아주 중요한 질문입니다.

정리하자면:
React 클라이언트가 백엔드에서 Set-Cookie로 준 쿠키를 자동으로 저장하고 읽으려면,
보안 설정 + CORS 설정이 정확히 맞아야 합니다.


✅ 기본 전제: 클라이언트가 백엔드에서 준 쿠키를 저장하고 사용하는 조건

요구 조건 설명

1. 백엔드에서 Set-Cookie 헤더 전송 예: Set-Cookie: SESSION=abc123; HttpOnly; SameSite=None; Secure
2. 프론트 요청에 credentials: 'include' 지정 fetch, axios, XMLHttpRequest 등
3. 백엔드가 CORS 응답에 Access-Control-Allow-Credentials: true 포함 그렇지 않으면 쿠키 무시됨
4. SameSite 설정 SameSite=None이어야 cross-origin에서 쿠키 저장 가능
5. HTTPS 환경 Secure 쿠키는 HTTPS에서만 저장됨

✅ 클라이언트 측 설정 (React)

🔹 fetch 예시

fetch('https://api.mybackend.com/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ username, password }),
  credentials: 'include'  // ⬅ 이게 반드시 있어야 쿠키 저장됨!
});

🔹 axios 예시

axios.post('https://api.mybackend.com/login', { username, password }, {
  withCredentials: true
});

✅ 백엔드(Spring) 설정

1. CORS 응답에 Access-Control-Allow-Credentials: true

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                .allowedOrigins("https://your-react-client.com")
                .allowedMethods("*")
                .allowCredentials(true); // ⬅ 중요
        }
    };
}

2. 쿠키의 SameSite, Secure 설정 (Spring Security 예)

@Bean
public SessionCookieConfig sessionCookieConfig() {
    SessionCookieConfig config = new SessionCookieConfig();
    config.setName("SESSION");
    config.setHttpOnly(true);
    config.setSecure(true); // HTTPS에서만
    // SameSite=None 설정은 필터/헤더 수동 설정 필요
    return config;
}

또는 Set-Cookie 직접 헤더로 추가하는 방식도 가능.


✅ 확인 방법 (브라우저 개발자 도구)

  1. React 클라이언트에서 로그인 요청 전송
  2. 응답의 Set-Cookie 헤더 확인
  3. Application 탭 → Cookies에서 저장 여부 확인

✅ 요약

질문 답변

백엔드가 준 쿠키를 React에서 저장할 수 있나? ✅ 가능함, 하지만 조건 충족 필요
필수 조건 credentials: include, CORS 허용, SameSite=None, Secure, HTTPS
보안 문제 주의 개발환경에서는 Secure=false, SameSite 설정이 민감함

필요하시면 Spring Boot + Spring Security 기준의 로그인 후 쿠키 설정 샘플도 도와드릴게요.

'Skill > html js css' 카테고리의 다른 글

thymeleaf  (1) 2025.08.19
Invariant Violation: Expected drag drop context  (0) 2025.07.19
web worker  (2) 2025.07.14
React.memo와 useMemo  (0) 2025.06.24
react] typescript: field as keyof typeof updated[number]  (1) 2025.06.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함