๐Ÿš€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ณด์•ˆ: API Gateway + Docker Private Networks

๋ฐœํ–‰: (2025๋…„ 12์›” 10์ผ ์˜คํ›„ 11:51 GMT+9)
8 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๐Ÿš€ ์ฒซ ๋ฒˆ์งธ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์‹ค์šฉ ๊ฐ€์ด๋“œ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋Šฅ, ํ™•์žฅ์„ฑ, ํ˜น์€ ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜์ง€๋งŒ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ฑฐ์˜ ์ด์•ผ๊ธฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ง์ ‘ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋‚ด๋ถ€ API ๋ช‡ ๊ฐœ์™€ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊นŒ์ง€ ์‹ค์ˆ˜๋กœ ํผ๋ธ”๋ฆญ์— ๋…ธ์ถœ๋œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ฌ

๊ทธ๋ž˜์„œ ์ €๋Š” ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ํ”„๋กœ๋•์…˜์— ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ„ด์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค: API Gateway + Docker Private Networks. ์ด ๊ธ€์—์„œ๋Š” ์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ(๊ทธ๋ฆฌ๊ณ  ์™œ) ๊ตฌํ˜„ํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์ด ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฌธ์ œ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์‹ค์ˆ˜๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ

๋…ธ์ถœ๋œ ์„œ๋น„์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

์ดˆ๋ณด์ž๋“ค์ด ํ”ํžˆ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ž์ฒด ํฌํŠธ๋กœ ๋…ธ์ถœ๋จ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋“  ์„œ๋น„์Šค์— ์ง์ ‘ ์ ‘๊ทผ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ
  • ์ค‘์•™ ์ œ์–ด๋‚˜ ๋ผ์šฐํŒ…์ด ์—†์Œ

์ด๋กœ ์ธํ•ด ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๋””๋ฒ„๊น…์ด ๋ณต์žกํ•ด์ง€๋ฉฐ, ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์—‰๋ง์ด ๋ฉ๋‹ˆ๋‹ค.

Part 1 โ€” API Gateway: ๋‹จ์ผ ์ง„์ž…์ 

API Gateway๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

API Gateway ๊ฐœ๋…

์ž‘๋™ ๋ฐฉ์‹

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์— ๋‹จ์ผ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ์„ ํ”„๋ผ์ด๋น— Docker ๋„คํŠธ์›Œํฌ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ URL์€ ์™ธ๋ถ€์— ์ ˆ๋Œ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋‹จ์ˆœํ•œ ๋ผ์šฐํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์ •๋ฌธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ค‘์š”ํ•œ๊ฐ€

  • ์ธ์ฆ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ
  • ๋ผ์šฐํŒ…์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ
  • ๋‚ด๋ถ€ ์„œ๋น„์Šค๋Š” ์ˆจ๊น€ ์ฒ˜๋ฆฌ
  • ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง€๊ณ  ์ œ์–ด๊ฐ€ ์‰ฌ์›Œ์ง

๊ฐ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ :

http://localhost:3000/orders
http://localhost:4000/reports

ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค:

http://gateway/api/orders

๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Part 2 โ€” Docker Private Networks (๋ฌผ๋ฆฌ์  ๋ณด์•ˆ ๋ ˆ์ด์–ด)

Docker ๋„คํŠธ์›Œํฌ๊ฐ€ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

Docker ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ ๋‹ค์ด์–ด๊ทธ๋žจ

์™œ ์ค‘์š”ํ•œ๊ฐ€

ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ๊ฐ€ ์—†์œผ๋ฉด Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด:

  • ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ๊ฒŒ์ดํŠธ์›จ์ด๋ฟ
  • ๋ชจ๋“  ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์€ ๋„คํŠธ์›Œํฌ ๋‚ด๋ถ€์— ๋จธ๋ฌด๋ฆ„
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ

์„œ๋น„์Šค๋ฅผ ํ”„๋ผ์ด๋น— Docker ๋„คํŠธ์›Œํฌ์— ๋„ฃ์œผ๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ์ถœํ•œ ๊ฒƒ ์™ธ์—๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด์ 

  • ๋‚ด๋ถ€ ์ „์šฉ ํ†ต์‹ 
  • ํฌํŠธ ์‹ค์ˆ˜ ๋…ธ์ถœ ์ œ๋กœ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์™„์ „ ๊ฒฉ๋ฆฌ
  • ๊น”๋”ํ•˜๊ณ  ์ „๋ฌธ์ ์ธ ์•„ํ‚คํ…์ฒ˜

๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์šฐํšŒํ•œ๋‹ค ํ•˜๋”๋ผ๋„(๊ทนํžˆ ๋“œ๋ฌผ๊ฒŒ) Serviceโ€ฏA, B ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ํผ๋ธ”๋ฆญ ๋„คํŠธ์›Œํฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ๋ณด์•ˆ ํŒจํ„ด

์ „์ฒด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹

์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

๋‹ค์Œ ๋‘ ์š”์†Œ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด:

  • ๋…ผ๋ฆฌ์  ๋ณด์•ˆ (API Gateway)
  • ๋ฌผ๋ฆฌ์  ๋ณด์•ˆ (ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ)

Kubernetes, ์„œ๋น„์Šค ๋ฉ”์‰ฌ, ๋ณต์žกํ•œ DevOps ๋„๊ตฌ ์—†์ด๋„ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Client
   โ†“
API Gateway
   โ†“
Private Docker Network
 โ”œโ”€โ”€ Service A
 โ”œโ”€โ”€ Service B
 โ””โ”€โ”€ Database

๊ฒŒ์ดํŠธ์›จ์ด๋งŒ ํผ๋ธ”๋ฆญ์— ๋…ธ์ถœ๋˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์•ˆ์ „ํ•˜๊ฒŒ ๋’ค์— ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค.

์ตœ์†Œ Docker Compose ์˜ˆ์‹œ (๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ฐ€๋Šฅ)

services:
  api-gateway:
    build: ./gateway
    ports:
      - "8080:8080"
    networks:
      - public_net
      - private_net

  service-a:
    build: ./service-a
    expose:
      - "3000"
    networks:
      - private_net

  service-b:
    build: ./service-b
    expose:
      - "4000"
    networks:
      - private_net

  internal-db:
    image: postgres:16
    expose:
      - "5432"
    environment:
      POSTGRES_PASSWORD: password
    networks:
      - private_net

networks:
  public_net:
  private_net:

ํ•ต์‹ฌ ์ •๋ฆฌ

  • ํผ๋ธ”๋ฆญ ํฌํŠธ๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์€ ์˜ค์ง ๊ฒŒ์ดํŠธ์›จ์ด๋ฟ โ†’ ์™ธ๋ถ€์— ๊ณต๊ฐœ
  • ๋‚ด๋ถ€ ์„œ๋น„์Šค๋Š” expose ์‚ฌ์šฉ โ†’ ํ”„๋ผ์ด๋น—
  • ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ private_net ์•ˆ์— ์กด์žฌ
  • ์ตœ์†Œํ•œ์˜ ์„ค์ •์œผ๋กœ ๊น”๋”ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„

๋ฐฐ์šด ์ 

  • ๋‚ด๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์‹ค์ˆ˜๋กœ ๋…ธ์ถœ๋˜๋Š” ์ผ ์ œ๋กœ
  • ์•ˆ์ „ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ง„์ž…์  ํ™•๋ณด
  • ๋””๋ฒ„๊น… ์†๋„ ํ–ฅ์ƒ
  • ํŒ€์› ์˜จ๋ณด๋”ฉ์ด ์‰ฌ์›Œ์ง
  • ํ–ฅํ›„ ์„œ๋น„์Šค ํ™•์žฅ์„ ์œ„ํ•œ ์Šค์ผ€์ผ๋Ÿฌ๋ธ”ํ•œ ๊ธฐ๋ฐ˜
  • ์ดˆ๋ณด์ž ์นœํ™”์ ์ธ ๋„๊ตฌ๋งŒ์œผ๋กœ๋„ ํ”„๋กœ ์ˆ˜์ค€ ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„

๋งˆ๋ฌด๋ฆฌ ์ƒ๊ฐ

์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•ด ๋ณด์ด์ง€๋งŒ, ๋ฐ”๋กœ ๊ทธ ์ ์ด ์ž‘๋™ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด Kubernetes, ์„œ๋น„์Šค ๋ฉ”์‰ฌ, ๋ณต์žกํ•œ DevOps ์„ค์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘์€ ์ด๋ ‡๊ฒŒ:

  • ํ•˜๋‚˜์˜ API Gateway
  • ํ•˜๋‚˜์˜ ํ”„๋ผ์ด๋น— Docker ๋„คํŠธ์›Œํฌ

์ด ๊ธฐ๋ฐ˜ ์œ„์— ์‹œ์Šคํ…œ์ด ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœํ•จ. ๊น”๋”ํ•จ. ๋ณด์•ˆ. ํšจ์œจ์„ฑ.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

Google File System ๋…ผ๋ฌธ ํ’€์–ด๋ณด๊ธฐ: ๊ฐ„๋‹จํ•œ ๋ถ„์„

ํ•ต์‹ฌ ์ฒ ํ•™: ๋‹จ์ˆœํ•จ์„ ์œ ์ง€ํ•˜๊ณ  ํฌ๊ฒŒ ํ™•์žฅํ•˜๊ธฐ GFS๋Š” ์—„๊ฒฉํ•œ ์ผ๊ด€์„ฑ๋ณด๋‹ค ๋‹จ์ˆœ์„ฑ, ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์•„์ด๋””์–ด: - ์™„ํ™”๋œ ์ผ๊ด€์„ฑโ€ฆ

AI-to-AI ์‹œ์Šคํ…œ์—์„œ ์ •์ฒด์„ฑ์ด ์™œ ํ•ต์‹ฌ์ ์ธ๊ฐ€

์™œ ์ •์ฒด์„ฑ์ด AI ์—์ด์ „ํŠธ์—๊ฒŒ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ์ด ๋˜๋Š”๊ฐ€: ์ธ๊ฐ„ ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์š” ํ–‰์œ„์ž์ผ ๋•Œ, ์ธ์ฆ์€ ์ธ์‹ ๊ฐ€๋Šฅํ•œ ์ „ํ™˜์ ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค: ๋กœ๊ทธ์ธ โ€ฆ