개발자 전용 서버(192.168.0.202~204)가 있다고 뭘 해도 되는 건 아니다. 해도 되는 것과 하면 안 되는 것. 그 경계선을 명확히 긋는다.
각 개발자에게 할당된 서버는 Proxmox(192.168.0.104) 위의 가상 머신(VM)이다. Chris(202), Lucy(203), Evan(204). 이 서버들의 목적은 단 하나 — 개인 개발과 테스트다.
운영 서비스를 올리는 공간이 아니다. 인프라를 실험하는 공간도 아니다. Docker 컨테이너를 띄우고, API를 테스트하고, 코드를 빌드하는 곳이다. 그 이상은 인프라 서버의 영역이다.
Docker 컨테이너 실행, 로컬 DB 구동, 개발 서버 기동. 모든 개발 작업의 기본.
단위 테스트, 통합 테스트, API 호출 검증. 운영 데이터가 아닌 테스트 데이터로만 작업한다.
프로젝트 빌드, 패키지 생성, CI/CD 전 로컬 검증. GitLab CI가 처리하기 전 사전 확인용이다.
핵심은 인프라 계층을 건드리지 않는 것이다. 리버스 프록시, SSL, 서비스 디스커버리는 인프라 서버의 역할이다. 개발자 서버에서 이 영역을 침범하면 전체 인프라에 영향을 줄 수 있다.
개발 중인 서비스를 외부에 노출하기 위해 자체 Traefik을 설치했다. 도메인도 붙이고 SSL도 직접 발급했다. 처음에는 작동하는 것처럼 보인다.
그러나 다음 문제가 발생한다.
이중 라우팅 경로가 생성된다
중앙 Traefik(230)과 Evan의 Traefik(204)이 동시에 동일 도메인의 요청을 처리하려 할 수 있다. DNS 설정에 따라 트래픽이 어디로 흐를지 예측할 수 없다. 디버깅이 극도로 어려워진다.
서비스 디스커버리가 꼬인다
두 Traefik이 동일한 Consul 클러스터(233~235)를 바라보면, 각각 다른 라우팅 규칙을 적용할 수 있다. 서비스 A는 중앙 Traefik을 타고, 서비스 B는 Evan의 Traefik을 타는 상황이 발생한다. 예측 불가능한 동작이다.
Let's Encrypt Rate Limit 초과 위험
중앙 Traefik이 이미 해당 도메인의 인증서를 관리하고 있는데, Evan의 Traefik도 같은 도메인의 인증서를 요청한다. Let's Encrypt는 동일 도메인에 대해 주당 50개의 인증서 발급 제한이 있다. 갱신 주기가 꼬이면 인증서 만료로 서비스가 중단될 수 있다.
"내 서버니까 괜찮겠지"가
인프라 장애의 시작이다.
개발 중인 서비스를 외부에 노출하려면, 개발자 서버에 프록시를 설치하는 것이 아니라 중앙 Traefik(230)에 라우팅 규칙을 추가해야 한다.
1단계. 개발자 서버에서 서비스를 원하는 포트로 실행한다. 예: 192.168.0.204:8080
2단계. 인프라 관리자에게 Traefik 라우팅 추가를 요청한다. 원하는 도메인과 포트를 전달한다.
3단계. 중앙 Traefik이 evan-app.yourdomain.com → 192.168.0.204:8080 라우팅을 설정한다.
4단계. SSL 인증서가 자동 발급되고, 접근 제어 정책이 일괄 적용된다.
이 방식의 장점은 명확하다. SSL 인증서 관리가 한 곳에서 이루어지고, 접근 제어 정책이 일관되며, 트래픽 흐름이 예측 가능하다. 개발자는 서비스 개발에만 집중하면 된다.
새 서버를 할당받았거나, 기존 서버에서 작업을 시작할 때 아래 체크리스트를 확인한다.
git remote가 사내 GitLab을 가리키는지 확인한다할 수 있는 것은 최대한 자유롭게, 하면 안 되는 것은 명확하게. 그 경계가 인프라의 안정성을 만든다.