| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- JPQL
- SpringFramework
- map
- JWT
- CI/CD
- 토큰
- Component
- kotlin
- 티스토리챌린지
- OOP
- javamailsender
- 오블완
- entity
- java
- 소프트웨어설계
- Spring Boot
- springboot
- DevOps
- Configuration
- Stream
- Token
- 자바
- Spring
- 객체지향
- devpi
- Kubernetes
- 코틀린
- 스프링 부트
- BEAN
- JPA
- Today
- Total
DeveloPiano
DevOps 아키텍처 - 왜 GitHub Actions만으로는 부족할까? 본문

현업에서 DevOps 아키텍처를 처음 접하면 Terraform, Kubernetes, Helm, ArgoCD 등 처음 보는 도구들이 나열돼 있어서 당황하기 쉽다. 나도 처음에는 이렇게 생각했다.
“그냥 GitHub Actions로 서버에 배포해도 잘 되는데, 굳이 이렇게 복잡하게 갈 필요가 있을까?”
하지만 구조를 하나씩 따라가다 보니, 왜 이런 방식이 필요한지 자연스럽게 이해가 됐다. 그래서 이번 글에서는 내가 실제로 공부하면서 이해한 DevOps 아키텍처를 정리해 보려고 한다.
1. DevOps 전체 아키텍처를 처음 봤을 때 느낌

처음 접한 아키텍처 흐름은 대략 이런 느낌이다.
- Terraform이 AWS 인프라를 코드로 만든다.
- 만들어진 인프라에 Ansible이 설정을 자동으로 깔아준다.
- Kubernetes 위에서 애플리케이션이 동작한다.
- ArgoCD가 Git을 감시해서 자동으로 배포한다.
- GitHub Actions는 lint, build, 이미지 생성 같은 CI 작업을 맡는다.
- Sync Wave가 리소스 배포 순서를 조율한다.
이걸 처음 보면 복잡해 보이지만, 각 요소의 역할을 이해하고 나면 생각보다 논리적이고 자연스럽게 이어진 구조라는 걸 알게 된다.
2. 구성 요소별로 이해한 역할
Terraform - 인프라를 코드로 만든다
AWS 콘솔에서 클릭으로 만들던 VPC, Subnet, EKS 같은 리소스를 Terraform 코드로 작성해두면, 같은 환경을 그대로 재현할 수 있다.
- 실수 없이 동일한 인프라 생성
- 여러 환경을 코드 기반으로 쉽게 구성
- Git으로 변경 이력 관리 가능
즉 누가 실행해도 동일한 환경이 나온다는 점이 핵심이다.
Ansible - 서버 설정 자동화
Terraform이 집을 지었다면, Ansible은 그 집 안에 필요한 설정을 자동으로 넣어주는 역할에 가깝다.
- 패키지 설치
- OS 설정
- 초기화 작업 자동화
사람이 직접 들어가서 설치하고 설정하지 않아도 된다.
Kubernetes - 컨테이너를 대신 관리해주는 시스템
개인 프로젝트에서는 Docker만으로도 충분했지만, 규모가 커지면 Kubernetes가 필요한 이유가 분명해진다.
- 컨테이너가 죽으면 자동으로 다시 실행
- 트래픽 증가 시 자동 확장
- 여러 서버에 균형 있게 배포
- 롤링 업데이트로 무중단 배포 가능
이 기능들을 직접 구현하려면 사실상 불가능에 가깝다. 그래서 기업들이 Kubernetes를 선택하는 것이다.
ArgoCD — 배포를 Git이 대신하게 만든다
ArgoCD는 Git 저장소를 계속 감시하고 있다가 변경이 생기면 Kubernetes에 자동으로 반영한다.
즉 배포 = Git commit 이 된다.
사람이 직접 배포 명령을 입력할 필요가 없다.
Sync Wave - 배포 순서를 정리하는 기능
배포를 하다 보면 순서가 중요한 경우가 굉장히 많다.
- CRD가 먼저 있어야 Custom Resource를 생성할 수 있다.
- 네트워크 리소스가 먼저 생성되어야 서비스가 외부에 노출된다.
- 스토리지 리소스가 먼저 준비되어야 PVC가 생성된다.
이런 구조를 Sync Wave로 단계별로 조율해 장애를 줄일 수 있다.
3. GitHub Actions만 쓸 때와 무엇이 다를까?
GitHub Actions만 사용하는 방식
흐름은 꽤 단순하다.
- 코드를 push
- GitHub Actions 실행
- 서버 접속
- 이미지 배포 및 재시작
장점도 확실하다.
- 빠르고 단순함
- 작은 서비스에는 충분함
하지만 단점이 금방 드러난다.
- 서버가 죽으면 수동으로 복구해야 함
- 무중단 배포 어려움
- 롤백은 직접 재배포해야 함
- 서버 수가 늘어나면 비효율적
- 운영 환경이 사람이 실수하기 쉬운 구조
Kubernetes + ArgoCD + GitOps 방식
여기서는 GitHub Actions가 이미지 빌드까지만 담당한다. 그 이후는 Git과 ArgoCD가 맡는다.
- Git 값이 변경되면 ArgoCD가 자동 배포
- 사람 대신 시스템이 배포 관리
- 모든 배포 이력이 Git에 남음
- 롤백은 Git 버전만 되돌리면 끝
- Kubernetes가 자체적으로 복구 및 확장 처리
초기 구축 난이도는 있지만, 한 번 구축해 놓으면 안정성과 유지보수성이 압도적으로 높다.
4. 내가 내린 결론
처음에는 “GitHub Actions로 자동 배포만 되면 되지 않나?”라고 생각했지만, 공부해보면서 생각이 완전히 바뀌었다.
- GitHub Actions는 배포를 실행하는 자동화 도구
- Kubernetes + ArgoCD는 서비스 상태를 유지하고 관리하는 시스템
둘의 목적 자체가 다르다.
규모가 커지고, 장애에 민감하고, 무중단 배포가 필요하고, 서버 수가 늘어나는 환경에서는 후자의 구조가 사실상 필수에 가깝다.
Terraform, Kubernetes, ArgoCD 같은 용어는 처음 보면 어렵고 부담스럽다. 나도 그랬다.
하지만 전체 흐름을 놓고 보면 결국 메시지는 하나다.
사람이 직접 관리하던 배포는 끝났고, 이제는 시스템이 자동으로 운영을 관리하는 시대가 왔다.
그리고 그 중심에는 GitOps와 Kubernetes 등이 있다. 이해만 된다면 이후의 DevOps 구조는 훨씬 더 명확하게 보일 것이다.
