유대선
프로젝트로
·기술 회고·3

Moving the backend AWS (Toronto) → Naver Cloud (Seoul): one box, ~10x cheaper

The Mimi backend was on AWS ECS in ca-central-1 (Toronto) — wrong on cost (~$50–65/mo) and latency (~180ms) for a Korea-targeted service. Migrated it to a single Naver Cloud (Seoul) box running everything in docker-compose behind Caddy, cut over DNS, and tore AWS down. Cost dropped to roughly a credit-covered ~₩50k/mo.

Why move at all

The product is Korea-targeted, but the backend was sitting in AWS ca-central-1 (Toronto): ALB + Fargate + RDS, ~$50–65/mo, and ~180ms to Korean users. Both the bill and the latency pointed the same way — get to Seoul. The owner's instinct ("왜 이리 비싸, 사용자 1명인데") was right that a 24/7 JVM box costs real money, but the honest fix wasn't "rewrite off Java" — it was "stop paying for three managed services (ALB + RDS + Fargate) and run one box."

Target shape

One Naver Cloud (Seoul) server, c2-g3 (2 vCPU / 4 GB) + a 50 GB data volume, running docker-compose: backend (the existing Spring Boot image) + pot-provider (YouTube POToken sidecar) + postgres + Caddy (reverse proxy, automatic TLS). No managed LB, no managed DB — trade managed-service resilience for ~10x lower cost. The whole thing is Terraform (infrastructure/ncp/, provider NaverCloudPlatform/ncloud).

How it went

Verified

Honest state / TODO

Pattern

When a service is mis-located for its audience, the migration usually fixes cost and latency together — they point the same way. And the cheapest correct shape for an early-stage solo backend is often "collapse the managed services into one box" (ALB+RDS+Fargate → a VM + docker-compose + Caddy), not a language rewrite. The managed services, not the runtime, were the bill.