괴발개발 공부하는 블로그

프로젝트 인프라 구성 본문

프로젝트

프로젝트 인프라 구성

ompeom 2023. 4. 4. 14:39

프로젝트를 진행하면서 처음으로 인프라를 구성하고 무중단 배포에 대해서 공부해보았다.

 

이 과정에서 공부한 것들, 겪었던 에러 사항 등등 더 오래동안 기억에 남기기 위해 블로그에 기록하기로 했다.

 

전체적인 구성은 하단의 블로그를 참고해서 구성해보았다.

https://wbluke.tistory.com/39

 

 

1. github 에 push 후 pull request 를 올리면 sonar cloud 와 github actions 의 workflows 가 실행된다.

(workflows 에는 chatGPT code review 와 deploy 가 있다.)

 

2. deploy 관련한 스크립트에는 프로젝트를 빌드하여 jar 파일로 만들어 s3 에 업로드하고, code deploy가 s3에 업로드된 jar 파일을 가져와 배포한다.

 

3. code deploy가 실행하는 스크립트에는 새로운 was 를 띄우고 health check 한 후 무중단 배포할 수 있도록 switching 하도록 작성하였다.

 

jenkins가 아닌 github actions

Jenkins와 GitHub Actions는 모두 지속적인 통합/배포 (CI/CD)를 구현하기 위한 도구이다. 배포 자동화를 위해서 여러 가지를 찾아보았는데, CI/CD 툴로 대부분이 젠킨스를 사용했다. 나도 젠킨스를 고민해보았는데, 차이점을 비교해보고 Github Actions 로 결정했다.

젠킨스는 많은 기능을 제공하고 있으나 서버가 필요하다. 개인 프로젝트를 진행하면서 젠킨스 서버를 따로 띄워야 하는 점이 부담스러웠다.

 

Github Actions의 workflows는 깃허브에서 호스팅하는 Runner 에서 돌아간다. 쉽게 빌드하고 배포하기 쉬운 환경으로 구성되어 있어 공부하는데 어렵지가 않았다.

 

후기 - 중간에 마주친 에러들...

aws 도 익숙하지 않고, 인프라에 대한 이해도도 떨어지다보니 블로그 글을 보고 따라하는 수준임에도 불구하고 수많은 에러를 직면하였다. 그래도 서버 배포, 인프라 구성과 프로세스에 대해서 어떻게 진행이 되는지 조금이나마 이해하게 되었다. 추후 진행하는 프로젝트는 더 다양한, 그 상황에 맞는 인프라 구성을 위해 고민해볼 예정이다.

 

여전히 남아있는 문제점, PR 올리면 무조건 배포 실행

내 프로젝트는 github flow 전략을 선택했다. 오직 master 브랜치와 신규 브랜치만 존재한다.

현재 workflow 상에는 master 브랜치에 pull request 이벤트가 발생하면 실행되도록 되어있다. 그럼 내가 올리는 모든 PR에 대해 배포 workflow가 수행되는 것이다. 이 부분이 은근히 부담스러웠다. 물론 개인 프로젝트이므로 큰 문제가 있지 않았으나, 중간에 develop 브랜치를 두고 push 이벤트 기반으로 하여 성공 시에만 배포하도록 하는 방법으로 변경해야 하지 않을까? 라는 생각을 했다.

 

chat GPT 코드리뷰와 jacoco 추가, sonar cloud 정적 코드 분석

원래 PR 을 올리면 코드 리뷰를 해주는 멘토가 있었다. 그러나 중간부터 챗 GPT 의 코드리뷰를 받기 위해 github actions 에 PR 을 올리면 자동으로 리뷰를 해주도록 추가해보았다. 엄청나게 좋은 리뷰는 아니여도 리뷰가 나쁘지 않다.

 

jacoco는 java 코드의 커버리지를 체크할 수 있다. 테스트 코드가 프로덕션 코드를 얼마나 실행하고 커버하는지 측정하는 지표를 확인할 수 있다. 

 

 

sonar cloud 는 정적 코드를 분석할 수 있다. 버그나 취약점, 코드스멜이 있는 코드들을 확인할 수 있다.

 

출처

https://wbluke.tistory.com/39

https://tecoble.techcourse.co.kr/post/2021-09-23-continuous-deployment-with-github-actions/

https://velog.io/@hwsa1004/Github-Action-AWS-CodeDeploy-Spring-Boot-프로젝트-자동-배포하기

https://zzang9ha.tistory.com/360

https://soojong.tistory.com/entry/Docker%EB%A1%9C-Spring-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

https://backtony.github.io/spring/aws/2021-08-08-spring-cicd-1/

Comments