모든 포스트
테라폼 운영 강좌 #6 실행 플랫폼 비교: 순수 CI, HCP Terraform, Atlantis, Spacelift
직접 짠 GitHub Actions 워크플로가 어디까지 감당되고 어디서 힘들어지는지를 기준으로, 관리형 실행 플랫폼인 HCP Terraform과 셀프호스트 OSS인 Atlantis, 상용 전문 플랫폼인 Spacelift 계열을 비교합니다. 정책 코드화, RBAC, 실행 이력 시각화 같은 플랫폼의 부가 가치와 요금 구조를 짚고, 팀 규모별 선택 기준을 정리하겠습니다.
테라폼 운영 강좌 #5 대규모 구조화: 스택 분할 기준, 스택 간 참조, Terragrunt 도입 시점
하나의 state가 커질 때 생기는 plan 지연, 블라스트 반경, 팀 간 잠금 경합 문제를 짚고, 변경 빈도와 수명과 소유 팀을 기준으로 스택을 나누는 방법을 정리합니다. 스택 간 값 전달의 두 방식인 terraform_remote_state와 SSM 파라미터의 결합도 차이, 모노레포 운영 규약, 그리고 보일러플레이트가 임계를 넘을 때의 Terragrunt 도입 판단까지 다루겠습니다.
테라폼 운영 강좌 #4 보안·비용 스캔: trivy, checkov, Infracost로 PR 가드레일
보안 설정 실수를 apply 전에 잡는 정적 스캐너 trivy와 checkov를 비교해 도입하고, 오탐 예외 처리를 이유와 함께 코드에 남기는 규칙을 세웁니다. Infracost로 PR에 월 비용 변화를 코멘트로 표시해 비용 리뷰를 배포 전 단계로 당기고, default_tags 기반 비용 추적까지 연결해 PR 가드레일을 완성하겠습니다.
테라폼 운영 강좌 #3 코드 품질과 테스트: tflint, pre-commit, terraform test
fmt와 validate 위에 tflint를 얹어 provider 지식 기반의 오류(존재하지 않는 인스턴스 타입 등)를 plan 전에 잡고, pre-commit 훅으로 커밋 시점에 자동화합니다. 테라폼 내장 테스트 프레임워크인 terraform test의 tftest 파일과 run·assert 구조를 모듈 테스트 예제로 익히고, plan 테스트와 apply 테스트의 비용 차이에 따른 사용 기준까지 정리하겠습니다.
테라폼 운영 강좌 #2 drift와 state 수술: 정기 감지, import 블록, removed 블록
코드 밖에서 일어난 변경을 정기 plan 워크플로와 -detailed-exitcode로 감지하는 체계를 만들고, drift에 대한 세 가지 대응(코드로 흡수, apply로 되돌림, ignore_changes)의 선택 기준을 정리합니다. 콘솔에서 태어난 리소스를 import 블록으로 편입하고 -generate-config-out으로 코드 초안을 뽑는 절차, state에서만 제거하는 removed 블록까지 다루겠습니다.
테라폼 운영 강좌 #1 협업 워크플로: PR에서 plan 리뷰, GitHub Actions로 apply
로컬 apply가 팀에서 만드는 권한 집중과 리뷰 부재 문제를 짚고, PR에는 plan을 코멘트로 남기고 병합하면 CI가 apply 하는 표준 워크플로를 GitHub Actions로 구성합니다. OIDC 역할 연결, plan 출력의 PR 코멘트 자동화, concurrency로 동시 apply를 막는 설정까지, 사람 손의 apply를 없애는 첫 단계를 만들겠습니다.
테라폼 실전 강좌 #10 도메인·HTTPS·완성: Route 53, ACM 검증, CloudFront와 provider alias
Route 53 호스티드 존을 데이터 소스로 연결하고 ACM 인증서를 DNS 검증 리소스 세 개의 관용구로 발급해 ALB에 HTTPS 리스너와 리다이렉트를 답니다. CloudFront용 인증서를 위해 provider alias로 us-east-1을 함께 쓰는 방법을 다루고, OAC로 닫힌 S3 버킷을 서빙하는 CDN과 별칭 레코드까지 연결해 열 편의 아키텍처를 완성하겠습니다.
PostgreSQL LISTEN/NOTIFY: 어디까지 쓰며 언제 메시지 큐로 넘어가나
PostgreSQL 내장 pub/sub인 LISTEN/NOTIFY의 실전 사용 범위를 정리합니다. 트랜잭션과 함께 커밋 시점에 발행되는 동작 원리, 8000바이트 페이로드 한도와 "키만 보내라" 원칙, 리스너가 없으면 사라지는 휘발성, 대량 발행 시 커밋 직렬화 병목이라는 규모의 한계, 그래서 정석이 되는 "알림은 깨우는 신호 + 작업은 SKIP LOCKED 테이블 큐" 조합, 그리고 진짜 메시지 큐로 넘어가는 기준까지 다루겠습니다.
테라폼 실전 강좌 #9 환경 분리: 워크스페이스의 한계, 디렉터리 구조, moved 리팩터링
워크스페이스 방식이 환경 분리에서 부딪히는 한계를 짚고, modules와 envs 디렉터리로 나누는 실무 표준 구조를 세웁니다. 단일 디렉터리로 자란 코드를 network, compute, data 모듈로 리팩터링하면서 moved 블록으로 재생성 없이 주소를 옮기고, dev와 prod가 같은 모듈을 다른 값으로 쓰는 구성을 완성하겠습니다.
PostgreSQL Row-Level Security: 멀티테넌트 격리를 DB가 강제하게 만들기
행 단위 접근 제어(RLS)의 실전 도입을 다룹니다. WHERE tenant_id 누락이라는 멀티테넌트 최악의 사고를 애플리케이션 규율이 아니라 DB 강제로 막는 구조, ENABLE ROW LEVEL SECURITY와 CREATE POLICY의 기본형, current_setting으로 요청마다 테넌트를 지정하는 표준 패턴과 커넥션 풀 주의점, 성능의 조건(tenant_id 인덱스), 그리고 RLS를 안 쓰는 게 나은 경우까지 다루겠습니다.
timestamptz 함정 모음: PostgreSQL 시간 처리에서 틀리기 쉬운 것들
PostgreSQL 시간 처리의 실전 함정을 모았습니다. timestamptz가 시간대를 저장한다는 오해, 결과가 세션 TimeZone에 따라 달라 보이는 원리, AT TIME ZONE이 타입에 따라 반대로 동작하는 이중성, date_trunc·날짜 그룹핑이 자정 기준을 어디에 두느냐로 달라지는 문제, 미래 일정은 timestamptz만으로 부족한 이유(시간대 규칙 변경), now()와 clock_timestamp()의 차이까지 다루겠습니다.