우리 프로젝트는 프론트엔드(예: vsgg.co.kr)와 백엔드(api.vsgg.co.kr)가 각기 다른 도메인으로 동작하고 있었습니다. 게다가 비용 절약을 핑계로(…라고 쓰고 ‘프리티어 쫒기 생활’이라고 읽는다), 프론트엔드는 한 AWS 계정, 백엔드는 또 다른 AWS 계정에서 관리하고 있었죠.
한마디로, "두 집 살림"을 하고 있던 셈입니다.
간헐적으로 api.vsgg.co.kr에 요청을 보낼 때 500 에러가 발생하면서, "이상하다, 왜 가끔 우리 집(서버) 문을 안 열어주지?" 라는 상황이 벌어졌습니다.
손님(사용자)이 왔는데 문전박대(500 에러)를 당하면 기분이 참 찜찜하죠.
DNS 확인
nslookup으로 api.vsgg.co.kr를 조회했더니 두 개의 IP가 친절히(?) 반환되더군요.
처음엔 "아, 도메인 설정에 실수했나 보다" 하고 수정을 해도, 여전히 2개의 IP를 뿜어내는 DNS 레코드!
"뭐지? 얘네 혹시 이중인격 DNS?" 라며 의아해했습니다.
결국 "아, 이건 내가 원하는 결과가 아니지만, 적어도 얘 탓은 아니겠군" 하고 넘어갔습니다.
도메인 설정 검토
조사해보니 문제는 하나의 도메인에 대해 두 개의 AWS Route 53 계정이 NS 레코드를 모두 잡고 있는 것이 원인이었습니다.
이건 마치 한 아이를 두 집이 동시에 키우는 것 같은 상황인데요, DNS 요청이 "어느 집으로 가야 하지?"라며 갈팡질팡하다가 "에이, 모르겠다!" 하며 500 에러를 던지는 모습이 그려집니다.
서브 도메인을 사용할 때, 절대 두 집 살림(두 계정 Route 53 관리) 하시면 안 됩니다!
하나의 도메인에 대해 NS 레코드를 한곳에서 관리해야 DNS가 길을 잃지 않고(사용자에게 500 에러를 던지지 않고) 제대로 응답한다는 교훈을 얻었습니다.