์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (AWS, Python, Terraform)

ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Python, Terraform)๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ท€์ฐฎ์€ ๋ฐ˜๋ณต ์—…๋ฌด๋“ค์ด๋‚˜, ๋‚ด๊ฐ€ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ๋ฐฐํฌํ–ˆ๋Š”์ง€, ํŠน์ • ์†”๋ฃจ์…˜์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ์šฐ๋ฆฌ ํšŒ์‚ฌ๋งŒ์˜ ์ •์ฑ… ๋“ฑ์„ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ์ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๊ฐ€์žฅ ์ž˜๋‚˜๊ฐ€๋Š” IaC(Infrastructure as Code) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ ํ…Œ๋ผํผ์„ ํ†ตํ•ด ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜๊ณ , Python์œผ๋กœ ์ดˆ๊ฐ„๋‹จ ๋Œ€์‹œ๋ณด๋“œ ์ œ์ž‘๋„ ์ง„ํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค!

(4.9) ์ˆ˜๊ฐ•ํ‰ 53๊ฐœ

์ˆ˜๊ฐ•์ƒ 662๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

๋ณด์•ˆ
๋ณด์•ˆ
ํ”„๋กœ์ ํŠธ
ํ”„๋กœ์ ํŠธ
IaC
IaC
ํด๋ผ์šฐ๋“œ
ํด๋ผ์šฐ๋“œ
๋ณด์•ˆ
๋ณด์•ˆ
ํ”„๋กœ์ ํŠธ
ํ”„๋กœ์ ํŠธ
IaC
IaC
ํด๋ผ์šฐ๋“œ
ํด๋ผ์šฐ๋“œ

์ƒˆ์†Œ์‹

8 ๊ฐœ

  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์ง€์‹๊ณต์œ ์ž ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    ์•ž์„œ ๊ณต์ง€๋“œ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ฅธ ๊ทธ๋ฆฌ๊ณ  ๋‚  ๊ฒƒ ๊ทธ๋Œ€๋กœ์˜ ๊ฐ•์˜๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœํŽธ์„ ์ง„ํ–‰ํ–ˆ๊ณ , ์˜ค๋Š˜ ๋ถ€๋กœ ์‹ ๊ทœ ์ดฌ์˜ํ•œ ๊ฐ•์˜๋“ค ์—…๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ ๋์Šต๋‹ˆ๋‹ค.

    ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ ๋ง์”€๋“œ๋ฆฌ๋ฉด,

    1. ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„

      1. VPC Cidr ์„ค๊ณ„ ๋ฐ AWS Network Firewall ๊ตฌ์ถ•

      2. Steampipe + Streamlit์„ ํ†ตํ•œ ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ ์ œ์ž‘

         

      3. Terraform ๊ด€๋ จ Remote State, depends_on ๋“ฑ

    2. ๊ฐœ์„ ๋œ ๋ถ€๋ถ„

      1. Python์˜ ํŠน์ • ๊ธฐ๋Šฅ๋“ค์˜ ๋‚˜์—ด์ด ์•„๋‹Œ, boto3๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์ ์ง„์  ์ฝ”๋“œ ๊ฐœ์„ 

      2. Terraform ๊ด€๋ จ ํ’๋ถ€ํ•œ ์˜ˆ์‹œ ๋ฐ ์‹ค์Šต

      3. ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จ๋˜๊ฑฐ๋‚˜ ๊ฐ•์˜์™€ ์ง์ ‘์ ์ธ ์—ฐ๊ด€์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ๋ถ€๋ถ„ ์ œ์™ธ

    3. ์ œ๊ฑฐ๋œ ๋ถ€๋ถ„ (6๊ฐœ์›” ~ 1๋…„ ์ •๋„๋Š” ๋‚จ๊ฒจ๋‘˜ ๊ณ„ํš)

      1. ๊ธฐ์กด ๊ฐ•์˜ ๋ถ€๋ถ„

    ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ์ˆ˜๊ฐ•ํ•˜์…จ๋˜ ๋ถ„๋“ค์ด๋ผ๋ฉด Python, Terraform ๋ถ€๋ถ„์€ ์ด๋ฏธ ์ž˜ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ ๊ฐ™์•„์„œ, ํ”„๋กœ์ ํŠธ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กญ๊ฒŒ ๋ณด์‹œ๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ๋‚จ์€ 2024๋…„ ๋งˆ๋ฌด๋ฆฌ ์ž˜ ํ•˜์‹œ๊ณ , ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›๋Š” 2025๋…„ ๋˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ์ฒœ๊ฐ•๋ฏผ ๋“œ๋ฆผ.

    0
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์ง€์‹๊ณต์œ ์ž ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    ๊ฐ•์˜๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ๋Œ€๋žต 1๋…„ 8๊ฐœ์›” ์ •๋„๊ฐ€ ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.

    ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ๋“ค๋„ ์žˆ๊ณ , ์ฒ˜์Œ ์ดฌ์˜ํ•œ ๊ฐ•์˜๋‹ค ๋ณด๋‹ˆ ์˜์ƒ์ด๋‚˜ ์ž๋ฃŒ, ๊ฐ•์˜ ๋‚ด์šฉ ๋“ฑ์ด ์—…๋ฐ์ดํŠธ ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.(์ง€๊ธˆ ๋ณด๋‹ˆ, ๊ฐ•์˜ ๋‚œ์ด๋„์— ๋น„ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ๋“ค์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์ง€ ์•Š๋‚˜.. ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š”.)


    ๊ทธ๋ž˜์„œ! ๊ฐ•์˜๋ฅผ ๊ฐœํŽธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

    [์œ ์ง€๋˜๋Š” ๋ถ€๋ถ„]

    1. ํ˜„์žฌ ์ปค๋ฆฌํ˜๋Ÿผ์˜ ์„น์…˜

      1. ์„ธ๋ถ€ ์ง„ํ–‰ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    [์‚ญ์ œ๋  ๋ถ€๋ถ„]

    1. Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

      1. MultiProcesses

        1. ํ˜„์žฌ๋กœ์ฌ ๋ถˆํ•„์š”ํ•˜๋‹ค ์ƒ๊ฐ๋จ

      2. GIL ๊ด€๋ จ ๋‚ด์šฉ

        1. ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ๋„ˆ๋ฌด ๋งŽ์€๊ฑธ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๊ณ , ๋ถˆํ•„์š”ํ•ด๋ณด์ž„.

    2. Terraform ํ”„๋กœ๊ทธ๋ž˜๋ฐ

      1. IAM์„ ์ด์šฉํ•œ ํ…Œ๋ผํผ ์„ค๋ช…

        1. ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์„ค๋ช… ๋Œ€์ฒดํ•  ์˜ˆ์ •

      2. test ๊ด€๋ จ ๋‚ด์šฉ

    [์ถ”๊ฐ€๋  ๋ถ€๋ถ„]

    1. 3-Tier ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ VPC ์„ค๊ณ„

    2. AWS Network Firewall์„ ํ™œ์šฉํ•œ ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜


    ์•„๋ฌด๋ฆฌ ๋Šฆ์–ด๋„ ์˜ฌํ•ด ์•ˆ์—๋Š” ์™„์ „ํžˆ ๊ฐœํŽธ๋œ ์˜์ƒ์œผ๋กœ ๋Œ€์ฒดํ•˜๋ ค๊ณ  ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค๋ฌธ๋„ ๋ฐ›์œผ๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœํŽธ ๊ด€๋ จ ์„ค๋ฌธ

    ์œ„ ๋งํฌ๋ฅผ ํ†ตํ•ด ์˜๊ฒฌ ์ ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.(๋กœ๊ทธ์ธ์€ ํ•„์š”ํ•˜์ง€๋งŒ, ์ฃผ์†Œ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค.)

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ์ฒœ๊ฐ•๋ฏผ ๋“œ๋ฆผ.

    2
  • ์•ˆ๋…•ํ•˜์„ธ์š”. ์ง€์‹๊ณต์œ ์ž ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    ์ด๋ฒˆ์— "์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ๋„์ปค์™€ ์ปจํ…Œ์ด๋„ˆ"๋ผ๋Š” ๊ฐ•์˜๋ฅผ ์ถœ์‹œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (์˜คํ”ˆ์ผ์€ ์•„์ง ๋ฏธ์ •)

    ์ด์— ๋”ฐ๋ผ, ์•„๋ž˜ ๋ชฉ๋ก์˜ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ• ์ค‘์ด์‹  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ์˜ ๋งˆ์Œ์„ ๋‹ด์•„ ์ˆ˜๊ฐ•์ƒ ๋“ฑ๋ก ์ด๋ฒคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    1. ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

    2. ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ์ค‘์ธ AWS ํด๋ผ์šฐ๋“œ IAM ์ดํ•ด์™€ ๋ณด์•ˆ

    3. [DevOps] ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ(CI/CD) ๋งŒ๋“ค๊ธฐ


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

    ํ•ญ์ƒ ์–‘์งˆ์˜ ๊ฐ•์˜๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    1
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์‚ฌ ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    Terraform 1.8 ๋ฒ„์ „์—์„œ provider-defined functions ๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์ถœ์‹œ ๋์Šต๋‹ˆ๋‹ค.

    ๊ฐ„๋‹จํžˆ ์–˜๊ธฐํ•˜๋ฉด, ํ”„๋กœ๋ฐ”์ด๋” ๋ ˆ๋ฒจ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋Š”๊ฑด๋ฐ์š”. ๋ฐ”๋กœ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด,

    terraform {
      required_providers {
        aws = {
          source = "hashicorp/aws"
        }
      }
    }
    
    provider "aws" {}
    
    # result: 
    # {
    #   "partition": "aws",
    #   "service": "iam",
    #   "region": "",
    #   "account_id": "444455556666",
    #   "resource": "role/example",
    # }
    output "role" {
      value = provider::aws::arn_parse("arn:aws:iam::444455556666:role/example")
    }
    
    # result: 
    # {
    #   "partition": "aws",
    #   "service": "elasticloadbalancing",
    #   "region": "us-east-2",
    #   "account_id": "123456789012",
    #   "resource": "loadbalancer/app/my-load-balancer/1234567890123456",
    # }
    output "elb" {
      value = provider::aws::arn_parse("arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456")
    }
    

    (๋ฏธ์ณค๋‹ค...)

    ๋‚˜์˜จ์ง€ ์–ผ๋งˆ ์•ˆ๋œ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์ด ํ™•์‹คํžˆ ๋งŽ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ, ์„ ์–ธํ˜• ์–ธ์–ด๋ฅผ ๋‹ค์–‘ํ•œ ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ ˆ์ฐจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ(split ํ›„์— ์ธ๋ฑ์Šค ์ ‘๊ทผํ•ด์„œ local์— ์ €์žฅํ•˜๊ณ ...), ์กฐ๊ธˆ ๋” ์„ ์–ธ์ ์œผ๋กœ ์ง€์›์ด ๋˜์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    ๋งค์šฐ ๋”ฐ๋ˆ๋”ฐ๊ทผํ•œ ๊ธฐ๋Šฅ์ด๋ผ์„œ ์—„์ฒญ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ๋ณด์‹ค ๋ถ„๋“ค์€ ๋งํฌ ์ฐธ๊ณ ํ•˜์„ธ์š”!

    ๋ณ„๋ณ„ ํ•จ์ˆ˜๋“ค์ด ์ƒ๊ฒจ๋‚ ๊ฑธ ์ƒ๊ฐํ•˜๋‹ˆ ๊ทธ ๋™์•ˆ ๋‚ด์žฅํ•จ์ˆ˜ ์ฐพ์•„์„œ ๊ตฌํ˜„ํ–ˆ๋˜ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๋ณด์ƒ๋ฐ›์€ ๊ธฐ๋ถ„์ด๋„ค์š”. ํ•ด๋‹น ๋‚ด์šฉ์€ ์กฐ๊ธˆ ๋” ํŒŒ์•…ํ•ด๋ณด๊ณ  ๋ณ„๋„๋กœ ๊ฐ•์˜ ์ œ์ž‘ํ•˜์—ฌ ์—…๋กœ๋“œ๋„ ์ง„ํ–‰ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    2
  • ์ฒœ๊ฐ•๋ฏผ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

    ๏ฝฅ

    ์ˆ˜์ •๋จ

    ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์‚ฌ ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    Terraform 1.7 ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์ฆˆ ๋์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๊ณต์ง€๋Š” ์—ฌ๊ธฐ์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ƒ๊ฐ๋ณด๋‹ค (ํฌ๊ฒŒ ์ŠคํŠธ๋ ˆ์Šค ๋ฐ›์„๋งŒํ•œ) ํฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋Š”๋ฐ์š”.

    1. ํ…Œ์ŠคํŠธ ์ดํ›„ ๋ชจ๋“ˆ์ด ์‚ญ์ œ๋˜๋Š” ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

      1. ๊ธฐ์กด

        1. ๋ฉ”์ธ ์ƒํƒœ ํŒŒ์ผ

        2. ๊ฐ ๋ชจ๋“ˆ๋ณ„ ์ƒํƒœ ํŒŒ์ผ(์—ญ์ˆœ)

        3. ๊ทธ๋ ‡๊ธฐ์— ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์‹œ, ๋ฉ”์ธ ์ƒํƒœ ํŒŒ์ผ์— ์ ์žฌ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์— ์˜์กด X

      2. ๋ณ€๊ฒฝ

        1. run ๋ธ”๋ก ์—ญ์ˆœ์œผ๋กœ ์ƒํƒœ ํŒŒ์ผ ์‚ญ์ œ

        2. ๊ทธ๋ ‡๊ธฐ์— ์ผ์ฐ ์‚ญ์ œ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์— ์˜์กด X

      3. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ

        1. image

        2. ์˜ˆ์ „์—๋Š” ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, 1.7๋ถ€ํ„ฐ๋Š” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    2. Mocks (in beta)

      1. ๊ฐ„๋‹จํžˆ ๋ง์”€๋“œ๋ฆฌ๋ฉด ์‹ค์ œ ํ”„๋กœ๋ฐ”์ด๋”, ๋ฆฌ์†Œ์Šค, ๋ฐ์ดํ„ฐ, ๋ชจ๋“ˆ์„ ์ƒ์„ฑ/์‚ญ์ œ/์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ํŠน์ •ํ•œ ๊ฐ’์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

      2. ๋ฏธ๋ฆฌ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ, ๊ฐ„๋‹จํžˆ ๋ฐฐํฌ ๋˜๋Š” ์ƒ์„ฑ๋˜๋Š” ํ˜•ํƒœ๋ฅผ mock ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด์ฃผ๋ฉด ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

      3. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      # main.tftest.hcl
      
      mock_provider "aws" {
        override_data {
          target = module.credentials.data.aws_s3_object.data_bucket
          values = {
            body = "{\"username\":\"username\",\"password\":\"password\"}"
          }
        }
      }
      
      run "test" {
        assert {
          condition     = jsondecode(local_file.credentials_json.content).username == "username"
          error_message = "incorrect username"
        }
      }
      1. ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ณ  run ๋ธ”๋ก์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    3. 1.7 ๋ฆด๋ฆฌ์ฆˆ์— ๋Œ€ํ•œ ํ›„๊ธฐ

      1. ๋งˆ์ด๋„ˆ ๋ฒ„์ „ ํ•œ ๋ฒˆ ๋งŒ์— ์ •๋ง ์ค‘์š”ํ•œ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด ์ •๋ง ๋งˆ์Œ์ด ์•„ํ”„๊ฒŒ ๋А๊ปด์ง‘๋‹ˆ๋‹ค. ํ˜น์‹œ๋‚˜ ์ œ ๊ฐ•์˜๋ฅผ ๋ณด์‹œ๊ณ  ๊ธฐ์กด ์‚ญ์ œ ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“œ์‹  ๋ถ„๋“ค๊ป˜ ๋Œ€์‹  ์‚ฌ๊ณผ๋ฅผ ๋ง์”€์„ ๋“œ๋ฆฝ๋‹ˆ๋‹ค...

      2. ์œ„์˜ ์ด์œ  + in beta ์ƒํƒœ์ด๊ธฐ์— Mocks์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ถ”ํ›„์— ์กฐ๊ธˆ ๋” ์„ฑ์ˆ™ํ•ด์ง€๊ณ  ๋‹จ๋‹จํ•ด์ง€๋ฉด ์ถ”๊ฐ€๋กœ ์ฐ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์–ด์จ‹๋“  ์ถœ์‹œ๋œ ๋‚ด์šฉ์€ ์ „๋‹ฌ๋“œ๋ฆฌ๋Š”๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™๊ธฐ์— ์ด๋ ‡๊ฒŒ ์ƒˆ์†Œ์‹์„ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    0
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์‚ฌ ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    Python GIL๊ณผ ๊ด€๋ จํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํ•œ ์˜์ƒ์„ ์ดฌ์˜ ํ›„ ์—…๋กœ๋“œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

    ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    0
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์‚ฌ ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    Terraform 1.6 ์—์„œ ์ถ”๊ฐ€๋œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ ๊ด€๋ จํ•˜์—ฌ ๊ฐ•์˜๋ฅผ ์ถ”๊ฐ€ ํ–ˆ์Šต๋‹ˆ๋‹ค.

    ์ฃผ์š” ์ถ”๊ฐ€ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    1. ํ…Œ๋ผํผ ๊ธฐ์กด ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…

    2. Custom Conditions ์„ค๋ช…

    3. .tftest.hcl ํŒŒ์ผ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

    4. ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๋‚ด์šฉ(์„ฑ๊ณต/์‹คํŒจ ํ…Œ์ŠคํŠธ ๋“ฑ)

    5. ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ์ค‘ ์ƒํƒœ(state) ๊ด€๋ฆฌ, ์‹คํ–‰/์‚ญ์ œ ์ˆœ์„œ

    6. ํ…Œ์ŠคํŠธ ์ „๋žต


    ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    0
  • ์•ˆ๋…•ํ•˜์„ธ์š”.

    ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์‚ฌ ์ฒœ๊ฐ•๋ฏผ์ž…๋‹ˆ๋‹ค.

    ๊ฐ•์˜์—์„œ ์‚ฌ์šฉํ•œ Python / Terraform ๋ฒ„์ „ ๊ด€๋ จํ•˜์—ฌ ๊ณต์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ์†Œ์‹์„ ๋ฐœํ–‰ํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

    [Python]

    Python์€ ํ˜„์žฌ 3.12 ๊นŒ์ง€ ๊ณต๊ฐœ๊ฐ€ ๋œ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, (์ง€๊ทนํžˆ ์ œ ์ฃผ๊ด€์ ์ธ ํŒ๋‹จ์œผ๋กœ) ์•„์ง๊นŒ์ง€๋Š” ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด์„œ ํ˜„์žฌ ๊ฐ•์˜์— ์ถ”๊ฐ€ํ•  ๋‚ด์šฉ์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
    3.10 ~ 3.12 ๋ฒ„์ „์˜ ์ฃผ์š” ๋ณ€๊ฒฝ์ ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    1. Python ์†๋„ ํ–ฅ์ƒ(ํ•˜์ง€๋งŒ ์€ํƒ„ํ™˜์€ ์—†๋‹ค) -> 3.11 / 3.12

      1. ๊ทธ๋Ÿผ์—๋„ ํŠน์ • ์ž‘์—…์€ ๋А๊ปด์งˆ ์ •๋„๋กœ ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    2. ํƒ€์ž… ๊ด€๋ จ ๋งŽ์€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ๊ฐ•ํ™” -> 3.10 ~ 3.12

      1. ์ž๋ฐ”(ํƒ€์ž…)์Šคํฌ๋ฆฝํŠธ์˜ ๊ธธ์„ ๊ฐ€๋‚˜?

    3. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ณ„ GIL ๋„์ž… -> 3.12

      1. ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฐ™์ด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋‚ ์ด ์˜ฌ๊นŒ?

      2. ํ˜„์žฌ๋Š” Python C API ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

        1. ์ˆœ์ˆ˜ C๋กœ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์†๋„๋‚˜ ํšจ์œจ์ด ๊ฐœ์„ ๋ ๋“ฏ?(๊ฐœ์„ ํ•œ๋‹ค๋ฉด)

    ์ •๋„ ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด์™ธ์—๋„ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์‚ฌ์šฉ ์ค‘๋‹จ๋˜๊ณ , ๊ฐœ์„ (๋˜๋Š” ์ถ”๊ฐ€)๋˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ, ๋‹น์žฅ ์•Œ์•„์•ผ ํ•  ์ •๋„๋กœ ์ค‘์š”ํ•œ ๋‚ด์šฉ์€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

    ์ถ”๊ฐ€๋กœ AWS Lambda์—์„œ๋„ ํ˜„์žฌ 3.11 ๊นŒ์ง€ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ์–ด์ฐŒ๋๋˜ ํ˜„์žฌ ๊ณ„ํš์œผ๋ก  Python 3.13์ด ๋ฐœํ‘œ(release)๋˜๋ฉด ๊ด€๋ จ ๊ฐ•์˜๋ฅผ ์ถ”๊ฐ€ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

    [Terraform]

    ํ…Œ๋ผํผ ๋˜ํ•œ, 1.2 ~ 1.5 ๋ฒ„์ „์„ ๊ฑฐ์น˜๋ฉฐ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€ ๋์Šต๋‹ˆ๋‹ค.

    1. variable์— optional ์‚ฌ์šฉ ๊ฐ€๋Šฅ -> 1.3

      1. Python์—์„œ obj.get("key", "default") ์™€ ๊ฐ™์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    2. null_resource๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋ณธ terraform_data -> 1.4

      1. ์ถ”๊ฐ€์ ์ธ ํ”„๋กœ๋ฐ”์ด๋” ๋‹ค์šด๋กœ๋“œ ์—†์ด ๋Œ€์ฒด ๊ฐ€๋Šฅ

    3. ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ import ๊ฐ€๋Šฅ -> 1.5

    4. check ๋ธ”๋ก์„ ํ†ตํ•œ ๊ฒ€์ฆ ๊ฐ•ํ™” -> 1.5

    ๋‹ค๋งŒ, ์œ„์˜ ๊ธฐ๋Šฅ๋“ค์€ ๋ชจ๋‘ ๋Ÿฐํƒ€์ž„(์‹คํ–‰ ์‹œ)์— ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋“ค์ด๊ธฐ์— ํฌ๊ฒŒ ์†Œ๊ฐœํ•ด๋“œ๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ๋А๋ผ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ,

    Terraform 1.6 ๋ฒ„์ „์—์„œ ๋“œ๋””์–ด ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ํ…Œ์ŠคํŠธ๋Š” 1) ๋Ÿฐํƒ€์ž„๊ณผ ๋ถ„๋ฆฌ๋˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜, 2) ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜คํ”ˆ์†Œ์Šค๋“ค์„ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ์ถœ์‹œ๋กœ ์ธํ•ด ์ด์ œ ๋ณ„๋„์˜ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

    ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ๋‹ค์Œ์ฃผ ์ค‘์— ๊ฐ•์˜๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    0

โ‚ฉ66,000