[개발일지] 1인 개발자의 서버 요금 폭탄 방어기 (인프라 이주 트러블슈팅)
안녕하세요!
게이머들을 위한 커뮤니티, '겜허브(GamerHub)'를 열심히 개발하고 있는 1인 풀스택 개발자입니다.
하지만 서버비 걱정 좀 덜어보려다 시작한 이 공사에서, 진짜 피눈물 나는 네트워크 삽질(?)을 겪었습니다.
저와 같은 1인 개발자분들께 위로와 참고가 되길 바라며 험난했던 트러블슈팅 과정을 공유해 봅니다 ㅠㅠ
[고난 1: 522, 523 타임아웃 지옥과 내부 방화벽의 배신]
프론트엔드 라우팅을 마치고 오라클 API 서버로 연결을 시도했는데, 522와 523 타임아웃 에러가 번갈아 터졌습니다.
오라클 클라우드 외부 방화벽(Security List)에서 80과 443 포트를 모두 개방했는데도 서버가 응답을 거부하더군요.
원인을 파헤쳐 보니 서버 내부의 iptables 규칙이 문제였습니다. 기본 설정이 외부 HTTPS(443 포트) 접근을 강제로 쳐내고(REJECT) 있었던 거죠.
결국 터미널에서 강제로 ACCEPT 규칙을 최상단에 꽂아 넣고 나서야 겨우 통신 억까를 뚫어냈습니다
[고난 2: Cloudflare Tunnel 도입과 도커(Docker)의 반항]
방화벽과 씨름하다 지쳐서, 아예 포트 포워딩 없이 안전하게 통신할 수 있는 'Cloudflare Tunnel'을 뚫기로 전략을 바꿨습니다.
그런데 이번엔 502 Bad Gateway가 저를 반기더군요.
로그를 까보니, 도커로 띄운 터널 컨테이너(cloudflared)가 같은 서버 안에 있는 백엔드 컨테이너(gamehub-app)를 찾지 못해 길을 잃은 상태였습니다.
결국 기존에 산발적으로 띄웠던 컨테이너들을 싹 밀어버리고, docker-compose.yml 하나에 백엔드, Redis, 터널 컨테이너까지 동일한 네트워크망(gamehub_backend)으로 묶어버리는 대공사를 거쳤습니다.
(이 과정에서 옛날 설정값을 물고 몰래 돌아가고 있던 고아 컨테이너도 색출해서 처형(?)했습니다 ㅋㅋㅋ
1인 개발은 코딩보다 인프라 환경 설정에 멘탈이 더 갈린다는 걸 뼈저리게 느낀 시간이었습니다.
그래도 숱한 에러를 뚫고 마침내 초록불(HEALTHY)이 들어오며 쾌적하게 렌더링되는 화면을 보니 속은 다 시원하네요!