ํ™˜๊ฒฝ ์ •๋ณด

ํ™˜๊ฒฝ์€ API ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฉ๋ฆฌ๋œ ์ปจํ…์ŠคํŠธ ๋˜๋Š” '์ƒŒ๋“œ๋ฐ•์Šค'๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์กฐ์ง์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ™˜๊ฒฝ ๋ฐ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์ด ์ •์˜๋œ ์žฌ์ •์˜ ๊ตฌ์„ฑ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. prod ๋ฐ test ํ™˜๊ฒฝ์˜ ํ˜ธ์ŠคํŠธ ๋ณ„์นญ์€ ์„œ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

namespace: my-namespace
org: my-organization
...
envs:
  - name: test
    serviceAccountPaths:
      synchronizer: "your_keypath/synchronizer-manager-service-account.json
      udca: "your_keypath/analytic-agent-service-account.json

  - name: prod
    serviceAccountPaths:
      synchronizer: "your_keypath/synchronizer-manager-service-account.json
      udca: "your_keypath/analytic-agent-service-account.json
...
  • routingRules๋ฅผ ํ™˜๊ฒฝ์— ๋งคํ•‘ํ•˜๋Š” virtualhosts ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    virtualhosts:
      - name: default
        hostAliases: ["api.example.com"]
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        routingRules:
          - env: test
    virtualhosts:
      - name: external
        hostAliases: ["apiprod.example.com"]
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        routingRules:
          - env: prod

    ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ /foo1์ธ ํ”„๋ก์‹œ๊ฐ€ ํ™˜๊ฒฝ test์— ๋ฐฐํฌ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    curl -k https://api.example.com/foo1

    ์ด ํ˜ธ์ถœ์ด ์ธ๊ทธ๋ ˆ์Šค์— ๋„๋‹ฌํ•˜๋ฉด ์ธ๊ทธ๋ ˆ์Šค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” test ํ™˜๊ฒฝ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ๋กœ ์ด๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ foo1๋„ prod ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ๋ณ„์นญ apiprod.mydomain.net์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋ก์‹œ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    curl -k https://apiprod.example.com/foo1

    ๊ทธ๋Ÿฌ๋ฉด ์ธ๊ทธ๋ ˆ์Šค๊ฐ€ ์ด ํ˜ธ์ŠคํŠธ์™€ ์—ฐ๊ฒฐ๋œ MP๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

    Antipattern: ๋ชจ๋“  ํ”„๋ก์‹œ๋ฅผ ํ•˜๋‚˜์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

    ๊ถŒ์žฅ์‚ฌํ•ญ: ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ๊ฐ ํ™˜๊ฒฝ์— ์ œํ•œ๋œ ์ˆ˜์˜ ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜์„ธ์š”. ํŠน์ • API ํ”„๋ก์‹œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ๋ผ์šฐํŒ…ํ•  ํ™˜๊ฒฝ์„ ์ง€์ •ํ•˜๋Š” ๋ผ์šฐํŒ… ๊ทœ์น™์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ํ”„๋ก์‹œ ๋ฐฐํฌ ์ˆ˜ ์ œํ•œ

    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์˜ ๊ฒฝ์šฐ ๋งŽ์€ ํ™˜๊ฒฝ์ด ๋™์ผํ•œ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์—์„œ ๊ถŒ์žฅ์‚ฌํ•ญ์€ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ๊ฐ ํ™˜๊ฒฝ์— ์ œํ•œ๋œ ์ˆ˜์˜ ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    ํ™˜๊ฒฝ์— ๋ช‡ ๊ฐœ์˜ ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋‚˜์š”? ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€ ์ง‘ํ•ฉ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ํ‘œ์—์„œ ๊ฐ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋œ ํ”„๋ก์‹œ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ด์œ ์™€ ํ”„๋ก์‹œ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์•ˆ๋‚ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    ๊ณ ๋ คํ•  ๋ฌธ์ œ ์„ค๋ช…
    ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ ๋ถ€ํŒ… ์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ(MP)์˜ ๋ถ€ํŒ…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๊ณผ ํ•ด๋‹น MP์— ๋ฐฐํฌ๋œ ํ”„๋ก์‹œ ์ˆ˜ ์‚ฌ์ด์—๋Š” ์ง์ ‘์ ์ธ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ํ™•์žฅ Kubernetes ํ™˜๊ฒฝ์—์„œ ๋ถ€ํŒ… ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MP์— ๋ฐฐํฌ๋˜๋Š” ํ”„๋ก์‹œ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ํ™•์žฅ์ด๋‚˜ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” MP๊ฐ€ ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ๋” ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
    ํ™•์žฅ ์„ฑ๋Šฅ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋œ ํ”„๋ก์‹œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๊ณ  ํ”„๋ก์‹œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ž๋™ ํ™•์žฅ๋˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ํ”„๋ก์‹œ๊ฐ€ ์ด ํ”„๋ก์‹œ์™€ ํ•จ๊ป˜ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ๋‹จ์ผ ํ”„๋ก์‹œ๊ฐ€ ํฌํ•จ๋œ ๋ณต์ˆ˜์˜ ํ”„๋ก์‹œ ํ™•์žฅ์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ํŠธ๋ž˜ํ”ฝ ๋งŽ์€ ์ด์›ƒ ๋™์ผํ•œ ํ™˜๊ฒฝ์— ์—ฌ๋Ÿฌ ํ”„๋ก์‹œ๊ฐ€ ๋ฐฐํฌ๋˜์–ด ์žˆ๊ณ  ํ•˜๋‚˜์˜ ํ”„๋ก์‹œ๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๋ฉด MP๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š” ๋™์•ˆ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ํ”„๋ก์‹œ๊ฐ€ ๋‹ค์šด๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋œ ํ”„๋ก์‹œ ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ๋‹จ์ผ ํ”„๋ก์‹œ ๋น„์ •์ƒ ์ข…๋ฃŒ์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์ฐธ์กฐ

    ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ „์ฒด ๋ชฉ๋ก์€ ๊ตฌ์„ฑ ์†์„ฑ ์ฐธ์กฐ์—์„œ envs๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ํ™˜๊ฒฝ ๋‹ค๋ฃจ๊ธฐ

    ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ์€ ๋‹ค์Œ ์ฃผ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.