본문으로 건너뛰기

"CI" 태그로 연결된 2개 게시물개의 게시물이 있습니다.

모든 태그 보기

· 약 8분
제이

서론​

안녕하세요👋👋 카페인 팀의 제이입니다.

회의를 하면서 이번 주 제가 맡은 파트는 서버 인프라입니다.

아직은 EC2 스펙과 데이터들이 정확히 나오진 않았지만, 우테코에서 적은 EC2 스펙을 제공한다는 기준으로 계획도를 적어볼 생각입니다.

상황 인식​

예상하는 상황은 다음과 같습니다.
  • API의 데이터를 다루는 상황에서 최소 약 150만 건에서 최악 약 3700만 건의 데이터를 다룹니다.
  • 이전 기수를 봤을 때 EC2의 개수는 많이 나눠주는 것으로 파악 됐습니다. (이 부분은 달라질 수 있습니다.)
  • 상황에 따라서 공공 API를 업데이트 해주는 서버와, 제공 서버를 나눌 수 있습니다.
  • Conflict가 나지 않기 위해서 안정적인 검증을 거친 후 Merge를 해야합니다.
  • 프로젝트의 버전이 갱신된다면 EC2 서버에서 자동으로 스크립트를 작동시켜 Pull 및 서버 재배포를 해야합니다.
  • 서버의 버전이 바뀌는 경우 기존 서버를 끄고 새로운 서버를 키면 사용자가 이용할 수 없는 텀이 생기기 때문에 무중단 배포를 해야합니다.

문제점​

위에 상황에서 파악되는 문제점들은 먼저 적은 성능의 EC2 서버로 인해 데이터를 받아오는 과정 혹은 업데이트 과정에서 서버가 터질 수도 있습니다. 성능이 좋다면 하나로 모든 것을 할 수 있지만, 그렇지 않기 때문에 현재 여러 개의 EC2를 기준으로 아키텍처를 구성할 예정입니다.

문제 해결을 위한 현재 생각​

서버의 기능 분산​

위에서 언급한 것처럼 서버의 성능이 받쳐주지 못할 가능성이 있습니다. 성능을 생각해서 이를 나누기 위해서는 먼저 다음과 같이 서버를 분산할 필요가 있다고 생각합니다. (물론 서버가 못 버틸 경우이고, 어떻게 나뉘는 지는 회의 후 결정하겠지만!)

  • 공공 API 데이터 적재 및 주기적인 업데이트
  • 실시간 혼잡도를 위한 실시간 데이터 업데이트
  • 요청 처리

적은 성능으로 업데이트와 요청 처리를 동시에 한다면, 서버가 그 부하를 견디지 못할 수도 있겠죠? 따라서 서버의 역할을 분담하고, 각 역할에 충실하도록 구현한다면 보다 효율적인 처리를 할 수 있을 것이라고 예상됩니다.

안정적인 Merge​

잘못된 PR을 Merge 시켜버리면 어떨까요? Conflict도 날 수 있고.. 생각만해도 끔찍합니다.

코드리뷰를 통해서 이를 어느정도 해소한다고 해도, 사람이다보니 실수할 수 있습니다. 이를 해결하기 위해서 Github Actions를 이용하여 미리 지정해둔 Task를 시키고, 이게 통과한다면 Merge할 수 있도록 할 예정입니다.

이렇게 한다면 협업할 때에도 안전한 Merge가 가능하다고 생각합니다.

CI/CD​

지금까지 우테코 미션에서는 배포를 다음과 같은 과정으로 진행했습니다.

  1. 배포
  2. 리팩토링 및 커밋
  3. EC2 서버에서 스크립트 실행하여 재배포

이렇게 배포를 해도 상관없지만, 매번 리팩토링과 기능 추가를 할 때마다 EC2 서버로 들어가서 빌드 스크립트를 사용해서 서버를 재시작 해야할까요? 이렇게 된다면 불필요한 시간이 소모되고, 불편한 점이 많을 것이라고 생각됩니다.

따라서 CI/CD 개념을 적용해서 이 과정을 자동으로 진행하고자 합니다.

이 부분은 더 알아봐야겠지만, Github Actions를 이용해서 이를 적용하면, 외부에서 SSH 접근이 불가능하기 때문에 Jenkins를 이용할 예정입니다. 깃허브의 변동 사항을 Webhook을 이용해서 Jenkins로 넘기고, 이를 통해 CI를 적용하면 될 것 같다고 판단했습니다. 물론 이는 계획이고 공부하지 않은 다른 내용이 있을 수 있기 때문에 언제든 바뀔 수 있습니다.

무중단 배포 아키텍처 적용​

이 또한 아직은 먼 이야기지만, 고려해 볼 상황이라서 적어봤습니다.

사용자가 이용하고 있는 서비스가 갑자기 중단된다면 어떨까요? 저는 화가 많이 날 것 같습니다.

피치 못할 사정으로 서버가 터져도, 사용자가 서비스를 계속 이용할 방법이 없을까요?

이런 고민을 해결하기 위해서 나온 개념이 무중단 배포입니다.

카나리아 배포, Blue/Green 배포, 롤링등 무중단 배포를 위한 여러가지 전략은 이미 존재합니다. 이 부분은 아직은 서버의 명세가 정확하지 않아서 어떤 방식으로 어떻게 처리할 것인지에 대해서는 아직 정할 수는 없습니다.

이는 명세가 확실하게 정해진 후 팀원과 장단점을 상의하며 결정할 일이기 때문에 현재까지는 "이 정도를 고려하고 있다." 정도만 알면 될 것 같습니다.