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개
RabbitMQ
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

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

[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
Amazon Web Services Korea
 
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
Amazon Web Services Korea
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Ji-Woong Choi
 
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
David Kim
 
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Jungsu Heo
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
Amazon Web Services Korea
 
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...Amazon Web Services Korea
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
Gruter
 
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
Amazon Web Services Korea
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMT
I Goo Lee
 
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
OpenStack Korea Community
 
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Web Services Korea
 
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
의진 김
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
noerror
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
YoungSu Son
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
wonyong hwang
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
GunHee Lee
 

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

[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
[AWS Builders] 클라우드 비용, 어떻게 줄일 수 있을까?
 
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
클라우드 비용, 어떻게 줄일 수 있을까? - 구본민, AWS 클라우드 파이넌셜 매니저 :: AWS Builders 100
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법[NDC 2017] 이카루스 북미 : 베타서비스 활용법
[NDC 2017] 이카루스 북미 : 베타서비스 활용법
 
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
Amazon ECS를 통한 도커 기반 콘테이너 서비스 구축하기 - AWS Summit Seoul 2017
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMT
 
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
[OpenStack Days Korea 2016] Track3 - 방송제작용 UHD 스트로지 구성 및 테스트
 
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
 
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
모바일 RPG 게임 시스템 디자인 솔루션 AEGIS NECTA (이지스 넥타) API 소개 - 신동훈 대표
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
 

광안 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. RabbitMQ 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": "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" }
  • 25. 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 저장 형태
  • 26. 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" } 문제 목록 문제 정보(문제번호, 질문, 답 등)
  • 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

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