SlideShare ist ein Scribd-Unternehmen logo
1 von 26
천기환/gujjy97@gmail.com
 Java 웹 개발자
 Spring framework를 주무기로
 SI로 시작, 업무 도메인을 자주 바꾸는게 싫어서
어쩌다 게임 개발로 전향
 도메인만 게임으로 바뀌었고 기술 스택은 그대로
 사용했던 기술요소를 나열
 기술요소 선정했던 이유를 나열
 답이 아니에요
 아쉬움을 덜어내려고…
 기억이 정확하지는 않아요...
 웹서버 35대
•4Core / 8G Ram
 DB 6대
•16Core / 32G Ram
 redis 20대
•4Core / 16G Ram
 memcached 4대
•4Core / 16G Ram
 Game Server : AJP/1.3 Tomcat
•Tomcat 안정적인 소켓 연결
•Service Port fix
•80 -> 8009 or 8010
•mpm : process + worker
•간단한 접근 제어
•필요한 기능만 compile 설치
•mod_dumpio : network packet 분석
 Monitor 서버 : php 연동
 memcached session manager(MSM)
•session clustering
•remote cache
 Non sticky Session
•비동기 요청없도록 협의
•HttpSession is not thread-safe
•MSM lock (max 5 seconds)
 최대 5초 안으로 처리하고 memcached에 저장해야함
 JmxRemoteLifecycleListener
•방화벽, port 고정 필요
 access log : apache vs tomcat
•apache
 대부분 2초 아래
 간헐적으로 응답시간 이상
 응답 packet size 에 따라 응답시간이 증가하는 폭이 큼
•tomcat : 최대 0.4 초
 apache-ajp 외부 네트워크와 tomcat사이에서
버퍼 역할을 담당
 좋은 건 써봐야
 G1GC
•CPU는 조금 더 먹고
•조금 더 안정적
 Lambda
 Stream
 가독성 논란 : 쓰고 싶은 사람만 쓰기로
 profile
•서버군별 다른 설정 적용
 module
•로직과 실행환경에 따른 모듈을 분리
•core / web / simulator / admin
 plugin
•resources, tomcat, git, ant, svn, groovy
 최대한 최근 버전: 기능 향상 기대
 JSON RestFul API 통신
•MessageConverter
•Gson vs Jackson
 성능 : jackson사용시 CPU가 미세하게 튀는 듯
 JSON 변환이 앱 전체에 큰 비중이 없는지 성능차 없음
 앱 특성에 따라 library 검토는 해봐야...
 Java Configuration
•profile에 따른 설정파일을 줄임
 기본적인 spring 설정
 Core 모듈로 시뮬레이션 CLI 앱 제작
•미리 모듈화 해야
 Schedule 앱 제작
•환경제약으로 DB에 스케쥴 적용
 단계축소
•DB -> SP -> XML -> Java Instance
•관리 소스 감소
 성능 향상
 Simple Immutable instance
•no getter, all argument constructor
 MyBatis cache -> Spring cache
 성능 (log4j2 는 아직..)
 Sl4j를 통해 모든 로그 모아
 AsyncAppender
 logback.groovy
•xml에 비해 custom한 설정
•변수 사용, 문자열 조작
 Test를 사랑해야..
 Junit, Mockito
 단위 테스트보다 시나리오 테스트 위주로
 변경에 확신
•library 바꿀 때
•filter등 공통모듈 적용할 때
 L4: Non Sticky Load Balancing
•remote session store
 개인 컨텐츠 관련 데이터 모두 Session에 캐싱
•select 부하 감소
•CAS(Check And Save)
 chunk : key – value 저장 단위
 slab
•일정 크기 범위에 chuck를 담는 단위(1KB,
1.25KB, 1.56KB...)
•1 chunk -> 1 slab
 page : slab을 모아두는 단위 (1MB)
•1KB slab * 1024 = 1 page
•2KB slab * 512 = 1 page
•page 단위로 미리 slab을 생성
 주기적인 모니터링이 필요
 랭킹 서버 (zhash)
 simple shared cache
•캐릭터 이름/레벨/소속 길드 등
 구성
•sentinel 3
•master 1 / fail over slave 1
•read only replica slave 2~
 Client library
•Jedis
•read/write 분리한 RedisConnectionPool 사용
 DB 분할
• Device DB(Single) : 샤딩 기준
• User DB(Shared)
 개인 컨텐츠 저장
• Social DB(Single)
 길드 / 친구 / 랭킹 원본 정보
 실시간 랭킹을 redis로
 Stored Procedure(T-sql)
• DBA 협업
 JTA
• atomikos -> ChainedTransactionManager
 Profile로 개별 session 상태 분석 후 connection 설정 확인 필요
 단순한 반복작업, 명령어 모음
 groovy
•API 시나리오 테스트
•nGrinder용 스크립트 호환
•gmaven vs groovy-maven : stub 생성 차이
 bash
•ssh로 동시 여러서버 일괄제어
 batch
•SQLCMD, BCP를 사용한 DB작업 자동화
 Gradle 지원때문에 STS에서...
 code cache / 중복코드 알림
 단축키 적응
•테스트 생성, 인터페이스 구현!!!
 Maven 해석 방식이 다른 듯
 CRLF, charset 변경이 간편
 강력한 브렌치
•배포 서버군이름을 브렌치로(dev, qa, live...)
•기능을 브렌치로
 gerrit 리뷰
•리뷰하며 공유
 학습비용 높아
•rebase 꼬이면 지옥
•windows 환경에서 git-bash 사용 어색
 무료 부하 테스트 툴
 groovy로 작성
•java로 구현한 Core로직이나 상수를 재정의하기
귀찮...
 관련 서버 모니터링 가능
 시나리오 변경 후 배포 및 테스트까지 시간이 많
이 걸림
 HP-JMeter : GC 로그 분석
 MAT : heap dump 분석
 Thread-logic : Thread dump분석
 JMC(java mission control)
• 위에 것들 실시간으로
• jconsole 보다 보기 좋음
• JMX 클라이언트
 Dtrace
• java vm으로 접속, method/line 호출 확인
• 자주 호출되는 부분에 걸면 부하 급상승! 조심!
 관련성 있는 것끼리 모듈화
 클래스에 메서드 과다하지 않게
 복붙은 프로그래밍이 아냐
 자기테스트는 필수
 코드리뷰는 과외가 아니야
 IDE와 단축키는 개발 리듬을 살려
 모니터링 할 이유가 그다지
 성능테스트보다 실 동시접속이 나오지 않음
 앱 성능은 머신을 추가해서 극복!
 API로그를 남겼으면...
 차트 자료를 남겼으면...
 API 문서 자동생성
•서버/클라이언트 통신소스 자동생성

Weitere ähnliche Inhalte

Was ist angesagt?

Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Jinuk Kim
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기Youngjae Kim
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유Kyoungchan Lee
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈Amazon Web Services Korea
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례Amazon Web Services Korea
 
Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Youngjae Kim
 
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드Amazon Web Services Korea
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표Amazon Web Services Korea
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기정현 남
 
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobsYoungjae Kim
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요Youngjae Kim
 
자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들cho hyun jong
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
Web server
Web serverWeb server
Web serverHerren
 

Was ist angesagt? (20)

Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
 
Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리
 
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기
 
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
 
자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
Web server
Web serverWeb server
Web server
 

Andere mochten auch

2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기iFunFactory Inc.
 
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표Sung Woo Park
 
Python server-101
Python server-101Python server-101
Python server-101Huey Park
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요NAVER D2
 
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발 Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발 Daehoon Han
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game serverOnGameServer
 
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨Amazon Web Services Korea
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기정웅 박
 

Andere mochten auch (15)

2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기
 
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표
서.알.못.의 서버 구축기 - 2016년 자바프로그래밍 개인발표
 
Python server-101
Python server-101Python server-101
Python server-101
 
ECS위에 Log Server 구축하기
ECS위에 Log Server 구축하기ECS위에 Log Server 구축하기
ECS위에 Log Server 구축하기
 
Chatting Server on AWS
Chatting Server on AWSChatting Server on AWS
Chatting Server on AWS
 
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
 
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발 Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발
Unite Seoul 2016 - 스매싱 더 배틀의 멀티플랫폼 개발
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game server
 
Dukane ipad products 2013
Dukane ipad products 2013Dukane ipad products 2013
Dukane ipad products 2013
 
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기
 

Ähnlich wie 모바일 Rpg 게임서버 제작

오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례형석 김
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startupJunHo Yoon
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습Hyun-woo Park
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교JungWoon Lee
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon Web Services Korea
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestI Goo Lee
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionJunHo Yoon
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화NAVER D2
 

Ähnlich wie 모바일 Rpg 게임서버 제작 (20)

오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
오픈 소스를 활용한 게임 배치 플랫폼 개선 사례
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startup
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교IBM JVM 소개 - Oracle JVM 과 비교
IBM JVM 소개 - Oracle JVM 과 비교
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
게임 서비스를 위한 AWS상의 고성능 SQL 데이터베이스 구성 (이정훈 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 

모바일 Rpg 게임서버 제작

  • 2.  Java 웹 개발자  Spring framework를 주무기로  SI로 시작, 업무 도메인을 자주 바꾸는게 싫어서 어쩌다 게임 개발로 전향  도메인만 게임으로 바뀌었고 기술 스택은 그대로
  • 3.  사용했던 기술요소를 나열  기술요소 선정했던 이유를 나열  답이 아니에요  아쉬움을 덜어내려고…  기억이 정확하지는 않아요...
  • 4.
  • 5.  웹서버 35대 •4Core / 8G Ram  DB 6대 •16Core / 32G Ram  redis 20대 •4Core / 16G Ram  memcached 4대 •4Core / 16G Ram
  • 6.  Game Server : AJP/1.3 Tomcat •Tomcat 안정적인 소켓 연결 •Service Port fix •80 -> 8009 or 8010 •mpm : process + worker •간단한 접근 제어 •필요한 기능만 compile 설치 •mod_dumpio : network packet 분석  Monitor 서버 : php 연동
  • 7.  memcached session manager(MSM) •session clustering •remote cache  Non sticky Session •비동기 요청없도록 협의 •HttpSession is not thread-safe •MSM lock (max 5 seconds)  최대 5초 안으로 처리하고 memcached에 저장해야함  JmxRemoteLifecycleListener •방화벽, port 고정 필요
  • 8.  access log : apache vs tomcat •apache  대부분 2초 아래  간헐적으로 응답시간 이상  응답 packet size 에 따라 응답시간이 증가하는 폭이 큼 •tomcat : 최대 0.4 초  apache-ajp 외부 네트워크와 tomcat사이에서 버퍼 역할을 담당
  • 9.  좋은 건 써봐야  G1GC •CPU는 조금 더 먹고 •조금 더 안정적  Lambda  Stream  가독성 논란 : 쓰고 싶은 사람만 쓰기로
  • 10.  profile •서버군별 다른 설정 적용  module •로직과 실행환경에 따른 모듈을 분리 •core / web / simulator / admin  plugin •resources, tomcat, git, ant, svn, groovy
  • 11.  최대한 최근 버전: 기능 향상 기대  JSON RestFul API 통신 •MessageConverter •Gson vs Jackson  성능 : jackson사용시 CPU가 미세하게 튀는 듯  JSON 변환이 앱 전체에 큰 비중이 없는지 성능차 없음  앱 특성에 따라 library 검토는 해봐야...  Java Configuration •profile에 따른 설정파일을 줄임
  • 12.  기본적인 spring 설정  Core 모듈로 시뮬레이션 CLI 앱 제작 •미리 모듈화 해야  Schedule 앱 제작 •환경제약으로 DB에 스케쥴 적용
  • 13.  단계축소 •DB -> SP -> XML -> Java Instance •관리 소스 감소  성능 향상  Simple Immutable instance •no getter, all argument constructor  MyBatis cache -> Spring cache
  • 14.  성능 (log4j2 는 아직..)  Sl4j를 통해 모든 로그 모아  AsyncAppender  logback.groovy •xml에 비해 custom한 설정 •변수 사용, 문자열 조작
  • 15.  Test를 사랑해야..  Junit, Mockito  단위 테스트보다 시나리오 테스트 위주로  변경에 확신 •library 바꿀 때 •filter등 공통모듈 적용할 때
  • 16.  L4: Non Sticky Load Balancing •remote session store  개인 컨텐츠 관련 데이터 모두 Session에 캐싱 •select 부하 감소 •CAS(Check And Save)
  • 17.  chunk : key – value 저장 단위  slab •일정 크기 범위에 chuck를 담는 단위(1KB, 1.25KB, 1.56KB...) •1 chunk -> 1 slab  page : slab을 모아두는 단위 (1MB) •1KB slab * 1024 = 1 page •2KB slab * 512 = 1 page •page 단위로 미리 slab을 생성  주기적인 모니터링이 필요
  • 18.  랭킹 서버 (zhash)  simple shared cache •캐릭터 이름/레벨/소속 길드 등  구성 •sentinel 3 •master 1 / fail over slave 1 •read only replica slave 2~  Client library •Jedis •read/write 분리한 RedisConnectionPool 사용
  • 19.  DB 분할 • Device DB(Single) : 샤딩 기준 • User DB(Shared)  개인 컨텐츠 저장 • Social DB(Single)  길드 / 친구 / 랭킹 원본 정보  실시간 랭킹을 redis로  Stored Procedure(T-sql) • DBA 협업  JTA • atomikos -> ChainedTransactionManager  Profile로 개별 session 상태 분석 후 connection 설정 확인 필요
  • 20.  단순한 반복작업, 명령어 모음  groovy •API 시나리오 테스트 •nGrinder용 스크립트 호환 •gmaven vs groovy-maven : stub 생성 차이  bash •ssh로 동시 여러서버 일괄제어  batch •SQLCMD, BCP를 사용한 DB작업 자동화
  • 21.  Gradle 지원때문에 STS에서...  code cache / 중복코드 알림  단축키 적응 •테스트 생성, 인터페이스 구현!!!  Maven 해석 방식이 다른 듯  CRLF, charset 변경이 간편
  • 22.  강력한 브렌치 •배포 서버군이름을 브렌치로(dev, qa, live...) •기능을 브렌치로  gerrit 리뷰 •리뷰하며 공유  학습비용 높아 •rebase 꼬이면 지옥 •windows 환경에서 git-bash 사용 어색
  • 23.  무료 부하 테스트 툴  groovy로 작성 •java로 구현한 Core로직이나 상수를 재정의하기 귀찮...  관련 서버 모니터링 가능  시나리오 변경 후 배포 및 테스트까지 시간이 많 이 걸림
  • 24.  HP-JMeter : GC 로그 분석  MAT : heap dump 분석  Thread-logic : Thread dump분석  JMC(java mission control) • 위에 것들 실시간으로 • jconsole 보다 보기 좋음 • JMX 클라이언트  Dtrace • java vm으로 접속, method/line 호출 확인 • 자주 호출되는 부분에 걸면 부하 급상승! 조심!
  • 25.  관련성 있는 것끼리 모듈화  클래스에 메서드 과다하지 않게  복붙은 프로그래밍이 아냐  자기테스트는 필수  코드리뷰는 과외가 아니야  IDE와 단축키는 개발 리듬을 살려  모니터링 할 이유가 그다지  성능테스트보다 실 동시접속이 나오지 않음  앱 성능은 머신을 추가해서 극복!
  • 26.  API로그를 남겼으면...  차트 자료를 남겼으면...  API 문서 자동생성 •서버/클라이언트 통신소스 자동생성