Skip to content

Commit 1b2c61b

Browse files
committed
docs: 지금까지 보아왔던 배포 방식에 대해서 정리하다
- 내가 사용했던 방식들을 정리하고 다른 방법을 찾아서 할 수 있는 것을 고민해보자...
1 parent ba51ab5 commit 1b2c61b

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
Title: 배포, 나는 어떻게 구성했나
2+
Date: 2025-10-29 18:41
3+
Modified: 2025-10-29 18:41
4+
Category: Operation
5+
Tags: deploy, aws
6+
Slug: 배포-나는-어떻게-구성했나
7+
Summary: 내가 지금까지 사용했고, 구성해보았던 배포 방식에 대해서 정리한다. 그리고 배치는 "어떤 환경에 어떤 방법으로 서비스를 배치할 것인가?"에 대해서 생각해야 한다.
8+
9+
# 들어가기
10+
11+
최근 배포, 배치 환경을 구성하는데 어떤 방법을 이용해서 배포를 할 것이고, 어떤 서비스를 사용할 것인지에 대해서 고민을 하는 모습을 보았다.
12+
처음 해보는 것이니, 어떤 기술이 있어야 하고, 어떤 것들을 주의해야 하고 하는 것을 알 수 있으려나?
13+
14+
나는 익숙해진 흐름으로 배포, 배치하려면 이런 이런 솔루션이나 특정 값들을 확인해서 배포하도록 설정을 하고 있기에 정리해 놓고 다른 더 좋은 방법은 없는지 확인하려고 한다.
15+
16+
# 직접 배포와 배치
17+
18+
## A 서비스 배포
19+
20+
- 언어: Ruby
21+
- 프레임워크: Ruby on Rails
22+
- 배포/배치 도구: [Capistrano](https://github.com/capistrano/capistrano)
23+
- 배포 환경: KT Cloud 인스턴스, AWS EC2
24+
25+
Capistrano를 사용해서 원격 서버에 SSH로 연결하여, 수정된 파일을 직접 배포하고, 배치하는 구성을 작업함.
26+
27+
## B 서비스 배포 (!!부정확함!!)
28+
29+
- 언어: Python
30+
- 프레임워크: Tornado
31+
- 배포/배치 도구: Git / AWS ASG
32+
- 배포 환경: AWS EC2
33+
34+
ASG를 이용해서 EC2를 배포할 수 있도록 구성하고, EC2가 실행될 때마다 Init 항목에서 코드를 받아오도록 했었다.
35+
그런데 기억이 여기까지라 맞는지 모르겠다.
36+
37+
# 컨테이너를 이용한 배포와 배치
38+
39+
컨테이너 이미지를 만들어 배포하고, 컨테이너 이미지를 컨테이너 오케스트레이션 환경에 배치한다.
40+
41+
## C 서비스 배포
42+
43+
- 배포/배치 도구: AWS CodeBuild, GitHub Actions / AWS CodeDeploy
44+
- 배포 환경: AWS EC2
45+
46+
배포와 배치 순서는 다음과 같다.
47+
48+
1. 개발 repo에서 컨테이너 이미지를 빌드한다. (이미지 태그는 `latest`)
49+
2. AWS ECR로 생성한 이미지를 업로드한다.
50+
3. 업로드한 이미지를 기반으로 AWS CodeDeploy를 이용하여 AppSpec 문서에 작성된 행위를 진행한다.
51+
4. CodeDeploy에 설정된 ASG를 기반으로 Blue/Green 배포를 진행하여 새로운 컨테이너로 배포를 진행한다.
52+
53+
위 작업을 위해서 최소한으로 구성해야 하는 리소스는 다음과 같다.
54+
55+
- EC2 AMI : Docker 데몬이 설치되어 있어야 한다.
56+
- ASG, LT: 첫 배포에 사용될 ASG를 생성하여 AWS CodeDeploy에 등록을 해주어야 하기에 필요하다.
57+
- AppSpec에서 실행할 스크립트: 스크립트는 docker compose 파일을 생성 혹은 다른 저장소에서 가져와 실행할 수 있도록 구성한다.
58+
- GitHub 과 AWS 간 OIDC 설정과 Assume Role 생성: 서비스 간 권한을 제공하기 위해서 필요하다.
59+
60+
## D 서비스 배포
61+
62+
- 배포/배치 도구: GitHub Actions / AWS CloudFormation
63+
- 배포 환경: AWS ECS Fargate
64+
65+
배포와 배치의 순서는 다음과 같다.
66+
67+
1. 개발 repo에서 GitHub Actions를 이용하여 이미지를 빌드한다. (이미지 태그는 `버전`)
68+
2. AWS ECR로 생성한 이미지를 업로드한다.
69+
3. 업로드한 이미지를 기반으로 AWS ECS Fargate를 배포할 수 있도록 하는 GitHub Actions workflow를 실행한다.
70+
4. AWS CDK로 만들어 놓은 코드를 이용하여 AWS CloudFormation에 있는 값을 업데이트하여 배치가 진행된다.
71+
72+
위 작업을 위해서 최소한으로 구성해야 하는 리소스는 다음과 같다.
73+
74+
- AWS ECS Cluster, Service, Task definition: AWS ECS를 사용할 수 있는 환경을 먼저 만들어 두는 것이 좋다. 나는 AWS CDK를 이용하여 구성했다.
75+
- GitHub 과 AWS 간 OIDC 설정과 배치를 위한 Assume Role 생성: 서비스 간 권한을 제공하기 위해서 필요하다.
76+
77+
## E 서비스 배포
78+
79+
- 배포/배치 도구: GitHub Actions / ArgoCD
80+
- 배포 환경: AWS EKS
81+
82+
배포와 배치의 순서는 다음과 같다.
83+
84+
1. 개발 repo에서 GitHub Actions를 이용하여 이미지를 빌드한다. (이미지 태그는 `버전`)
85+
2. AWS ECR로 생성한 이미지를 업로드한다.
86+
3. ArgoCD 와 연결된 repo에서 서비스 yaml 파일을 업데이트하고 머지한다.
87+
4. ArgoCD가 트리거를 기반으로 배치를 시작한다.
88+
89+
위 작업을 위해서 최소한으로 구성해야 하는 리소스는 다음과 같다.
90+
91+
- AWS EKS: 서비스를 실행하고 접근할 수 있는 AWS 리소스를 생성한다. Terraform을 이용하였었다.
92+
- GitHub 과 AWS 간 OIDC 설정과 ArgoCD에서 사용할 Role 생성: OIDC는 필요하지만, role은 정확하지 않다. 공부해야 한다.
93+
- ArgoCD: 운영하는 클러스터가 아닌 개발 보조를 위한 EKS 클러스터를 따로 구성하여 올려야 한다.
94+
95+
# 마치며
96+
97+
내가 보았고, 구성했던 것들을 한번 정리하였는데. 지금은 "D 서비스 배포" 방식을 사용하고 주로 구성하고 있다.
98+
더 많은 배포 방식이 있을 것이고, 요구 사항에 따라 달라지는 부분이 발생할 수 있다. 그럴 땐, 제공되는 서비스가 있다면 사용하고, 없다면 만들면서 맞춰가는 방법 말고는 없긴 하다.
99+
100+
AWS EKS 배포 구성은 개발, 운영, 보조 클러스터를 만들어서 구분 짓고 배포할 수 있도록 작업을 해야 하는 것은 아직 익숙하지도 않고, 많이 해보지 않았기에 명시만 해두었다.
101+
나보다 더 잘하시는 분들이 많은 글을 쓰셨을 것으로 알고 있으니, 관련해서 검색을 해보시는 것이 좋을 듯하다.
102+
103+
구분을 위해서 (영어도 다르다) 배포와 배치를 나눠 놨으나, 개발자에게는 하나의 동작으로 인식되도록 해주면 가장 좋다고 생각한다.
104+
105+
사용가능한 솔루션은 유명한 것을 고르고 더 필요하다면 만들어서 공유 부탁드린다. :+1:

0 commit comments

Comments
 (0)