코드 불변성

Definition pending verification.

불변 코드는 배포된 후 수정하거나 변경할 수 없는 소프트웨어 구성 요소 또는 전체 애플리케이션을 의미합니다. 기존 인스턴스를 업데이트하는 대신, 변경 사항이 발생하면 새 버전의 코드를 배포해야 하며, 종종 새로운 인프라 또는 구성과 함께 배포됩니다. 이 원칙은 현대 배포 전략, 특히 클라우드 네이티브 아키텍처 및 DevOps 관행의 초석입니다. 코드의 불변성은 환경 전반에 걸쳐 일관성과 예측 가능성을 보장합니다. 변경이 필요할 때 완전히 새로운 아티팩트(예: 컨테이너 이미지, 가상 머신 이미지)를 빌드, 테스트 및 배포합니다. 새 버전에서 문제가 발생하면 이전 불변 버전을 다시 배포하기만 하면 시스템을 롤백할 수 있습니다. 이 접근 방식은 상태 드리프트 관리, 분산 시스템 전반에 걸친 원자적 업데이트 보장, 업데이트 프로세스 중 잠재적 충돌 처리와 관련된 복잡성을 제거합니다. 테스트를 단순화하고, 안정성을 향상시키며, 변경 가능한 인프라와 관련된 공격 표면을 줄여 보안을 강화합니다.

        graph LR
  Center["코드 불변성"]:::main
  Pre_cryptography["cryptography"]:::pre --> Center
  click Pre_cryptography "/terms/cryptography"
  Rel_smart_contracts["smart-contracts"]:::related -.-> Center
  click Rel_smart_contracts "/terms/smart-contracts"
  Rel_advanced_propulsion_systems["advanced-propulsion-systems"]:::related -.-> Center
  click Rel_advanced_propulsion_systems "/terms/advanced-propulsion-systems"
  Rel_consciousness_simulation_hardware["consciousness-simulation-hardware"]:::related -.-> Center
  click Rel_consciousness_simulation_hardware "/terms/consciousness-simulation-hardware"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 5살도 이해할 수 있게 설명

영구 잉크로 이야기를 썼다고 상상해 보세요. 무언가를 바꾸고 싶다면 지우는 것이 아니라, 변경 사항을 포함한 완전히 새로운 이야기를 쓰고 이전 이야기를 완전히 교체합니다. 이렇게 하면 항상 깨끗하고 정확한 버전을 유지할 수 있습니다.

🤓 Expert Deep Dive

코드 배포에 적용되는 불변 인프라는 변경 가능한 인플레이스 업데이트에서 불변, 교체 및 배포 주기로 운영 패러다임을 근본적으로 전환합니다. 이 접근 방식은 선언적 구성 및 코드형 인프라(IaC) 원칙과 일치합니다. 아키텍처 측면에서는 버전화된 아티팩트(예: Docker 이미지, 서버리스 함수 패키지)를 빌드, 테스트 및 배포할 수 있는 강력한 CI/CD 파이프라인이 필요합니다. 롤백 전략은 간단해집니다. 이전에 배포된 알려진 양호한 불변 아티팩트로 되돌립니다. 이는 코드 수준에서 '구성 드리프트' 개념을 제거하고 상태 관리를 단순화합니다. 단점으로는 각 배포에 새 인스턴스가 필요하여 잠재적으로 리소스 소비가 증가하고, 이러한 불변 배포의 수명 주기를 관리하기 위한 정교한 오케스트레이션 도구(예: Kubernetes)가 필요하다는 점이 있습니다. 보안 이점은 배포 중 공격 표면이 줄어들고 안전한 상태로 쉽게 되돌릴 수 있다는 점에서 비롯됩니다.

🔗 관련 용어

선행 지식:

📚 출처