머리아픈 클라우드플레어와 망사용료
게시판을 만들다가
게시판을 만드는데 유난히 게시글을 불러오는 속도가 느렸다.
아무리 생각해도 쿼리 문제는 아닌 것 같았다. 지금 더미데이터 10개밖에 없는데 쿼리 문제 나기도 힘들다. 혹시나 네트워크 쪽에서 문제가 있나 싶어서 크롬 탭을 열어봤다.
확인해보니 단순히 글 하나 불러오는데 500ms ~ 1s까지 걸리고 있었다. 무엇이 문제인지 한번 조사해봤다.
왜 느린가?
결론부터 요약하자면 망사용료 때문에 한국 서버는 엔터프라이즈 계약 단위로만 사용 가능하고 나머지 트래픽은 전부 해외로 보내버린다.
한국 <-> 미국
클라우드플레어 페이지를 이용해서 프론트를 별도로 운영중인데, 난 당연히 한국 아니면 일본 정도의 서버겠거니 추측만 하고 있었다. 그런데 확인해보니 뭔 나성이 찍히고 있다.
이러면 문제가 될 수 밖에 없는게 내 api 서버들은 전부 서울리전을 사용중이다. 트래픽이 뺑뺑이를 돌고 있으니 서버에서 빠르게 처리해도 응답 지연이 생길 수 밖에 없었다.
서울에 서버 없나?
클라우드플레어 홈페이지 가면 서울에 존재한다고 나온다.
왜 실컷 지어놓고 다른데로 뺑이치나 봤더니 망사용료 때문이라고 한다. 클라우드플레어측의 주장에 따르면 한국 망사용료가 일반적인 케이스들에 비해 20~30배 가량 더 비싸서, 기업 단위 계약 고객이 아니면 다 해외로 돌린다고 한다.
실제로 클라우드플레어를 사용중인 업비트에 접속해서 확인해보면 서울 리전이 찍히는 것을 확인할 수 있다.
대책
도메인 이관 or 이전
aws route 53으로 이사갈까 했더니 이게 생각보다 쉽지 않다. 네임서버를 aws에서 발급한걸로 돌려놓아야 하는데 클라우드플레어에서 해당 작업을 하려면 요금제를 올리랜다.
다른 방법으로는 도메인 소유권을 이관하면 된다는데, 이게 절차도 복잡하고 기간도 얼마 소요되는지 정확히 추측이 안되서 운영중인 서비스에서는 너무 위험부담이 큰 작업 같았다.
그래서 신규 도메인을 구입할까 했는데, 이러면 유저 피로도가 너무 올라갈 것 같았다. 내 서비스가 유구한 도메인 변경의 역사를 가지고 있어서, 이번에 바꾸면 4번째 도메인 변경이다. 무슨 사설 토토사이트인줄 알겠다.
그리고 도메인 변경을 여러번 겪으면서 깨달은 노하우가 있는데, 생각보다 신규 도메인으로 정착하는 속도가 한참 걸린다. 그래서 반 강제적으로 기존 도메인 주소를 1년정도는 내가 계속 들고서 리다이렉트를 시켜줘야 하는데, 지금도 리다이렉트중인 주소가 있어서 도저히 도메인을 건드릴 엄두는 나지 않았다.
api 서버 미국행
다른 방법 하나는 api 서버도 다같이 미국으로 보내주는 것이다.
마이크로소프트 azure쪽에 크레딧 있는게 있어서 임시로 미국 서버를 생성해봤다. East US랑 West US가 있던데 별다른 설명이 없길래 서쪽으로 만들고 테스트를 진행해봤다.
조건을 비슷하게 맞추기 위해 같은 공지사항 내용을 조회하는 방식으로 진행했다.
현재 운영되고 있는 서울 리전 api 서비스다. 각각 300ms, 1s 정도 소요되었다.
미국으로 물건너간 개발 서버다. 각각 170ms, 350ms 쯤 소요되었다. 확실히 단축되는 모습을 보였다.
결론
계속 고민중이다.
미국으로 서버 이사 보내면 깔끔하긴 한데 클라우드플레어가 계속 미국으로만 트래픽을 돌릴지도 미지수고, ec2부터 lambda까지 다 미국으로 보내는 작업에 투입되는 리소스가 어느정도일지도 모르겠고, 그만큼의 이득을 얻을 수 있는지도 모르겠고, 머리가 아프다.
내용 추가
04.07
고민을 많이 했는데, 서버 리전을 다 옮기자니 도저히 엄두가 안났다. 어차피 사용을 못할정도로 느린건 아니니까 약간의 눈속임을 할 UI가 없나 한번 찾아봤는데, ‘스켈레톤 로더’라고 데이터 로딩 전에 미리 뼈대만 세우는 컴포넌트가 있길래 이걸로 대체하기로 했다. 중간 로딩 과정에 그래도 좀 덜 심심한 UI가 완성된 것 같다.
04.09
axios 캐싱을 적용했다.
LRU 방식이고 100개 정도를 캐싱한다는데 댓글이 추가되면 충분한 사이즈인지는 모르겠다. 커스텀을 해봐야겠다.
04.13
클라우드플레어 페이지로 제작한 사이트는 서울 리전 사용이 된다더라. dns 프록시 설정을 껐더니 서울로 잡히는 것을 확인했다. 확실히 빨라졌다.
문제는 api 서버들인데, 얘네는 여전히 미국 투어중이다. 인증서를 클라우드플레어에서 전부 발급했는데, 이게 클라우드플레어 중간에 안끼고 사용하니까 전부 유효성 문제 때문에 경고문구가 뜬다. lets encrypt 직접 구동시켜서 주기적으로 발급할지, 그냥 냅둘지 고민이다. 네트워크 지연이 너무 심하다고 느껴지면 그때 다시 한번 생각해봐야겠다.
참고
- 내 경험
- https://www.youtube.com/watch?v=yoON08qQBY4
- https://www.cloudflare.com/ko-kr/network/
- https://upbit.com/home