SlideShare a Scribd company logo
엠퀴즈
잠시 후 있을 시연을 위해
휴대폰을 미리 준비 해주시기 바랍니다 .
광안 1 반 2 팀 프로젝트
발표
2
고태훈
팀원 소개
김영기 김시현 김재훈
Create
다양한 형태의 퀴즈 제작
01
No Login
퀴즈 참여 - Only 닉네임
02
Easy Play
PC & 스마트폰 지원
03
Competition
실시간 경쟁
04
엠퀴즈 핵심 기능
엠퀴즈 시연 안내
라이브 시연
3. 퀴즈플레이
영상
2. 퀴즈제작
영상
1. 회원가입
퀴즈 플레이 참여를 원하시는 분은
휴대폰 카메라를 미리 준비 해주시기 바랍니다
퀴즈 참여 방법
닉네임 입력
2-1. URL 접속
퀴즈 풀기 선택 PIN 번호 입력
URL + 핀번호로
접속
http://www.mquiz.site/p/PIN번호
URL 로 접속
http://www.mquiz.site
Or
1. QR 접속
1. 회원가입 시연 영상
2. 퀴즈 제작 시연 영상
2 . 카메라로 QR 찍어서 접속
3. 라이브 퀴즈 참여 방법
3. 원하는 닉네임 설정
1. 갤럭시 , 아이폰
일반카메라
라이브 시연
0
프로젝트 관리
1
회의록 , 기술공유 스터디
프로젝트 정책 관리
Notion
자료 공유
프로젝트 설계 및 문서 관리
Google Drive
프로젝트 일정 관리
JIRA
프로젝트 형상 관리
Git
1.1 효율적 협업
1.2 JIRA 1.3 Notion
프로젝트
일정 , 역할 ,
이슈관리
간트차트
( 전체 일정 )
프로젝트 정책 설정
기술 공유 스터디
회의록
1.4 Git
Feat 브랜치 이름 형식
- feat/{ 요구사항 중분류 }
feat/Play
1. 브 –
랜치 관리 깃 플로우 전략 3. 커밋 메시지 관리
2. 브랜치 이름 관리
[ 브런치명 ] feat: add commit
내용
14
1. 마인드 맵 ( 브레인 스토밍 ) 3. 요구사항 목록
2. 도메인 용어 정의 ( 소통 )
1.5 프로젝트 설계
14
4. 요구사항 상세 6. Flow Chart
5. Use Case
실시간 게임 구현
2
유저 동시 접속
시간당 459,000 명 안정적 접속
02
DevOps(CI/CD)
Frontend Pipeline
Backend Pipeline
Rolling Update
04
클라우드 기반
실시간 게임
구현 목표
실시간 게임
Websocket, Redis, Rabbit MQ
01
Container 환경
Gradle, package.json
환경 변수 분리 , Stateless, ECS
03
진행자
: WebSocket
2.1 퀴즈 플레이 전체 통신 흐름
참가자
Lambda Log
데이터
Show
데이터
DynamoDB
Redis
RabbitMQ Spring
boot
Spring
boot
진행자
WebSocket
Message 구조
참가자 화면
참가자
진행자 화면
서버
Redux
Redux
2.2 진행자 게임 화면 제어
Command
(Start)
퀴즈 시작 전
대기 화면
퀴즈 시작 화면
Command
화면 제어 퀴즈 시작
중간 결과
최종 결과
3
개
Command
유저 제어
로비 대기
닉네임 체크
강퇴
정답 제출
퀴즈 종료
5
개
RabbitM
Q
2.3 서버 구조
Redis
퀴즈진행
3. 게임 서버
1. 인증 서버
인증 서버
인증 서버
2. Lambda
퀴즈 관리 로그 관리
퀴즈진행
퀴즈진행 퀴즈진행
퀴즈 , 로그 관리
로그인
다중 컨테이너
퀴즈 진행
실시간 게임
데이터 관리
성능 최적화
3
1. 실시간 점수
랭킹 계산
Redis Cluster
구축
3.1 Redis - 성능 최적화
3. 안정적인
데이터 저장
Redis - Sorted Set Redis TTL
2. 메모리 관리
ZADD( 점수 설정 ) - O(log(N))
ZRANDMEMBER( 점수 증가 ) -
O(N)
ZMSCORE( 점수 가져오기 ) - O(N)
ZRANGE ( 전체 조회 ) - O(log(N)+M)
1. 게임 종료 시 사용했던
메모리 할당 해제
2. 4 시간의 TTL 적용 - 자동삭제
1. 데이터 유실 최소화
2. AWS ElastiCache 를 이용한
3 개 노드로 클러스터 구축
3.1 Redis - 설계 구조
2. Sorted Set
참가자 정답 개수
참가자 랭킹 점수
제출자 수
데이터 산정
1. Set
Show ID
Email 인증번호
중복 제어
3. Hash
퀴즈 데이터 분리 및 저장
특정 데이터 조회
4. List
전체 퀴즈 데이터 조회
3.2 NoSQL - DB 최적화
초기 RDB
RDB
LOG
데이터
SHOW
데이터
NoSQL
다중 테이블
Join 호출
프로젝트 구조상
NoSQL 이 적합하다고
판단
3.3 NoSQL - Show 데이터 전체 구조
2. NoSQL 저장 형태
1. Show 데이터 설계
{
"_id": "638af7d04f2229040345b52a",
"quizInfo": {
"email": "test@gmail.com",
"title": "",
"tags": [],
"createDate": "",
"lastModifyDate": "",
"isPulic": true,
"state": ""
},
"quizData": [
{
"num": 0,
"type": "",
"question": "",
"media": {
"type": "",
"url": ""
},
"choiceList": {
"num1": "",
"num2": "",
"num3": "",
"num4": ""
},
"answer": [],
"time": 0,
"useScore": true,
"rate": 0
},
],
"_class": "com.mzc.quiz.show.entity.Show"
}
3.3 NoSQL - Show(QuizInfo) / 퀴즈 게임 정보
퀴즈 게임정보 ( 제목 , 생성일 , 태그
등 )
{
"_id": "638af7d04f2229040345b52a",
"quizInfo": {
"email": "test@gmail.com",
"title": "",
"tags": [],
"createDate": "",
"lastModifyDate": "",
"isPulic": true,
"state": ""
},
"quizData": [
{
"num": 0,
"type": "",
"question": "",
"media": {
"type": "",
"url": ""
},
"choiceList": {
"num1": "",
"num2": "",
"num3": "",
"num4": ""
},
"answer": [],
"time": 0,
"useScore": true,
"rate": 0
},
],
"_class": "com.mzc.quiz.show.entity.Show"
}
2. NoSQL 저장 형태
3.3 NoSQL - Show(QuizData)
실제 저장 데이터
{
"_id": "638af7d04f2229040345b52a",
"quizInfo": {
"email": "test@gmail.com",
"title": "",
"tags": [],
"createDate": "",
"lastModifyDate": "",
"isPulic": true,
"state": ""
},
"quizData": [
{
"num": 0,
"type": "",
"question": "",
"media": {
"type": "",
"url": ""
},
"choiceList": {
"num1": "",
"num2": "",
"num3": "",
"num4": ""
},
"answer": [],
"time": 0,
"useScore": true,
"rate": 0
},
],
"_class": "com.mzc.quiz.show.entity.Show"
}
문제 목록
문제 정보 ( 문제번호 , 질문 , 답
등 )
3.4 NoSQL - LOG 전체 데이터 구조
실제 저장 데이터
LOG – 진행된 전체 퀴즈 데이터
{
"id":"id",
"showid":"showid",
"email":"email",
"showtitle":"showtitle"
"playdate":"playdate",
"quizcount":"quizcount",
"Usercount":"usercount",
"userdata":[
{
"nickname":"test",
"rank":"1",
"rankscore":"12345",
"correctcount":"12",
"iscorrectlist":"0,1,-1"
},
{
"nickname":“nickName",
"rank":“2",
"rankscore":“112233",
"correctcount":"10",
"iscorrectlist":"0,1,-1"
}
]
}
( 닉네임 , 랭킹 , 정답 수 등 )
인프라
4
인프라
2. Front
1. 전체구조
4. CI/CD 5. ECS
3. Backend
6. 예상 비용
1. 인프라 전체구조
Osaka (ap-northeast-3)
1
Front
2
CI/CD
3 Back
2. Frontend
Amazon S3
Amazon CloudFront
Client
Mobile
client
Amazon Route 53
1
2
Web 접속
Frontend 개발자 Github Jenkins
Front Pipeline
3 4
정적 웹 배포
CDN
3. Backend
Client
Mobile
client
Amazon Route 53
ALB
( 퀴즈 게
임 )
ECR
Registry
Image
ECS Cluster
Service
Target Group - Play
Container(Play)
Container(Play)
Container(Play) Container(Auth)
TG - Auth
Task
ALB ( 로그
인 )
1
2
3
3
4
4
NAT gateway
5
6
Health Check
Rolling Update
무중단 배포
컨테이너가 갑자기 죽는다면 ?
Jenkins
4. Backend Pipeline
Backend 개발자 Github Jenkins
Backend Pipeline
ECR
Container
Image
Registry
ECS
Container
Git Push Webhook
Docker Build & ECR Push Update Service
Rolling Update
1 2
3 4
5
Rolling Update
Min : 50%
Max : 100%
5. 인프라 ECS, ASG 주요 세팅값
Launch Template
& ASG
- AMI :ami-09501c9961ca54ebc
- Instance type : t3.small
- AZs : ap-northeast-3b, c
- Desired capacity : 5
- Minimum capacity : 5
- Maximum capacity : 5
ECS – Play( 게임 진
행 )
- Task CPU : 0.9 vCPU
- Task RAM : 0.9 GB
- Container Name : mquiz-play
- Task CPU : 0.899 vCPU
- Task RAM : 0.899 GB
- Port Mapping : 0:8080
- Enviroment : 보고서 참고
-HealthCheck Command
CMD-SHELL, curl -f http://localhost:8080/actuator/health
|| exit 1
Interval (30), Timeout (5)
Start period (120), Retries (3)
ECS – Auth( 로그인 )
- Task CPU : 0.5 vCPU
- Task RAM : 0.5 GB
- Container Name : mquiz-auth
- Task CPU : 0.499 vCPU
- Task RAM : 0.499 GB
- Port Mapping : 0:8080
- Enviroment : 보고서 참고
-HealthCheck Command
CMD-SHELL, curl -f http://localhost:8080/actuator/health
|| exit 1
Interval (30), Timeout (5)
Start period (120), Retries (3)
ECS 클러스터용 EC2 관리
T3.small – 5 개 실행중
vCPU 0.9, RAM 0.9 GB
Play 이미지
6 개의 컨테이너 관리
vCPU 0.5, RAM 0.5 GB
Auth 이미지
2 개의 컨테이너 관리
6. 인프라 예상 비용 계산 - 1 달 기준
1. 스케일 아웃시 비용 예측
2. 비용 최적화
Category Type Region Count Unit price Total cost
compute ec2 ap-northeast-3 6 $88.77 $88.77.
compute ec2 ap-northeast-3 6 $19.86 $119.16
compute lambda ap-northeast-3 1 $24.75 $24.75
containers ecr ap-northeast-3 2 $10.00 $20.00
containers ecstask ap-northeast-3 1 $0.00 $0.00
networking apigateway ap-northeast-3 1 $4.25 $4.25
networking elb ap-northeast-3 2 $23.58 $47.16
networking natgateway ap-northeast-3 1 $51.46 $51.46
storage ebs ap-northeast-3 6 $3.60 $21.60
storage s3 ap-northeast-3 1 $8.63 $8.63
Amazon MQ Rabbit MQ ap-northeast-3 1 $49.21 $49.21
database dynamodb ap-northeast-3 1 $6.10 $6.10
database elasticache ap-northeast-3 3 $18.98 $56.94
database rds ap-northeast-3 1 $18.98 $18.98
6. 인프라 예상 비용 계산 - 상세
EC2
Instance Type Purpose Cost Amount Total Cost
T3.small
(vCPU2, RAM 2GB)
ECS Cluster Instance $19.86 /m 5 $99.28 /m
T2.large
(vCPU2, RAM 8GB)
Dev Server
(Jeknins, Grafana)
$88.77 /m 1 $88.77 /m
Lambda
Architecture Purpose Memory Request / Month 실행시
간
Total Cost
x86_64 Show, Log API 128MB 3 천만 300ms $24.75 /m
6. –
인프라 예상 비용 Compute $140
t3.small * 1 $ 23.31 /m
Elastic Load Balancer
Type LCUs New Conn /S Active Conn /M Processed bytes / H Amount Total Cost
Application 1 25 3000 1GB 2 $47.16 /m
NAT Gateway
Data Processed / month Amount Total Cost
100 GB 1 $51.46 /m
Amazon MQ (Rabbit MQ)
Type Purpose Broker EBS OutBound Traffic Total Cost
Rabbit MQ MQ 1 개 200GB 100G $49.75 /m
6. 인프라 예상 비용 Network & RabbitMQ $ 140
Role Engine Instance Type Deployment Option Billing option Total Cost
Primary Mysql t3.mirco Single-AZ On-Demand $18.98 /m
DynamoDB
ElastiCache
Table Class Capacity mode DataSet Read Units Write Units Total Cost
Standard Provisioned 10GB 5 5 $6.10 /m
Engine Instance Type Instance Number Billing option Total Cost
Redis t3.mirco 3 On-Demand $56.94 /m
MySQL
6. –
인프라 예상 비용 DB $ 80
EBS
Volume Type Storage IOPS Snapshot Amount Total Cost
gp2 30 GB 100 / 3000 0 GB 6 $21.60 /m
S3
Volume Type Storage PUT/COPY/POST GET Amount Total Cost
Standard 100 GB 1000 K 1000 K 1 $8.63 /m
ECR
Data stored Type Amount Total Cost
50GB Private 2 $20 /m
6. –
인프라 예상 비용 Storage $ 45
Load Test
5
1. 테스트 전제조건
사용자 수
( 단위 : 명 )
플레이 수
( 단위 : 시간당 횟
수 )
1 게임 req
( 단위 : 명당 횟수 )
시간당 req
( 단위 : 시간당 횟
수 )
진행자 1
3
17 51
참가자 50 12 1,800
총계 51 3 29 1,851
1 시간당 1,000 게임 진행
총 req: 1,851 X 1,000 = 1,851,000 req
2. 테스트 시나리오
시간당 게임
1000, 2500, 5000
단위 스케일 아웃
반복횟수
서버 과부하 시
컨테이너 2 개 증가
반복횟수 조정
컨테이너 8 개 도달 후
최종 목표 미달성 시
1000 혹은 500 단위로 증감 ,
최적 컨테이너 수량 도출
최적 컨테이너 도출
Locust
테스트 도구
3. Locust 테스트 진행
5. Total rps
1. Request
1. Request
3. Locust 테스트 결과
2. Response
3. Failures
4. Exceptions
6. Response Time
7. User Number
5. Total rps
4. 모니터링
Amazon MQ
현재 사용중인
ECU
ECS
CPU 크래딧
DynamoDB
읽기 / 쓰기
요청 수
ElastiCache
Cluster 사용량
모니터링
RDS
읽기 / 쓰기
IO 관련
Lambda
호출 , 에러
처리시간
4. 모니터링
5. 테스트 결과
진행자 수
( 단위 : 명 )
참가자 수
( 단위 : 명 )
총 사용자 수
( 단위 : 명 )
성공
( 단위 : Container)
실패
( 단위 : Container)
1000 50,000 153,000 6 4
2500 125,000 382,500 8 6
3000 150,000 459,000 8 -
3500 175,000 535,500 - 8
4000 200,000 612,000 - 8
5000 250,000 765,000 - 8
0.9vCPU, RAM 0.9 GB * 8 개
Redis : t3.mirco * 3 개
Rabbit MQ : t3.mirco * 1 개
Lambda : Managed by AWS
5. 시스템 성능 평가
안정 수치
초과 처리
클러스터
확장 필요
Play 서버
구성
평균치의 3 배
확장 성능
목표 수치
900rps
안정 수치
550rps
개선사항 및
QnA
6
개선 사항
소셜 로그인 지원 퀴즈 검색 기능 미디어 제어
관리자 기능
UI 개선 코드 리펙토링
QnA
감사합니다

More Related Content

PPTX
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
PDF
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
PDF
모바일 게임을 만들기 위한 AWS 활용 고군분투기::최용호::AWS Summit Seoul 2018
PDF
엠퀴즈 (클라우드, 서버리스 기반 실시간 웹 퀴즈 게임)_완료보고서.pdf
PDF
타 게임사의 경험으로 본 AWS 핵심 모범 사례 한방에 배우기 - 이정훈 솔루션즈 아키텍트, AWS / 김지선 테크니컬 어카운트 매니저, ...
PDF
KGC 2013 DevSisters
PDF
Tdc2013 선배들에게 배우는 server scalability
PPTX
모바일 게임 하이브 런칭기 - 최용호
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
모바일 게임을 만들기 위한 AWS 활용 고군분투기::최용호::AWS Summit Seoul 2018
엠퀴즈 (클라우드, 서버리스 기반 실시간 웹 퀴즈 게임)_완료보고서.pdf
타 게임사의 경험으로 본 AWS 핵심 모범 사례 한방에 배우기 - 이정훈 솔루션즈 아키텍트, AWS / 김지선 테크니컬 어카운트 매니저, ...
KGC 2013 DevSisters
Tdc2013 선배들에게 배우는 server scalability
모바일 게임 하이브 런칭기 - 최용호

Similar to 광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx (20)

PPTX
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
PPTX
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
PDF
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
PDF
게임 고객 사례를 통해 살펴보는 AWS 활용 전략 :: 이경안 :: AWS Summit Seoul 2016
PDF
[오픈소스컨설팅]파일럿진행예제 on AWS
PPTX
aws-community-day 2017 5천만 모바일 앱 서비스 인프라 확장
PDF
AWS 기반 5천만 모바일 앱서비스 확장하기 - 이영진 (강남SE 모임) :: AWS Community Day 2017
PDF
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
PDF
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
PDF
서버리스 아키텍처 패턴 및 로그 처리를 위한 파이프라인 구축기 - 황윤상 솔루션즈 아키텍트, AWS / Matthew Han, SendBi...
PDF
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
PPTX
[넥슨토크] 모바일게임 하이브 런칭기 (2018)
PDF
통신사의 차별화된 메시징 서비스 아키텍처를 소개합니다 - 정영준 AWS 솔루션즈 아키텍트 / 강성원, 나상화 소프트웨어 엔지니어 무선사업부...
PDF
찾아가는 AWS 세미나(구로,가산,판교) - AWS에서 작은 서비스 구현하기 (김필중 솔루션즈 아키텍트)
PPTX
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
PDF
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
PDF
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | AWS 최적화 사용을 위해 운영자가 아닌 개발자들이 해야 할 ...
PDF
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
PDF
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
게임 고객 사례를 통해 살펴보는 AWS 활용 전략 :: 이경안 :: AWS Summit Seoul 2016
[오픈소스컨설팅]파일럿진행예제 on AWS
aws-community-day 2017 5천만 모바일 앱 서비스 인프라 확장
AWS 기반 5천만 모바일 앱서비스 확장하기 - 이영진 (강남SE 모임) :: AWS Community Day 2017
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
간단한 게임을 쉽고 저렴하게 서비스해보자! ::: AWS Game Master 온라인 시리즈 #1
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
서버리스 아키텍처 패턴 및 로그 처리를 위한 파이프라인 구축기 - 황윤상 솔루션즈 아키텍트, AWS / Matthew Han, SendBi...
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
[넥슨토크] 모바일게임 하이브 런칭기 (2018)
통신사의 차별화된 메시징 서비스 아키텍처를 소개합니다 - 정영준 AWS 솔루션즈 아키텍트 / 강성원, 나상화 소프트웨어 엔지니어 무선사업부...
찾아가는 AWS 세미나(구로,가산,판교) - AWS에서 작은 서비스 구현하기 (김필중 솔루션즈 아키텍트)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | AWS 최적화 사용을 위해 운영자가 아닌 개발자들이 해야 할 ...
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
Ad

More from yeongkikim2 (6)

PDF
(19’) SK NUGU Play 개발공모전_(최종)복지매니저_기획서.pdf
PDF
SSAFY_J6E202_SSAFit_특화_Full_version.pdf
PDF
소재데이터 AI 실습 최종보고서_ks0014_김영기.pdf
PDF
(18’) 부산대 창의융합해커톤_2. 발표PPT_해커톤.pdf
PDF
(18’) 부산대 창의융합해커톤_1. 결과보고서_해커톤.pdf
PDF
SSAFY 6기 2학기 공통프로젝트 식스맨_수화닥터_최종PPT
(19’) SK NUGU Play 개발공모전_(최종)복지매니저_기획서.pdf
SSAFY_J6E202_SSAFit_특화_Full_version.pdf
소재데이터 AI 실습 최종보고서_ks0014_김영기.pdf
(18’) 부산대 창의융합해커톤_2. 발표PPT_해커톤.pdf
(18’) 부산대 창의융합해커톤_1. 결과보고서_해커톤.pdf
SSAFY 6기 2학기 공통프로젝트 식스맨_수화닥터_최종PPT
Ad

광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx

  • 1. 엠퀴즈 잠시 후 있을 시연을 위해 휴대폰을 미리 준비 해주시기 바랍니다 . 광안 1 반 2 팀 프로젝트 발표
  • 3. Create 다양한 형태의 퀴즈 제작 01 No Login 퀴즈 참여 - Only 닉네임 02 Easy Play PC & 스마트폰 지원 03 Competition 실시간 경쟁 04 엠퀴즈 핵심 기능
  • 4. 엠퀴즈 시연 안내 라이브 시연 3. 퀴즈플레이 영상 2. 퀴즈제작 영상 1. 회원가입 퀴즈 플레이 참여를 원하시는 분은 휴대폰 카메라를 미리 준비 해주시기 바랍니다
  • 5. 퀴즈 참여 방법 닉네임 입력 2-1. URL 접속 퀴즈 풀기 선택 PIN 번호 입력 URL + 핀번호로 접속 http://www.mquiz.site/p/PIN번호 URL 로 접속 http://www.mquiz.site Or 1. QR 접속
  • 7. 2. 퀴즈 제작 시연 영상
  • 8. 2 . 카메라로 QR 찍어서 접속 3. 라이브 퀴즈 참여 방법 3. 원하는 닉네임 설정 1. 갤럭시 , 아이폰 일반카메라
  • 11. 회의록 , 기술공유 스터디 프로젝트 정책 관리 Notion 자료 공유 프로젝트 설계 및 문서 관리 Google Drive 프로젝트 일정 관리 JIRA 프로젝트 형상 관리 Git 1.1 효율적 협업
  • 12. 1.2 JIRA 1.3 Notion 프로젝트 일정 , 역할 , 이슈관리 간트차트 ( 전체 일정 ) 프로젝트 정책 설정 기술 공유 스터디 회의록
  • 13. 1.4 Git Feat 브랜치 이름 형식 - feat/{ 요구사항 중분류 } feat/Play 1. 브 – 랜치 관리 깃 플로우 전략 3. 커밋 메시지 관리 2. 브랜치 이름 관리 [ 브런치명 ] feat: add commit 내용
  • 14. 14 1. 마인드 맵 ( 브레인 스토밍 ) 3. 요구사항 목록 2. 도메인 용어 정의 ( 소통 ) 1.5 프로젝트 설계 14 4. 요구사항 상세 6. Flow Chart 5. Use Case
  • 16. 유저 동시 접속 시간당 459,000 명 안정적 접속 02 DevOps(CI/CD) Frontend Pipeline Backend Pipeline Rolling Update 04 클라우드 기반 실시간 게임 구현 목표 실시간 게임 Websocket, Redis, Rabbit MQ 01 Container 환경 Gradle, package.json 환경 변수 분리 , Stateless, ECS 03
  • 17. 진행자 : WebSocket 2.1 퀴즈 플레이 전체 통신 흐름 참가자 Lambda Log 데이터 Show 데이터 DynamoDB Redis RabbitMQ Spring boot Spring boot
  • 18. 진행자 WebSocket Message 구조 참가자 화면 참가자 진행자 화면 서버 Redux Redux 2.2 진행자 게임 화면 제어 Command (Start) 퀴즈 시작 전 대기 화면 퀴즈 시작 화면 Command 화면 제어 퀴즈 시작 중간 결과 최종 결과 3 개 Command 유저 제어 로비 대기 닉네임 체크 강퇴 정답 제출 퀴즈 종료 5 개
  • 19. RabbitM Q 2.3 서버 구조 Redis 퀴즈진행 3. 게임 서버 1. 인증 서버 인증 서버 인증 서버 2. Lambda 퀴즈 관리 로그 관리 퀴즈진행 퀴즈진행 퀴즈진행 퀴즈 , 로그 관리 로그인 다중 컨테이너 퀴즈 진행 실시간 게임 데이터 관리
  • 21. 1. 실시간 점수 랭킹 계산 Redis Cluster 구축 3.1 Redis - 성능 최적화 3. 안정적인 데이터 저장 Redis - Sorted Set Redis TTL 2. 메모리 관리 ZADD( 점수 설정 ) - O(log(N)) ZRANDMEMBER( 점수 증가 ) - O(N) ZMSCORE( 점수 가져오기 ) - O(N) ZRANGE ( 전체 조회 ) - O(log(N)+M) 1. 게임 종료 시 사용했던 메모리 할당 해제 2. 4 시간의 TTL 적용 - 자동삭제 1. 데이터 유실 최소화 2. AWS ElastiCache 를 이용한 3 개 노드로 클러스터 구축
  • 22. 3.1 Redis - 설계 구조 2. Sorted Set 참가자 정답 개수 참가자 랭킹 점수 제출자 수 데이터 산정 1. Set Show ID Email 인증번호 중복 제어 3. Hash 퀴즈 데이터 분리 및 저장 특정 데이터 조회 4. List 전체 퀴즈 데이터 조회
  • 23. 3.2 NoSQL - DB 최적화 초기 RDB RDB LOG 데이터 SHOW 데이터 NoSQL 다중 테이블 Join 호출 프로젝트 구조상 NoSQL 이 적합하다고 판단
  • 24. 3.3 NoSQL - Show 데이터 전체 구조 2. NoSQL 저장 형태 1. Show 데이터 설계 { "_id": "638af7d04f2229040345b52a", "quizInfo": { "email": "[email protected]", "title": "", "tags": [], "createDate": "", "lastModifyDate": "", "isPulic": true, "state": "" }, "quizData": [ { "num": 0, "type": "", "question": "", "media": { "type": "", "url": "" }, "choiceList": { "num1": "", "num2": "", "num3": "", "num4": "" }, "answer": [], "time": 0, "useScore": true, "rate": 0 }, ], "_class": "com.mzc.quiz.show.entity.Show" }
  • 25. 3.3 NoSQL - Show(QuizInfo) / 퀴즈 게임 정보 퀴즈 게임정보 ( 제목 , 생성일 , 태그 등 ) { "_id": "638af7d04f2229040345b52a", "quizInfo": { "email": "[email protected]", "title": "", "tags": [], "createDate": "", "lastModifyDate": "", "isPulic": true, "state": "" }, "quizData": [ { "num": 0, "type": "", "question": "", "media": { "type": "", "url": "" }, "choiceList": { "num1": "", "num2": "", "num3": "", "num4": "" }, "answer": [], "time": 0, "useScore": true, "rate": 0 }, ], "_class": "com.mzc.quiz.show.entity.Show" } 2. NoSQL 저장 형태
  • 26. 3.3 NoSQL - Show(QuizData) 실제 저장 데이터 { "_id": "638af7d04f2229040345b52a", "quizInfo": { "email": "[email protected]", "title": "", "tags": [], "createDate": "", "lastModifyDate": "", "isPulic": true, "state": "" }, "quizData": [ { "num": 0, "type": "", "question": "", "media": { "type": "", "url": "" }, "choiceList": { "num1": "", "num2": "", "num3": "", "num4": "" }, "answer": [], "time": 0, "useScore": true, "rate": 0 }, ], "_class": "com.mzc.quiz.show.entity.Show" } 문제 목록 문제 정보 ( 문제번호 , 질문 , 답 등 )
  • 27. 3.4 NoSQL - LOG 전체 데이터 구조 실제 저장 데이터 LOG – 진행된 전체 퀴즈 데이터 { "id":"id", "showid":"showid", "email":"email", "showtitle":"showtitle" "playdate":"playdate", "quizcount":"quizcount", "Usercount":"usercount", "userdata":[ { "nickname":"test", "rank":"1", "rankscore":"12345", "correctcount":"12", "iscorrectlist":"0,1,-1" }, { "nickname":“nickName", "rank":“2", "rankscore":“112233", "correctcount":"10", "iscorrectlist":"0,1,-1" } ] } ( 닉네임 , 랭킹 , 정답 수 등 )
  • 29. 인프라 2. Front 1. 전체구조 4. CI/CD 5. ECS 3. Backend 6. 예상 비용
  • 30. 1. 인프라 전체구조 Osaka (ap-northeast-3) 1 Front 2 CI/CD 3 Back
  • 31. 2. Frontend Amazon S3 Amazon CloudFront Client Mobile client Amazon Route 53 1 2 Web 접속 Frontend 개발자 Github Jenkins Front Pipeline 3 4 정적 웹 배포 CDN
  • 32. 3. Backend Client Mobile client Amazon Route 53 ALB ( 퀴즈 게 임 ) ECR Registry Image ECS Cluster Service Target Group - Play Container(Play) Container(Play) Container(Play) Container(Auth) TG - Auth Task ALB ( 로그 인 ) 1 2 3 3 4 4 NAT gateway 5 6 Health Check Rolling Update 무중단 배포 컨테이너가 갑자기 죽는다면 ?
  • 33. Jenkins 4. Backend Pipeline Backend 개발자 Github Jenkins Backend Pipeline ECR Container Image Registry ECS Container Git Push Webhook Docker Build & ECR Push Update Service Rolling Update 1 2 3 4 5 Rolling Update Min : 50% Max : 100%
  • 34. 5. 인프라 ECS, ASG 주요 세팅값 Launch Template & ASG - AMI :ami-09501c9961ca54ebc - Instance type : t3.small - AZs : ap-northeast-3b, c - Desired capacity : 5 - Minimum capacity : 5 - Maximum capacity : 5 ECS – Play( 게임 진 행 ) - Task CPU : 0.9 vCPU - Task RAM : 0.9 GB - Container Name : mquiz-play - Task CPU : 0.899 vCPU - Task RAM : 0.899 GB - Port Mapping : 0:8080 - Enviroment : 보고서 참고 -HealthCheck Command CMD-SHELL, curl -f http://localhost:8080/actuator/health || exit 1 Interval (30), Timeout (5) Start period (120), Retries (3) ECS – Auth( 로그인 ) - Task CPU : 0.5 vCPU - Task RAM : 0.5 GB - Container Name : mquiz-auth - Task CPU : 0.499 vCPU - Task RAM : 0.499 GB - Port Mapping : 0:8080 - Enviroment : 보고서 참고 -HealthCheck Command CMD-SHELL, curl -f http://localhost:8080/actuator/health || exit 1 Interval (30), Timeout (5) Start period (120), Retries (3) ECS 클러스터용 EC2 관리 T3.small – 5 개 실행중 vCPU 0.9, RAM 0.9 GB Play 이미지 6 개의 컨테이너 관리 vCPU 0.5, RAM 0.5 GB Auth 이미지 2 개의 컨테이너 관리
  • 35. 6. 인프라 예상 비용 계산 - 1 달 기준 1. 스케일 아웃시 비용 예측 2. 비용 최적화
  • 36. Category Type Region Count Unit price Total cost compute ec2 ap-northeast-3 6 $88.77 $88.77. compute ec2 ap-northeast-3 6 $19.86 $119.16 compute lambda ap-northeast-3 1 $24.75 $24.75 containers ecr ap-northeast-3 2 $10.00 $20.00 containers ecstask ap-northeast-3 1 $0.00 $0.00 networking apigateway ap-northeast-3 1 $4.25 $4.25 networking elb ap-northeast-3 2 $23.58 $47.16 networking natgateway ap-northeast-3 1 $51.46 $51.46 storage ebs ap-northeast-3 6 $3.60 $21.60 storage s3 ap-northeast-3 1 $8.63 $8.63 Amazon MQ Rabbit MQ ap-northeast-3 1 $49.21 $49.21 database dynamodb ap-northeast-3 1 $6.10 $6.10 database elasticache ap-northeast-3 3 $18.98 $56.94 database rds ap-northeast-3 1 $18.98 $18.98 6. 인프라 예상 비용 계산 - 상세
  • 37. EC2 Instance Type Purpose Cost Amount Total Cost T3.small (vCPU2, RAM 2GB) ECS Cluster Instance $19.86 /m 5 $99.28 /m T2.large (vCPU2, RAM 8GB) Dev Server (Jeknins, Grafana) $88.77 /m 1 $88.77 /m Lambda Architecture Purpose Memory Request / Month 실행시 간 Total Cost x86_64 Show, Log API 128MB 3 천만 300ms $24.75 /m 6. – 인프라 예상 비용 Compute $140 t3.small * 1 $ 23.31 /m
  • 38. Elastic Load Balancer Type LCUs New Conn /S Active Conn /M Processed bytes / H Amount Total Cost Application 1 25 3000 1GB 2 $47.16 /m NAT Gateway Data Processed / month Amount Total Cost 100 GB 1 $51.46 /m Amazon MQ (Rabbit MQ) Type Purpose Broker EBS OutBound Traffic Total Cost Rabbit MQ MQ 1 개 200GB 100G $49.75 /m 6. 인프라 예상 비용 Network & RabbitMQ $ 140
  • 39. Role Engine Instance Type Deployment Option Billing option Total Cost Primary Mysql t3.mirco Single-AZ On-Demand $18.98 /m DynamoDB ElastiCache Table Class Capacity mode DataSet Read Units Write Units Total Cost Standard Provisioned 10GB 5 5 $6.10 /m Engine Instance Type Instance Number Billing option Total Cost Redis t3.mirco 3 On-Demand $56.94 /m MySQL 6. – 인프라 예상 비용 DB $ 80
  • 40. EBS Volume Type Storage IOPS Snapshot Amount Total Cost gp2 30 GB 100 / 3000 0 GB 6 $21.60 /m S3 Volume Type Storage PUT/COPY/POST GET Amount Total Cost Standard 100 GB 1000 K 1000 K 1 $8.63 /m ECR Data stored Type Amount Total Cost 50GB Private 2 $20 /m 6. – 인프라 예상 비용 Storage $ 45
  • 42. 1. 테스트 전제조건 사용자 수 ( 단위 : 명 ) 플레이 수 ( 단위 : 시간당 횟 수 ) 1 게임 req ( 단위 : 명당 횟수 ) 시간당 req ( 단위 : 시간당 횟 수 ) 진행자 1 3 17 51 참가자 50 12 1,800 총계 51 3 29 1,851 1 시간당 1,000 게임 진행 총 req: 1,851 X 1,000 = 1,851,000 req
  • 43. 2. 테스트 시나리오 시간당 게임 1000, 2500, 5000 단위 스케일 아웃 반복횟수 서버 과부하 시 컨테이너 2 개 증가 반복횟수 조정 컨테이너 8 개 도달 후 최종 목표 미달성 시 1000 혹은 500 단위로 증감 , 최적 컨테이너 수량 도출 최적 컨테이너 도출 Locust 테스트 도구
  • 45. 5. Total rps 1. Request 1. Request 3. Locust 테스트 결과 2. Response 3. Failures 4. Exceptions 6. Response Time 7. User Number 5. Total rps
  • 46. 4. 모니터링 Amazon MQ 현재 사용중인 ECU ECS CPU 크래딧 DynamoDB 읽기 / 쓰기 요청 수 ElastiCache Cluster 사용량 모니터링 RDS 읽기 / 쓰기 IO 관련 Lambda 호출 , 에러 처리시간
  • 48. 5. 테스트 결과 진행자 수 ( 단위 : 명 ) 참가자 수 ( 단위 : 명 ) 총 사용자 수 ( 단위 : 명 ) 성공 ( 단위 : Container) 실패 ( 단위 : Container) 1000 50,000 153,000 6 4 2500 125,000 382,500 8 6 3000 150,000 459,000 8 - 3500 175,000 535,500 - 8 4000 200,000 612,000 - 8 5000 250,000 765,000 - 8
  • 49. 0.9vCPU, RAM 0.9 GB * 8 개 Redis : t3.mirco * 3 개 Rabbit MQ : t3.mirco * 1 개 Lambda : Managed by AWS 5. 시스템 성능 평가 안정 수치 초과 처리 클러스터 확장 필요 Play 서버 구성 평균치의 3 배 확장 성능 목표 수치 900rps 안정 수치 550rps
  • 51. 개선 사항 소셜 로그인 지원 퀴즈 검색 기능 미디어 제어 관리자 기능 UI 개선 코드 리펙토링
  • 52. QnA

Editor's Notes

  • #30: 구성도 전체적으로 수정하고 인프라 계산하는 부분 디자인 수정 하고 문서로 만드는 작업 필요 Region - Osaka를 선택한 이유 / 핑이 튈수도 있음 Front 강조사항 Back 강조사항