서브 도메인을 활용한 쿠키 공유
들어가며
구글에는 수많은 서비스가 있습니다. 검색, 유튜브, 메일... 전부 기억하기 힘들 만큼이나 많습니다. 하지만 여러분들은 구글 서비스를 이용하며 로그인을 해본 기억이 그리 많지는 않을 것입니다. 과연 구글은 어떻게 사용자가 로그인을 하지 않고도 서로 다른 도메인 간 로그인을 유지시킬 수 있었을까요? 이번 포스트를 통해 이에 대하여 추측해 보겠습니다.
본론
우선 공식 문서를 통해 힌트를 얻어 보겠습니다. 기본적으로 저희는 구글에서 계속 로그인 상태를 유지하고 싶습니다. 하지만 그렇지 못하는 경우에 대해 구글은 '쿠키' 사용 설정을 확인해 보라 알려줍니다. 이를 통해 구글은 로그인 유지에 '쿠키'를 활용한다는 것을 알 수 있습니다.
스택오버플로우의 글에서는 아래와 같이 도메인 단위의 쿠키 저장이 가능함을 이야기합니다.
Set-Cookie: name=value; domain=example.com
위 글을 통해 과정을 추측해 보면, 쿠키는 다음과 같이 설정할 수 있습니다.
Set-Cookie: name=value
이렇게 되면 요청된 도메인에만 쿠키가 저장될 것입니다. 그리고 정확하게 일치하는 도메인의 요청에만 보낼 것입니다. 다른 서브도메인은 소용이 없게 됩니다. 두 개의 다른 도메인은 헤더에 domain 속성이 있을 때에만 공유될 수 있습니다.
Set-Cookie: name=value; domain=example.com
domain 속성은 유효하기 위해 요청 URL에 domain-match가 되어야만 합니다. domain-match란 기본적으로 요청 도메인이거나(스스로를 부르거나), 부모 도메인이어야 함을 의미합니다.
다만, 구글 포토에서 쿠키 스토리지를 열어보았을 때 아래와 같은 목록이 나옵니다.
이에 대해 추측건대,domain=example.com 의 형식과 일치하지 않는 것으로 보입니다.
따라서 새로운 가설을 세워봅니다.
가설1. 서브도메인끼리 연결시키는, 혹은 상호 연결시키는 로직이 있을 것이다.
가설2. 모든 서비스에서 accounts.google.com 을 바라보고 로그인 정보를 전달받을 것이다.
위와 같이 네이버도 naver.com으로 접속했음에도 다른 도메인의 쿠키가 딸려옵니다.
제가 개발한 위믹스 챔피언십의 경우에도 내부에 youtube.com의 쿠키를 가져오고 있습니다.
이를 통해 이전보다 구체적인 가설을 세울 수 있습니다.
- 나는 위믹스 챔피언십을 개발하며 youtube.com 의 쿠키를 직접 호출한 적이 없다.
- 다만 iframe으로 youtube 영상을 재생하고 있다.
- iframe을 통해 해당 도메인이 한 브라우저 창 내에서 공유될 수 있는 것인가.
가설 검증을 위해 다시 구글 포토로 들어가서 확인을 해보았습니다.
놀랍게도 구글 포토 사이트 내에 iframe을 통해 accounts.google.com의 세션을 유지하고 있었습니다. 이렇게 한 브라우저 창 내에서 여러 도메인의 세션을 유지하며 구글은 로그인을 유지할 수 있었던 것입니다.
마치며
오늘은 이처럼 구글이 서로 다른 서비스(도메인)에서 로그인을 유지하는 방법에 대해 추측하는 가설을 세워보았습니다. 여러 가지 서비스를 하나의 계정을 통해, 나아가 한 번의 로그인을 통해 이용할 수 있는 것은 좋은 유저 경험을 선사할 수 있다고 생각합니다. 기술을 통해 유저에게 좋은 경험을 준다는 것은 개발자의 큰 기쁨 아닐까요? 이번 가설의 본질을 토대로 좋은 유저 경험을 기술을 통해 만들 수 있는 방법에 대해 생각해 볼 수 있었습니다.
이 글은 pxd XE Group Blog에서도 보실 수 있습니다.