서버

서버 배포 예제

상상모음 2025. 6. 20. 13:15

https://내프로젝트명.com 이런 식으로 인터넷 상에 내 도메인으로 서비스하는 방법은
크게 아래 3가지가 대표적이에요.


✅ 1️⃣ AWS 같은 클라우드 서버에 배포하기 (가장 보편적)

  • 예: AWS EC2, Google Cloud Compute Engine, Azure VM 등
  • 서버 OS는 보통 Linux (Ubuntu, CentOS)
  • 여기서 Docker를 사용하면 앱 실행 환경을 컨테이너로 관리할 수 있어 배포/확장/복구가 편리함
  • Nginx나 Apache로 HTTPS (SSL) 설정 + 도메인 연결

👉 가장 표준적이고 기업/개인 모두 많이 쓰는 방법


✅ 2️⃣ 자체 Linux 서버로 직접 운영하기

  • 예: 직접 사무실이나 집에 리눅스 서버를 한 대 둠
  • 거기에 Docker로 앱 실행 → Nginx로 HTTPS 처리 → 도메인 연결
  • 혹은 가상 서버(VPS: 카페24, Vultr, Hetzner 등)도 가능
  • 관리와 유지보수, 보안 패치 등을 직접 다 해야 함

👉 클라우드 요금이 부담된다면 작은 VPS나 직접 서버로 운영 가능 (관리 난이도 ↑)


✅ 3️⃣ 라즈베리파이로 홈서버로 운영하기

  • 라즈베리파이는 작은 Linux 컴퓨터
  • 개인 프로젝트용, 소규모 테스트 서버로 적합
  • 라즈베리파이에 Docker 설치해서 앱 컨테이너로 돌리고,
    공유기에 포트포워딩 설정 + DDNS(혹은 정적 IP) + HTTPS(SSL 인증서 발급) 해서 연결
  • 단, 가정용 인터넷은 IP가 바뀌거나 방화벽 제약이 있어 상용 서비스로는 비추천

👉 전기요금 ↓, 초기 비용 ↓, 소규모 취미 프로젝트에는 최고! (하지만 신뢰성은 클라우드보다 떨어짐)


✅ 📌 핵심 포인트: 도메인 연결

어느 방법이든 공통 필수 단계

  1. 도메인 구매 (내프로젝트명.com → GoDaddy, Namecheap, Cafe24 등)
  2. DNS 설정 → 내 서버 IP로 A 레코드 연결
  3. 서버에 HTTPS 설정 → Nginx + Let's Encrypt SSL 무료 인증서

✅ 정리

방법 추천 대상 특징

AWS/클라우드 실서비스/포트폴리오 유지보수 편리, 확장성 좋음, 비용 유동적
직접 Linux 서버 서버 경험 쌓기 비용 ↓, 관리 난이도 ↑
라즈베리파이 개인 공부용 재미있고 저렴, 상용엔 비추천

🚀 결론

👉 Docker는 선택사항이 아니라 배포/운영을 편하게 해주는 도구
👉 클라우드든 직접 서버든 라즈베리파이든 Docker + Nginx + HTTPS + 도메인 연결은 공통적으로 사용 가능
👉 처음이라면 작은 VPS or AWS 무료티어로 연습 추천!


 

✅ 먼저: Nginx란?

👉 Nginx(엔진엑스)는 대표적인 웹 서버 & 리버스 프록시 서버예요.

  • 웹 서버 역할:
    정적 파일(html, css, js) 서빙
  • 리버스 프록시 역할:
    localhost:3000 같은 앱 서버를 외부에 https://내도메인.com으로 연결해줌
  • **HTTPS (SSL 인증서)**도 Nginx에서 처리함 (Let's Encrypt로 무료 발급 가능)

결국 Nginx는:
👉 클라이언트 → Nginx → 내부 앱 서버(Docker)
👉 HTTPS도 자동으로 적용!


✅ 1️⃣ AWS 배포 예제

📦 기본 시나리오

👉 React 앱 혹은 Node.js 앱을 배포한다고 가정


🚀 (1) EC2 인스턴스 생성

  1. AWS EC2 대시보드에서
    • Ubuntu 22.04 LTS 선택
    • t2.micro (무료티어) 선택
    • SSH 키페어 다운로드
  2. 보안 그룹에서 HTTP(80), HTTPS(443), SSH(22) 열어둠

🚀 (2) SSH로 접속

ssh -i "내키페어.pem" ubuntu@<EC2_PUBLIC_IP>

🚀 (3) 필요한 패키지 설치

# 패키지 업데이트
sudo apt update && sudo apt upgrade -y

# Docker 설치
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker

# Docker Compose 설치 (optional)
sudo apt install docker-compose -y

# Nginx 설치
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

🚀 (4) Docker로 앱 실행

예: Node.js 앱

# Dockerfile, docker-compose.yml 준비해둠
docker build -t myapp .
docker run -d -p 3000:3000 myapp

🚀 (5) Nginx 설정

sudo nano /etc/nginx/sites-available/default

예제:

server {
    listen 80;
    server_name 내도메인.com www.내도메인.com;

    location / {
        proxy_pass http://localhost:3000;  # Node.js 서버 포트
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

적용:

sudo nginx -t   # 문법 확인
sudo systemctl restart nginx

🚀 (6) HTTPS (Let's Encrypt 무료 SSL)

sudo apt install certbot python3-certbot-nginx -y

sudo certbot --nginx -d 내도메인.com -d www.내도메인.com

# 자동 갱신 테스트
sudo certbot renew --dry-run

✅ 2️⃣ 리눅스 서버 + Docker + Nginx + HTTPS 설정 예제

위의 AWS 예제와 거의 동일합니다!
차이점은 서버 제공자가 AWS가 아니라:

  • 직접 구한 VPS
  • 집에 둔 리눅스 머신
  • 라즈베리파이 등

일 뿐이고, 배포 구조는 똑같음:

[인터넷 요청] → [Nginx (80/443)] → [Docker 앱 (3000 등)]

💡 핵심:

  1. Docker로 앱 실행
  2. Nginx로 포워딩
  3. Certbot으로 HTTPS 무료 발급

✅ 📌 둘 다 핵심 요약

구성 요소 역할

Docker 앱 실행 환경 통일 (언제나 같은 OS, 같은 포트, 의존성 깔끔)
Nginx 클라이언트 요청 받아서 → Docker로 전달, HTTPS 처리
Certbot (Let's Encrypt) HTTPS 인증서 무료 발급