AWS Case Study : 야나두
8월 27일, 2024 - 김민경, 오은아, 이승연, 최가람, 하서정
AWS 서비스 중에 가장 만족스러운 기능은 RDS Proxy와 Graviton2이고, 유용하게 잘 사용하고 있습니다. RDS Proxy와 똑같은 기능을 온프레미스 환경에서 구축할 수 있지만, 문제가 발생했을 때 문제를 파악하는데 너무 많은 시간이 소요됩니다.
당면했던 과제
- 온프레미스 환경의 단일 서버를 사용하다 보니, 초기 도입 비용에 대한 부담과 운영 및 유지보수 관리, 그리고 무엇보다 예측하기 힘든 트래픽으로 인해 사업을 확장하는데 어려움이 있었습니다.
- 온프레미스 환경의 서버는 잦은 서버 다운과 한번 다운된 서버는 직접 재시작해줘야 하고, 하드웨어 이슈가 있을 때마다 직접 현장에 방문해야 하는 문제가 있습니다.
- 탄력적 운영으로 안정적인 서비스 환경을 갖출 수 있고, 결정적으로 동일한 수준의 비용으로 고가용성을 확보할 수 있다는 점에서 클라우드 컴퓨팅을 고려하게 되었습니다.

AWS Graviton2
Amazon Graviton2은 AWS에서 설계한 ARM 기반의 데이터 센터 프로세서입니다.
AWS는 클라우드 인프라의 효율성을 높이고, 더 나은 성능과 비용 효율성을 제공하기 위해 이 프로세서를 개발했습니다.
Graviton2 프로세서 주요 특징
- ARM 아키텍처 기반: Graviton2는 ARM의 Neoverse N1 코어를 기반으로 하며, 64코어, 2.5GHz 클럭 속도로 동작합니다. 32MB L3 캐시와 8채널 DDR4-3200 메모리, 64개 PCIe4를 지원하며, 2TB/s 메시 아키텍처로 연결됩니다.
- 성능 향상: AWS Graviton2 프로세서는 x86 기반 프로세서에 비해 최대 40% 더 나은 가격 대비 성능을 제공합니다. 또한, Graviton1에 비해 7배 향상된 가격 대비 성능, 4배 더 빠른 컴퓨팅 코어, 5배 더 빠른 메모리 속도, 2배 더 큰 캐시를 제공합니다.
- 다양한 활용 가능: Graviton2는 EC2 인스턴스, 데이터베이스, 컨테이너, 서버리스 워크로드 등 다양한 AWS 서비스에 활용될 수 있습니다.
- 확장성: Graviton2는 64개의 vCPU(가상 CPU)를 제공하며, 고대역폭 메모리와 고속 네트워킹 성능을 지원하여 대규모 데이터 처리와 같은 고성능이 요구되는 작업에도 적합합니다.
아마존 웹서비스를 선택한 이유
야나두는 AWS 사용량이 점차 늘어나면서 비용과 성능 최적화를 고민하게 되었습니다. 그 연장선에서 최근에 출시된 AWS Graviton2를 테스트하고, 이미 야나두가 구성한 동일한 아키텍처 구조에서 큰 변화 없이 쉽게 적용할 수 있는 프로세스임을 확인했습니다. 현재는 적용을 위한 테스트를 모두 마치고, 순차적으로 Graviton2로 이전 중에 있습니다. Gravition2를 통해 더 높은 성능과 비용 최적화를 동시에 기대하고 있습니다.
Amazon RDS Proxy
Amazon RDS Proxy는
Amazon Relational Database Service(RDS)의 1.완전관리형 및 고가용성 데이터베이스 프록시로, 애플리케이션의 확장성, 데이터베이스 장애에 대한 복원력, 2.보안을 강화합니다.

1 . 완전관리형

기존 프록시 서버의 단점
: 배포, 패치 적용 및 관리가 어려워 우수한 제품을 개발하는 데 투자해야 할 시간과 에너지가 허비
→ Amazon RDS 프록시는 자체 프록시 서버를 패치하고 관리해야 하는 추가적인 부담 없이 데이터베이스 프록시의 이점 제공
데이터베이스 프록시 서버는 데이터베이스의 추가 부하를 처리하는 데 도움
완전 서버리스 방식이며 워크로드에 맞게 자동으로 규모가 조정됨
2. 보안
- DB 액세스에 IAM 인증을 적용 가능
- DB 보안 인증 정보를 애플리케이션 코드에 하드 코딩하지 않아도 됨 → 데이터 보안을 추가로 제어 가능
- AWS Secrets Manager를 사용해 DB 보안 인증 정보를 중앙에서 관리 가능
3. 고가용성
RDS Proxy와 똑같은 기능을 온프레미스 환경에서 구축할 수 있지만, 문제가 발생했을 때 문제를 파악하는데 너무 많은 시간이 소요됩니다.
온프레미스 환경의 단일 서버를 사용하다 보니, 초기 도입 비용에 대한 부담과 운영 및 유지보수 관리, 그리고 무엇보다 예측하기 힘든 트래픽으로 인해 사업을 확장하는데 어려움이 있었습니다.
온프레미스 환경의 서버는 잦은 서버 다운과 한번 다운된 서버는 직접 재시작해줘야 하고, 하드웨어 이슈가 있을 때마다 직접 현장에 방문해야 하는 문제가 있었습니다.
탄력적 운영으로 안정적인 서비스 환경을 갖출 수 있고, 결정적으로 동일한 수준의 비용으로 3.고가용성을 확보 할 수 있다는 점에서 클라우드 컴퓨팅을 고려하게 되었습니다.
애플리케이션 연결을 유지하면서 새 데이터베이스 인스턴스에 자동으로 연결
→ DB 가용성에 영향을 미치는 가동 중단으로 인한 애플리케이션 중단 최소화
장애 조치 발생 시, 요청을 새 데이터베이스 인스턴스로 직접 라우팅
→ Aurora 및 RDS 데이터베이스의 장애 조치 시간이 최대 66% 단축
일반적으로 35초 미만의 장애 조치, 2배 향상된 쓰기 지연 시간, 추가적인 읽기 용량, 마이너 버전 업그레이드 가동 중단 시간을 일반적으로 1초 미만으로 줄일 수 있는 두 개의 읽기 가능한 예비 배포를 포함하는 다중 AZ를 지원
4. 효율적인 RDS 운용
오토스케일링을 통해 확장된 웹 애플리케이션이 실제 사용해야 하는 것보다 더 많은 수준의 커넥션을 요구하게 되어 관계형 데이터베이스에서 커넥션 연결을 효율적으로 관리해주는 Amazon RDS Proxy 서비스를 최근에 도입했고, 이로써 더 4.효율적인 RDS 운용이 가능해졌습니다.
- Amazon RDS 프록시 인스턴스는 RDS 데이터베이스 인스턴스에 대해 설정된 연결 풀을 유지 관리하므로, 새 연결이 설정될 때 일반적으로 발생하는 데이터베이스 컴퓨팅 및 메모리 리소스를 관리해야 하는 스트레스가 줄어듦
- 자주 사용하지 않는 데이터베이스 연결을 공유 → RDS 데이터베이스에 액세스하는 연결 수가 줄어듦
- 이러한 연결 풀링을 통해 DB에서 대량의 빈도와 횟수의 애플리케이션 연결을 효율적으로 지원하여 성능 저하 없이 애플리케이션을 확장 가능
AWS ElastiCache
사용 이유
- 사용량이 많아짐에 따라 성능 향상과 데이터베이스 부하 감소를 위해서 도입하였습니다.
Amazon ElastiCache
메모리에 데이터를 저장하고 검색할 수 있는 분산 캐싱 솔루션을 제공하는 AWS의 관리형 서비스입니다.
ElastiCache는 Redis 및 Memcached 두 가지 인메모리 캐싱 엔진을 지원합니다.
Redis
고성능, 오픈 소스 인메모리 데이터 스토어 및 캐시 엔진입니다.
다양한 데이터 구조를 지원하며, 주로 키-값 형태의 데이터를 저장하고 검색하는 데 사용됩니다.
데이터 영속성, 복제 및 고가용성(HA) 설정을 지원하여 중요한 데이터에 대해 높은 신뢰성을 보장합니다.
Memcached
고성능 분산 메모리 객체 캐싱 시스템으로, 단순한 키-값 캐싱을 위해 사용됩니다.
ElastiCache의 핵심 기능
- 데이터 캐싱
- 자주 조회되는 데이터를 메모리에 저장하여 애플리케이션의 데이터 요청을 빠르게 처리할 수 있습니다.
- 데이터베이스 부하를 줄이고, 데이터베이스 인스턴스의 비용을 절감할 수 있습니다.
ElastiCache의 특징 및 이점
- 마이크로초 응답 시간
- 핵심 데이터 조각을 메모리에 저장하여 매우 빠른 응답 시간을 제공합니다.
- 비용 최적화된 성능
- 선결제 비용이나 장기 약정 없이 사용한 리소스에 대해서만 비용을 지불합니다.
- 용량 관리 불필요
- 자동으로 확장 및 축소되며, 사용자는 용량 관리를 직접 신경 쓸 필요가 없습니다.
- 비지니스 지속성 유지
- 장애 조치, 백업, 복제 등의 기능을 통해 데이터의 가용성과 내구성을 유지할 수 있습니다.
- Redis OSS 및 Memcached 호환 가능
- 기존에 Redis나 Memcached를 사용하고 있던 애플리케이션과 쉽게 통합할 수 있습니다.
- 확장성
- 클러스터를 수평으로 확장할 수 있어 성능을 쉽게 조정할 수 있습니다.
- 보안 기능
- VPC 지원, SSL/TLS 암호화, IAM 통합 등 다양한 보안 기능을 제공하여 데이터를 안전하게 보호할 수 있습니다.
AWS WAF
VPC 피어링
💡VPC(Virtual Private Cloud)
- 사용자의 AWS 계정 전용 가상 네트워크입니다.
💡VPC 피어링 연결

- 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다.
- 각 서비스는 독립적인 VPC를 구축합니다. → 독립적인 아키텍처 기반으로 더 유연한 대응이 가능하도록 합니다.
- VPC 피어링을 통해 VPC를 연결해 보안을 강화합니다. →트래픽은 항상 글로벌 AWS 백본에서만 유지되고 절대로 퍼블릭 인터넷을 통과하지 않습니다. → 원활한 데이터 전송, 취약점 공격 및 DDoS 공격 위협 감소
ELB(Elastic Load Balancing)
💡로드 밸런싱(Load Balancing)
- 둘 혹은 셋 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 부하를 나누는 것입니다. → 가용성 및 응답시간 최적화
- 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포합니다.
ALB 작동 방식
- 하나 이상의 가용 영역(AZ)에 있는 여러 대상 및 가상 어플라이언스에서 들어오는 애플리케이션 트래픽을 자동으로 분산합니다.
- 애플리케이션에 대한 사용자의 요청이 발생합니다.
- 회사가 애플리케이션을 실행하는 여러 서버들의 배열(서버 팜)의 단일 서버로 로드 밸런서가 각 요청을 라우팅합니다.

AWS WAF
- 가용성에 영향 / 보안 위협 / 과도한 리소스 사용 등 일반적인 웹 공격으로부터 웹 애플리케이션이나 API를 보호하는 웹 애플리케이션 방화벽입니다.
사용 이유
- 온라인으로 서비스 중인 유캔두 서비스의 보안 강화를 위해 채택합니다.
- 비정상 트래픽을 탐지하고 차단하기 위해 AWS WAF를 이용하여 대응합니다.
작동 방식

- Amazon CloudFront나 Application Load Balancer에서 몇 번의 클릭 만으로 배포 가능합니다.
- CloudFront와 ALB, API Gateway에 Amazon WAF는 연동 가능하지만 보안 측면에서 더 나은 곳을 선택해야 합니다.
- 야나두는 Application Load Balancer을 사용했습니다.
- AWS WAF는 클라우드 환경과 온프레미스 환경에서 실행되는 애플리케이션을 보호합니다.
- 기존 규칙을 사용자 정의하거나 새로운 규칙을 생성해 특정 트래픽 패턴 필터링이 가능해 이를 통해 웹 공격에 대비하여 보안 계층을 추가합니다.
- 필터링 조건: IP 주소, HTTP 헤더 및 본문 또는 사용자 정의 URI와 같은 조건을 기준으로 웹 트래픽 필터링 규칙을 설정할 수 있습니다.
- 공격 패턴 차단: SQL 명령어 삽입 또는 XSS(크로스 사이트 스크립팅)과 같은 일반적인 공격 패턴을 차단하는 보안 규칙을 생성할 수 있습니다.

- AWS Firewall Manager와 AWS WAF의 빠른 규칙 전파를 사용하면 조직 전체에 보호 기능을 쉽고 빠르게 배포해 애플리케이션과 API의 가용성을 유지하고 보호할 수 있습니다.
AWS Firewall Manager와의 통합
- AWS Firewall Manager를 사용하여 여러 AWS 계정에 걸친 AWS WAF 배포를 중앙에서 구성 및 관리가 가능합니다.
- (새로운 리소스 생성 시)공통적인 보안 규칙 세트 준수를 보장합니다.
- Firewall Manager가 정책 위반 여부를 자동으로 감사하고 이를 보고합니다.
💡WAF를 어디에 연동할까?
위에서 말했듯이 보안 측면에서 고려하며 CloudFront, ALB, API Gateway 등 여러 곳 중 어느 곳에 연동할지를 결정해야 합니다.

CloudFront와 ALB 두 곳에 전부 WAF 연동
- CloudFront의 WAF는 L7 DoS 및 임계치 조절, IP Blacklist 차단 규칙으로 WAF룰을 수립합니다.
- ALB의 WAF는 웹 취약점 공격을 중점으로 룰을 구분하여 수립할 수 있습니다.
WAF가 아닌 AWS WAF 도입 시 장점
- Cloudfront나 ALB, API Gateway를 사용 중이면 바로 적용할 수 있습니다.
- 적용 대상과 동일 선상에서 동작하기에 네트워크 홉 추가가 없습니다.
- 트래픽이 증가하는 상황에서 확장이 유연합니다.
- 유지보수에 많은 노력이 들어가지 않습니다.
- 장애 발생 시 원복 시나리오가 간단합니다.
다른 교육 플랫폼들과의 아키텍처 비교
| 야나두 | 민병철교육그룹 | Class 101 | 다노 | |
|---|---|---|---|---|
| 보안성 | WAF, VPC | VPC | ||
| 안정성 | ALB | Auto Scaling, RDS Aurora | CloudFront | CLB, ALB, NLB |
| 성능 효울성 | ALB | Elemental MediaConvert | CDN | Elemental MediaConvert |
| 비용 최적화 | Graviton 2 | EC2 | Elastic Beanstalk, Lambda | EKS, EC2 |
| 지속 가능성 | RDS Aurora, ElastiCache, RDS Proxy | Elastic Block Store | S3 | S3 |
각 플랫폼 별 특징
- 야나두: 온라인 교육 플랫폼으로서 안정적이고 보안이 강화된 네트워크 운영하고, 글로벌 시장 확장을 목표로 하고 있습니다.
- 민병철 교육 그룹: 민병철교육그룹은 ‘민병철유폰’ 서비스의 급격한 성장으로 인한 잦은 트래픽 변동에 유연하게 대응하면서, 적은 IT 인력으로도 효율적으로 인프라를 운영할 수 있도록 AWS의 다양한 매니지드 서비스를 활용하고 있습니다.
- Class 101: 모바일 앱으로 다 수의 동영상 강의를 제공하기 때문에 항상 낮은 레이턴시를 유지해야 합니다. 또한 빠른 실험에 적합한 가벼운 AWS Lambda와 같은 서버리스 컴퓨팅 서비스를 적용하여, 가설이 실험을 통해서 검증되면, 서비스화해 정식으로 제공합니다.
- 다노: 코로나 사태로 비대면 홈트레이닝 수요가 급증함에 따라, 다노는 안정적인 서비스를 제공하고 개발자들이 비즈니스 로직에 집중할 수 있는 클라우드 서비스가 필요했습니다. Amazon EKS를 도입함으로써, 다노는 서비스의 안정성을 높이고 급증하는 트래픽에 유연하게 대응하며, 개발자들이 인프라 관리 대신 핵심 비즈니스 로직에 집중할 수 있는 환경을 구현했습니다.
향후 목표를 위한 아키텍처 개선 방안
1. 글로벌 시장 진출
고려해야 할 조건
전 세계의 사용자들과 상호작용이 필요한 동영상 스트리밍을 지연 없이 제공해야 합니다.
- 필요한 AWS 서비스 : Amazon IVS (Interactive Video Service), AWS Fargate
- 💡 Amazon IVS 지연 시간이 짧은 비디오 또는 실시간 비디오를 전 세계 시청자에게 제공하여 몰입감 있는 라이브 환경을 선사하는 관리형 라이브 스트리밍 솔루션입니다.
- 💡 AWS Fargate AWS Fargate는 사용량에 따라 요금이 부과되는 서버리스 컴퓨팅 엔진입니다. 서버를 관리할 필요가 없기 때문에 애플리케이션 구축에 집중할 수 있습니다.
간단한 라이브 스트리밍 서비스 아키텍처: Simplifying live streaming contribution with Amazon IVS

2. 원할한 사용자의 니즈 파악
- 필요한 AWS 서비스 : Amazon SageMaker
- 💡 Amazon SageMaker 기계 학습을 위한 다양한 목적별 기능 세트를 함께 활용하여 고품질의 기계 학습 모델을 빠르게 준비, 구축, 훈련 및 배포합니다.
- 💡 AWS Glue 분석, 기계 학습(ML) 및 애플리케이션 개발을 위해 여러 소스에서 데이터를 쉽게 탐색, 준비, 이동 및 통합할 수 있도록 하는 확장 가능한 서버리스 데이터 통합 서비스
SageMaker 워크로드 설명
설계 해본 아키텍처

1. 데이터 수집
사용자의 니즈를 파악하기 위해 다양한 소스로부터 데이터를 수집합니다.
- 데이터 소스:
- 웹 로그 데이터: 사용자의 클릭 스트림, 페이지 방문 기록 등을 수집합니다.
- 애플리케이션 로그: 사용자가 애플리케이션 내에서 수행한 작업에 대한 로그 데이터를 수집합니다.
- 설문조사 및 피드백 데이터: 사용자가 직접 입력한 피드백이나 설문조사 응답을 수집합니다.
- 소셜 미디어 데이터: 사용자의 소셜 미디어 활동을 수집하여 감정 분석 등에 활용할 수 있습니다.
- 데이터 수집 도구:
- Amazon Kinesis: 실시간 스트리밍 데이터를 수집합니다.
- AWS Lambda: 다양한 소스로부터 데이터를 수집하여 Amazon S3에 저장할 수 있습니다.
- Amazon S3: 수집된 데이터를 저장하는 데이터 레이크 역할을 합니다.
2. 데이터 전처리
수집된 데이터를 모델에 사용하기 적합한 형태로 전처리합니다.
- 데이터 클렌징: 결측치 처리, 중복 제거, 데이터 정규화 등을 수행합니다.
- 특징 엔지니어링: 모델 학습에 필요한 주요 특징(Feature)을 추출합니다.
- 데이터 레이블링: 필요한 경우, 데이터를 레이블링하여 학습에 사용합니다.
- 전처리 도구:
- Amazon SageMaker Processing: 대규모 데이터 전처리를 자동화하고 병렬 처리합니다.
- AWS Glue: 데이터 변환, 정제 작업을 수행합니다.
3. 모델 훈련
전처리된 데이터를 사용해 머신러닝 모델을 훈련시킵니다.
- 모델 선택: 사용자의 니즈를 파악하기 위해 다양한 모델을 선택할 수 있습니다. 예를 들어, 추천 시스템(협업 필터링, 콘텐츠 기반 필터링)이나 감정 분석 모델 등이 있습니다.
- 훈련 환경: Amazon SageMaker 훈련 인스턴스를 사용해 대규모 데이터를 효율적으로 처리합니다.
- 하이퍼파라미터 튜닝: SageMaker의 하이퍼파라미터 튜닝 기능을 사용해 최적의 모델을 생성합니다.
4. 모델 배포 및 실시간 예측
훈련된 모델을 배포하고 실시간으로 예측을 수행합니다.
- 모델 배포: Amazon SageMaker Endpoint를 통해 모델을 배포합니다.
- 실시간 예측: 사용자 데이터가 입력될 때마다 실시간으로 예측을 수행하여 사용자의 니즈를 파악합니다.
- 서버리스 배포: SageMaker Serverless Inference를 통해 비용 효율적인 서버리스 환경에서 예측을 수행할 수 있습니다.
5. 모니터링 및 피드백 루프
배포된 모델의 성능을 지속적으로 모니터링하고, 새로운 데이터를 통해 모델을 업데이트합니다.
- 모델 모니터링: SageMaker Model Monitor를 사용해 모델 성능을 모니터링하고 데이터 드리프트를 감지합니다.
- 피드백 루프: 새로운 데이터를 통해 모델을 지속적으로 재훈련하여 정확도를 유지합니다.
- A/B 테스트: 다양한 모델을 테스트하여 가장 효과적인 모델을 선택합니다.
6. 사용자 니즈 파악 및 활용
모델의 예측 결과를 기반으로 사용자의 니즈를 파악하고, 이를 다양한 비즈니스 로직에 활용할 수 있습니다.
- 추천 시스템: 사용자가 필요로 할 만한 상품이나 콘텐츠를 추천합니다.
- 개인화: 사용자의 니즈에 맞춘 개인화된 경험을 제공합니다.
- 마케팅 전략: 예측된 니즈를 기반으로 맞춤형 마케팅 전략을 수립합니다.
- 참고 기술 블로그