Deploy Infrastructure - Genie-Uss/genieus GitHub Wiki

์„ค๊ณ„ ๊ฐœ์š”

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ AWS ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.


image

๐ŸŽฏ ํ•ต์‹ฌ ๋ฐฐํฌ ๊ณผ์ œ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ฐ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ

๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ๋ฐ ์™ธ๋ถ€ ์ ‘๊ทผ ์ œ์–ด

SSL ์ธ์ฆ์„œ ์ž๋™ํ™” ๋ฐ ๋„๋ฉ”์ธ ๊ด€๋ฆฌ

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ


ํ•ต์‹ฌ ์„ค๊ณ„ ๊ณ ๋ฏผ

"ํผ๋ธ”๋ฆญ-ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ ๊ฐ„ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€?"

์ดˆ๊ธฐ์—๋Š” API Gateway๋ฅผ ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์— ๋ฐฐ์น˜ํ–ˆ์œผ๋‚˜, Docker ๋‚ด๋ถ€ IP ์ ‘๊ทผ ๋ถˆ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ NGINX๋ฅผ ๋‹จ์ผ ์ง„์ž…์ ์œผ๋กœ ํ•˜๊ณ  ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์— ๋ฐฐ์น˜ํ•˜์—ฌ, ๋ณด์•ˆ๊ณผ ์ ‘๊ทผ์„ฑ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.



ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

1. ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค ๋ฐฐ์น˜์™€ ์™ธ๋ถ€ ์ ‘๊ทผ์„ฑ์„ ๋ชจ๋‘ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท

  • NGINX Reverse Proxy: ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์˜ ๋‹จ์ผ ์ง„์ž…์ 
  • SSL ํ„ฐ๋ฏธ๋„ค์ด์…˜: Let's Encrypt ์ž๋™ ์ธ์ฆ์„œ ๊ฐฑ์‹ 
  • ๋„๋ฉ”์ธ ๋ผ์šฐํŒ…: ์„œ๋น„์Šค๋ณ„ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท

  • ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค: ์™ธ๋ถ€ ์ง์ ‘ ์ ‘๊ทผ ์ฐจ๋‹จ
  • ์ธํ”„๋ผ ์„œ๋น„์Šค: MySQL, Redis, Kafka ๋“ฑ
  • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ: Eureka ๊ธฐ๋ฐ˜ ๋‚ด๋ถ€ ํ†ต์‹ 

2. ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (Docker + Docker Compose)

ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ์™€ ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

# docker-compose.prod.yml
services:
  api-gateway:
    image: genieus/api-gateway:${VERSION}
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - EUREKA_HOST=${EUREKA_HOST}
    networks:
      - genieus-network

  auth-service:
    image: genieus/auth-service:${VERSION}
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DB_HOST=${DB_HOST}
      - REDIS_HOST=${REDIS_HOST}

ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ด€๋ฆฌ

  • Local: Docker Compose๋กœ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
  • Dev: AWS EC2 ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์„œ๋ฒ„
  • Prod: ์šด์˜ ํ™˜๊ฒฝ ์ตœ์ ํ™” ์„ค์ •

3. CI/CD ํŒŒ์ดํ”„๋ผ์ธ (GitHub Actions)

์ž๋™ํ™”๋œ ๋นŒ๋“œ/๋ฐฐํฌ๋กœ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๊ฐ์ง€ ๋นŒ๋“œ

# ๋ณ€๊ฒฝ๋œ ์„œ๋น„์Šค๋งŒ ๋นŒ๋“œ
- name: Detect Changes
  run: |
    echo "auth_changed=$(git diff --name-only HEAD~1 | grep -q 'auth-service' && echo 'true' || echo 'false')" >> $GITHUB_ENV
    echo "product_changed=$(git diff --name-only HEAD~1 | grep -q 'product-service' && echo 'true' || echo 'false')" >> $GITHUB_ENV



๐Ÿ”ง ์ฃผ์š” ๊ธฐ์ˆ ์  ์„ฑ๊ณผ

  • NGINX Reverse Proxy ์„ค์ •
  • ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ด€๋ฆฌ
  • Environment Variables: ๋ฏผ๊ฐ ์ •๋ณด ๋ถ„๋ฆฌ
  • Profile ๊ธฐ๋ฐ˜ ๋ถ„๋ฆฌ: local/dev/prod ํ™˜๊ฒฝ ์„ค์ •
  • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ์ตœ์ ํ™”: Eureka ํด๋ผ์ด์–ธํŠธ ์ž๋™ ์„œ๋น„์Šค ๋“ฑ๋ก/ํ•ด์ œ



์šด์˜ ์„ฑ๊ณผ

  • ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ: ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๋ณดํ˜ธ
  • SSL ์ ์šฉ: ๋ชจ๋“  ์™ธ๋ถ€ ํ†ต์‹  ์•”ํ˜ธํ™”
  • ์ ‘๊ทผ ์ œ์–ด: NGINX ๊ธฐ๋ฐ˜ ์ค‘์•™ ์ง‘์ค‘ ๋ณด์•ˆ ์ •์ฑ…
  • ์„œ๋น„์Šค๋ณ„ ๋…๋ฆฝ ๋ฐฐํฌ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ ์ตœ์†Œํ™”



์ƒ์„ธ ๋ชฉ์ฐจ

์„น์…˜ ๋‚ด์šฉ
MSA ํ™˜๊ฒฝ์—์„œ API Gateway ์—ฐ๊ฒฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… MSA ํ™˜๊ฒฝ์—์„œ API Gateway ์—ฐ๊ฒฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
โš ๏ธ **GitHub.com Fallback** โš ๏ธ