기업 조직도 = 서버 인프라 구조

회사 안에는 여러 부서(Department)가 존재하고, 경영진(officer)이 있고, 각 부서에는 직원(Employee)이 있으며, 이들이 모여 프로젝트(Project)를 수행한다. 흥미롭게도 IT 서버 인프라(Network Infrastructure)도 이와 거의 동일한 구조를 가진다. 이를 은유적 비유(Metaphor)로 치환하면 다음과 같이 대응된다.

  • Corporation(기업) = Virtual Private Server Cloud/Cluster
  • Department(부서) = Virtual Machine(가상 머신)
  • Officer (경영진) = Server Administrator(서버 관리자)
  • Employee(직원) = Server Process(서버 프로세스)
  • Project(프로젝트) = Application Service(애플리케이션 서비스)

서버 인프라는 하나의 경제 조직과 비슷하다. 이는 개인이 자영업 형태의 IT 인프라를 구축하고 운영하는 모델로 확장될 수 있다.

이 글의 목표는 다음과 같다.

  • End-to-End Network & Virtualization & Service Stack(네트워크–가상화–서비스 스택)의 이해
  • Windows OS(운영체제)에서 Docker 기반 서비스 운영
  • Linux OS(운영체제)에서 Virtual Machine(VM)과 Docker 컨테이너를 결합한 Microservice(마이크로서비스) 환경 구축

네트워크로 연결된 서버들은 주식회사이다

회사를 외부에서 찾으려면 주소, 연락처, 상호가 필요하다. 서버도 마찬가지로 인터넷에서 자신을 찾게 하는 주소 체계와 연결 방법이 필요하다.

주소를 주는 사람들: IP 주소, DNS, DDNS

IP(Internet Protocol) Address(인터넷 프로토콜 주소)는 서버의 사업자등록번호에 해당한다. 전 세계에서 고유하며, 인터넷 상에서 서버를 식별한다. 하지만 IPv4(Internet Protocol version 4) 숫자 형태의 주소는 기억하기 어렵다. 이 문제를 해결하는 것이 DNS(Domain Name System, 도메인 이름 시스템)이다. DNS는 사람이 기억하기 쉬운 도메인명(예: example.com)을 IP 주소와 연결한다. 그러나 개인 인터넷 회선이나 소규모 호스팅 환경에서는 IP 주소가 변동될 수 있다. 이때 DDNS(Dynamic DNS, 동적 도메인 이름 시스템)가 필요하다. DDNS는 주소가 바뀌어도 새로운 IP를 자동으로 등록해주는 서비스다. 대표적으로 No-IP(DDNS Service)가 있다. No-IP는 무료 플랜에서 기본적인 도메인 연결과 주기적인 IP 갱신을 제공한다.

회사의 총무과

Router(라우터)는 회사의 총무과다. 외부에서 들어오는 요청을 내부 부서로 전달하고, 내부 요청을 외부로 내보낸다. 가정용·소규모 사무실 환경에서는 ipTIME, ASUS, Netgear 와 같은 회사들이 만든 Network Device가 사용된다. 내부 IP는 내선 번호, 공인 IP는 대표 전화번호에 해당한다. **Port Forwarding(포트포워딩)**은 대표 전화로 온 전화를 특정 부서 내선으로 연결하는 절차와 같다.

외부 고객 접수창구: 프록시와 리버스 프록시

Proxy(프록시)는 회사의 접수창구다. 외부 고객이 내부 부서를 직접 찾지 않고, 프록시를 통해 요청을 접수한 후 적절한 부서로 전달한다. 특히 Reverse Proxy(리버스 프록시)는 외부에서 하나의 도메인으로 접속해도 내부의 여러 서버에 요청을 분배해 준다. 대표적인 소프트웨어로 Nginx(Web Server/Reverse Proxy), Apache HTTP Server(Web Server/Reverse Proxy), Caddy(Web Server/Reverse Proxy)가 있다. 여기서 Caddy는 자동으로 TLS(Transport Layer Security, 전송 계층 보안) 인증서를 발급하고 갱신해 HTTPS 연결을 손쉽게 구성할 수 있다. 이는 기술 초보자에게 매우 유리하다.

유명 IT 기업들의 서비스로 개념 정리하기

  • GoDaddy, Namecheap, 가비아: 도메인 판매처. 회사 이름을 등록하는 상표소 역할.
  • No-IP(DDNS Service): 무료 DDNS 제공. 회사가 이사해도 고객이 계속 찾아올 수 있게 함.
  • Cloudflare: 보안 DNS와 리버스 프록시 제공. 회사의 경비실이자 VIP 고객 접수처.

서비스: Windows + Docker로 서비스 만들기

이제 실제로 사내 부서를 만들고 프로젝트를 수행하는 것처럼, Windows 환경에서 Docker 기반 서비스를 만들어보자.

준비: Windows 11 + WSL2 + Docker Desktop

WSL2(Windows Subsystem for Linux 2)는 Windows 운영체제 안에서 Linux 배포판을 실행할 수 있게 하는 플랫폼이다. 여기에 Docker Desktop(Platform)을 설치하면, 마치 사내에 새로운 프로젝트팀을 만드는 것처럼 컨테이너 기반 서비스를 바로 띄울 수 있다. Docker Desktop(Platform)은 컨테이너(Container)를 쉽게 만들고 관리할 수 있게 해주는 소프트웨어이다.

WSL2 + Ubuntu 환경 구성

Ubuntu는 가장 널리 쓰이는 Linux 배포판 중 하나다. apt 명령어로 웹 프레임워크(Flask, Django), 데이터베이스(MySQL, PostgreSQL), 메시지 큐(RabbitMQ) 등을 설치할 수 있다. WSL2에서 Ubuntu(Linux Distribution)를 설치하고, 필수 패키지를 세팅한다. 여기서 우리는 FastAPI(Web Framework)를 중심으로 웹 서비스를 만들 것이다. FastAPI는 비동기(Asynchronous) 처리를 지원하며, REST API 서버를 빠르고 직관적으로 개발할 수 있는 Python 기반 프레임워크다.

Docker로 FastAPI + Database 서비스 운영

FastAPI 앱과 데이터베이스(PostgreSQL 또는 MySQL)를 각각 Docker 컨테이너로 실행한다. 이렇게 하면 각 서비스가 독립적으로 운영되면서도 네트워크로 연결된다.

docker-compose로 다중 서비스 구성

docker-compose(Tool)를 사용해 FastAPI와 DB, Caddy 등 여러 컨테이너를 한 번에 정의하고 실행할 수 있게 한다. 회사의 여러 부서가 하나의 프로젝트를 위해 협업하는 구조와 같다.

Caddy Reverse Proxy로 도메인 연결 실습

FastAPI 앱을 외부에서 도메인으로 접속하게 하려면 Caddy(Web Server)로 리버스 프록시 설정을 한다. 이를 통해 HTTPS 인증서 적용, 부하분산, 다중 서비스 연결이 가능하다. No-IP에서 발급받은 도메인으로 접속 시, Caddy가 리버스 프록시 역할을 수행하여 FastAPI 애플리케이션에 요청을 전달한다. Caddy는 TLS/HTTPS 인증서를 자동 발급하여 FastAPI 서비스에 안전한 접속을 제공한다.

환경: Proxmox + KVM + LXC로 서버 인프라 구성

Windows 기반 실습을 마친 후, Linux 기반의 가상화 환경에서 인프라를 직접 구축해본다.

준비: 2대의 mini PC, Proxmox ISO

Proxmox VE(Open Source Virtualization Platform)는 물리 서버를 가상화해 VM과 LXC를 관리한다.

Proxmox VE 설치 및 클러스터 구성

두 대 이상의 서버를 하나의 클러스터로 묶어 자원 공유와 장애 복구를 구현한다.

VM 만들기: 백업, 서비스용, DB 분리

역할별로 가상머신을 분리해 보안성과 안정성을 높인다.

VM 내부에서 LXC로 서비스 운영

LXC(Linux Container)는 VM보다 경량이며, 동일한 호스트 OS를 공유한다.

systemd 기반 수동 컨테이너 운영 vs docker 자동화

전통적인 systemd 방식과 docker-compose 기반 자동화 방식의 장단점을 비교한다.

VM 간 통신과 Caddy 프록시 설정

내부 브리지(Bridge Network)와 NAT(Network Address Translation)로 VM 간 통신을 구성하고, Caddy를 이용해 외부 접속을 중앙에서 관리한다.