예전엔 보안 그룹 하나 열어야 하면 그냥 콘솔 들어가서 바로 수정했다.
- AWS 콘솔 로그인
- VPC → Security Groups 찾아 들어가기
- 목록 중 올바른 SG 찾기
- 인바운드 규칙 편집
- 규칙 추가 → 저장
작업 자체는 금방 끝난다. 그런데 시간이 지나면서 문제가 드러나기 시작했다.
- 누가, 언제, 왜 이 규칙을 열었는지 알 수 없음
- 잘못된 규칙을 넣어도 즉시 티가 안 남
- 팀 작업으로 가면 변경이 겹침
- 롤백이 사실상 불가능
- 변경 전에 검증하거나 리뷰받을 방법 없음
결국 콘솔 클릭으로 만든 인프라는 시간이 지나면 불안감으로 돌아온다.
바로 수정할 수 있는 건 편하지만, 그 모든 “즉흥적인 변경”이 쌓이면 시스템이 언제 터져도 이상하지 않은 상태가 된다.
Before vs After
| 변경 추적 | CloudTrail에만 남음 (찾기 어려움) | Git에 모든 변경 이력 기록 |
| 리뷰/검증 | 불가능 | PR 리뷰 + 자동 검증 |
| 롤백 | 직접 다시 클릭해서 되돌려야 함 | git revert 한 번 |
| 비용 반영 | 청구서 보고 알게 됨 | Infracost로 PR에서 바로 확인 |
| 보안/정책 검사 | 없음 | tfsec, checkov, OPA 자동 실행 |
| 문서화 | 따로 작성해야 함 | 코드 자체가 문서 |
| 협업 | “OO 열었어요” 메시지에 의존 | 변경 이유/컨텍스트가 PR에 정리됨 |
| 재사용성 | 매번 다시 클릭 | 모듈로 재사용 |
해결: Infrastructure as Code로 전환
핵심은 단순하다.
인프라를 코드로 관리하면, 결국 ‘일반 개발 코드’와 똑같은 워크플로우를 적용할 수 있다.
보안 그룹 하나 추가하는 일도 예외가 아니다.
Before (콘솔):
1. AWS 콘솔 로그인
2. VPC → Security Groups
3. prod-api-server-sg 선택
4. 인바운드 변경
5. HTTPS 규칙 추가
6. 저장
After (Terraform):
resource "aws_security_group_rule" "api_server_https" {
type = "ingress"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["10.0.0.0/16"]
security_group_id = aws_security_group.api_server.id
description = "Allow HTTPS from private subnet for ALB health checks"
}
PR 프로세스:
1. feature/add-api-https-rule 브랜치 생성
2. HCL 코드 작성
3. git commit -m "feat: Add HTTPS rule for ALB health checks"
4. PR 생성 → 자동 검증
- fmt/validate
- tfsec/checkov
- 비용 분석
- OPA 정책 검사
5. 리뷰 후 merge
6. Atlantis가 자동 apply
콘솔에서 하던 모든 작업이 PR 기반으로 구조화된다.
전체 워크플로우
개발자 GitHub AWS
│ │ │
├─ 코드 작성 │ │
├─ git push ─────────────> │ │
│ ├─ PR 생성 │
│ ├─ 자동 검증 │
│ │ ├─ plan │
│ │ ├─ 보안 스캔 │
│ │ ├─ 비용 분석 │
│ │ └─ 정책 검증 │
│ <─────────────────────── PR 코멘트 (결과) │
│ │ │
├─ 리뷰 │ │
├─ merge ────────────────> │ │
│ └─ terraform apply ─────> │
│ 인프라 변경 │
│ <─────────────────────────── 완료 │
핵심 이점 요약
1) 변경 이력 추적이 쉬워진다
# 특정 SG 변경한 사람 찾기
git log terraform/network/security-groups.tf
# 변경 내용까지 확인
git log -p -- terraform/network/security-groups.tf
자동 검증이 기본값이 된다
PR이 열리면 자동으로 다음이 실행된다:
- Terraform fmt/validate
- tfsec
- checkov
- Infracost 비용 분석
- OPA 정책 검증
잘못된 설정, 과한 권한, 비용 폭증 같은 문제들이 PR 단계에서 바로 차단된다.
3) 팀 협업이 체계적으로 바뀐다
PR 템플릿 하나로 다음이 해결된다:
- 변경 이유
- 기술적 배경
- 테스트 방법
- 보안 검토
- 체크리스트
“누가 무엇을 왜 변경했는지”가 기록으로 남는다.
4) 모듈화로 인프라 품질이 올라간다
재사용 가능한 패턴을 모듈로 만들면 실수는 줄고 속도는 빨라진다:
module "api_server_sg" {
source = "../../modules/security-group"
name = "api-server"
vpc_id = module.vpc.vpc_id
ingress_rules = [
{
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["10.0.0.0/16"]
}
]
}
실제 사례: 서비스 간 통신 허용
콘솔 방식 (지양)
“Payment API 보안 그룹에서 Order API 인바운드 열어주세요.”
→ 규칙은 열렸지만 이유는 기록되지 않는다.
→ 나중에 보면 “이거 왜 열려 있지?” 상태가 된다.
Terraform 방식
resource "aws_security_group_rule" "from_order_api" {
type = "ingress"
from_port = 8080
to_port = 8080
protocol = "tcp"
source_security_group_id = data.aws_security_group.order_api.id
security_group_id = aws_security_group.payment_api.id
description = "Allow Order API to call Payment API for payment processing"
}
PR에는 자연스럽게 컨텍스트가 붙는다
- Order → Payment 통신 필요
- 포트 8080 명확 명시
- Source SG 제한
- 최소 권한 원칙 준수
자동으로 붙는 Terraform plan + 보안/비용 검증도 PR에서 확인 가능하다.
마무리
콘솔 클릭은 빠르고 간단하지만, 결국 “결정적 순간에 아무 기록도 남지 않는 방식” 이라는 걸 깨달았다.
Terraform + PR 루틴을 도입한 뒤로는 인프라 변경이 훨씬 안정적이고 예측 가능한 흐름을 가지게 됐다.
다음 글에서는 이 PR 루틴을 실제로 자동화하고 있는 Atlantis, GitHub App, Infracost, 그리고 AI 요약 흐름까지 이어서 정리해보겠다.
'성장 스택' 카테고리의 다른 글
| AI 를 활용한 개발 (0) | 2025.10.16 |
|---|---|
| 무료 AI 리뷰를 TodoList로: 첫 오픈소스 기여 이야기 (0) | 2025.10.09 |
| PR에서 인프라 관리하기(Atlantis) – Terraform (2) (1) | 2025.09.08 |
| 2025년의 반년을 돌아보며 (0) | 2025.08.25 |
| 토스 Learner's High 1기 - 세션을 듣고 느낀점 (0) | 2024.12.22 |