파이널 프로젝트 - 13주차 3일(3/15)

최수환·2023년 3월 16일
0

Kubernetes

목록 보기
58/75
post-thumbnail

프로젝트 착수 보고서

  • 원래 오늘부터 인프라 구축에 들어가려 했지만 아이디어가 명확하지 않고, 다른 기존의 서비스와의 차별점이 없다는 피드백을 통해 주제를 변경하게 되었다.
  • 이전 블로그에서 작성한 착수 보고서에서 프로젝트 주제와
    AS IS - TO BE를 제외하고는 변경점이 없기 때문에 변경된 주제와 변경된 AS IS - TO BE에 대해서만 다시 작성할 예정이다.

프로젝트 주제 변경

  • 이전 블로그에서 패키지 여행관련 웹 사이트 구축이라는 주제에서 아래와 같이 주제를 변경하게 되었다.
    • 서비스 명 : 구름 대학교 수강신청 서비스
    • 주제 : 학생들이 수강신청 기간에 각 학기마다 수강할 강의를 선택 하고 등록할 수 있는 온라인 서비스. 학생들은 이를 이용하여 강의 검색, 수강 신청, 강의 일정 확인 등을 한다.
    • 주제 목표 : 안정적인 인프라를 구축하고, 대규모 트래픽을 처리할 수 있는 서비스를 구현

주제 선정 배경

  • 대학교 수강신청 과정에서 발생하는 여러 문제점들을 개선하여 학생들의 편의성을 높이기 위함
  • 수강 신청이 학생들의 한 학기 동안의 학습 환경에 막대한 영향 을 주는 만큼 수강신청 서비스는 모든 학생이 강의를 안정적으로 신청할 수 있도록 서비스를 제공하는 안정적인 인프라가 필요
  • 기존의 대학교 수강신청 서비스에서는 학생들이 동시에 수강 신청을 하거나, 수업 정보를 조회하는 등의 작업으로 인해 서버 부하가 증가하게 되면 시스템이 다운되거나 느려지는 등의 문제가 발생할 수 있다.
  • 시스템에 문제가 발생하면 학생들은 수강신청에 실패하거나, 수업 정보를 제대로 파악하지 못하게 될 가능성이 있다.
  • 따라서, 이번 프로젝트에서는 안정적인 인프라를 구축하고, 대규모 트래픽을 처리할 수 있는 시스템을 구현하는 것을 목 표로 한다. 이를 위해 클라우드 컴퓨팅, 분산 시스템, 데이터베 이스 성능 최적화 등의 기술을 활용하여 시스템의 안정성과 확장성을 높인다
  • 또한, 보안 측면에서도 사용자 정보를 안전하게 보호하고, 시 스템이 해킹이나 악성 공격 등의 공격으로부터 안전하게 보호 될 수 있도록 인프라를 설계하는 것을 목표로 한다.

AS IS - TO BE

AS IS

  • 동시에 수강신청을 하거나, 수업 정보를 조회하는 등의 작업으로 인해 서버 부하증가 및 서버 지연
  • 2개 이상의 클라이언트로 중복 접속을 하여 수강신청을 해서 서버 문제 가중화
  • 수업 정보 조회에 많은 시간이 걸림

TO BE

  • 대규모 트래픽을 처리할 수 있는 분산 시스템을 구축하여 수강신청 시스템의 확장성을 높임
  • 1계정 다중 클라이언트를 이용한 수강신청을 제한하여 서버의 부담을 낮춤
  • 데이터베이스 성능 최적화와 캐시 서버를 도입하여 빠른 데이터 접근을 지원함

인프라 아키텍처 설계

이전 블로그에서는 파이프라인에 대한 아키텍처를 설계했다면 오늘은 ArgoCD가 배포할 EKS클러스터의 인프라 아키텍처를 설계해보았다.

  • 클러스터를 배포할때 노드그룹에 Capacity를 2로 설정하여 EC2인스턴스가 각 AZ에 하나씩 생기게 하였다.
  • 각 노드에는 백엔드와 프론트엔드 파드가 Deployment에 의해 배포된다.
  • 고가용성을 위해 RDS데이터베이스는 멀티AZ배포로 이중화 배치를 하였다.
  • HPA를 사용하여 백엔드 서버의 파드에 연결한다. 이후 HPA는 파드의 request값으로 100%를 측정한다. 그리고 cpu평균 사용률을 측정해서 지정한 값보다 높아지면 파드를 늘린다
  • 오토스케일링 그룹으로 두개의 EC2인스턴스를 묶어서, 만약 파드가 HPA에 의해 계속 늘어나고 늘어난 파드의 request값을 해당 노드가 가진 한정된 자원안에서 보장해줄 수 있어야한다. 만약 노드안에 파드가 넘치게되어 더이상 노드가 가진 자원으로는 늘어난 파드의 request값을 보장해주지 못한다면 오토스케일링 그룹에 의해 EC2인스턴스( =노드)가 늘어나 새로운 노드에 이전에 배치하지 못하고 Pending상태였던 파드가 배치된다.
  • 백엔드 서버 파드에 PVC를 부착하여 스토리지 클래스에 의해 동적으로 PV를 생성해 NFS스토리지에 연결시킨다. 이때 EFS를 사용하여 EFS Provisionor에 PV를 연결시켜서 EFS에 마운트시킨다.
    따라서 여러 인스턴스가 동시적으로 스토리지에 접근해 읽기/쓰기 가 가능해진다. 즉, 여러 인스턴스를 동기화 시킬수 있다.
  • 인스턴스와 RDS는 보안을 위해 프라이빗 서브넷에 배치하고 Ingress(ALB)와 NodePort Service(NLB)를 이용하여 외부의 클라이언트에 노출시킨다.
  • Route53을 이용하여 외부 사용자가 도메인을 입력하여 서비스를 이용할 수 있게 하였다.
  • 추후에 계속 작업을 하면서 변경사항이 생기게 된다면 조금씩 수정해나갈 예정이다.
profile
성실하게 열심히!

0개의 댓글