유데미 스타터스 취업 부트캠프 2기 - 백엔드 7주차 학습 일지

roopre·2022년 11월 27일
0

STARTERS

목록 보기
6/9
post-thumbnail

7주차

CI / CD 지옥

이번주는 API 구현과 swagger 작성까지 마무리 짓고 CI / CD 구축에 집중했다. 유데미 스타터스에서 AWS 모든 비용을 지원해줘서 덕분에 부담없이 하고싶었던 것들을 할 수 있었다.

Jenkins & Docker

Jenkins와 Docker로 CI / CD를 구축한건 처음이어서 많은 에러들을 마주쳤지만 결과적으로 아래와 같은 아키텍처를 완성했다.

동작 과정

  1. github의 back-santas의 repository에 PR이 merge 되거나 직접적으로 commit을 한다.
  2. github webhook으로 jenkins에 전달한다.
  3. jenkins에서 해당 repository에서 git pull해서 build 한다.
  4. Dockerfile을 이용해 jar파일과 함께 도커 이미지를 build한다.
  5. 빌드된 도커 이미지를 Docker Hub에 업로드한다.
  6. 각각의 ec2 서버에 ssh로 접속해 업로드한 Docker 이미지를 Docker Hub에서 다운로드 한다.
  7. 다운로드한 이미지를 실행시킨다.

Bug

private repository의 경우 RSA key를 이용해 github과 jenkins에서 인증해야한다. 이 때 인증이 안되는 128 error가 발생했다
-> jenkins 도커 내부에서 쓰는 계정 home directory에 .ssh 폴더 만들어서 안에 해당 키를 넣어줘야함

docker socket 권한 에러
-> sudo chmod 666 이용해서 권한을 변경해줘야함

이 외에도 수없이 많은 에러를 마주했지만 jenkins와 docker를 이용해 CI / CD를 구축해본 다른 팀원분이 많이 도와주셔서 잘 해낼 수 있었다.

Scale Out

대용량 트래픽처리를 위해서 scale out 방식으로 Load Balancer를 이용해 서버를 확장했다. drawio를 이용해 그린 현재까지의 아키텍처는 다음과 같다.

우선 AWS Application Load Balancer를 이용해 트래픽을 두대의 WAS로 분산시켰다. 데이터베이스는 AWS의 RDS를 이용해 postgresql을 사용했고 S3 object storage를 이용해 이미지를 저장했다. 현재 scale-out시 발생할 수 있는 문제점인 동시성과 세션에 대해서는 아직 개발하지않았다. 추후에 API 성능 개선을 위해 redis를 투입하면서 데이터베이스 이중화와 동시성 해결, 세션 공유 등 하고싶었던 것들을 모두 진행해볼 생각이다.

마무리

이번주 내내 Docker랑 Jenkins를 실습해보면서 공부했다. 기술스택 2개 추가요~~~ 다음주부터는 프로젝트 완전히 배포하고 테스트 코드를 작성하고 퇴근 후에는 강의 들으면서 도커 공부할 예정이다.

——————————————————————————

  • 유데미 바로가기 : https://bit.ly/3SFlXDy
  • 유데미 STARTERS 취업 부트캠프 공식 블로그 보러가기 : https://blog.naver.com/udemy-wjtb
    본 후기는 유데미-웅진씽크빅 취업 부트캠프 2기 - 프론트엔드&백엔드 과정 학습 일지 리뷰로 작성되었습니다.
profile
Roopretelcham

0개의 댓글