예~~~전에 필자가 아주 어릴때 일이다. 리눅스 위에서 소켓 프로그래밍을 배우려고 하고 있었다. 그 당시만 해도 가상화 시스템이 변변치 않아서 리눅스 가상 서버 호스팅을 받으려고 했었다.
해당 서버에서는 두가지만 됐으면 문제 없었다. 첫번째는 C로 작성된 몇백줄 짜리 코드가 컴파일되고 실행되는것이며, 두번째는 간단한 내 홈페이지를 돌리는 것이다. 그래서, 굳이 외부 IP를 선택할 필요가 없었다. 그래서 내부 IP를 주는 대신에 값 싼 서버 호스팅을 선택하였다.
그 당시 그런류에 있어서 유명했던 호스팅 업체가 J**였다가, 업체명과 사장님(사이트 하단의 책임자 이름 기준)이 바뀌면서 F****으로 바뀐 호스팅 업체로, 나름 검색하면 좋은 글이 많았었다.
평가와 별개로, 굳이 비싼 서버를 쓸 필요가 없었기 때문에 해당 서버 호스팅을 결제하고 세팅을 하기 시작했다. 개발은 일단 뒤에 하고 원래 있던 PHP로 되어있던 웹 서비스를 옮기기 시작했다.
이 서버 호스팅은 공인 IP를 제공하지 않아서, 서버 내부에 Nginx와 같은 웹서버를 열어두면 겉(Host)에 있는 Reverse Proxy가 연결을 중계하는 방식으로 작동했다. 즉, Host의 Reverse Proxy를 거쳐야지 내 서버로 접속이 가능한 구조이다.
Host의 Reverse Proxy에 도메인을 추가하기 위해서는 해당 사이트의 관리 페이지에서 일일이 도메인을 등록했어야 했다. 그때 가지고 있던 서브 도메인이 10개 조금 넘었고, 추후 동적으로 도메인을 연결할 수도 있는 상황이었다. 그래서 몇몇 중요한 도메인(blog.esukmean.com)들만 직접 추가하고 나머지는 *.esukmean.com
으로 등록하려 시도 했었다.
해당 시스템에 *.esukmean.com
을 등록하고 몇시간이 지나서 서버에 접속되지 않는다는 모니터링 경고가 왔다. 그래서 해당 업체 게시판에 서버 접속이 왜 안되는지 문의를 넣었었다. 그랬더니 자기네 사이트에 공격을 해서 차단을 했다는 답변이 왔다.
난 딱히 공격을 한 것도 없는데, 뭔 공격이냐고 물어보니까 어떠한 방법을 이용해서 자기네 사이트에 무한 요청을 때리고 있으며, 이로 인해서 서버 프로그램이 폭주했다고 답변이 왔다. 그래서 살펴보니까 내 도메인으로 인해 서비스가 마비됐다는것이다.
즉, 자기네 프로그램에서 *.esukmean.com
을 입력했더니 a.esukmean.com
부터 zzzzzzz.esukmean.com
까지 직접 처리하는 로직을 탔고, 그로 인해 과부하가 걸렸다는 것이다. 그리고 이 원인을 몰라서 HTTP 무한 요청을 때리고 있다고 판단했단 것이다.
*
가 있는지 확인하는 최소한의 검증 로직만 있었어도 문제 없었고, 어딘가에 설명만 해 놨어도 안일어났을 일인데 그걸 안해서 문제가 생긴것이다. 또한 그 근본 이유가 프로그램의 버그 때문에 발생한 것인데 몇시간 동안 서버 정지까지 됐었다. 서버가 죽어서 상당히 당황스러웠고 따로 확인도 없이 그런 조치를 취한것에 짜증이 났었다.
*
가 있는지 확인하는 최소한의 검증 로직만 있었어도 문제 없었고, 어딘가에 설명만 해 놨어도 안일어났을 일인데 그걸 안해서 문제가 생긴것이다. 또한 그 근본 이유가 프로그램의 버그 때문에 발생한 것인데 몇시간 동안 서버 정지까지 됐었다. 서버가 죽어서 상당히 당황스러웠고 따로 확인도 없이 그런 조치를 취한것에 짜증이 났었다.
결과적으로, 해당 서비스는 그 달만 쓰고 취소했다. 이미 앞선 일로 짜증이 난 상태에서 환불 요청하기도 뭣했다. 그냥 거들더 보지도 않고 다른 서버로 옮겼다. 서버의 가장 중요한 부분이 안정성인데, 해당 호스팅 사에서는 불가능 할거란 생각이 들었기 때문이다.
암튼, 이것의 교훈은 서버 단에서 필요한 값 검증을 반드시 해야 한다는 점 일 것이다. *
(asterisk) 하나 넣었다고 서버가 폭주하면 문제가 있는것 아닌가.. 또한 단순한 로직을 괜히 복잡하게 해서 스스로 취약점을 만드는 일은 없게하자는 것. *
를 처리하는 로직이 분명 있었으니 관련해서 문제가 나온것일 테다.
서버는 이왕이면 좋은데 쓰자. 안정성이 가장 중요하다. 이번에 HN 보니까 구글의 일부 상품군이 폐지되면서 GCP의 안정성 또한 믿지 못하겠다는 말이 있다. 서버는 안정성이 최우선 돼야하기 때문에, 분명 나올수 있는 말이다. 몇달 쓰다가 갑자기 서버가 사라져서 장애가 발생한다면 아낀 돈 보다 더 많은 것을 잃을 수도 있다.
그냥 주변에서 값 싼 호스팅을 찾기에 떠올라서 글을 써 보았다. 값 싼 서버를 찾고싶으면 믿을 수 있는 Azure나 AWS, OCI에 카드 등록해서 free tier 요금제로 어느정도 쓰자.
답글 남기기