Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 53 Anzeige

Weitere Verwandte Inhalte

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

Aktuellste (20)

Anzeige

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

  1. 1. 엠퀴즈 잠시 후 있을 시연을 위해 휴대폰을 미리 준비 해주시기 바랍니다. 광안 1반 2팀 프로젝트 발표
  2. 2. 2 고태훈 팀원 소개 김영기 김시현 김재훈
  3. 3. Create 다양한 형태의 퀴즈 제작 01 No Login 퀴즈 참여 - Only 닉네임 02 Easy Play PC & 스마트폰 지원 03 Competition 실시간 경쟁 04 엠퀴즈 핵심 기능
  4. 4. 엠퀴즈 시연 안내 라이브 시연 3.퀴즈플레이 영상 2.퀴즈제작 영상 1.회원가입 퀴즈 플레이 참여를 원하시는 분은 휴대폰 카메라를 미리 준비 해주시기 바랍니다
  5. 5. 퀴즈 참여 방법 닉네임 입력 2-1. URL 접속 퀴즈 풀기 선택 PIN 번호 입력 URL + 핀번호로 접속 http://www.mquiz.site/p/PIN번호 URL로 접속 http://www.mquiz.site Or 1. QR 접속
  6. 6. 1. 회원가입 시연 영상
  7. 7. 2. 퀴즈 제작 시연 영상
  8. 8. 2 .카메라로 QR 찍어서 접속 3. 라이브 퀴즈 참여 방법 3. 원하는 닉네임 설정 1. 갤럭시, 아이폰 일반카메라
  9. 9. 라이브 시연 0
  10. 10. 프로젝트 관리 1
  11. 11. 회의록, 기술공유 스터디 프로젝트 정책 관리 Notion 자료 공유 프로젝트 설계 및 문서 관리 Google Drive 프로젝트 일정 관리 JIRA 프로젝트 형상 관리 Git 1.1 효율적 협업
  12. 12. 1.2 JIRA 1.3 Notion 프로젝트 일정,역할,이슈관리 간트차트 (전체 일정) 프로젝트 정책 설정 기술 공유 스터디 회의록
  13. 13. 1.4 Git Feat 브랜치 이름 형식 - feat/{요구사항 중분류} feat/Play 1. 브랜치 관리 – 깃 플로우 전략 3. 커밋 메시지 관리 2. 브랜치 이름 관리 [브런치명] feat: add commit내용
  14. 14. 14 1. 마인드 맵 (브레인 스토밍) 3. 요구사항 목록 2. 도메인 용어 정의 (소통) 1.5 프로젝트 설계 14 4. 요구사항 상세 6. Flow Chart 5. Use Case
  15. 15. 실시간 게임 구현 2
  16. 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. 17. 진행자 : WebSocket 2.1 퀴즈 플레이 전체 통신 흐름 참가자 Lambda Log 데이터 Show 데이터 DynamoDB Redis RabbitMQ Spring boot Spring boot
  18. 18. 진행자 WebSocket Message 구조 참가자 화면 참가자 진행자 화면 서버 Redux Redux 2.2 진행자 게임 화면 제어 Command (Start) 퀴즈 시작 전 대기 화면 퀴즈 시작 화면 Command 화면 제어 퀴즈 시작 중간 결과 최종 결과 3개 Command 유저 제어 로비 대기 닉네임 체크 강퇴 정답 제출 퀴즈 종료 5개
  19. 19. RabbitMQ 2.3 서버 구조 Redis 퀴즈진행 3. 게임 서버 1. 인증 서버 인증 서버 인증 서버 2. Lambda 퀴즈 관리 로그 관리 퀴즈진행 퀴즈진행 퀴즈진행 퀴즈, 로그 관리 로그인 다중 컨테이너 퀴즈 진행 실시간 게임 데이터 관리
  20. 20. 성능 최적화 3
  21. 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. 22. 3.1 Redis - 설계 구조 2. Sorted Set 참가자 정답 개수 참가자 랭킹 점수 제출자 수 데이터 산정 1. Set Show ID Email 인증번호 중복 제어 3. Hash 퀴즈 데이터 분리 및 저장 특정 데이터 조회 4. List 전체 퀴즈 데이터 조회
  23. 23. 3.2 NoSQL - DB 최적화 초기 RDB RDB LOG 데이터 SHOW 데이터 NoSQL 다중 테이블 Join 호출 프로젝트 구조상 NoSQL이 적합하다고 판단
  24. 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. 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. 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. 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" } ] } (닉네임, 랭킹, 정답 수 등)
  28. 28. 인프라 4
  29. 29. 인프라 2. Front 1. 전체구조 4. CI/CD 5. ECS 3. Backend 6. 예상 비용
  30. 30. 1. 인프라 전체구조 Osaka (ap-northeast-3) 1 Front 2 CI/CD 3 Back
  31. 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. 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. 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. 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. 35. 6. 인프라 예상 비용 계산 - 1달 기준 1. 스케일 아웃시 비용 예측 2. 비용 최적화
  36. 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. 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. 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. 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. 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
  41. 41. Load Test 5
  42. 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. 43. 2. 테스트 시나리오 시간당 게임 1000, 2500, 5000 단위 스케일 아웃 반복횟수 서버 과부하 시 컨테이너 2개 증가 반복횟수 조정 컨테이너 8개 도달 후 최종 목표 미달성 시 1000 혹은 500단위로 증감, 최 적 컨테이너 수량 도출 최적 컨테이너 도출 Locust 테스트 도구
  44. 44. 3. Locust 테스트 진행
  45. 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. 46. 4. 모니터링 Amazon MQ 현재 사용중인 ECU ECS CPU 크래딧 DynamoDB 읽기/쓰기 요청 수 ElastiCache Cluster 사용량 모니터링 RDS 읽기/쓰기 IO 관련 Lambda 호출, 에러 처리시간
  47. 47. 4. 모니터링
  48. 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. 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
  50. 50. 개선사항 및 QnA 6
  51. 51. 개선 사항 소셜 로그인 지원 퀴즈 검색 기능 미디어 제어 관리자 기능 UI 개선 코드 리펙토링
  52. 52. QnA
  53. 53. 감사합니다

Hinweis der Redaktion

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


    Front 강조사항
    Back 강조사항

×