최재영의 개발 일지
GitHubLinkedIn

개인 서버 아키텍처 계획

기타1분 읽기

처음에는 데스크탑 한 대로 서버를 구축하려고 했는데, 클로드가 보안상 위험하다고 서버를 네트워크에 직접 노출시키지 않는 방안을 제안했다. 이를 위해 클라우드 서비스의 VPS(Virtual Private Server)를 사용하는 것을 추천해줬는데, 남는 데스크탑이 하나 더 있어서 그걸 리버스 프록시로 사용하기로 했다.

네트워크 흐름

사용자가 요청을 보내면 내 공유기로 요청이 들어와서 서브 컴퓨터로 전달된다. 서브 컴퓨터에서는 Caddy를 사용해서 리버스 프록시 역할을 하고, 요청은 다시 메인 컴퓨터로 전달된다.

서브 컴퓨터는 외부 네트워크에 노출되어 있기에 요청을 받을 수 있고, 메인 컴퓨터는 외부 네트워크에 전혀 노출되지 않아 안전하다. 그리고 메인 컴퓨터와 서브 컴퓨터는 같은 LAN에 있기 때문에 통신이 가능하다.

아키텍처

                            ┌──────────────────┐
                            │  Internet Users  │
                            └────────┬─────────┘

                                     │ HTTP/HTTPS

                            ┌──────────────────┐
                            │   Router         │
                            │  (Port Forward)  │
                            │   80, 443 → 50   │
                            └────────┬─────────┘

                    ┌────────────────┼──────────────────┐
                    ▼                │                  ▼
        ┌────────────────────────┐   │   ┌─────────────────────────────────┐
        │  Sub Desktop #1        │   │   │  Main Desktop #2                │
        │  (i5-4690K, 16GB RAM)  │   │   │  (Debian 13 + K3s)              │
        ├────────────────────────┤   │   ├─────────────────────────────────┤
        │                        │   │   │                                 │
        │ ┌────────────────────┐ │   │   │ ┌─────────────────────────────┐ │
        │ │ DuckDNS Client     │ │   │   │ │ K3s (Kubernetes)            │ │
        │ │ (Dynamic IP Mgmt)  │ │   │   │ │ Debian 13 Trixie            │ │
        │ └────────────────────┘ │   │   │ └─────────────────────────────┘ │
        │                        │   │   │                                 │
        │ ┌────────────────────┐ │   │   │ ┌─────────────────────────────┐ │
        │ │ Caddy              │ │   │   │ │ Traefik Ingress             │ │
        │ │ (Reverse Proxy)    │ │   │   │ │ (Domain Routing)            │ │
        │ │ (Auto HTTPS)       │ │   │   │ └─────────────────────────────┘ │
        │ └──────────┬─────────┘ │   │   │                                 │
        │            │           │   │   │ ┌─────────┬─────────┬─────────┐ │
        │    IP: 192.168.1.50    │   │   │ │service-a│service-b│service-c│ │
        │        (public)        │   │   │ └─────────┴─────────┴─────────┘ │
        └────────────┼───────────┘   │   │                                 │
                     │               │   │  IP: 192.168.1.100 (private)    │
                     │ Local Network │   └─────────────────────────────────┘
                     │ (192.168.1.x) │
                     └───────────────┘