server infra guide series — article 01

같은 네트워크,
제각각의 역할

192.168.0.x 대역, 하나의 물리 서버 위에 여러 VM이 올라간다. Proxmox가 가상 머신을 만들고, Traefik이 문을 지키고, Consul이 서로를 찾아주고, GitLab이 코드를 품는다. 개발자 서버는 필요할 때 생성된다.

Part I

전체 구성도

사내 인프라는 크게 인프라 서비스개발자 서버로 나뉜다. 인프라 서비스는 운영의 뼈대다. 가상화, 라우팅, 코드 저장소, 서비스 디스커버리, 분석 데이터베이스까지 각각 전용 VM에서 하나의 역할만 담당한다. 개발자 서버는 인원이 합류할 때마다 Proxmox에서 VM을 생성하여 할당하는 구조다.

이 구조를 이해하지 못하면 자기 서버에 Traefik을 설치하거나, Consul에 직접 서비스를 등록하거나, SSL 인증서를 중복 발급하는 실수를 저지르게 된다. 각 서비스가 어떻게 연결되어 있는지 먼저 파악해야 한다.

인프라 서버
192.168.0.104 Proxmox 가상화 플랫폼. 모든 VM의 호스트.
192.168.0.230 Traefik 리버스 프록시. 인프라의 관문.
192.168.0.231 Ax-Connect 사내 서비스 연동.
192.168.0.232 GitLab Private 코드 저장소.
192.168.0.233 ~ 235 Consul 01 / 02 / 03 서비스 디스커버리 클러스터.
192.168.0.236 ClickHouse 분석용 컬럼형 데이터베이스.
개발자 서버 (Proxmox에서 동적 할당)
192.168.0.202 Chris Private Server 개인 개발/테스트 환경.
192.168.0.203 Lucy Private Server 개인 개발/테스트 환경.
192.168.0.204 Evan Private Server 개인 개발/테스트 환경.
192.168.0.2xx +N 인원 합류 시 Proxmox에서 VM 생성 후 할당.
Part II

인프라 서버 — 각자의 역할

Proxmox 192.168.0.104
user: root
가상화 플랫폼이다. 물리 서버 위에서 가상 머신(VM)을 생성하고 관리한다. 인프라 서비스와 개발자 서버 모두 이 Proxmox 위에서 돌아가는 VM이다. 신규 인원이 합류하면 여기서 VM을 새로 만들어 개발자 서버를 할당한다. 개발자가 직접 접근할 일은 거의 없다. VM 생성, 스냅샷, 리소스 할당은 인프라 관리자의 영역이다.
Traefik 192.168.0.230
user: traefik
리버스 프록시이자 로드 밸런서다. 인프라의 관문(Gateway) 역할을 수행한다. 외부에서 들어오는 모든 요청은 이 서버를 거쳐 각 백엔드로 분배된다. SSL 인증서 자동 발급, 도메인 기반 라우팅, 미들웨어 처리를 담당한다. 이 서버가 멈추면 모든 서비스에 접근할 수 없다.
Ax-Connect 192.168.0.231
user: axconnect
사내 서비스 연동을 처리하는 서버다. 외부 API 연동, 내부 시스템 간 통신 허브 역할을 수행한다.
Private GitLab 192.168.0.232
user: gitlab
사내 코드 저장소다. 모든 프로젝트의 Git 리포지토리, CI/CD 파이프라인, 코드 리뷰가 이 서버에서 돌아간다. Traefik이 gitlab.yourdomain.com으로 들어오는 요청을 이 서버로 라우팅한다.
Consul 클러스터 192.168.0.233 ~ 235
user: consul
서비스 디스커버리 클러스터다. 3대로 구성된 고가용성(HA) 클러스터. 새로운 서비스가 뜨면 Consul에 자동 등록되고, Traefik이 이를 감지하여 라우팅 규칙을 자동 생성한다. 3대 중 1대가 죽어도 나머지 2대가 동작을 이어간다(Raft 합의 알고리즘).
ClickHouse 192.168.0.236
user: clickhouse
분석용 컬럼형 데이터베이스다. 로그 분석, 사용자 행동 분석, 실시간 집계 쿼리에 특화되어 있다. 일반 OLTP 데이터베이스(PostgreSQL, MySQL)와 다르게 대량 데이터의 집계 연산에서 압도적인 성능을 발휘한다.
Part III

서버 간 관계 — 트래픽은 이렇게 흐른다

서버들은 고립되어 있지 않다. Traefik이 모든 외부 요청을 받아 각 서버로 분배하고, Consul이 서비스의 위치를 알려주며, Proxmox가 모든 VM의 자원을 관리한다. 이 관계를 도식화하면 다음과 같다.

01

외부 요청 진입

사용자 또는 외부 시스템이 도메인으로 접속한다. 모든 요청은 Traefik(230)을 거친다.

02

라우팅 결정

Traefik이 도메인과 경로를 확인하고 Consul(233~235)에서 서비스 위치를 조회한다.

03

백엔드 전달

GitLab(232), Ax-Connect(231), 개발자 서버(202~204) 등 해당 서비스로 요청이 전달된다.

개발자 서버(202~204)도 이 흐름 안에 있다. 개발 중인 서비스를 외부에 노출하려면 Traefik에 라우팅 규칙을 추가해야 한다. 자기 서버에 별도 프록시를 설치하는 것이 아니다.

모든 트래픽은 하나의 문을 지난다.
그 문이 Traefik이다.

개발자가 반드시 알아야 할 것
  1. 인프라 서버(230~236)에 SSH 접속하거나 설정을 변경하지 않는다
  2. Proxmox(104)에 직접 접근하지 않는다 — VM 생성/변경은 인프라 관리자에게 요청한다
  3. Consul에 서비스를 직접 등록하지 않는다 — Docker 라벨이나 설정 파일로 자동 등록되는 구조다
  4. 새 서비스의 외부 접근이 필요하면 Traefik 라우팅 규칙 추가를 요청한다
  5. 개발자 서버는 개인 개발/테스트 전용이다 — 운영 서비스를 올리지 않는다

VM은 늘어나도
구조는 하나다

Proxmox가 VM을 만들고, 각 VM이 하나의 역할을 맡는다. 이 구조를 이해하면 잘못된 설정으로 인프라를 흔드는 실수를 피할 수 있다.