본문으로 건너뛰기

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

모든 태그 보기

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

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