책 소개

도서관에 갔다 새로운 책이 있길래 빌려왔다. 예전부터 배포 자동화에 관심을 가지고 있었는데 (WAR 배포로 고난을 몇 번 겪으면 다들 이렇게 되지 않을까?) 엄두를 못내고 있다가 쓱 살펴보니 적당한 설명과 적당한 두께에 당장 독파 ㅎㅎ

이 책은 신입 친구들에게 소개시켜줘도 괜찮을만한게, 2장 전체를 할애해서 리눅스 명령어를 설명해주고 있다. 특히 sleep 은 대기 명령어다~ 이런 식이 아니라, 왜 sleep 명령어가 필요한지부터 설명해주는 점이 좋았다. 대략 아래와 같은 식이다.

100p (파일 권한과 리눅스 `-rw-r--r-- 1 root(소유자) root(그룹) test1` 에 대해서)
첫번째 구분자는 파일(-)/디렉토리(d)를, 
처음 3개(rw-)는 소유자(root)의 권한을, 
그다음 3개(r--)는 그룹(root)의 권한을, 나머지 3개(r--)는 모든 권한을 표기.
(중략)
권한은 r: 읽기 / w: 쓰기 / 실행: X 가 있으며 보통 그룹에 부여 되는데
(중략)
 - 소유자 r:4 w:2 -:0  / 그룹 r:4 -:0 -:0 / 누구나 r:4 -:0 -:0     

이를 다 더해서 숫자로 표기하면 소유자 6, 그룹 4, 누구나 4 => 644     
이렇게 파일 text1 은 644 권한을 가진다 할 수 있다.

그리고 중니어(?) 입장에선 1장에서 AWS에 관한 내용을 네트워크와 함께 설명하는데, 그 큰 AWS 전체를 찔금 설명하는 게 아니라 딱 이 책에서 하려는 작업에 필요한 만큼만 설명하고 실무위주로 넣은 점이 좋았다. 이론서가 아니라 진짜 CI/CD 배포를 구현하기 위해 이 책을 보는 것이니까.. 실은 이 책을 보기전에 AWS 맛보기로 AWS 구조와 서비스 : 그림과 작동원리로 쉽게 이해하는 (위키북스, 2023) 를 어느 정도 읽고 왔는데 도움이 많이 되었다. 이쪽은 다시 대출하게 되면 쓸 예정이고..


이 책은 크게 CI/CD배포에 관해 4가지 방법을 안내하고 있다.

  • AWS EC2 기본 배포하기
  • AWS EC2 배포 자동화 스크립트로 배포하기
  • 엘라스틱빈스톡으로 배포하기
  • 엘라스틱빈스톡&데이터베이스&CI/CD 배포하기

1. AWS EC2 기본 배포하기

로컬 > (업로드) > GitHub > (다운로드) > EC2 운영 PC (배포파일 실행)

 

이 과정에서 아래와 같은 것을 배울 수 있다.

  • EC2 서버 설정(생성, 고정 IP 부여, gradlew 실행권한 부여, JDK..) 및 프로젝트 백그라운드로 실행 (nohup)
  • 로그파일 설정 (위치, 일반로그과 에러로그를 분리)
  • 타임존 설정, 서비스 자동 재시작 cron 설정

이 방식은 EC2 운영 PC에 프로젝트를 다운 받는 방식(clone)으로 재배포가 이루어지므로, 프로세스 kill & EC2에서 프로젝트 폴더 삭제 > git에서 재다운로드 (clone) > gradlew 빌드 의 절차로 배포가 실행된다.

2. AWS EC2 배포 자동화 스크립트로 배포하기

로컬 > (배포파일 전송) > EC2 운영 PC (배포파일 실행)

 

이 과정에서 아래와 같은 것을 배울 수 있다.

  • 환경변수 등록(.bashrc), 코드파일 제외(settings.gradle 설정), 쉘 스크립트 작성

이 방식은 EC2 운영 PC 에 배포파일의 필요정보(gitID, prj의 name/ver/pid, JAR_PATH)를 환경변수에 등록하고, 배포스크립트를 실행하는 방식이다. 배포스크립트에는 아래와 같은 내용이 들어가는데

-   server cheking (process kill + apt update.. jdk install.. timezone setting..)
-   project folder delete
-   git clone
-   gradlew u+x
-   build
-   start jar
-   cron regitration

내 생각으론 배포 스크립트 실행을 크론에 거는 식인줄 알았는데, 재실행 스크립트를 별도로 만들어 그걸 cron에 걸고, 배포 스크립트의 실행은 사용자에게 맡기는 방식으로 작동하는 거였다.

3. 엘라스틱빈스톡으로 배포하기 (+데이터베이스)

로컬에서 프로젝트를 clone하고 빌드 후 엘라스틱빈스톡에 올려둔다.끝이다.

엘라스틱빈스톡 : Paas 서비스. 여러가지 언어를 사용해 개발된 웹 애플리케이션을 Apache, IIS, Nginx 와 같은 서버에서 배포가능토록 함

 

책에서는 엘라스틱빈스톡의 내부구성과 에러 해결 방법을 설명하는데, 특징적인 내용은 NginX 서버가 외부 IP요청을 거부한다는 것이다. 이게 NginX만의 특징인지 엘라스틱빈스톡의 보안 구성인지는 좀 더 찾아봐야할 것 같다.

일전에 읽은 책에서 이렇게 편리하지만 엘라스틱빈스톡의 단점도 충분히 설명해줬었는데 잘 기억이 안난다.. 다시 찾아볼 예정. 추가적으로 RDS를 생성하고 yml 설정을 통해 함께 배포하는 방법도 설명해준다.

4. 엘라스틱빈스톡&데이터베이스&CI/CD 배포하기

이 장은 이론적인 내용이 많고, 정리가 덜 된 느낌이 강하다; 보다 상세히 설명하거나 절차가 기술 되어야 할거같은데 쪽 수가 모자랐을지도..? 아니면 AWS의 특정 분야에 대한 보다 깊은 배경지식이 필요한 걸지도? 우선 다음과 같은 이론을 간단히 다룬다.

  • CI/CD : 폴링과 웹훅
  • AWS 사용자(IAM:Identity Access Manager)5f/정책/그룹/역할 의 정의, alb-nlb 차이
  • 롤링: 배포전략 (한번에 모두, 추가배치, 변경불가(블루그린))

배포 절차를 대강 정리해보면 다음과 같다.

프로젝트 fork > RDS 생성 (보안그룹 및 DB 생성) > 엘라스틱빈스톡 생성 (RDS관련 환경속성, 용량, 로드밸런서, 배포방식, 보안 키페어 설정, RDS 추가 > Github Action 설정 (deploy.yml 설정 및 push) > AWS IAM 생성 및 등록 > fork 한 프로젝트를 로컬에 clone > 로컬에서 GitHub로 push (동시에 EC서버에서 설치/프로젝트다운/빌드 발생)

후기

마지막 장이 좀 힘들었고 너무 AWS에 치우친거 아닌가 하는 생각이 들었지만, 나는 기본 배포와 배포스크립트 방법만으로도 유익했기 때문에 나쁘진 않았다. 그 보단 중간중간 까먹고 있던 기초지식을 간단히 집어주는 부분이 마음이 들었다.
시간이 난다면 이 책에서 얻은 새로운 단어를 위키에 정리해두고 싶은데 시간이 될지.. ^^

반응형

BELATED ARTICLES (관련글)

more