
네이버 클라우드 플랫폼 professional 과정에서 프로젝트를 진행했다.
팀원 4명이 아키텍처를 설계하고 실제 서비스를 구축하는 과정까지 진행했다.
정택준(나): Cloud Infra & security
임동건: Kubernetes Ops
김태원: Frontend & Monitoring
전준: Serverless & DB

본 프로젝트는 기존 대학 레거시 시스템의 한계를 극복하기 위해 'Naver Cloud Platform'을 도입하여 구축한 성적 조회 중심의 학사 정보 서비스이다.

NKS 기반으로 고 가용성 수강신청 서비스를 운영하며 ACG로 외부 트래픽을 보호하고 HPA로 파드 수를 자동 확장한다.
IpsecVPN으로 교내(온 프레미스) 인증/학사DB와 연동한다.
지금 다시 보면, 아키텍처를 너무 난잡하게 그린 것 같다. 흐름이 잘 보일 수 있게 깔끔하게 정리했으면 좋을 것 같다.
그리고 WAF와 IpsecVPN은 실제 적용하려 했으나, 교육 계정의 한계가 있어 아쉽게 진행하진 못했다.

ALB를 사용해 트래픽을 분산하고, 상황에 맞게 NKS 노드 및 파드를 자동 확장시킨다.
Cloud DB for MySQL의 Fail-over 기능을 사용해 데이터의 안정성을 보장시켰다.
또한, Cloud Functions 기능을 사용하였다.
성적조회 서비스와 같이 한 순간에 트래픽을 몰리는 상황에는 오토스케일링으로 대처하기에는 너무 늦다.
따라서, 성적 조회 전날의 일정 시간대에 트리거를 걸어놔서 Cloud Functions을 활용해 NKS 노드의 min, max 사양 값들을 조정시킨다.

1. 관리형 컨트롤 플레인(Control Plane) 네이버 클라우드 관리형 완전 관리 서비스
Kube-api-server, etcd 등 핵심 마스터 컴포넌트를 네이버 클라우드가 직접 관리
사용자는 마스터 노드의 장애나 유지보수 걱정 없이 워커 노드 관리에만 집중 가능
안정적인 클러스터 운영 환경 보장
2. 안정성 노드 풀(Node Pool) 분산 및 부하 분산
Ingress Controller와 Load Balancer가 트래픽을 여러 노드의 파드로 고르게 분산 처리
단일 노드 풀 내에 2개 이상의 워커 노드를 구성하여 단일 서버 장애 시 서비스 중단 방지
특정 노드 장애 발생 시, 쿠버네티스 컨트롤 플레인이 이를 감지하고 정상 노드에 파드를 자동으로 재배치하여 가용성 유지

1. 웹/앱 서비스 트래픽 부하분산
외부 사용자의 접속 요청을 Load Balancer가 수신하여 NKS 클러스터 내의 여러 파드(Pod)로 균등하게 분산 처리
Sticky Session(세션 고정) 기술을 적용하여, 별도의 세션 서버(Redis) 없이도 로그인 사용자별로 연결 지속성을 보장
2. 데이터베이스 읽기/쓰기 분리
데이터 변경(Write)은 Master DB에서, 조회(Read)는 다수의 Slave DB에서 처리하도록 트래픽을 분리
성적 조회와 같이 읽기 요청이 많은 서비스 특성에 맞춰, Load Balancer가 조회 트래픽을 Slave DB들로 분산시켜 병목 현상 방지
3. 통합 모니터링
※ Load Balancer
장애 시 자동으로 다른 서버로 부하를 분산하여 무정지 서비스 가능
- Round Robin: 로드밸런싱으로 지정된 서버들에 대해 순차적으로 요청을 전달
- Least Connection: 클라이언트의 요청을 가장 적은 수의 연결이 이루어진 서버로 할당
- Source IP Hash: Source IP 정보를 바탕으로 해시한 결과로 로드밸런싱을 실행

이처럼 클러스터의 CPU, Memory, Network In/Out, Pod 수 등 사용자의 입맛에 맞게 대시보드를 뽑아낼 수 있는게 grafana의 큰 장점인 것 같다.

다시 생각해보면, NKS를 굳이 썼어야 할까? 라는 생각이 든다.
어차피 Cloud Functions으로 전날에 미리 늘려놓는다고 하면 VM 오토스케일링으로 충분히 가능할 것 같다고 생각한다. 특히나 이런 규모의 서비스라면.
쿠버네티스가 너무 어려웠어서 더 공부해야하고, 완성도가 많이 떨어진다.
이번 프로젝트를 기반으로 더 완성도 있게 고도화를 진행하고 마무리 지어야 할 것 같다.
신기술이라고 많이 써보고 하는 것은 물론 좋지만, 일단 기본기가 제일 중요한 것 같다고 생각한다.
정택준
E-mail: taekjunnnn@gmail.com
Team: https://nangman.cloud/