최근 피드백 서비스 피드줍줍을 개발하면서 꽤 흥미로운 문제를 발견했습니다. 같은 코드인데 Chrome에서는 쿠키가 잘 저장되는데, Safari에서는 쿠키가 전혀 저장되지 않는겁니다. 게다가 localhost에서는 잘 동작해서 원인을 추적하는 데 더 혼란스러웠습니다.
결론적으로, 문제의 핵심은 Safari의 쿠키 정책(ITP) 과 쿠키의 Domain 설정이었습니다.
시작하게 된 계기
피드줍줍의 주요 기능인 ‘좋아요’와 ‘나의 피드백 조회’는 사용자 식별을 위해 쿠키(visitorId)를 사용합니다. 그런데 테스트 중 Safari에서만 visitorId가 저장되지 않아 기능이 정상 작동하지 않았습니다.
| Chrome | ✅ 저장됨 |
| Safari | ❌ 저장 안 됨 |
| localhost Safari | ✅ 저장됨 |
개발 환경에서는 proxy 설정 덕분에 문제가 없었지만, 프로덕션 환경에서는 프록시를 둘 수 없어 이 이슈가 실제로 드러났습니다.
영향 범위
좋아요 기능: 쿠키 기반으로 작동하므로 Safari에서는 사용자별 좋아요 정보 저장 불가 (현재는 임시 로직으로 작동하지만, 추후 병합되면 중단 예정)

나의 피드백 조회 : 쿠키 기반 조회 로직 변경 후 Safari 사용자에게는 조회 불가능 상태 발생

원인 분석
현재 도메인 구조는 다음과 같습니다. (보안을 위해 도메인 명은 수정했습니다.)
Safari는 서브도메인이 다르더라도 서로 다른 사이트(cross-site) 로 간주합니다.
즉, SameSite=None 설정을 해도 api.example.com과 frontend.example.com간의 쿠키는 차단됩니다.
“Safari는 사용자 프라이버시를 위해 크로스 사이트 쿠키를 엄격히 차단합니다.
서브도메인도 별도 사이트로 인식합니다.”
WebKit: Intelligent Tracking Prevention
Tracking Prevention in WebKit
WebKit has implemented tracking prevention technologies, spanning from 2003 with Safari 1.0 until today.
webkit.org
Chrome에서는 되는 이유
Chrome은 SameSite=None; Secure로 명시된 쿠키를 개발자의 의도대로 허용합니다.
반면 Safari는 ITP 정책(Intelligent Tracking Prevention) 으로 동일한 설정을 적용해도 차단합니다.
“Chrome allows developer-specified SameSite=None; Secure cookies.”
Google Developers - SameSite=None; Secure Cookie Settings
새로운 SameSite=None; Secure 쿠키 설정에 대비 | Google Search Central Blog | Google for Developers
보관 파일 2010 2008
developers.google.com
문제의 핵심: Domain 속성
현재 서버에서 내려오는 쿠키는 다음과 같았습니다. Set-Cookie: visitorId=abc123; Path=/; Secure; SameSite=None

여기에는 Domain 속성이 없습니다. 이 경우 쿠키는 Host-only cookie로 저장됩니다.
즉 frontend.example.com에서는 쿠키가 공유되지 않습니다. 그래서 Safari에서는 쿠키를 전혀 받을 수 없었던 거죠.
해결 방법
Set-Cookie 시 Domain을 공통 루트 도메인으로 지정하면 해결됩니다.
- ❌ 기존: domain= 지정되지않음
- ✅ 변경: domain=.example.com
이렇게 하면 api-dev, dev, www 등 모든 서브도메인에서 쿠키를 공유할 수 있습니다.
Safari 콘솔로 직접 검증하기
Safari 개발자 콘솔에서 테스트해본 결과입니다 👇
// 성공 케이스 document.cookie = "test=1; domain=.example.com; secure; samesite=none";
✅ 쿠키가 정상적으로 저장됨

// 실패 케이스 document.cookie = "test1=2; domain=api.example.com; secure; samesite=none";
❌ 쿠키가 저장되지 않음

적용 후 결과
Safari에서도 visitorId 쿠키가 정상적으로 저장되며, ‘좋아요’, ‘나의 피드백 조회’ 기능 모두 정상 작동하게 되었습니다.
| Chrome | ✅ 정상 |
| Safari | ✅ 정상 |
| localhost Safari | ✅ 정상 |
비슷한 사례
저와 같은 문제를 겪은 사례가 이미 있더라구요. 아래 글에서도 동일하게 Domain 속성 변경으로 해결했습니다.
Spring third-party 쿠키 문제 해결하기 - Velog @hanbirang
마무리
이번 이슈를 통해 단순히 “쿠키가 안 된다”를 넘어서 브라우저별 쿠키 정책 차이와 쿠키 메커니즘을 깊게 이해할 수 있었습니다.
결국 해결책은 단순했습니다. domain 속성을 .example.com으로 지정하는 것만으로 Safari에서도 완벽히 동작하게 되었어요ㅎㅎ 이 경험을 통해 “같은 코드라도 브라우저가 다르면 전혀 다르게 작동할 수 있다”는 걸 다시 한 번 느낀것 같습니다. 위의 내용은 문서로 백엔드분들에게 공유했고, 재빠르게 수정해주셨습니다!

📚 참고자료
'프론트엔드' 카테고리의 다른 글
| Lighthouse CI로 성능 측정 자동화: PR 코멘트와 구글 시트까지 (0) | 2025.09.22 |
|---|---|
| Sentry로 에러 모니터링 시스템 구축하기 in 피드줍줍 (0) | 2025.09.21 |
| AWS CodePipeline으로 자동 배포 시스템 구축하기 (0) | 2025.09.21 |
| 피드줍줍 성능 최적화: Lighthouse에 반영되지 않은 개선들 (0) | 2025.09.21 |
| React + PWA에서 FCM 알림 API 연동기 (0) | 2025.09.21 |