SlideShare a Scribd company logo
1 of 77
Download to read offline
사용자,
즉 개발자는

왜
레진코믹스는
구글 앱엔진을 선택했나
개발자 누구
• @curioe

, http://curioe.com // 궁금한, 이상한

• 레진엔터테인먼트
• 만명

남김

•할

서버 개발자 1명 (2014.01)

기업 > 천명 기업 > 600명 기업 > 9명 기업에 코드를

일과 < 역할이 < 점점 더 < 많아짐
다이나믹 타임트리
2013년 2월

3월

Open PaaS! 백수...
Cloud Foundry

No! 락 인

4월 말
레진 합류
다이나믹 타임트리
3월

2013년 2월
Open PaaS!

4월 말

백수...

6월 초

레진 합류
ㅠ.ㅠ

서비스 오픈 40일 후!
!

서버 개발자 오직 나 하나...
!

기획/요구사항은 개발하면서 진행됨 orz
다이나믹 타임트리
2013/04
Before

레진 합류

인프라는 인프라팀이!
!

데이터베이스는 DBA가!
!

개발은 분담
다이나믹 타임트리
2013/04
Before

레진 합류

After

인프라는 인프라팀이!

인프라 내가 해야 함!

!

!

데이터베이스는 DBA가!

데이터베이스 내가 해야 함!

!

!

개발은 분담

개발 나 혼자 해야 함
“앱 엔진 씁시다”
@xguru
구글 앱 엔진
2013/04
Before

레진 합류

인프라는 인프라팀이!
!

데이터베이스는 DBA가!
!

개발은 분담

After

PaaS 앱엔진으로
Datastore 앱엔진으로
개발 개발만 하면 됨
구글 앱 엔진
4월 말
레진 합류
PaaS 앱엔진으로!
!

Datastore 앱엔진으로!
!

개발 개발만 하면 됨

6월 초

일정 / 리소스 해결
미션 컴플리티드!
I don’ care!!
락인
서비스는

왜
레진코믹스는
구글 앱엔진을 선택했나
레진코믹스 - 프리미엄 웹툰
레진코믹스 - 부분유료화

D - 21

D - 21

D - 14

D-7

7일후 무료공개 예정
D-7

“

“

7일이나
기다려??

D-7

먼저보는 즐거움!
Auto Scaling
누적 회원 증가

12

11
10

6

7

8

9
트래픽 - 시간대별 특성
Instance

샘플이미지
Images Service
이미지 서비스
app engine
일반화질
업로드

CMS

저장

blobstore
변환

images service

고화질
이미지 서비스 비용
app engine
일반화질
업로드
incoming bandwidth

CMS

bandwidth out
저장

blobstore

storage

변환

고화질

images service

image manipulation api
유료
무료
서비스는

왜
레진코믹스는
아마존 EC2 가 아닌,
구글 앱엔진을 선택했나
앱엔진 vs EC2
PaaS
구글 앱 엔진

IaaS
EC2

내가 질 책임

애플리케이션

애플리케이션, 데이터베
이스, 웹서버, 운영체제,
모니터링, 로드밸런싱, 업
그레이드

sysadmin

Google

필요

(상대적) 비용

비쌈

쌈

Google Compute Engine vs EC2
Platform as a Service
Frontend Instance
Blobstore
Images Services
Datastore
Memcache
Backend Instance
Mail
Cron
Task Queue
Admin Console
해외에서는
왜
레진코믹스는
구글 앱엔진을 선택했나
Snapchat
월 활성 사용자(MAU) 3천만
55% 가 매일 사용함 - 1천6백만
하루에 1억 5천만 사진 업로드
“앱엔진은 우리가 애플리케이션을 개발하는데 집중할 수 있게 해줬어
요. 앱엔진이 우리에게 제공해준 개발의 편의없이 이렇게까지 못했을
꺼에요.”
- 바비 머피, CTO 이며 co-Founder

http://www.quora.com/Google-App-Engine/What-is-the-highest-traffic-website-built-on-top-of-Google-App-Engine-Python
http://gigaom.com/2013/05/07/snapchats-act-of-faith-in-building-on-google-compute-engine/
Khan Academy
380만 월 UV
수업일에 150만 프랙티스가 제공
2000 개 이상의 동영상
“만약 구글 앱엔진이 없었다면, 서버를 셋업이나 라우터 설정에 정말 많은
시간을 보냈을꺼에요. 실 서비스에 집중할 수 있게 한 건 구글 앱엔진의 장
점입니다.”
- 벤 카멘스, 리드 개발자

“개발 프로세스가 쉬워서 평균 하루에 한번, 많게는 10번도 배포를 합니다.”

https://cloud.google.com/files/KhanAcademy.pdf
Rovio
Angry bird friend for facebook
MAU 1천 3백만

“구글 앱엔진은 우리가 게임당 한명 또는 두명의 개발자로만 매우 빠르
게 게임을 런칭하도록 해줬어요. 구글이 모든 서버들을 관리해주기 때
문에, 유지보수에 있어 우리가 할 일이 거의 없었어요.”
- 스테판 호크, 웹 게임 리드 서버 개발자

https://cloud.google.com/files/Rovio.pdf
왜 레진코믹스는 구글 앱엔진을 선택했나

•

개발이 빠르고 쉬움

•

자동으로 스케일링해줌

•

개발에만 집중

•

유용한 빌트인 기능들 제공

•

구글 노하우가 녹아있는 인프라 위에서 구동 (비즈니스)
좋다고
생각없이 쓰면
패가망신
Language
& Runtime

Java

Generally available features

Communications
Channel
Google Cloud
Endpoints
Mail

PHP


Python

preview

App Identity

Data Storage, Retrieval, &
Search
Datastore

SSL for
Custom
Domains

Blobstore

Remote

XMPP
Traffic Splitting
Users

Preview features
Cloud SQL
Google Cloud
Storage Client
Library

Capabilities

Multitenancy

Search
Memcache
Dedicated
Memcache
Logs

Modules
Sockets

Experimental features
Datastore Admin/
Backup/Restore
MapReduce
OAuth
OpenID
PageSpeed
Prospective Search

Task Queue
Scheduled
Tasks

experimental

App Configuration 

& Management

URL Fetch

Process Management

Go


Computation
Backends
Images

HRD Migration
Tool

Task Queue REST
API
Task Queue
Tagging

Appstats
Language
& Runtime

Java

Generally available features

Communications
Channel
Google Cloud
Endpoints
Mail
URL Fetch

PHP


Python

preview

App Identity

Data Storage, Retrieval, &
Search
Datastore

SSL for
Custom
Domains

Blobstore

Remote
Multitenancy

Users

Task Queue

Preview features
Cloud SQL
Google Cloud
Storage Client
Library

Capabilities

Traffic Splitting

Scheduled
Tasks

experimental

App Configuration 

& Management

XMPP

Process Management

Go


Search
Memcache
Dedicated
Memcache
Logs

Modules
Sockets

Experimental features
Datastore Admin/
Backup/Restore
MapReduce
OAuth
OpenID
PageSpeed
Prospective Search

Computation
Backends
Images

HRD Migration
Tool

Task Queue REST
API
Task Queue
Tagging

Appstats
드리고 싶은 이야기
배포/관리

My App
App Engine API
Mail

경험한 기능들
정말 팁

Task Queue

Datastore
Blobstore
Dedicated
Memcache
Appstats

Scheduled
Tasks

참고사항

URL Fetch
Logs
Images

그 다음
북마크
배포/관리
앱엔진 애플리케이션

Application

id: gdgseoulmeetup
요청
http://gdgseoulmeetup.appspot.com
Application

id: gdgseoulmeetup
Dynamic 인스턴스
http://gdgseoulmeetup.appspot.com
Application

Instance

dynamic

id: gdgseoulmeetup
Resident 인스턴스

Application

늘 떠있음
Instance

Resident

id: gdgseoulmeetup
요청
http://gdgseoulmeetup.appspot.com
Application

Instance

Resident

id: gdgseoulmeetup
Auto Scaling
http://gdgseoulmeetup.appspot.com
Application

Instance

Instance

Resident

dynamic

id: gdgseoulmeetup

Frontend Instance
Auto Scaling
돈 먹는 하마
Auto Scaling
http://gdgseoulmeetup.appspot.com
Application

id: gdgseoulmeetup

Instance

Instance

Instance

Instance

Instance

Instance

Resident

dynamic

dynamic

dynamic

dynamic

dynamic
앱엔진 애플리케이션
http://gdgseoulmeetup.appspot.com
id: gdgseoulmeetup

Application

Module

Version

Module

Version

Version

Instance

Instance

Instance

Instance

Instance

Instance

Resident

dynamic

dynamic

dynamic

dynamic

dynamic
앱엔진 애플리케이션
http://gdgseoulmeetup.appspot.com
id: gdgseoulmeetup

Application

Module

D

ef

au

lt

Module

Version

Version

Version

Instance

Instance

Instance

Instance

Instance

Instance

Resident

dynamic

dynamic

dynamic

dynamic

dynamic
배포 - 버전
http://gdgseoulmeetup.appspot.com

http://20140122.gdgseoulmeetup.appspot.com
local

•앱엔진 샌드박스 제공

dev server

•개발용 app id
•개발자 별로 버전 배포
•노출 안되게 앱엔진 admin 권한 처리

production

•새 버전 배포 -> 확인 -> 디폴트 변경

•/WEB-INF/appengine-generated/local_db.bin

앱/버전 property 로 관리 - 빌드타임에 정해지도록 함
appengine'web.xml.

!

<application>${google.app.id}</application>.
<version>${google.app.version}</version>
Datastore
Key

Ancestor

Index
데이터스토어 - Key
Entity Comic
String comicId *
String title
String artist
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
Long userId

Key - entity 의 ID / 구글앱엔진에서의 유일한 키 값
kind
identifier
ancestor path (optional)
데이터스토어 - Key
Entity Comic
String comicId *
String title
String artist
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
Long userId

Key - entity 의 ID / 구글앱엔진에서의 유일한 키 값
kind
identifier 지정 - 미리 아는 객체들 (string, long)
ancestor path (optional)
identifier 자동할당 - 실행시 생성되는 객체들 (long)
데이터스토어 - Key
Entity Comic
String comicId *
String title
String artist

Key - entity 의 ID / 구글앱엔진에서의 유일한 키 값
kind
identifier
ancestor path (optional)

User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
Long userId

SELECT.*.FROM.Comic.

WHERE.__key__.=.Key('Comic',.'badboss')
SELECT.*.FROM.User.

WHERE.__key__.=.Key('User',.1234123412341234)
Global Query
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
Long userId

SELECT.*.FROM.Purchase.

WHERE.userId.=.1234123412341234.
AND.episodeId.=.‘badboss'''13’
Eventual Consistency

https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore
Eventual Consistency

Purchase

SELECT.*.FROM.Purchase.

WHERE.userId.=.1234123412341234.
AND.episodeId.=.‘badboss'''13’
https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore
Strong Consistency

https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore
Ancestor
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
Long userId

SELECT.*.FROM.Purchase.

WHERE.ancestor)is.Key(‘User’,.1234123412341234).
AND.episodeId.=.‘badboss'''13’
Ancestor
Entity Group
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
String episodeId
int coin
long purchaseTime
<Parent>Long userId

Key - entity 의 ID
kind
identifier
ancestor path
SELECT.*.FROM.Purchase.

WHERE.ancestor)is.Key(‘User’,.1234123412341234).
AND.episodeId.=.‘badboss'''13’
데이터스토어 인덱스
User
Long userId *
String username
boolean adult
int coinBalance
Purchase
Long purchaseId *
index
String episodeId
int coin
long purchaseTime
<Parent>Long userId

SELECT.*.FROM.Purchase.

WHERE.ancestor)is.Key(‘User’,.1234123412341234).
AND.episodeId.=.‘badboss'''13’

주의
index 는 entity 를 update 할 때 생김
나중에 추가하려면 entity 를 새로update 해야 함
composite 인덱스 추가

주의
운영 중에 index 조합을 추가한 경우,
Serving 상태를 확인한 후에 default 로 배포할 것
카운트
1. 카운트하는 엔터티를 둔다.

- 동시에 엔터티를 수정하게 되면 Datastore Contention 문제
- 동시에 못하도록 한다면 한번에 한 카운트만 처리 문제
!

2. Sharding Counter

https://developers.google.com/appengine/articles/sharding_counters
- 랜덤으로 카운터를 여러개 두고, 사용하지 않은 카운터를 읽고 씀
- 나중에 합쳐 확인하는 방법
- 정확
- 매 요청마다 데이터스토어 써 느린데다 데이터 엔터티가 무수히 많이 생김
!

3. Deferred Task Queue 활용

- 데이터스토어에 permanent 카운트
- Memcache 에 current 카운트
- 주기적으로 Memcache 에서 데이터스토어로 씀
- 성능은 좋지만, 정확하지 않을 수 있다.
비용 줄이기

•

Appstats 써서 요청에 대한 비용이 어느정도인지 검토

•

Memcache 를 되도록 많이 쓰기

•

Urlfetch 는 될 수 있는 한 앱에서 할 것
Appstats
Memcache
• Memcache

쓰면 빠르고 비용도 줄어듬

• 제한

1MB 이하 - Object 의 List 를 통째로 넣으려면 주의
(json 변환)

• 자바의

경우 Objectify 사용 추천

(Datastore + 기본 Memcache)
팁
메일 Quota 요청 미리미리
세션 삭제, 앱엔진이 안해줌

!

/_ah/sessioncleanup

com.google.apphosting.utils.servlet.SessionCleanupServlet
!

cron 으로 주기적으로 호출할 것

http://www.radomirml.com/blog/2011/03/26/cleaning-up-expired-sessions-from-app-engine-datastore/
Cron 문법 주의
• 매시간마다

===> every 1 hours

• 매시간인데

15분에 실행되면 좋겠음

===> every 1 hours from 00:15 to 00:15
영원히 실행되지 않음
!

every 1 hours from 00:15 to 00:14
static 파일 만료 시간 조정

• Purge
• 사용자

기능 없음.

브라우저에 의존하기 때문에 (자주 바뀐다면) 시간을
조정해둘 것
SSL URL

• http://1.app-id.appspot.com
• https://1-dot-app-id.appspot.com
참고사항
Latency
•

데이터센터 저 멀리

•

cdn 이용
•

•

dynamic 데이터는 어쩔 수 없음

좋은 소식
•

아시아에 데이터센터 들어감


http://googleasiapacific.blogspot.kr/2013/12/our-first-data-centers-in-asia-are-up.html
앱엔진 + 스프링 최적화
•

Component Scanning 줄이기/피하기

•

Relationship Autowiring 줄이기/피하기

•

상용에서 XML Validation 하지 않기

•

Lazy-Initialized Bean 사용하기

•

Constructor Injection by Name 피하기

•

https://developers.google.com/appengine/
articles/spring_optimization
로그 / 파일

•

로그는 좀 많이 불편

•

File API 안됨
•

PG사 모듈 File 쓰기 안되어서 제외
앱엔진 그 다음
AppScale
구글 앱엔진 호환되는 오픈소스 PaaS

http://www.appscale.com/
AppScale Architecture
북마크
모니터링/커뮤니티
•

시스템 상태 페이지


•

다운타임 알림


•

issue tracker


•

토론


•

IRC


https://code.google.com/status/appengine
https://groups.google.com/forum/#!forum/google-appengine-downtimenotify

https://code.google.com/p/googleappengine/issues/list
https://groups.google.com/forum/#!forum/google-appengine
http://webchat.freenode.net/ #appengine

앱엔진 시작하기

•

입문자를 위한 앱엔진 튜토리얼


http://googcloudlabs.appspot.com/codelabexercise1.html
왜 레진코믹스는 구글앱엔진을 선택했나

More Related Content

What's hot

[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)Hyojun Jeon
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
How to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsHow to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsJarrod Overson
 
스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기Sunyoung Shin
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)Jaikwang Lee
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들Jubok Kim
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
[세미나] 특이점이 온다
[세미나] 특이점이 온다[세미나] 특이점이 온다
[세미나] 특이점이 온다Yongha Kim
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Sung wook Kang
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxTonyCms
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝NAVER D2
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기Chris Ohk
 

What's hot (20)

[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
How to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsHow to Reverse Engineer Web Applications
How to Reverse Engineer Web Applications
 
스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
[세미나] 특이점이 온다
[세미나] 특이점이 온다[세미나] 특이점이 온다
[세미나] 특이점이 온다
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 

Viewers also liked

Practical Machine Learning
Practical Machine LearningPractical Machine Learning
Practical Machine LearningDavid Jones
 
Micro Service Architecture 탐방기
Micro Service Architecture 탐방기Micro Service Architecture 탐방기
Micro Service Architecture 탐방기jbugkorea
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견NAVER D2
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionJunHo Yoon
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in JavaStrannik_2013
 
20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은VentureSquare
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Giorgio Cefaro
 
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)Sangkyu Rho
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐라한사 아
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선기동 이
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XpressEngine
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) Yongho Ha
 

Viewers also liked (15)

Practical Machine Learning
Practical Machine LearningPractical Machine Learning
Practical Machine Learning
 
Micro Service Architecture 탐방기
Micro Service Architecture 탐방기Micro Service Architecture 탐방기
Micro Service Architecture 탐방기
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in Java
 
20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
 
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
 

Similar to 왜 레진코믹스는 구글앱엔진을 선택했나

반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게Sungju Jin
 
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)Lab80
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문Taeho Kim
 
(주)클라우다인 & Flamingo 소개서
(주)클라우다인 & Flamingo 소개서(주)클라우다인 & Flamingo 소개서
(주)클라우다인 & Flamingo 소개서BYOUNG GON KIM
 
100% Serverless big data scale production Deep Learning System
100% Serverless big data scale production Deep Learning System100% Serverless big data scale production Deep Learning System
100% Serverless big data scale production Deep Learning Systemhoondong kim
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용jinwook shin
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios[1B6]Realm a database for android & ios
[1B6]Realm a database for android & iosNAVER D2
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장Dylan Ko
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYHyun-woo Park
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가smartstudy_official
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들Sewon Ann
 

Similar to 왜 레진코믹스는 구글앱엔진을 선택했나 (20)

반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Unity소개
Unity소개Unity소개
Unity소개
 
[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문
 
(주)클라우다인 & Flamingo 소개서
(주)클라우다인 & Flamingo 소개서(주)클라우다인 & Flamingo 소개서
(주)클라우다인 & Flamingo 소개서
 
100% Serverless big data scale production Deep Learning System
100% Serverless big data scale production Deep Learning System100% Serverless big data scale production Deep Learning System
100% Serverless big data scale production Deep Learning System
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용K모바일발표 120113 남들보다뛰어난앱만들기_공유용
K모바일발표 120113 남들보다뛰어난앱만들기_공유용
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios[1B6]Realm a database for android & ios
[1B6]Realm a database for android & ios
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 

Recently uploaded

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Recently uploaded (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

왜 레진코믹스는 구글앱엔진을 선택했나