온라인 협업 도구 노션(Notion) 장애와 DNS 문제 대응

2월 12일 밤 온라인 협업 도구 노션(Notion) 장애

노션Notion은 노션 랩Notion Labs에서 개발하고 서비스하는 노트, 업무, 할 일 관리, 데이터베이스 등의 기능을 지원하는 온라인 올인원 협업 도구입니다. 기업가치는 2020년 4월 기준 2조 이상의 가치로 평가 되고 있습니다. 한국에서도 당근마켓과 지그재그 등 스타트업에서 업무용으로 활용하고 있으며, 홈페이지 및 채용 페이지를 빠르게 구축하는 용도로도 인기를 얻고 있습니다.

노션은 미국 동부표준시 2021년 2월 13일 9시(한국 시간 2월 12일 오후 10시)부터 2시간 이상 DNS로 인한 장애를 겪었습니다. 트위터 NotionSatuts 계정의 첫 장애 보고는 한국 시간 기준 10시 33분이지만, 실제로는 10-20분 전부터 장애가 발생하고 있었던 것으로 보입니다. 장애가 발생하는 동안 구글Google의 퍼블릭 DNS 서비스(8.8.8.8)클라우드플레어Cloudflare의 퍼블릭 DNS 서비스(1.1.1.1) 등에서 노션의 홈페이지 및 API 서버를 포함하는 도메인 notion.so에 nslookup으로 포워드 룩업을 해보면 NXDOMAIN 에러를 반환했습니다.

notion.so 도메인을 nslookup으로 조회한 결과

NXDOMAIN은 도메인에 대해서 등록된 IP 정보가 없다는 에러입니다. 8.8.8.8이나 1.1.1.1과 같은 가장 보편적인 DNS 서버에서 NXDOMAIN을 반환한다는 것은 전세계 사용자들이 전면적으로 노션 서비스를 이용할 수 없다는 것을 의미합니다. 실제로 단순히 서버 응답이 느리거나 일부 기능이 문제가 생긴 것이 아니라 장애 시간 동안 완전히 서비스를 접근할 수 없었습니다.

장애 상황 동안 트위터 NotionStatus 계정에서는 name.com의 담당자 연락처를 묻는 트윗이 올라오는 등 장애 대응이 원활하지 않았던 것으로 보입니다. 현재 이 트윗은 삭제되었습니다.

NotionStatus: Do any users have a contact at name.com?

또한 노션에서 제공하는 공식 상태 정보 사이트의 도메인은 status.notion.so으로 장애 시간 동안 마찬가지로 접근이 불가능했습니다.

장애가 진행되는 동안 트위터 쓰레드에서는 1시간 후에 중간고사가 예정되어있는데 모든 노트가 노션에 있다거나, 예정되어있던 회의가 취소되었다거나, 컴퓨터에서 직접 hosts 파일을 수정해서 notion.so 도메인에 대한 IP 정보를 등록해서 사용해보라는 등의 이야기가 있었으며, 해커뉴스에서도 당시 문제에 대한 논의가 이루어졌습니다.

현재 status.notion.so에 DNS 이슈에 대한 문제가 기록되어있지만 정확한 장애 원인은 공개되어있지 않습니다. 상태 페이지에 따르면 이번 장애는 한국 시간 10시 24분부터 발생해 2월 13일 오전 1시 15분 쯤 완전히 해결된 것으로 보입니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

노션 장애 원인과 DNS 장애 대응

노션 장애 원인에 대해서는 아직 정확히 알려진 것은 없습니다. 정확한 원인에 대해서는 노션의 공지를 기다려야할 것으로 보입니다.

현재 확인된 바에 따르면 장애 시간 중에 whois에서 조회한 notion.so 도메인의 상태가 ClientHold로 변경되었던 것으로 보입니다. 도메인 관리의 최상단에 있는 비영리 기관 ICANN에서 제공하는 명세에 따르면, ClientHold 상태는 최상위 도메인을 관리하는 레지스트리 기관(노션의 경우 .so)에 도메인에 대한 DNS 정보를 비활성화하라는 의미로 법적 분쟁, 미지불, 도메인 삭제가 예정되어있는 경우에 이 상태가 된다고 합니다. 이 경우 ClientHold 상태가 해결될 때까지 도메인을 사용할 수 없습니다.

ClientHold: This status code tells your domain’s registry to not activate your domain in the DNS and as a consequence, it will not resolve. It is an uncommon status that is usually enacted during legal disputes, non-payment, or when your domain is subject to deletion. EPP Status Codes | What Do They Mean, and Why Should I Know? - ICANN

ClientHold가 발생한 이유는 현재 불명확합니다만, 노션에서 사용하는 레지스트라(도메인을 레지스트리에 등록하는 대리 기관) name.com에서 도메인을 ClientHold 상태로 만든 것으로 보이며, 국가 최상위 도메인 ccTLD .so를 관리하는 소말리아 네트워크 인포메이션 센터Somali Network Information Center에서 이를 근거로 notion.so의 사용을 중지시킨 것으로 보입니다.* 도메인 조회의 경우 각 로컬 캐시나 ISP, 구글, CDN 업체 등에서 운영하는 퍼블릭 DNS 서버에서 요청을 해서 서버의 IP를 얻어오게 됩니다(포워드 룩업). 이 때 ISP나 퍼블릭 DNS에서는 차례대로 루트 네임 서버, TLD 서버, 개별 도메인 네임서버를 룩업하는 과정을 진행합니다. 즉, 도메인 룩업 과정에서 .so의 TLD 서버에서 하위 네임서버 정보를 제대로 내려주지 않았거나 임의의 정보를 반환한 것으로 추측됩니다.

* ClientHold 상태에 대한 일반적인 정보나 대응에 대해서는 Route 53의 문서가 도움이 됩니다: My domain is suspended (status is ClientHold) - Amazon Route 53

HackerNews의 코멘트에 따르면 ClientHold 상태 정보는 12시 11분에 삭제되었으며, 12시 40분 경에 ok 상태로 변경되었다고 합니다.

단, whois 정보가 업데이트되더라도, DNS 조회의 경우 로컬 캐시나 퍼블릭 DNS 서버의 캐시가 많이 활용되며 네임서버에 업데이트 한 정보가 전세계의 DNS 서버로 전파되는 데는 상당한 시간이 걸립니다. 특히 도메인 레코드가 아닌 네임서버 정보나 도메인 소유 정보와 같은 레지스트리에서 관리하는 정보를 업데이트하는 경우에는 더 오랜 시간이 걸릴 수 있습니다. 전세계의 주요한 DNS 서버에 대한 전파 정보는 DNSChecker나 whatsmydns.net 등의 서비스를 통해서 확인해볼 수 있습니다.*

* 일반적으로 한 시간 안에 전파가 이루어지지만, 이것도 전 세계의 모든 DNS 서버를 커버하는 것은 아니기 때문에 실제로 변경한 정보가 완전히 전파되는 것을 보장할 수는 없습니다. 일반적으로 도메인 등록 업체에서는 레지스트리 정보 변경의 반영을 하루 이상 최대 48시간 정도를 기다려야한다고 이야기합니다.

whatsmydns.net에서 DNS 서버들에서 조회되는 정보를 확인 가능합니다

그 외에 도메인 만료나 .so의 도메인 만료 정책이 다른 도메인과 달라서 생긴 문제라는 의견도 있었지만, 노션에서는 NotionStatus에서 도메인 만료 이슈는 아니라고 밝혔습니다.

We’re seeing a number of folks asking whether this issue occurred because we didn’t renew our domain or because the .so domain was reclaimed. Neither of these were responsible. This was a very unusual DNS issue, and we’re putting protocols in place to avoid it in the future. NotionStatus

트위터 NotionHQ 계정에도 비슷한 취지의 트윗이 올라왔는데, 특정 노션 페이지(a Notion page) 때문에 발생한 문제라고 이야기하고 있습니다. 레지스트리나 레지스트라에서 어떤 이유로 차단해버렸을 가능성이 있어보입니다.

Hey there 👋 Just letting you know that this was not an issue with a lapsed renewal. There was a complaint against a Notion page that we resolved with the registrar - we are back up now! NotionHQ

DNS 서버 장애의 경우 서버 관리자가 직접 대응할 수 있는 일이 많지 않습니다. 특히 이번 사례와 같이 TLD 레지스트리나 레지스트라와 같은 레이어에서 문제가 발생하는 경우 전면 장애로 이어질 뿐만 아니라, 원인 파악이나 대응이 더욱 어렵다는 것을 잘 보여주는 사례로 보입니다. 또한 최근에는 국가와 무관하게 .so(소말리아 최상위 도메인)이나 .io(영국령 인도양 지역의 최상위 도메인) 등을 서비스용 도메인으로 사용하는 경우가 많아졌습니다만, 인터넷의 도메인 시스템이 각 TLD 도메인의 레지스트리에 의존적이기 때문에 언제든 예상치 문제가 발생할 수 있을 것으로 보입니다.*

* 이는 .so나 .io 단순히 도메인만의 문제는 아니며, 모든 레지스트리에서 발생할 수 있는 문제로 보입니다. 이런 경우 단순 관리자의 실수의 경우에도 대응에 시간이 걸릴 수 있으므로, 사업이 커지고 도메인이 중요해질수록 이러한 문제에 대응할 방법이나 컨택포인트를 마련해두어야할 것으로 보입니다.

노션은 왜 .so 도메인을 사용했을까?

그렇다면 노션은 왜 소말리아 최상위 국가 도메인 .so 도메인을 사용했을까요? 여기에 대해서는 레딧Reddit에서 노션 팀의 답변을 확인해볼 수 있습니다.

NotionDavid: Oof, sorry about this 😓We chose .so when we were starting out (lots of other companies named Notion, and .so was available). Does it help that we own notion.com now? Automatic redirect for now, but we’ll be switching to .com as soon as our engineering team has the bandwidth. Why the .so domain? : r/Notion

notion이 일반 명사다 보니 notion.so가 남아있어서 선택했고, 특별한 이유는 없는 것 같네요 😅. 현재는 notion.com을 소유하고 있고 리다이렉트용으로만 사용하고 있는 것으로 보입니다. 이전 계획도 있는 것 같지만 아직 작업을 시작하진 못 한 것 같습니다.

일반적으로 도메인 등록할 때 깊게 살펴보는 경우는 드물지만, 국가 도메인의 경우 국가 별로 국가 최상위 도메인 관련 정책이 서로 다를 수 있기 때문에 프로덕션 서비스의 경우 주의가 필요할 것으로 보입니다. 아래 문서는 .so 도메인 정책 문서와 .kr.한국 도메인의 분쟁조정제도 문서입니다.

클럽하우스 장애 대응방

클럽하우스 - Notion DNS 장애 논의 방

마침 저녁에 노션 장애가 발생했고, 장애 시점에 트위터에서 아웃사이더 님과 이야기하다가 빨리 끝날 장애가 아닌 것으로 보여서 클럽하우스에 방을 만들어서 이번 장애에 대해서 함께 이야기 나눴습니다. 어느 레이어의 문제인지, 어떻게 대응할지에 대해서 이야기 나누며 문제를 좀 더 구체화할 수 있었고, 이 글도 이 방에서 대화를 나눈 덕에 정리해볼 수 있었습니다. 서비스 장애가 생기면 대응을 해야하는 입장에 있다보니, 노션 엔지니어 분들의 노고에 대해서 너무 절실히 이해하고 감사하는 마음입니다. 아웃사이더 님마법사 님(aka asbubam)을 비롯한 같이 이야기 나눈 분들도 모두 감사하고, 많이 배웠습니다. 🙇*

* 클럽하우스 대화에 휘발성이 있어서, 허락받지 않은 다른 분들 이름은 언급하지 않았습니다.

함께 읽으면 도움이 되는 자료