쿠키 SameSite·Secure·Domain·HttpOnly

장석원·2026년 10월 7일

src/shared/lib/supabase/server.ts의 crossDomainCookieOptions(): 프로덕션 sameSite none + secure, COOKIE_DOMAIN 옵션.
Framer <-> Next API 크로스 도메인 구조.

SameSite=None+Secure가 없으면 Framer에서 Next API로 보내는 요청에 쿠키가 왜 안 붙는지.

브라우저는 요청을 보낼 때 "지금 보고 있는 페이지의 사이트"와 "요청이 가는 사이트"가 같은지 비교한다.

  • Origin(출처): 프로토콜 + 호스트 + 포트가 전부 같아야 같은 출처이다.
  • Site(사이트): 등록 가능한 도메인만 같으면 같은 사이트이다.

SameSite는 이름 그대로 Origin이 아닌 Site 기준.

Framer 페이지는 domain.co.kr 에서 열려있고, 코드 컴포넌트가
Vercel 에 있는 Next API로 fetch를 보낸다.
API가 xxx.vercel.app 같은 도메인이라면 브라우저 입장에서 이건 크로스 사이트 요청이다.
요즘 브라우저는 SameSite를 지정하지 않은 쿠키를 Lax로 취급하는데, Lax는 크로스 사이트 Fetch에 쿠키를 싣지 않는다.
그래서 쿠키를 크로스 사이트 요청에도 보내려면 SameSite=None를 명시해야하고, Nonoe은 Secure 없이는 브라우저가 아예 거부한다. 둘다 있어야 하는 이유는 여기서 나온다.

  • 클라이언트: fetch(url, { credentials: 'include' })
  • 서버 응답: Access-Control-Allow-Origin: https://domain.co.kr + Access-Control-Allow-Credentials: true
    해당 셋중 하나만 빠져도 쿠키는 안 붙거나, 붙어도 응답을 JS가 못 읽는다.

0개의 댓글