SlideShare uma empresa Scribd logo
1 de 101
모바일 게임 하이브 런칭기
최용호
발표자 소개
● 열혈강호 제작 중
● 하이브 with Naver Webtoon
● 화이트데이
● 클럽 엠스타 온라인
● 와리가리 삼총사 for Kakao
● 어스토니시아VS for Kakao
● 다함께 차차차
● 어스토니시아 온라인
● 열혈강호2 온라인
참여 프로젝트
● 자바카페 커뮤니티 운영진
○ 매주 운영진 스터디
○ 매월 운영진 회의 및 세미나
○ 분기별 공개 강의 및 스터디
○ 공감 세미나 및 KCD 참여
○ 상/하반기 운영진 워크샵
○ 페이스북 / 기술 블로그 운영
활동
게임 소개
Agenda
사내 개발환경
자동화에 대한 고민
AWS 활용 해보기
네트워크 구성에 대한 고민
서비스 선택에 대한 고민
부하 테스트에 대한 고민
게임 데이터 활용에 대한 고민
사내 개발 환경
다운로드부터 설치까지 한땀~ 한땀~
자동으로 해줄 수 있는 무언가가 필요
개발 환경 구축을 위해 Docker 도입
Docker
서비스 별로 디렉토리를 만들어 Docker 파일 관리
Dockerfile 관리
Docker 파일과 설정 파일들
docker 컨테이너를 구동할 때 사용할 설정파일 관리
동료 개발자들이 docker-compose 명령을 몰라도 사용할 수 있도록 script 제공
compose 명령을 최대한 간편하게 하기 위한 스크립트
빌드 및 배포 자동화를 위해 Jenkins 도입
Jenkins
빌드 및 배포를 자동화 하기 위해 Jenkins 도입
My Company Private
Network
Jenkins
Server
S3
Elastic Beanstalk
container
instances
1. 빌드 된 war파일 업로드
2. 배포
3. 업로드 된 war 파일로 배포 수
행
My Company Private
Network
Jenkins
Server
EC2 instance contents
tomcat
tomcat mariadb
redis
Operating
Tool
Statist
ics
각 서버 빌드 및 배포
Redis 및 Mariadb
스키마 갱신 및 초기화
● Elastic Beanstalk 배포 ● 운영 및 관리를 위한 서버 배포
docker-compose를 활용하여 10분 내로 사내 환경 구성
tomcat
mariadb redis
Logstash elasticse
arch
kibanahttpd
Client
Pinpoint-
hbase
Pinpoint-
collector
Pinpoint-
web
Docker-
compose
Docker-
compos
e
Docker-
compose
Amazon
ECR
Jenkin
s
Kibana와 Pinpoint를 통해 서버 상태 확인
Docker Image들은 ECR을 사용하여 버
전 관리
사내 서버들의 빌드 및 배포는
Jenkins를 통해 자동화
누구나 간편하게 사용할 수 있게 되어 작업이 활발해짐
AWS 활용 해보기
네트워크 구성에 대한 고민
VPC
VPC 구성을 어떻게 할까?
Availability Zone 1 Availability Zone 2
VPC 안에는 두개의 가용 영역이 존재 (서울 리전 기준)
VPC
Availability Zone 1 Availability Zone 2
VPC
VPC 내에 서브넷 구성을 할 수가 있는데 이는 가용영역 별로 생성이 가능
subnet subnet
Availability Zone 1 Availability Zone 2
VPC
새로 생성한 VPC에 IGW 연결
subnet subnet
Availability Zone 1
Private subnet
Public subnet
Availability Zone 2
Private subnet
Public subnet
VPC
IGW가 연결되지 않은 서브넷(private)과 연결된 서브넷(public)으로 구분
Availability Zone 1
Private subnet
Public subnet
Availability Zone 2
Private subnet
Public subnet
VPC
고객은 ELB를 통해서만, 관리자는 public 서브넷의 EC2 인스턴스를 통해서만
Elastic
Load balancer
User
Admin
instance
instance instance
AWS 네트워크 신규기능 업데이트 - 강동환 솔루션즈 아키텍트
https://youtu.be/FDFmI0nU4Wg
천만 사용자를 위한 AWS 아키텍처 보안 확장 모범 사례 - 윤석찬, 테크에반젤리스트
https://youtu.be/wn_-FtheGDY
가상 데이터 센터 만들기 - VPC 기본 및 연결 옵션 - 양승도 솔루션즈 아키텍트
https://youtu.be/R1UWYQYTPKo
서비스 선택에 대한 고민
Docker를 활용해보고 싶어서 컨테이너 기반 서비스 검토
Amazon ECS
검토 당시 서울리전에서 제공되지 않아 포기
Amazon ECS
EC2 인스턴스에 Docker Swarm 구축
Docker의 manager역할을 수행할 AMI와 worker 역할을 할 AMI를 생성
Swarm
Manager AMI
Swarm
Worker AMI
AMI를 통해 EC2 인스턴스가 구동되면
Worker는 UserData 스크립트를 통해 Manager에 Join
Swarm
Manager AMI
Swarm
Worker AMI
Join
docker scale 명령을 통해 컨테이너를 확장
Scale
docker scale 명령을 수작업으로 해야한다는 불편함 존재
Scale
미리 scale을 넉넉히 걸어두고 한 머신에 구동될 수 있는 컨테이너를 제한하는 편법 사용
docker service create --name test-tomcat --publish 8080:8080 --reserve-cpu 1 tomcat
docker service scale test-tomcat=100
해 놓고 보니 scale 명령으로 유연한 컨테이너 구동의 장점이 사라짐
결국 우리 서비스에서 docker를 활용하는 것은 욕심이라 판단.
docker service create --name test-tomcat --publish 8080:8080 --reserve-cpu 1 tomcat
docker service scale test-tomcat=100
Docker와 Docker Swarm은 포기하기로
AWS와 Docker Swarm을 이용한 쉽고 빠른 컨테이너 오케스트레이션 -
김충섭 개발자(퍼플웍스)
https://youtu.be/16LNWMqphOA
[AWS] EC2 인스턴스에서 docker swarm 서비스를 통해 웹서버 구동 및 확장
http://yongho1037.tistory.com/729
Elastic Beanstalk 도입
Amazon
Elastic
Beanstalk
용도에 맞게 환경을 생성해서 관리
ELB부터 오토스케일링, 보안, 롤링 패치 등 까지 손쉽게 설정
배포와 동시에 버전관리가 되기 때문에 언제든지 이전 버전으로 롤백 가능
설정을 저장해 두면 동일한 설정으로 편리하게 환경 생성 가능
게임 서버에 대한 고민 해결
변경 시 모든 인스턴스를 종료하고 새로 생성
주의해서 변경해야 할 설정들
● 오토스케일링의 시작 구성(Launch Configuration
● VPC 설정
● 인스턴스 type 변경
● AMI 변경
● SSH key 변경
● 등등.. 더 있을 수도..
[AWS] Elastic Beanstalk 생성과 Hook, .ebextensions를 통해 EC2 인스턴스 설정
http://yongho1037.tistory.com/731
부하테스트에 대한 고민
Java 기반이고 익숙한 IDE에서 자유롭게 개발 후
jar파일을 배포하여 사용할 수 있기 때문에 선택
머신만 확장하면 무제한의 유저를 유입시킬 수 있는 구조가 목표
instances
instance
instance
instance
Classic
Load
Balancer
JMeter
JMeter
JMeter
스팟 인스턴스, ssm, jmeter를 활용하여 부하테스트
instance
Spot
Instance
ssm
bucket
Output Log
Run Command
instances
부하 전달
Loadtest
Server
Spot
Instance
Spot
Instance
스팟 인스턴스를 생성하고,
생성된 인스턴스들에 대한 상태 확인과
명령을 내리기 위한 서버
Classic
Load
Balancer
팀원들 누구나 부하테스트를 해볼 수 있도록 툴 제공
jmeter 가 여러대에서 동작 중이기 때문에
동작 상황을 알 수가 없어서 CloudWatch의 로그 활용
성능 측정은 naver의 오픈소스인 pinpoint로
pinpoint 독립형
https://github.com/YonghoChoi/pinpoint-single-docker
pinpoint 분산형
https://github.com/YonghoChoi/pinpoint-docker
런칭 전에 pinpoint 또한 관리 요소때문에 X-Ray로 변경
각 요청의 응답시간 확인 후 오래 걸린 작업들을 수정하여 성능 최적화
AWS X-Ray를 통한 서버리스 분산 애플리케이션 추적하기 - 윤석찬 (AWS 테크에반젤리스트)
https://www.youtube.com/watch?v=BEg__eV1mT8&t=1350s
게임 데이터
활용에 대한 고민
데이터 수집부터 가공, 집계까지 해주는 Elastic Stack 선택
지표용 로그에 대한 설계
사용자 계정
캐릭터
무기
아이템
상점
...
가입
로그인
구매
판매
...
Title SubTitle
지표용 로그에 대한 설계
사용자 계정
가입 로그인 탈퇴 복귀
Title
SubTitle
id값을 통해 사용자 행위에 연관된 데이터 탐색
스테이지 클리어
재화 획득
아이템 획득
캐릭터 획득
경험치 획득
퀘스트 달성
...
ID : 10000
ID : 10001, parentID : 10000
ID : 10002, parentID : 10000
ID : 10003, parentID : 10000
ID : 10004, parentID : 10000
ID : 10005, parentID : 10000
재화 획득에 대한 실제 데이터
{
"id": "b46adf7e5bf14c4ca18868f930e2670f",
"uid": 5824735036189904000,
"nickname": "yongho",
"title": "GOODS",
"subTitle": "TAKE",
"detail": {
"gold": 120,
"diamondBonus": 0,
"diamondCash": 0,
"survivalCoin": 0,
"pvpCoin": 0,
"stamina": 1,
"supplies": 0,
"component": 0,
"exp": 0
},
"parentId": "d9388af36d63482b851e33f78225a9be",
"parentTitle": "STAGE",
"parentSubTitle": "CLEAR",
"timestamp": "2017-11-08T06:00:19.551Z",
"loglevel": "TRACE"
}
parent 정보를 통해 어디서 획득한 것인지 알 수 있음
{
"id": "b46adf7e5bf14c4ca18868f930e2670f",
"uid": 5824735036189904000,
"nickname": "yongho",
"title": "GOODS",
"subTitle": "TAKE",
"detail": {
"gold": 120,
"diamondBonus": 0,
"diamondCash": 0,
"survivalCoin": 0,
"pvpCoin": 0,
"stamina": 1,
"supplies": 0,
"component": 0,
"exp": 0
},
"parentId": "d9388af36d63482b851e33f78225a9be",
"parentTitle": "STAGE",
"parentSubTitle": "CLEAR",
"timestamp": "2017-11-08T06:00:19.551Z",
"loglevel": "TRACE"
}
parentId로 검색하면 해당 행위와 연관된 사항들을 확인 가능
{
"id": "b46adf7e5bf14c4ca18868f930e2670f",
"uid": 5824735036189904000,
"nickname": "yongho",
"title": "GOODS",
"subTitle": "TAKE",
"detail": {
"gold": 120,
"diamondBonus": 0,
"diamondCash": 0,
"survivalCoin": 0,
"pvpCoin": 0,
"stamina": 1,
"supplies": 0,
"component": 0,
"exp": 0
},
"parentId": "d9388af36d63482b851e33f78225a9be",
"parentTitle": "STAGE",
"parentSubTitle": "CLEAR",
"timestamp": "2017-11-08T06:00:19.551Z",
"loglevel": "TRACE"
}
이 id 값은 제가 UUID로 만든 값
"id": "b46adf7e5bf14c4ca18868f930e2670f"
엘라스틱 서치에서는 _id 값을 지정하지 않으면 엘라스틱서치가 생성
"_id": "AWHRtsHJUGsDUVnVAG4k"
이 _id 값을 샤드 사이즈 Mod 연산하여 샤드 위치 결정
_id % ShardSize
내가 만든 UUID로 _id를 사용했다가 균등하게 분배가 안되면 어쩌지?
_id % ShardSize
final int SHARD_SIZE = 5;
int[] shards = new int[SHARD_SIZE];
for(int i = 0; i < 100000; i++) {
int hash =
Math.abs(Murmur3HashFunction.hash(String.valueOf(i)));
int shardId = hash % SHARD_SIZE;
shards[shardId]++;
Thread.sleep(1);
}
for(int i = 0; i < SHARD_SIZE; i++) {
System.out.println(String.format("shardId : %d,
count : %d", i, shards[i]));
}
엘라스틱서치에서 샤드 분배하는 로직을 가져다 테스트
final int SHARD_SIZE = 5;
int[] shards = new int[SHARD_SIZE];
for(int i = 0; i < 100000; i++) {
int hash =
Math.abs(Murmur3HashFunction.hash(String.valueOf(i)));
int shardId = hash % SHARD_SIZE;
shards[shardId]++;
Thread.sleep(1);
}
for(int i = 0; i < SHARD_SIZE; i++) {
System.out.println(String.format("shardId : %d,
count : %d", i, shards[i]));
}
// 결과
shardId : 0, count : 19740
shardId : 1, count : 20016
shardId : 2, count : 19905
shardId : 3, count : 20032
shardId : 4, count : 20307
거의 균등하게 document가 분배됨
final int SHARD_SIZE = 5;
int[] shards = new int[SHARD_SIZE];
for(int i = 0; i < 100000; i++) {
int hash =
Math.abs(Murmur3HashFunction.hash(String.valueOf(i)));
int shardId = hash % SHARD_SIZE;
shards[shardId]++;
Thread.sleep(1);
}
for(int i = 0; i < SHARD_SIZE; i++) {
System.out.println(String.format("shardId : %d,
count : %d", i, shards[i]));
}
// 결과
shardId : 0, count : 19740
shardId : 1, count : 20016
shardId : 2, count : 19905
shardId : 3, count : 20032
shardId : 4, count : 20307
id 필드를 따로 만들지 않고 샤드 분배 걱정 없이
_id를 직접 할당해서 사용하는 것이 더 효율적일 듯
파일에 기록되는 Web 서버 로그를 수집하기 위해 Filebeat 사용
Web
Server
EC2
Instance
filebeat
Filebeat를 통해 logstash로 데이터 전달
Web
Server
EC2
Instance
EC2
Instance
filebeat
logstash
logstash에서 가공한 데이터를 elasticsearch에 색인
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
elasticsearch 클러스터 구성을 위해 한 서버에서 얼마나 수용 가능한지 확인
원활하게 동작하는 상태 (r4.large)
GC가 급격하게 발생하면서 CPU가 바빠짐
부하 발생하는 시점의 샤드 수와 도큐먼트 수, 사용 용량 등을 확인하여 확장 여부 결정
웹 서버에서 장애가 발생하여 인스턴스가 종료될 경우를 대비해
보내지 못한 데이터 처리 필요
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
logstash에 대한 확장이나 장애에 대한 대비도 필요
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
elasticsearch에 데이터가 너무 많이 쌓이거나
장애 대응을 위해 클러스터링 필요
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
Amazon Elasticsearch Service 도입
Amazon
Elasticsearch
Service
ElasticsearchAmazon
Kinesis
Streams
Lambda
function
Amazon
Kinesis–
enabled app
런칭을 앞두고 관리 요소 때문에 AWS의 관리형 서비스로 전환
Filebeat 대신 Kinesis Agent 사용
ElasticsearchAmazon
Kinesis
Streams
Lambda
function
Amazon
Kinesis–
enabled app
Logstash 대신 Kinesis를 통해 데이터를 받아
Lambda를 통해 데이터 가공
ElasticsearchAmazon
Kinesis
Streams
Lambda
function
Amazon
Kinesis–
enabled app
EC2 인스턴스에 설치형 Elasticsearch 대신 Amazon Elasticsearch Service 사용
ElasticsearchAmazon
Kinesis
Streams
Lambda
function
Amazon
Kinesis–
enabled app
AWS 빅데이터 아키텍처 패턴 및 모범 사례
- 남궁영환 빅데이터 컨설턴트(AWS 코리아)
https://www.youtube.com/watch?v=D1yxmpD4VDc
AWS Summit Seoul 2016 - Amazon Kinesis 와 Elasticsearch 서
비스로 만드는 실시간 데이터 분석 플랫폼 (박철수, AWS)
https://www.youtube.com/watch?v=SHVWcAW4RQ8&t=1645s
Amazon Elasticsearch Service 소개 및 활용 방법 (윤석찬) - 2016년 월간 웨비나
https://www.youtube.com/watch?v=QeGL4om9m-Q
Kinesis에서 Elasticsearch로 색인하기 위한
Lambda 코드는 Github 참조
https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/es-
aws-integrations.html
https://github.com/aws-samples/amazon-elasticsearch-lambda-
samples
데이터 이중화를 위해서 서버로 부터 생성된
파일 로그를 crontab을 사용하여 S3에 전송
S3Amazon
Kinesis–
enabled app
S3에 쌓인 데이터는 Athena를 사용하여 확인
데이터 유실이나 디버그용 로그 확인할 때 편리했음
S3 Amazon
Athena
Amazon
Kinesis–
enabled app
S3에 로그 레벨별로 버킷을 생성하고
하위에 년도, 일자별로 파일을 저장
2018년 2월의 DEBUG 레벨 로그 파일들
일자별로 로그 파일 관리
Athena에서는 월별, 일자별로 테이블을 생성하여 파일 탐색 범위를 최소화
Athena를 활용하여 엘라스틱서치에서 유실된 데이터를 복구하거나
CS 처리를 위해 상세한 로그를 확인
Kibana를 사용하면 손쉽게 시각화가 가능
런칭하고 보니 키바나만으로는 사업부의 요청을 전부 수용하기가 힘들었음
결국 지표용 웹 페이지 제작
현재는 비용 때문에 다시 이 구성으로 준비 중
(게임이 잘 안되어서….)
Web
Server
EC2
Instance
EC2
Instance
EC2
Instance
filebeat
logstash elasticsearch
최종 아키텍처
VPC
Availability Zone 1
Private subnet
Public subnet
Availability Zone 2
Private subnet
Public subnet
Elastic Beanstalk container
Auto Scaling group
instance instanceAurora ElastiCache
Redis
ElastiCache
Redis
Aurora
instance
Classic
Load
Balancer
NAT
Gateway
Route 53
User
CloudFront S3
ElasticsearchAmazon
Kinesis
Streams
Lambda
function
Web
Serv
er
Web
Server
Operating
Tool
instance
Statistics
Server
Amazon
CloudWatch
SMS
API Provider
Admin
Amazon
Athena
Log data
Statistics
data
Client Resource
instance
Bastion
X-ray
감사합니다.

Mais conteúdo relacionado

Mais procurados

[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영NAVER D2
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
Play node conference
Play node conferencePlay node conference
Play node conferenceJohn Kim
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015Goonoo Kim
 
Node.js
Node.jsNode.js
Node.jsymtech
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기iFunFactory Inc.
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
Gradle & IntelliJ & Vert.x
Gradle & IntelliJ & Vert.xGradle & IntelliJ & Vert.x
Gradle & IntelliJ & Vert.xKwnaghwan Cho
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은jieun kim
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론I Goo Lee
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터jinho park
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 

Mais procurados (20)

Node.js 심화과정
Node.js 심화과정Node.js 심화과정
Node.js 심화과정
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
Node.js
Node.jsNode.js
Node.js
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Gradle & IntelliJ & Vert.x
Gradle & IntelliJ & Vert.xGradle & IntelliJ & Vert.x
Gradle & IntelliJ & Vert.x
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 

Semelhante a [AWSKRUG] 모바일게임 하이브 런칭기 (2018)

성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3Amazon Web Services Korea
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)용호 최
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae Kim
 
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...Amazon Web Services Korea
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
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
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...Amazon Web Services Korea
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기Jaehwa Park
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)Amazon Web Services Korea
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02정출 김
 

Semelhante a [AWSKRUG] 모바일게임 하이브 런칭기 (2018) (20)

성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
 
Amazed by aws 2nd session
Amazed by aws 2nd sessionAmazed by aws 2nd session
Amazed by aws 2nd session
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...
스마트 팩토리: AWS 사물인터넷과 인공지능을 활용한 스마트 팩토리 구축 – 최영준 AWS 솔루션즈 아키텍트, 정현아 AWS 솔루션즈 아키...
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
 
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
AWS CLOUD 2018- 관리형 Kubernetes 지원과 새로운 컨테이너 서비스 Amazon Fargate 소개 (정영준 솔루션즈 아...
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 

Mais de 용호 최

작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스
작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스
작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스용호 최
 
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD용호 최
 
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처용호 최
 
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호용호 최
 
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호용호 최
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
Terraform 입문 - 최용호
Terraform 입문 - 최용호Terraform 입문 - 최용호
Terraform 입문 - 최용호용호 최
 
ElasticStack으로 다양한 수집 아키텍처 구성하기
ElasticStack으로 다양한 수집 아키텍처 구성하기ElasticStack으로 다양한 수집 아키텍처 구성하기
ElasticStack으로 다양한 수집 아키텍처 구성하기용호 최
 
데이터 수집부터 시각화까지
데이터 수집부터 시각화까지데이터 수집부터 시각화까지
데이터 수집부터 시각화까지용호 최
 
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)[For.D] 개발자 경력을 위한 소프트 스킬 (2019)
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)용호 최
 
[자바카페] Elasticsearch Aggregation (2018)
[자바카페] Elasticsearch Aggregation (2018)[자바카페] Elasticsearch Aggregation (2018)
[자바카페] Elasticsearch Aggregation (2018)용호 최
 
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP용호 최
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기용호 최
 
[넥슨토크] 모바일게임 하이브 런칭기 (2018)
[넥슨토크] 모바일게임 하이브 런칭기 (2018)[넥슨토크] 모바일게임 하이브 런칭기 (2018)
[넥슨토크] 모바일게임 하이브 런칭기 (2018)용호 최
 
[자바카페] Infra CI (2018)
[자바카페] Infra CI (2018)[자바카페] Infra CI (2018)
[자바카페] Infra CI (2018)용호 최
 
[자바카페] 람다 아키텍처, 더 깊이 살펴보기
[자바카페] 람다 아키텍처, 더 깊이 살펴보기[자바카페] 람다 아키텍처, 더 깊이 살펴보기
[자바카페] 람다 아키텍처, 더 깊이 살펴보기용호 최
 
[자바카페] 람다 일괄처리 계층 사례
[자바카페] 람다 일괄처리 계층 사례[자바카페] 람다 일괄처리 계층 사례
[자바카페] 람다 일괄처리 계층 사례용호 최
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층용호 최
 
[자바카페] Amazon Elastic Beanstalk 소개 (2017)
[자바카페] Amazon Elastic Beanstalk 소개 (2017)[자바카페] Amazon Elastic Beanstalk 소개 (2017)
[자바카페] Amazon Elastic Beanstalk 소개 (2017)용호 최
 

Mais de 용호 최 (20)

작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스
작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스
작업공간 - 나만을 위한 카페를 찾는 카페 유목민을 위한 서비스
 
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
 
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - 백엔드 아키텍처
 
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
빠르고 안정적인 게임 시장 진출을 위한 클라우드 전략 - 최용호
 
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
Terraform 입문 - 최용호
Terraform 입문 - 최용호Terraform 입문 - 최용호
Terraform 입문 - 최용호
 
ElasticStack으로 다양한 수집 아키텍처 구성하기
ElasticStack으로 다양한 수집 아키텍처 구성하기ElasticStack으로 다양한 수집 아키텍처 구성하기
ElasticStack으로 다양한 수집 아키텍처 구성하기
 
데이터 수집부터 시각화까지
데이터 수집부터 시각화까지데이터 수집부터 시각화까지
데이터 수집부터 시각화까지
 
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)[For.D] 개발자 경력을 위한 소프트 스킬 (2019)
[For.D] 개발자 경력을 위한 소프트 스킬 (2019)
 
[자바카페] Elasticsearch Aggregation (2018)
[자바카페] Elasticsearch Aggregation (2018)[자바카페] Elasticsearch Aggregation (2018)
[자바카페] Elasticsearch Aggregation (2018)
 
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP
[GCP Summit 2018] Kubernetes with Nginx and Elasticsearch on GCP
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
[AWS Summit 2018] 모바일 게임을 만들기 위한 AWS 고군분투기
 
[넥슨토크] 모바일게임 하이브 런칭기 (2018)
[넥슨토크] 모바일게임 하이브 런칭기 (2018)[넥슨토크] 모바일게임 하이브 런칭기 (2018)
[넥슨토크] 모바일게임 하이브 런칭기 (2018)
 
[자바카페] Infra CI (2018)
[자바카페] Infra CI (2018)[자바카페] Infra CI (2018)
[자바카페] Infra CI (2018)
 
[자바카페] 람다 아키텍처, 더 깊이 살펴보기
[자바카페] 람다 아키텍처, 더 깊이 살펴보기[자바카페] 람다 아키텍처, 더 깊이 살펴보기
[자바카페] 람다 아키텍처, 더 깊이 살펴보기
 
[자바카페] 람다 일괄처리 계층 사례
[자바카페] 람다 일괄처리 계층 사례[자바카페] 람다 일괄처리 계층 사례
[자바카페] 람다 일괄처리 계층 사례
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층
 
[자바카페] Amazon Elastic Beanstalk 소개 (2017)
[자바카페] Amazon Elastic Beanstalk 소개 (2017)[자바카페] Amazon Elastic Beanstalk 소개 (2017)
[자바카페] Amazon Elastic Beanstalk 소개 (2017)
 

[AWSKRUG] 모바일게임 하이브 런칭기 (2018)

  • 1. 모바일 게임 하이브 런칭기 최용호
  • 2. 발표자 소개 ● 열혈강호 제작 중 ● 하이브 with Naver Webtoon ● 화이트데이 ● 클럽 엠스타 온라인 ● 와리가리 삼총사 for Kakao ● 어스토니시아VS for Kakao ● 다함께 차차차 ● 어스토니시아 온라인 ● 열혈강호2 온라인 참여 프로젝트 ● 자바카페 커뮤니티 운영진 ○ 매주 운영진 스터디 ○ 매월 운영진 회의 및 세미나 ○ 분기별 공개 강의 및 스터디 ○ 공감 세미나 및 KCD 참여 ○ 상/하반기 운영진 워크샵 ○ 페이스북 / 기술 블로그 운영 활동
  • 4. Agenda 사내 개발환경 자동화에 대한 고민 AWS 활용 해보기 네트워크 구성에 대한 고민 서비스 선택에 대한 고민 부하 테스트에 대한 고민 게임 데이터 활용에 대한 고민
  • 7. 자동으로 해줄 수 있는 무언가가 필요
  • 8. 개발 환경 구축을 위해 Docker 도입 Docker
  • 9. 서비스 별로 디렉토리를 만들어 Docker 파일 관리 Dockerfile 관리
  • 10. Docker 파일과 설정 파일들 docker 컨테이너를 구동할 때 사용할 설정파일 관리
  • 11. 동료 개발자들이 docker-compose 명령을 몰라도 사용할 수 있도록 script 제공 compose 명령을 최대한 간편하게 하기 위한 스크립트
  • 12. 빌드 및 배포 자동화를 위해 Jenkins 도입 Jenkins
  • 13. 빌드 및 배포를 자동화 하기 위해 Jenkins 도입 My Company Private Network Jenkins Server S3 Elastic Beanstalk container instances 1. 빌드 된 war파일 업로드 2. 배포 3. 업로드 된 war 파일로 배포 수 행 My Company Private Network Jenkins Server EC2 instance contents tomcat tomcat mariadb redis Operating Tool Statist ics 각 서버 빌드 및 배포 Redis 및 Mariadb 스키마 갱신 및 초기화 ● Elastic Beanstalk 배포 ● 운영 및 관리를 위한 서버 배포
  • 14. docker-compose를 활용하여 10분 내로 사내 환경 구성 tomcat mariadb redis Logstash elasticse arch kibanahttpd Client Pinpoint- hbase Pinpoint- collector Pinpoint- web Docker- compose Docker- compos e Docker- compose Amazon ECR Jenkin s Kibana와 Pinpoint를 통해 서버 상태 확인 Docker Image들은 ECR을 사용하여 버 전 관리 사내 서버들의 빌드 및 배포는 Jenkins를 통해 자동화
  • 15. 누구나 간편하게 사용할 수 있게 되어 작업이 활발해짐
  • 19. Availability Zone 1 Availability Zone 2 VPC 안에는 두개의 가용 영역이 존재 (서울 리전 기준) VPC
  • 20. Availability Zone 1 Availability Zone 2 VPC VPC 내에 서브넷 구성을 할 수가 있는데 이는 가용영역 별로 생성이 가능 subnet subnet
  • 21. Availability Zone 1 Availability Zone 2 VPC 새로 생성한 VPC에 IGW 연결 subnet subnet
  • 22. Availability Zone 1 Private subnet Public subnet Availability Zone 2 Private subnet Public subnet VPC IGW가 연결되지 않은 서브넷(private)과 연결된 서브넷(public)으로 구분
  • 23. Availability Zone 1 Private subnet Public subnet Availability Zone 2 Private subnet Public subnet VPC 고객은 ELB를 통해서만, 관리자는 public 서브넷의 EC2 인스턴스를 통해서만 Elastic Load balancer User Admin instance instance instance
  • 24. AWS 네트워크 신규기능 업데이트 - 강동환 솔루션즈 아키텍트 https://youtu.be/FDFmI0nU4Wg 천만 사용자를 위한 AWS 아키텍처 보안 확장 모범 사례 - 윤석찬, 테크에반젤리스트 https://youtu.be/wn_-FtheGDY 가상 데이터 센터 만들기 - VPC 기본 및 연결 옵션 - 양승도 솔루션즈 아키텍트 https://youtu.be/R1UWYQYTPKo
  • 26. Docker를 활용해보고 싶어서 컨테이너 기반 서비스 검토 Amazon ECS
  • 27. 검토 당시 서울리전에서 제공되지 않아 포기 Amazon ECS
  • 29. Docker의 manager역할을 수행할 AMI와 worker 역할을 할 AMI를 생성 Swarm Manager AMI Swarm Worker AMI
  • 30. AMI를 통해 EC2 인스턴스가 구동되면 Worker는 UserData 스크립트를 통해 Manager에 Join Swarm Manager AMI Swarm Worker AMI Join
  • 31. docker scale 명령을 통해 컨테이너를 확장 Scale
  • 32. docker scale 명령을 수작업으로 해야한다는 불편함 존재 Scale
  • 33. 미리 scale을 넉넉히 걸어두고 한 머신에 구동될 수 있는 컨테이너를 제한하는 편법 사용 docker service create --name test-tomcat --publish 8080:8080 --reserve-cpu 1 tomcat docker service scale test-tomcat=100
  • 34. 해 놓고 보니 scale 명령으로 유연한 컨테이너 구동의 장점이 사라짐 결국 우리 서비스에서 docker를 활용하는 것은 욕심이라 판단. docker service create --name test-tomcat --publish 8080:8080 --reserve-cpu 1 tomcat docker service scale test-tomcat=100
  • 35. Docker와 Docker Swarm은 포기하기로
  • 36. AWS와 Docker Swarm을 이용한 쉽고 빠른 컨테이너 오케스트레이션 - 김충섭 개발자(퍼플웍스) https://youtu.be/16LNWMqphOA [AWS] EC2 인스턴스에서 docker swarm 서비스를 통해 웹서버 구동 및 확장 http://yongho1037.tistory.com/729
  • 38. 용도에 맞게 환경을 생성해서 관리
  • 39. ELB부터 오토스케일링, 보안, 롤링 패치 등 까지 손쉽게 설정
  • 40. 배포와 동시에 버전관리가 되기 때문에 언제든지 이전 버전으로 롤백 가능
  • 41. 설정을 저장해 두면 동일한 설정으로 편리하게 환경 생성 가능
  • 42. 게임 서버에 대한 고민 해결
  • 43. 변경 시 모든 인스턴스를 종료하고 새로 생성 주의해서 변경해야 할 설정들 ● 오토스케일링의 시작 구성(Launch Configuration ● VPC 설정 ● 인스턴스 type 변경 ● AMI 변경 ● SSH key 변경 ● 등등.. 더 있을 수도..
  • 44. [AWS] Elastic Beanstalk 생성과 Hook, .ebextensions를 통해 EC2 인스턴스 설정 http://yongho1037.tistory.com/731
  • 46. Java 기반이고 익숙한 IDE에서 자유롭게 개발 후 jar파일을 배포하여 사용할 수 있기 때문에 선택
  • 47. 머신만 확장하면 무제한의 유저를 유입시킬 수 있는 구조가 목표 instances instance instance instance Classic Load Balancer JMeter JMeter JMeter
  • 48. 스팟 인스턴스, ssm, jmeter를 활용하여 부하테스트 instance Spot Instance ssm bucket Output Log Run Command instances 부하 전달 Loadtest Server Spot Instance Spot Instance 스팟 인스턴스를 생성하고, 생성된 인스턴스들에 대한 상태 확인과 명령을 내리기 위한 서버 Classic Load Balancer
  • 49. 팀원들 누구나 부하테스트를 해볼 수 있도록 툴 제공
  • 50. jmeter 가 여러대에서 동작 중이기 때문에 동작 상황을 알 수가 없어서 CloudWatch의 로그 활용
  • 51. 성능 측정은 naver의 오픈소스인 pinpoint로
  • 53. 런칭 전에 pinpoint 또한 관리 요소때문에 X-Ray로 변경
  • 54. 각 요청의 응답시간 확인 후 오래 걸린 작업들을 수정하여 성능 최적화
  • 55. AWS X-Ray를 통한 서버리스 분산 애플리케이션 추적하기 - 윤석찬 (AWS 테크에반젤리스트) https://www.youtube.com/watch?v=BEg__eV1mT8&t=1350s
  • 57. 데이터 수집부터 가공, 집계까지 해주는 Elastic Stack 선택
  • 58. 지표용 로그에 대한 설계 사용자 계정 캐릭터 무기 아이템 상점 ... 가입 로그인 구매 판매 ... Title SubTitle
  • 59. 지표용 로그에 대한 설계 사용자 계정 가입 로그인 탈퇴 복귀 Title SubTitle
  • 60. id값을 통해 사용자 행위에 연관된 데이터 탐색 스테이지 클리어 재화 획득 아이템 획득 캐릭터 획득 경험치 획득 퀘스트 달성 ... ID : 10000 ID : 10001, parentID : 10000 ID : 10002, parentID : 10000 ID : 10003, parentID : 10000 ID : 10004, parentID : 10000 ID : 10005, parentID : 10000
  • 61. 재화 획득에 대한 실제 데이터 { "id": "b46adf7e5bf14c4ca18868f930e2670f", "uid": 5824735036189904000, "nickname": "yongho", "title": "GOODS", "subTitle": "TAKE", "detail": { "gold": 120, "diamondBonus": 0, "diamondCash": 0, "survivalCoin": 0, "pvpCoin": 0, "stamina": 1, "supplies": 0, "component": 0, "exp": 0 }, "parentId": "d9388af36d63482b851e33f78225a9be", "parentTitle": "STAGE", "parentSubTitle": "CLEAR", "timestamp": "2017-11-08T06:00:19.551Z", "loglevel": "TRACE" }
  • 62. parent 정보를 통해 어디서 획득한 것인지 알 수 있음 { "id": "b46adf7e5bf14c4ca18868f930e2670f", "uid": 5824735036189904000, "nickname": "yongho", "title": "GOODS", "subTitle": "TAKE", "detail": { "gold": 120, "diamondBonus": 0, "diamondCash": 0, "survivalCoin": 0, "pvpCoin": 0, "stamina": 1, "supplies": 0, "component": 0, "exp": 0 }, "parentId": "d9388af36d63482b851e33f78225a9be", "parentTitle": "STAGE", "parentSubTitle": "CLEAR", "timestamp": "2017-11-08T06:00:19.551Z", "loglevel": "TRACE" }
  • 63. parentId로 검색하면 해당 행위와 연관된 사항들을 확인 가능 { "id": "b46adf7e5bf14c4ca18868f930e2670f", "uid": 5824735036189904000, "nickname": "yongho", "title": "GOODS", "subTitle": "TAKE", "detail": { "gold": 120, "diamondBonus": 0, "diamondCash": 0, "survivalCoin": 0, "pvpCoin": 0, "stamina": 1, "supplies": 0, "component": 0, "exp": 0 }, "parentId": "d9388af36d63482b851e33f78225a9be", "parentTitle": "STAGE", "parentSubTitle": "CLEAR", "timestamp": "2017-11-08T06:00:19.551Z", "loglevel": "TRACE" }
  • 64. 이 id 값은 제가 UUID로 만든 값 "id": "b46adf7e5bf14c4ca18868f930e2670f"
  • 65. 엘라스틱 서치에서는 _id 값을 지정하지 않으면 엘라스틱서치가 생성 "_id": "AWHRtsHJUGsDUVnVAG4k"
  • 66. 이 _id 값을 샤드 사이즈 Mod 연산하여 샤드 위치 결정 _id % ShardSize
  • 67. 내가 만든 UUID로 _id를 사용했다가 균등하게 분배가 안되면 어쩌지? _id % ShardSize
  • 68. final int SHARD_SIZE = 5; int[] shards = new int[SHARD_SIZE]; for(int i = 0; i < 100000; i++) { int hash = Math.abs(Murmur3HashFunction.hash(String.valueOf(i))); int shardId = hash % SHARD_SIZE; shards[shardId]++; Thread.sleep(1); } for(int i = 0; i < SHARD_SIZE; i++) { System.out.println(String.format("shardId : %d, count : %d", i, shards[i])); } 엘라스틱서치에서 샤드 분배하는 로직을 가져다 테스트
  • 69. final int SHARD_SIZE = 5; int[] shards = new int[SHARD_SIZE]; for(int i = 0; i < 100000; i++) { int hash = Math.abs(Murmur3HashFunction.hash(String.valueOf(i))); int shardId = hash % SHARD_SIZE; shards[shardId]++; Thread.sleep(1); } for(int i = 0; i < SHARD_SIZE; i++) { System.out.println(String.format("shardId : %d, count : %d", i, shards[i])); } // 결과 shardId : 0, count : 19740 shardId : 1, count : 20016 shardId : 2, count : 19905 shardId : 3, count : 20032 shardId : 4, count : 20307 거의 균등하게 document가 분배됨
  • 70. final int SHARD_SIZE = 5; int[] shards = new int[SHARD_SIZE]; for(int i = 0; i < 100000; i++) { int hash = Math.abs(Murmur3HashFunction.hash(String.valueOf(i))); int shardId = hash % SHARD_SIZE; shards[shardId]++; Thread.sleep(1); } for(int i = 0; i < SHARD_SIZE; i++) { System.out.println(String.format("shardId : %d, count : %d", i, shards[i])); } // 결과 shardId : 0, count : 19740 shardId : 1, count : 20016 shardId : 2, count : 19905 shardId : 3, count : 20032 shardId : 4, count : 20307 id 필드를 따로 만들지 않고 샤드 분배 걱정 없이 _id를 직접 할당해서 사용하는 것이 더 효율적일 듯
  • 71. 파일에 기록되는 Web 서버 로그를 수집하기 위해 Filebeat 사용 Web Server EC2 Instance filebeat
  • 72. Filebeat를 통해 logstash로 데이터 전달 Web Server EC2 Instance EC2 Instance filebeat logstash
  • 73. logstash에서 가공한 데이터를 elasticsearch에 색인 Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch
  • 74. Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch elasticsearch 클러스터 구성을 위해 한 서버에서 얼마나 수용 가능한지 확인
  • 77. 부하 발생하는 시점의 샤드 수와 도큐먼트 수, 사용 용량 등을 확인하여 확장 여부 결정
  • 78. 웹 서버에서 장애가 발생하여 인스턴스가 종료될 경우를 대비해 보내지 못한 데이터 처리 필요 Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch
  • 79. logstash에 대한 확장이나 장애에 대한 대비도 필요 Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch
  • 80. elasticsearch에 데이터가 너무 많이 쌓이거나 장애 대응을 위해 클러스터링 필요 Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch
  • 81. Amazon Elasticsearch Service 도입 Amazon Elasticsearch Service
  • 83. Filebeat 대신 Kinesis Agent 사용 ElasticsearchAmazon Kinesis Streams Lambda function Amazon Kinesis– enabled app
  • 84. Logstash 대신 Kinesis를 통해 데이터를 받아 Lambda를 통해 데이터 가공 ElasticsearchAmazon Kinesis Streams Lambda function Amazon Kinesis– enabled app
  • 85. EC2 인스턴스에 설치형 Elasticsearch 대신 Amazon Elasticsearch Service 사용 ElasticsearchAmazon Kinesis Streams Lambda function Amazon Kinesis– enabled app
  • 86. AWS 빅데이터 아키텍처 패턴 및 모범 사례 - 남궁영환 빅데이터 컨설턴트(AWS 코리아) https://www.youtube.com/watch?v=D1yxmpD4VDc AWS Summit Seoul 2016 - Amazon Kinesis 와 Elasticsearch 서 비스로 만드는 실시간 데이터 분석 플랫폼 (박철수, AWS) https://www.youtube.com/watch?v=SHVWcAW4RQ8&t=1645s
  • 87. Amazon Elasticsearch Service 소개 및 활용 방법 (윤석찬) - 2016년 월간 웨비나 https://www.youtube.com/watch?v=QeGL4om9m-Q
  • 88. Kinesis에서 Elasticsearch로 색인하기 위한 Lambda 코드는 Github 참조 https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/es- aws-integrations.html https://github.com/aws-samples/amazon-elasticsearch-lambda- samples
  • 89. 데이터 이중화를 위해서 서버로 부터 생성된 파일 로그를 crontab을 사용하여 S3에 전송 S3Amazon Kinesis– enabled app
  • 90. S3에 쌓인 데이터는 Athena를 사용하여 확인 데이터 유실이나 디버그용 로그 확인할 때 편리했음 S3 Amazon Athena Amazon Kinesis– enabled app
  • 91. S3에 로그 레벨별로 버킷을 생성하고 하위에 년도, 일자별로 파일을 저장
  • 92. 2018년 2월의 DEBUG 레벨 로그 파일들
  • 94. Athena에서는 월별, 일자별로 테이블을 생성하여 파일 탐색 범위를 최소화
  • 95. Athena를 활용하여 엘라스틱서치에서 유실된 데이터를 복구하거나 CS 처리를 위해 상세한 로그를 확인
  • 96. Kibana를 사용하면 손쉽게 시각화가 가능 런칭하고 보니 키바나만으로는 사업부의 요청을 전부 수용하기가 힘들었음
  • 97. 결국 지표용 웹 페이지 제작
  • 98. 현재는 비용 때문에 다시 이 구성으로 준비 중 (게임이 잘 안되어서….) Web Server EC2 Instance EC2 Instance EC2 Instance filebeat logstash elasticsearch
  • 100. VPC Availability Zone 1 Private subnet Public subnet Availability Zone 2 Private subnet Public subnet Elastic Beanstalk container Auto Scaling group instance instanceAurora ElastiCache Redis ElastiCache Redis Aurora instance Classic Load Balancer NAT Gateway Route 53 User CloudFront S3 ElasticsearchAmazon Kinesis Streams Lambda function Web Serv er Web Server Operating Tool instance Statistics Server Amazon CloudWatch SMS API Provider Admin Amazon Athena Log data Statistics data Client Resource instance Bastion X-ray