Skip to main content

devcontainer.json ํŒŒ์ผ์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„๊ตฌ, ๋Ÿฐํƒ€์ž„ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์— ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

VS Code์—์„œ ๋˜๋Š” GitHub์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ devcontainer.json ํŒŒ์ผ์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ ํƒญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

devcontainer.json ํŒŒ์ผ์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  1. GitHub}์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ devcontainer.json ํŒŒ์ผ์„ ์ฐพ์€ ๋‹ค์Œ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

    ์•„์ง devcontainer.json ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์†Œ๊ฐœ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ํŒŒ์ผ ํŽธ์ง‘๊ธฐ ์˜ค๋ฅธ์ชฝ์˜ Marketplace ํƒญ์—์„œ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์„ ์ฐพ์•„๋ณด๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ ๊ธฐ๋Šฅ์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ๊ฒ€์ƒ‰ ์ƒ์ž์— "Terra"๊ฐ€ ์žˆ๊ณ  ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— Terraform ๊ธฐ๋Šฅ์ด ๋‚˜์—ด๋œ "Marketplace" ํƒญ์˜ ์Šคํฌ๋ฆฐ์ƒท

  3. "์„ค์น˜"์—์„œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํด๋ฆญํ•˜์—ฌ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•œ ๋‹ค์Œ, ์ฝ”๋“œ ์กฐ๊ฐ์„ devcontainer.json ํŒŒ์ผ์˜ features ๊ฐœ์ฒด์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

    Terraform์˜ ์„ค์น˜ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ณด์—ฌ ์ฃผ๋Š” "Marketplace" ํƒญ์˜ ์Šคํฌ๋ฆฐ์ƒท.

    "features": {
         // ...
         "ghcr.io/devcontainers/features/terraform:1": {},
         // ...
     }
    
  4. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ตœ์‹  ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์˜ต์…˜์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด "์˜ต์…˜" ์•„๋ž˜์— ๋‚˜์—ด๋œ ์†์„ฑ์„ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ํ™•์ธํ•œ ๋‹ค์Œ devcontainer.json ํŒŒ์ผ์˜ ๊ฐœ์ฒด๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์—ฌ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    "๋ฒ„์ „" ๋ฐ "tflint" ์†์„ฑ์ด ํ™•์žฅ๋œ "Marketplace" ํƒญ์˜ "์˜ต์…˜" ์„น์…˜ ์Šคํฌ๋ฆฐ์ƒท

    "features": {
         // ...
         "ghcr.io/devcontainers/features/terraform:1": {
             "version": "1.1",
             "tflint": "latest"
         },
         // ...
     }
    
  5. ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ devcontainer.json ํŒŒ์ผ์— ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋งŒ๋“  ์ƒˆ codespaces์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด codespace์—์„œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ ์šฉํ•˜๋ ค๋ฉด devcontainer.json ํŒŒ์ผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ codespace๋กœ ๋Œ์–ด์˜จ ๋‹ค์Œ, codespace์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์†Œ๊ฐœ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ

codespace์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋กœ์ปฌ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ VS Code์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด "๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ" ํ™•์žฅ์„ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ต์Šคํ…์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ VS Code Marketplace์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  1. VS Code Command Palette Shift+Command+P(Mac) ๋˜๋Š” Ctrl+Shift+P(Windows/Linux)๋ฅผ ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

  2. "๊ฐœ๋ฐœ ์ถ”๊ฐ€" ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ Codespaces: ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ ํŒŒ์ผ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "add dev"๊ฐ€ ์ž…๋ ฅ๋˜๊ณ  "Codespaces: ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ ํŒŒ์ผ ์ถ”๊ฐ€"๊ฐ€ ๋‚˜์—ด๋œ ๋ช…๋ น ํŒ”๋ ˆํŠธ์˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.

  3. ํ™œ์„ฑ ๊ตฌ์„ฑ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ๊ธฐ๋Šฅ ์„ ํƒ์„ ์—…๋ฐ์ดํŠธํ•œ ๋‹ค์Œ ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. Codespace์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋ชจ์„œ๋ฆฌ์— ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์ž‘์—… ์ค‘์ธ codespace์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์ง€๊ธˆ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€์˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ "์ง€๊ธˆ ๋‹ค์‹œ ๋นŒ๋“œ" ๋‹จ์ถ”์ž…๋‹ˆ๋‹ค.