여기서 핵심 포인트는 운영자가 새 테넌트를 추가할 때 AWS 콘솔, kubectl & terraform apply 등
명령어를 칠 필요가 없습니다.
Argo Workflows로 온보딩을 트리거하면 Gitea에 설정 파일이 생성되고, Flux가 감지해서
앱 배포와 AWS 리소스 생성을 전부 자동으로 처리해줘요. 이게 플랫폼 엔지니어링 입니다!
Why is a platform Engineering structure necessary?
실습 환경 아키텍처에 대해서 설명드렸는데, 저도 처음에 감이 안잡혀서 부연 설명을 드리고자 합니다.
이런 플랫폼 엔지니어링 구조가 명확하게 왜 필요할까?
먼저, 일반적인 스타트업이 SaaS를 운영한다고 가정해봅시다.
고객(테넌트)이 100명이면 → 100개의 환경을 만들어야 합니다.
각 테넌트마다 DB, 큐, 앱 배포를 수동으로 하면 저희 운영팀이 힘들어요 ..
그래서 "테넌트 추가 = Git에 설정 파일 하나 올리면 끝" 이 되도록 자동화하는 게 이번 주차 핵심 !
위에서 설명드린 플랫폼 엔지니어링 아키텍처를 구현하기 위한 도구들을 설명드리겠습니다.
Gitea란? GitHub를 내 서버에 직접 설치해서 쓰는 것
GitHub, GitLab을 써봤나요? 이것들은 SaaS입니다. 즉 남의 서버에 올리는 거에요.
Gitea는 그걸 내 서버(여기서는 EKS)에 직접 설치해서 쓰는 오픈소스 Git 서버 입니다.
그렇다면 이번 실습에서 Gitea를 쓰는 이유는 추측해보기에는 ..
AWS Workshop 환경이라 인터넷의 GitHub에 접근하기 어려운 구조
실제 기업 환경도 보안상 내부망에 Git 서버를 두는 경우가 많음
Gitea Actions = GitHub Actions랑 문법이 거의 동일한 CI 기능도 내장
Flux v2란? 변경이 생기면 클러스터에 자동으로 반영해주는 쿠버네티스 컨트롤러
기존 방식이랑 비교해볼까요?
[기존 Push 방식]
운영자 → kubectl apply 또는 helm install → 클러스터 반영
문제: 누군가 kubectl로 직접 클러스터를 수동 변경하면 Git이랑 상태가 어긋남
[Flux GitOps 방식]
운영자 → Git에 Push → Flux가 감지 → 클러스터 자동 반영
장점: 클러스터 상태는 항상 Git 내용과 일치가 보장됨
Flux는 EKS 안에 Pod으로 떠 있고, Gitea 저장소를 30초~1분 간격으로 polling 합니다.
즉, 변경이 감지되면 알아서 helm upgrade 또는 kubectl apply를 실행합니다.
Tofu Controller란? Terraform 코드를 EKS Pod 안에서 실행시켜주는 컨트롤러
원래 Terraform은 운영자 로컬 PC에서 'terraform apply'를 통해 Provider 리소스를 생성합니다.
그러면 Tofu를 사용하면 뭐가 다를까요?
Git에 Terraform 코드 Push
↓
Flux가 감지
↓
Tofu Controller Pod이 terraform apply 실행
↓
AWS 리소스(DynamoDB, SQS 등) 생성
즉, Terraform을 실행하는 주체가 운영자 로컬PC / CI 서버 → EKS Pod으로 바뀌는 거에요.
이게 왜 좋냐면 테넌트가 추가될 때마다 Git에 설정 파일 하나만 올리면 Flux → Tofu Controller가 알아서
AWS 리소스까지 만들어줍니다. 사람이 'terraform apply'를 칠 필요가 없겠죠 ?
참고로 OpenTofu는 Terraform의 오픈소스 포크입니다. HashiCorp가 Terraform 라이선스를 변경한 이후에 커뮤니티가 만든 대안이고, 문법은 거의 동일합니다.
Argo Workflows란? 쿠버네티스 위에서 실행되는 작업 자동화 도구
Argo CD(배포 도구)랑 헷갈릴 수 있는데 다른 도구이고, Jenkins 같은 파이프라인과 유사합니다.
Argo CD = GitOps 배포 도구 (Flux랑 경쟁 관계)
Argo Workflows = 순서가 있는 작업(Job)을 실행하는 워크플로우 엔진
이번 실습에서 Argo Workflows의 역할은 아래와 같습니다.
새 테넌트 추가 요청 발생
↓
Argo Workflows "Onboarding" 워크플로우 실행
↓
Step 1: Gitea에 테넌트 설정 파일 생성 (Git Push)
Step 2: Flux가 변경 감지
Step 3: Tofu Controller가 DynamoDB/SQS 생성
Step 4: Helm이 앱 배포
↓
테넌트 환경 완성
반대로 테넌트 해지 시엔 "Offboarding" 워크플로우가 이 과정을 역순으로 실행해서 리소스를 정리합니다.
📌 이번 SaaS 실습에서 실행하는 마이크로 서비스
현재 소스코드는 Gitea Microservice Repository에서 관리 되고 있는 'Producer' , 'Consumer' 라는 앱이
실행중이고 코드가 Push되면 Gitea Actions가 자동으로 빌드해서 ECR에 이미지 업로드 합니다.
이때 그 이미지를 Flux + Helm이 가져다가 EKS에 배포하는 실습을 구현해볼 예정입니다.