
VPC 생성
Subnet 생성
Internet Gateway 연결
Route Table 구성
Security Group 생성
EC2 생성
Load Balancer 생성
IAM Role 생성
RDS 생성* 사람마다 설정이 달라질 수 있다.
* 동일한 환경을 다시 구축하기 어렵다.
* 어떤 설정을 변경했는지 추적하기 어렵다.
* 운영 환경과 개발 환경이 서로 달라질 수 있다.
* 사람이 직접 작업하면서 실수가 발생하기 쉽다.
-> 이러한 문제를 해결하기 위해 등장한 개념이 Infrastructure as Code(IaC)이다.
IaC란 인프라를 코드로 정의하고 관리하는 방식이다.
예를 들어 Terraform에서는 다음과 같은 코드로 EC2를 정의할 수 있다.
resource "aws_instance" "web" {
ami = "ami-xxxxxxxx"
instance_type = "t3.micro"
}
그리고 "terraform apply"라는 명령어를 시행하면 테라폼이 aws api를 호출하여 실제 EC2를 생성한다.
이처럼 사람이 직접 콘솔을 클릭하는 대신 코드가 인프라를 생성한다.
IaC는 인프라의 원하는 상태를 코드로 정의하고 그 사태에 맞게 유지하는 방식이다.
즉, 생성 뿐만 아니라 변경과 삭제까지 모두 가능하다.
수정사항을 반영하고 terraform apply를 하면 변경사항을 계산해서 필요한 리소스를 수정할 수 있다.
-> 이를 통해 DevSecOps환경을 구축할 수 있다.

Terraform은 인프라를 코드로 생성, 변경, 삭제하는 IaC도구이다.
GitOps는 Git과 동일한 상태를 일치시키는 운영방ㅅ기이다.
Terraform에는 Kubernetes Provider가 있기 때문에 Deployment, Service, Namespace 등의 Kubernetes 리소스를 생성할 수도 있다.
하지만 실무에서는 일반적으로 역할을 분리한다.
Terraform은
와 같은 클러스터 인프라를 생성한다.
반면 Kubernetes 내부에서 실행되는
등은 Kubernetes와 GitOps 도구(예: Argo CD)가 관리하는 경우가 많다.
이는 Kubernetes가 애플리케이션의 배포, 롤링 업데이트, 자동 복구(Self-Healing)와 같은 기능을 지속적으로 수행하기 때문이다.
IaC는 단순히 인프라를 자동으로 생성하는 기술이 아니다.
인프라를 코드로 정의하고, 원하는 상태를 일관되게 유지하며, 변경 이력을 관리하고, 자동화와 보안까지 연결하는 현대적인 인프라 관리 방식이다.
특히 클라우드 환경에서는 인프라 규모가 커질수록 IaC의 중요성은 더욱 커진다.