이메일을 받지 않는 계정을 만든 이유

2026.08.25 · 몰겜캣

회원가입을 넣게 된 동기는 순위표였습니다. 일간·주간·월간 명예의전당을 세우고 싶었는데 — 사실 그건 가입 없이도 됩니다. 브라우저마다 임의의 번호를 하나 뽑아 그걸로 사람을 세면 되니까요. 가입이 필요했던 건 순위 집계가 아니라 정체성이었습니다. 기기를 넘나드는 하나의 나, 게임을 넘나드는 하나의 나, 그리고 닉네임 소유권 — 그전에는 아무나 남의 이름을 그대로 칠 수 있었습니다.

그래서 만들면서 한 가지 원칙을 앞에 뒀습니다. 덜 받을수록 잃을 것이 없다.

저장하는 것은 셋뿐

  • 어느 제공자로 로그인했는지 — 카카오 / 네이버 / 구글
  • 제공자가 준 회원 식별자를 해시한 값. 원본은 저장하지 않습니다. 로그인할 때마다 같은 방식으로 해시해 대조하므로 원본이 필요 없고, 표가 새어도 그 값만으로는 제공자 쪽 계정을 되짚을 수 없습니다.
  • 닉네임. 직접 고른 이름이고, 선착순으로 소유합니다. 대소문자만 다른 이름은 같은 이름으로 봅니다 — 그걸 다른 사람으로 보면 흉내가 그대로 통합니다.

이메일·이름·프로필 사진은 받지도, 저장하지도 않습니다. 네이버는 이메일과 이름을 떼기 어려워 같이 보내오는데, 서버가 그 값을 읽지 않고 그 자리에서 버립니다. 안 갖고 있으면 유출될 것도 없고, 개인정보처리방침도 짧아집니다.

만 14세 미만은 받지 않는다

개인정보보호법이 만 14세 미만의 개인정보 수집에 법정대리인 동의를 요구합니다. 보호자 확인 절차를 제대로 갖추는 건 이 프로젝트가 감당할 크기를 넘습니다. 그래서 가입 화면에 "만 14세 이상만"을 명시하고, 아이들은 계정 없이 게임을 전부 다 하게 뒀습니다. 기기를 옮길 때는 8자리 "이어가기 코드"를 쓰면 됩니다 — 아이도 옮겨 적을 수 있는 가장 짧은 모양이고, 7일이 지나면 자동으로 지워집니다. 계정은 필수가 아니라 원하는 사람의 선택지입니다.

덜 받았더니 검수가 줄었다

예상 못 한 보너스였습니다. 소셜 로그인은 보통 제공자마다 검수가 있는데, 저희는 네이버 하나만 받았습니다. 카카오는 이메일을 요청하면 비즈니스 앱 전환이 걸리고, 구글은 이메일이 민감 범위라 검수가 붙습니다 — 이메일을 안 받기로 한 덕에 둘 다 없었습니다. 다음에 "이메일도 받자"는 말이 나오면 이 값을 다시 계산해야 합니다.

로그아웃과 탈퇴는 즉시

쿠키에는 서버의 세션을 가리키는 임의의 열쇠 하나만 담습니다. 내용을 담아 서명하는 토큰 방식도 있지만, 그러면 로그아웃과 탈퇴가 "만료를 기다리는 일"이 됩니다. 표로 두면 줄을 지우는 순간 즉시 끊깁니다. 탈퇴는 지운 표시만 남기는 게 아니라 실제로 지웁니다 — 가진 게 해시와 닉네임뿐이라 망설일 이유가 없습니다.

계정에 진행도 따라간다

공개 며칠 뒤 이런 제보가 왔습니다. "카카오톡 브라우저에서 하다 사파리로 옮겼더니 같은 아이디인데 업적이 안 이어진다." 로그인 쿠키는 도메인을 타고 넘어가는데, 진행은 브라우저 안에만 있었습니다. 그래서 달린 거리·최고 기록·열린 코스튬을 계정에도 보관하고, 서버는 그것을 합칠 때만 들여다봅니다 — 거리와 기록은 큰 쪽, 해낸 일은 합집합. 그래야 새 브라우저의 빈 진행이 계정의 기록을 덮어쓰는 사고가 안 납니다.

방문 통계도 직접 센다

가입자 수, 방문자, 체류 시간 정도는 알고 싶었습니다. 외부 분석 도구를 붙이면 한 줄이면 되지만, 그러면 방문자 데이터를 밖으로 보내게 됩니다. 계정 원칙과 결이 안 맞았습니다. 그래서 첫 방문 카운터를 직접 만들었습니다. 접속 IP는 그날 날짜와 비밀값을 섞어 해시해서만 남깁니다. 그래서 "그날 다녀간 사람 수"는 셀 수 있어도, 그 사람이 누구인지나 다른 날에도 왔는지는 저희도 알 수 없습니다 — 날짜가 바뀌면 해시가 통째로 바뀝니다. 광고나 재식별 목적으로는 쓸 수 없게 설계했습니다.

개인정보처리방침은 이 코드를 보고 썼습니다. 계정 쪽 코드를 고치면 그 페이지도 같이 고칩니다 — 문서와 코드가 어긋나면 검수에서 오히려 더 나쁩니다.