대니
danny's blog@dannywon_dev
발행 43 · 대기 75

1인 개발자. 클로드 코드를 팀처럼 굴린다. 매일 겪은 것만 쓴다.

버그와 함정

localhost 쿠키는 포트를 안 가린다 — NEXT_LOCALE 이 3000 과 3001 을 오간 이유

직원 앱이 중국어로 떴다. 원인은 포트를 구분하지 않는 쿠키였고, 규칙은 이미 메모리에 있었다.

개발 서버를 여러 개 띄워 놓고 쓰다 보면, 한쪽에서 만진 설정이 다른 쪽에 넘어가 있는 일이 생긴다. 2026-08-06 에 직원용 화면(localhost:3001)을 열었더니 중국어로 떠 있었다.

짚이는 게 있었다. 아까 테스트한다고 채팅방에서 언어를 중국어로 바꿨었다. 확인해보니 그대로였다.

  • 쿠키에 NEXT_LOCALE=zh-CN
  • 주소가 /zh-CN/fairs/... 로 바뀌어 있었고 html lang="zh-CN"

원인은 쿠키가 hostname 과 path 로만 갈리고 port 는 안 보기 때문이다(RFC 6265). 관람객 앱(3000)과 직원 앱(3001)이 둘 다 localhost 고, 쿠키 이름도 NEXT_LOCALE 로 같았다. 두 앱 다 6개 언어를 지원하니 조건이 완벽하게 맞았다.

운영에서는 안 난다. 호스트가 갈려 있고(도메인.io / sub.도메인.io) 쿠키에 domain 을 안 붙였으니 각자 자기 호스트에만 남는다. 개발 환경에서만 나는 문제였다.

규칙은 이미 있었는데 발동하지 않았다

이 함정은 이미 내 메모리에 적혀 있었다. 몇 달 전 로그인 세션이 서로 덮어써진 사고 때문에 써둔 것이고, 제목이 "dev 쿠키 격리 — 운영 콘솔은 항상 시크릿 창" 이었다.

그런데 안 걸렸다. 그 메모리가 로그인 쿠키만 다뤘기 때문이다. "세 앱이 같은 DB 를 쓰니 인증 쿠키 이름도 같다 → 뒤에 로그인한 쪽이 앞을 덮어쓴다" 로 적혀 있었고, 언어 쿠키를 보고 있을 땐 그 규칙이 켜지지 않았다. 규칙이 없었던 게 아니라 너무 좁게 적혀 있었다.

여기서 갈렸다. 처방을 「언어 쿠키도 조심하자」로 한 줄 덧붙일지, 아니면 판정 기준 자체를 바꿀지. 전자로 가면 다음에 세 번째 쿠키(테마? 마지막으로 본 항목?)에서 똑같이 밟는다. 항목을 늘리는 방식은 내가 이미 아는 것만 막아준다.

바꾼 것

코드 — 직원 앱 쿠키 이름을 NEXT_LOCALE_GALLERY 로 분리했다. 이름은 상수 하나로 빼서 굽는 쪽과 읽는 쪽이 같은 값을 쓰게 했다. 여기가 갈리면 에러 없이 조용히 안 먹는다.

메모리 — 판정 기준을 바꿨다.

인증 쿠키인가이름이 같은 쿠키가 두 앱에 있나

제목도 「로그인 쿠키」에서 「쿠키」로 넓혔다.

곁가지 — 분리가 편의만은 아니었다

고치고 나서 알았는데, 이건 의미상으로도 갈라야 하는 값이었다. 직원은 한국어로 일하면서 관람객 화면을 다른 언어로 확인해야 한다. 이름이 같으면 한쪽을 바꿀 때 반대쪽을 뺏긴다. 편의를 위한 우회가 아니라 원래 두 값이었어야 했다.

확인하다 곁다리로 본 것 하나 더 — 같은 localhost다른 프로젝트 개발 서버들의 로그인 쿠키 3세트가 함께 쌓여 있었다. 아직 사고는 안 났지만 같은 원리다.

← 목록으로