아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
레딧 favicon레딧

Docker, Traefik, SSE 스트리밍으로 50명의 고객을 확보한 호스팅 플랫폼 구축기

by DD
2026-02-27
4개월 전
조회수 12

Docker 컨테이너(Container) 기반 호스팅 플랫폼 구축 과정에서 발생한 다양한 기술적 문제와 해결책 제시

Traefik을 활용한 동적 라우팅(Dynamic Routing) 설정 및 SSE 스트리밍(Streaming) 구현의 어려움 공유

Nginx 설정, IP 재활용 문제, 설정 관리 등 운영 과정에서 겪은 어려움과 교훈을 상세히 설명

50명의 유료 고객을 확보하기까지의 과정과, 운영상의 어려움을 극복한 경험을 공유

Docker 컨테이너(Container) 환경의 문제점과 해결

저자는 Docker 컨테이너를 사용하여 OpenClaw를 격리했지만, pnpm 심볼릭 링크(Symlink) 문제, mDNS/Bonjour 자동 검색 문제, 좀비 프로세스(Zombie Process) 문제 등 다양한 문제에 직면했다. 특히, 컨테이너 재 생성(Container Recreation) 시 고객 설치 패키지 및 런타임 데이터가 손실되는 문제를 해결하기 위해 `docker commit` 명령어를 사용하여 Writable Layer를 보존하는 전략을 사용했다. 또한, 설정 변경 시 핫 리로드(Hot Reload) 시스템을 구축하여 컨테이너 재시작 없이 변경 사항을 적용했다.

5-Layer 서브도메인(Subdomain) 라우팅 아키텍처

ClawHosters는 5-Layer 서브도메인 라우팅 아키텍처를 통해 트래픽을 관리한다. Cloudflare Wildcard DNS를 통해 모든 트래픽을 서버로 라우팅하고, Nginx를 사용하여 서브도메인을 매칭하고, Traefik을 통해 동적 라우팅을 구현한다. Traefik은 Redis를 백엔드로 사용하여 라우팅 규칙을 관리하며, VPS-Side Nginx를 통해 보안을 강화한다. 마지막으로, Hetzner 방화벽(Firewall)과 fail2ban을 통해 보안을 유지한다. 이러한 다층 구조는 유연성과 보안을 동시에 제공한다.

SSE 스트리밍(Streaming) 구현의 어려움

저자는 SSE 스트리밍 구현 과정에서 TCP 청크(Chunk) 단편화, Nginx 버퍼링(Buffering) 문제, 토큰 사용량(Token Usage) 측정의 어려움 등 여러 문제에 직면했다. 특히, Nginx 버퍼링 문제를 해결하기 위해 `proxy_buffering off`, `proxy_cache off`, `proxy_http_version 1.1`, `chunked_transfer_encoding off` 설정을 적용했다. 또한, 토큰 사용량 측정을 위해 링 버퍼(Ring Buffer)를 사용하여 마지막 SSE 데이터를 분석하고, 공급자별(Provider-Specific) 토큰 계산 방식의 차이를 해결하기 위해 공급자별 가격 테이블(Provider-Specific Pricing Table)을 구축했다.

IP 재활용(IP Recycling) 문제와 설정 관리

Hetzner의 IP 재활용으로 인해 발생한 SSH 연결 오류 및 데이터베이스(Database) 내 IP 정보 불일치 문제를 해결하기 위해, VPS 내부에서 Hetzner 메타데이터 서비스를 쿼리하여 IP를 검증하는 방법을 사용했다. 또한, OpenClaw 설정 파일(openclaw.json)의 유효성을 검사하고, 설정 마이그레이션(Config Migration)을 통해 호환성을 유지했다. 이러한 자동화된 설정 관리(Automated Configuration Management)는 운영 효율성을 높이는 데 기여했다.

제로티어(ZeroTier)를 활용한 로컬 LLM 연결

저자는 고객이 로컬 LLM에 접근할 수 있도록 ZeroTier를 활용한 원웨이 네트워킹(One-Way Networking)을 구현했다. ZeroTier 컨테이너를 Docker 브리지 네트워크에 추가하고, `nsenter`를 사용하여 OpenClaw의 네트워크 네임스페이스에 라우팅 규칙을 주입했다. 이로써 OpenClaw는 ZeroTier 네트워크에 접근할 수 있지만, ZeroTier 네트워크는 OpenClaw에 직접 접근할 수 없도록 설계하여 보안을 강화했다. 이 방식은 단순한 설정(Simple Configuration)으로 복잡한 네트워킹 문제를 해결하는 좋은 예시를 보여준다.

Docker, Traefik, and SSE streaming: A post-mortem on building a managed hosting platform
고급
아키텍처
Docker
Traefik
Nginx
Rails
PostgreSQL
Sidekiq
Redis
Ruby
SQL
DevOps
Backend
Data
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

Redis를 떠나 SolidQueue로? Rails 개발자들의 선택은?

해커뉴스 로고

PostgreSQL 확장성, PgDog로 해결!

해커뉴스 로고

Docker 컨테이너, 방화벽 없이 데이터베이스를 노출하면?

랍스타즈 로고

PostgreSQL, MySQL보다 압도적인 성능? 벤치마크 결과 공개!

레딧 로고

홈 서버 운영 꿀팁: 2026년, 당신의 서버는 안녕하십니까?

랍스타즈 로고

호스팅 러너(Hosted Runner) 도커(Docker) 및 도커 컴포즈(Docker Compose) 업데이트

깃헙 로고
레딧 favicon레딧
고급
아키텍처
Docker
Traefik
Nginx
Rails
PostgreSQL
Sidekiq
Redis
Ruby
SQL
DevOps
Backend
Data

관련 추천 글

Redis를 떠나 SolidQueue로? Rails 개발자들의 선택은?

해커뉴스 로고

PostgreSQL 확장성, PgDog로 해결!

해커뉴스 로고

Docker 컨테이너, 방화벽 없이 데이터베이스를 노출하면?

랍스타즈 로고