SlideShare a Scribd company logo
서버 만들기
charsyam@naver.com
대용량 고속 서버?
WARNING!
• 해당 문서의 내용은 다음과 같은 사이트에서 얻은 내용입니다.
– http://pl.atyp.us/content/tech/servers.html
– http://www.powerbox.pe.kr/312
TIP VS Baseline
첫번째 경기는 39점
두번째 경기는 95점
욲빨!
TIP을 알면 점수가 오를 수 있지만,
BaseLine 이 없으면 기복이 심해지고,
진짜 실력이 아니다!
여기는 BaseLine
서버 만들기의 BaseLine
• 모든 근본은 소프트웨어 개발의 근본!
• 소프트웨어 개발의 5대 원칙
– SRP(단일 책임 법칙)
• 클래스가 하나의 책임만 가진다. 변경되는 이유가 하나의 책임과 연관된다.
– OCP(개방 폐쇄 법칙)
• 기능을 추가하기는 쉽게!, 기존 기능을 변경하게 만드는 것은 어렵게.
– LSP(리스코프 치홖 법칙)
• 하위 타입은 그것의 Base Type 에 대해서 치홖 가능해야 한다.
– ISP(인터페이스 격리 법칙)
• 자신이 필요한 인터페이스만 존재
– DIP(의존 관계 역젂 법칙)
• 상위 모듈이 하위 모듈에 의존하지 않도록 Concrete Class 대신에 Interface를 써라!
서버 만들기의 BaseLine 2
• Pattern?
– 우리가 POSA2를 공부하려는 이유
– POSA2는 ACE의 구조다!
– 결국 변하는 부분과 그렇지 않은 부분의 분리
서버 모델
• 서버 모델이 뭐예요?
– 서버의 목적과, 성능, 안젂성 등의 요구사항에 따라 달라집니다.
threading Model?
• Single Process Model
• Multi Process Model
– Preforked Model
– Dynamic
• Multi Thread Model
– Preforked Model
– Dynamic
Server Model?
• 의사소통의 수단으로 사용합니다.
• Worker Crew Model
– 하나의 작업을 나눠서 여려명이서!!!, 계산 작업?
• Boss/Worker Model
– Channel(Queue)
– Producer-Consumer
• Consumer 가 하나면 Pipeline Model
• Consumer 가 여러 개면 Boss/Worker
Reactor/Proactor 모델은요?
• 가장 많이 듣는 이야기!
– 주로 앞단에서 Event Handling 을 위한 구조
– 목적에 따라서 여러가지 패턴이 조합될 수 있다.
• 특정 패턴이 모든 것을 얘기하지 않습니다.
다시 Server 모델
Reactor
EH
EH
Processor
Processor
다시 Server 모델
Reactor
ITEM
ITEM
ITEM
ITEM
Worker
Worker
Worker
Worker
WorkerEH
EH
Reactor
EH
EH
Processor
Processor
Server Pattern With POSA2
• Event Handling Patterns
– Reactor
– Proactor
– Asynchronous Completion Token
– Acceptor-Connector
• Concurrency Patterns
– Active Object
– Monitor Object
– Half-Sync/Half-Async
– Reader-Followers
간략한 ACE 소개
• POSA2 저자가 만들었어요.
• OPEN SOURCE
여기부터는 TIP
서버 만들기의 TIP
• Data Copies
• Context Switches
• Memory Allocation
• Lock Contention
Data Copies
• Data Copy가 많을 수록 괜히 CPU를 낭비하게 된다.
• 그럼 어떻게?
– Socket Zero Buffer?(효과는 미비?)
– 최소한의 데이터 복사만 일어나도록 사용
Context Switches
• Thread는 Light Weight Process?
• 그러나 Thread의 Context Switch 가 자주 일어나면 점점 성능은
떨어진다.
• 2n+1 등의 공식이 있지만, 실제로는 해당 수치는 테스트로 검증해야 한
다.
Memory Allocation
• 메모리 Pool을 이용하는 것이 좋다.
• 아니면 미리 할당, 한방에 필요한 만큼 모두 할당 한다.
• 자주 할당하는 것을 피하는 것이 좋다.
Lock Contention
• Lock이 빈번하면 속도가 느리다.
• 그러나 안정성을 위해서 필요
• 최대한 락이 필요없는 구조로 설계
• 하지만 필요하다면 써야한다.
• Lock-Free, Wait-Free 방식도 알아보자
서버 만들기의 TIP 2 - 1
• Just Network, Memory, CPU
– HDD is slow!( Not use Slow I/O )
– HDD -> SSD
• Thread and Process Count
– 적젃한 비율은 실험으로 발견
• Use Resource POOL
• Use Cache( Be Higher Cache Hit )
• Use Compression( Low CPU Using and High Memory Use)
놓치기 쉬운 것들!
그리고 개발자들이 잘
신경 쓰지 않는 것들!
코드가 전부는 아니다.
• 서버의 물리적 구조
• 얼마 만큼의 트래픽이 발생할 까?
– 스위치의 밴드위스?
• 당신의 서버에 사용자가 많다면 스위치가 못버틸 수도 있다.
– 안정성(스위치, 라우터 2중화)
– FailOver 는 어떻게?
물리적 Deploy: 장애에 대한 이중화
외부 인터넷
ROUTE ROUTE
Switch Switch
Server Server Server Server
적절한 로그가 필요하다.
• 버그를 확인하기 위해서!!!
• 더욱 더 중요한!!!
– 사용자의 요청 처리용!!!(많은 정보가 필요하다)
• Log4j 등과 같은 툴의 이용
– Log4plus, Log4cxx, Log4cpp
적절한 로그가 필요하다.
• [2010/11/20 08:30:12] 127.0.0.1 charsyam LOGIN
• [2010/11/20 08:30:13] 127.0.0.1 charsyam GET_ITEM SWORD 100
• [2010/11/20 08:30:15] 127.0.0.1 charsyam GET_ITEM GOLD 100
• [2010/11/20 08:32:12] 127.0.0.1 charsyam CHANGE_ITEM jinuki79 SWORD 100 GOLD 2000
• [2010/11/20 08:35:12] 127.0.0.1 charsyam LOGOUT
• 너무 많으면 중요한 작업이라도 꼭 남겨야 합니다.(이건 기획과 협의)

More Related Content

What's hot

프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기Hyun-jik Bae
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택
Moon Soo Kim
 
2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경Moon Soo Kim
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 
모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링
기환 천
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
Hyunjik Bae
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
Seungmo Koo
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
Jongwon Han
 
테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기
cho hyun jong
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드
Hyunjik Bae
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Jongwon Han
 
웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드
Hyunjik Bae
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
Hyunjik Bae
 
모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작
기환 천
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육
Byeongsu Kang
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
현승 배
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
Seungmo Koo
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기정현 남
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
Minyoung Jeong
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
Xionglong Jin
 

What's hot (20)

프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택
 
2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
 
테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기
 
웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드웹서버와 프라우드넷 서버간 상호작용 가이드
웹서버와 프라우드넷 서버간 상호작용 가이드
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
 
웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드웹서버와 ProudNet 서버간 상호작용 가이드
웹서버와 ProudNet 서버간 상호작용 가이드
 
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
프라우드넷의 연결 유지 기능과 홀펀칭-윤현민
 
모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작모바일 Rpg 게임서버 제작
모바일 Rpg 게임서버 제작
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
SQL Azure 실무 도입하기
SQL Azure 실무 도입하기SQL Azure 실무 도입하기
SQL Azure 실무 도입하기
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 

Viewers also liked

SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!
IBM Korea
 
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayerSoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
IBM Korea
 
SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안
IBM Korea
 
서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술
재훈 정
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
hungrok
 
(120616) #fitalk web browser forensics - part iii
(120616) #fitalk   web browser forensics - part iii(120616) #fitalk   web browser forensics - part iii
(120616) #fitalk web browser forensics - part iii
INSIGHT FORENSIC
 
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
daumfoundation
 
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
daumfoundation
 
Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?
Eric Sieverts
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10
hungrok
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
hungrok
 
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
daumfoundation
 
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
INSIGHT FORENSIC
 
(150124) #fitalk advanced $usn jrnl forensics (english)
(150124) #fitalk   advanced $usn jrnl forensics (english)(150124) #fitalk   advanced $usn jrnl forensics (english)
(150124) #fitalk advanced $usn jrnl forensics (english)
INSIGHT FORENSIC
 
(150124) #fitalk advanced $usn jrnl forensics (korean)
(150124) #fitalk   advanced $usn jrnl forensics (korean)(150124) #fitalk   advanced $usn jrnl forensics (korean)
(150124) #fitalk advanced $usn jrnl forensics (korean)
INSIGHT FORENSIC
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
JU Chae
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
hungrok
 
코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다
Han Sung Kim
 
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
daumfoundation
 
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
daumfoundation
 

Viewers also liked (20)

SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!
 
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayerSoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
SoftLayer에서 웹 애플리케이션 호스팅하기 - WordPress on SoftLayer
 
SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안SoftLayer 서비스 설명 5차 - 보안
SoftLayer 서비스 설명 5차 - 보안
 
서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
(120616) #fitalk web browser forensics - part iii
(120616) #fitalk   web browser forensics - part iii(120616) #fitalk   web browser forensics - part iii
(120616) #fitalk web browser forensics - part iii
 
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
 
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
 
Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
 
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
 
(150124) #fitalk advanced $usn jrnl forensics (english)
(150124) #fitalk   advanced $usn jrnl forensics (english)(150124) #fitalk   advanced $usn jrnl forensics (english)
(150124) #fitalk advanced $usn jrnl forensics (english)
 
(150124) #fitalk advanced $usn jrnl forensics (korean)
(150124) #fitalk   advanced $usn jrnl forensics (korean)(150124) #fitalk   advanced $usn jrnl forensics (korean)
(150124) #fitalk advanced $usn jrnl forensics (korean)
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다
 
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
2013 꿈다락 토요문화학교 유스보이스 8경 캐릭터 설정 자료집
 
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
[거의 모든 인터넷의 역사, 그리고 미래 - 정지훈
 

Similar to Server

TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다
Daesung Park
 
[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
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
Kwangseob Kim
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
Kwangseob Kim
 
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
Woong Seok Kang
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shooting
DaeMyung Kang
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
Byeongsu Kang
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XpressEngine
 
배치잡 대외용 이형규
배치잡 대외용 이형규배치잡 대외용 이형규
배치잡 대외용 이형규
Hyeong-Kyu Lee
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
Byeongsu Kang
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
내훈 정
 
Redis acc 2015
Redis acc 2015Redis acc 2015
Redis acc 2015
DaeMyung Kang
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
KwangSeob Jeong
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
hoondong kim
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
 

Similar to Server (20)

TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다
 
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
[Gaming on AWS] AWS 위에서의 Dev & Test, 그리고 비용 - 위메이드
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shooting
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
 
배치잡 대외용 이형규
배치잡 대외용 이형규배치잡 대외용 이형규
배치잡 대외용 이형규
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
Redis acc 2015
Redis acc 2015Redis acc 2015
Redis acc 2015
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 

More from DaeMyung Kang

Count min sketch
Count min sketchCount min sketch
Count min sketch
DaeMyung Kang
 
Redis
RedisRedis
Ansible
AnsibleAnsible
Ansible
DaeMyung Kang
 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
DaeMyung Kang
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
DaeMyung Kang
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
DaeMyung Kang
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
DaeMyung Kang
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
DaeMyung Kang
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
DaeMyung Kang
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
DaeMyung Kang
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
DaeMyung Kang
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
DaeMyung Kang
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
DaeMyung Kang
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
DaeMyung Kang
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
DaeMyung Kang
 
Redis acl
Redis aclRedis acl
Redis acl
DaeMyung Kang
 
Coffee store
Coffee storeCoffee store
Coffee store
DaeMyung Kang
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
DaeMyung Kang
 
Number system
Number systemNumber system
Number system
DaeMyung Kang
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
DaeMyung Kang
 

More from DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
 
Redis
RedisRedis
Redis
 
Ansible
AnsibleAnsible
Ansible
 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Number system
Number systemNumber system
Number system
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 

Server

  • 2. WARNING! • 해당 문서의 내용은 다음과 같은 사이트에서 얻은 내용입니다. – http://pl.atyp.us/content/tech/servers.html – http://www.powerbox.pe.kr/312
  • 3. TIP VS Baseline 첫번째 경기는 39점 두번째 경기는 95점 욲빨!
  • 4. TIP을 알면 점수가 오를 수 있지만, BaseLine 이 없으면 기복이 심해지고, 진짜 실력이 아니다!
  • 6. 서버 만들기의 BaseLine • 모든 근본은 소프트웨어 개발의 근본! • 소프트웨어 개발의 5대 원칙 – SRP(단일 책임 법칙) • 클래스가 하나의 책임만 가진다. 변경되는 이유가 하나의 책임과 연관된다. – OCP(개방 폐쇄 법칙) • 기능을 추가하기는 쉽게!, 기존 기능을 변경하게 만드는 것은 어렵게. – LSP(리스코프 치홖 법칙) • 하위 타입은 그것의 Base Type 에 대해서 치홖 가능해야 한다. – ISP(인터페이스 격리 법칙) • 자신이 필요한 인터페이스만 존재 – DIP(의존 관계 역젂 법칙) • 상위 모듈이 하위 모듈에 의존하지 않도록 Concrete Class 대신에 Interface를 써라!
  • 7. 서버 만들기의 BaseLine 2 • Pattern? – 우리가 POSA2를 공부하려는 이유 – POSA2는 ACE의 구조다! – 결국 변하는 부분과 그렇지 않은 부분의 분리
  • 8. 서버 모델 • 서버 모델이 뭐예요? – 서버의 목적과, 성능, 안젂성 등의 요구사항에 따라 달라집니다.
  • 9. threading Model? • Single Process Model • Multi Process Model – Preforked Model – Dynamic • Multi Thread Model – Preforked Model – Dynamic
  • 10. Server Model? • 의사소통의 수단으로 사용합니다. • Worker Crew Model – 하나의 작업을 나눠서 여려명이서!!!, 계산 작업? • Boss/Worker Model – Channel(Queue) – Producer-Consumer • Consumer 가 하나면 Pipeline Model • Consumer 가 여러 개면 Boss/Worker
  • 11. Reactor/Proactor 모델은요? • 가장 많이 듣는 이야기! – 주로 앞단에서 Event Handling 을 위한 구조 – 목적에 따라서 여러가지 패턴이 조합될 수 있다. • 특정 패턴이 모든 것을 얘기하지 않습니다.
  • 14. Server Pattern With POSA2 • Event Handling Patterns – Reactor – Proactor – Asynchronous Completion Token – Acceptor-Connector • Concurrency Patterns – Active Object – Monitor Object – Half-Sync/Half-Async – Reader-Followers
  • 15. 간략한 ACE 소개 • POSA2 저자가 만들었어요. • OPEN SOURCE
  • 17. 서버 만들기의 TIP • Data Copies • Context Switches • Memory Allocation • Lock Contention
  • 18. Data Copies • Data Copy가 많을 수록 괜히 CPU를 낭비하게 된다. • 그럼 어떻게? – Socket Zero Buffer?(효과는 미비?) – 최소한의 데이터 복사만 일어나도록 사용
  • 19. Context Switches • Thread는 Light Weight Process? • 그러나 Thread의 Context Switch 가 자주 일어나면 점점 성능은 떨어진다. • 2n+1 등의 공식이 있지만, 실제로는 해당 수치는 테스트로 검증해야 한 다.
  • 20. Memory Allocation • 메모리 Pool을 이용하는 것이 좋다. • 아니면 미리 할당, 한방에 필요한 만큼 모두 할당 한다. • 자주 할당하는 것을 피하는 것이 좋다.
  • 21. Lock Contention • Lock이 빈번하면 속도가 느리다. • 그러나 안정성을 위해서 필요 • 최대한 락이 필요없는 구조로 설계 • 하지만 필요하다면 써야한다. • Lock-Free, Wait-Free 방식도 알아보자
  • 22. 서버 만들기의 TIP 2 - 1 • Just Network, Memory, CPU – HDD is slow!( Not use Slow I/O ) – HDD -> SSD • Thread and Process Count – 적젃한 비율은 실험으로 발견 • Use Resource POOL • Use Cache( Be Higher Cache Hit ) • Use Compression( Low CPU Using and High Memory Use)
  • 23. 놓치기 쉬운 것들! 그리고 개발자들이 잘 신경 쓰지 않는 것들!
  • 24. 코드가 전부는 아니다. • 서버의 물리적 구조 • 얼마 만큼의 트래픽이 발생할 까? – 스위치의 밴드위스? • 당신의 서버에 사용자가 많다면 스위치가 못버틸 수도 있다. – 안정성(스위치, 라우터 2중화) – FailOver 는 어떻게?
  • 25. 물리적 Deploy: 장애에 대한 이중화 외부 인터넷 ROUTE ROUTE Switch Switch Server Server Server Server
  • 26. 적절한 로그가 필요하다. • 버그를 확인하기 위해서!!! • 더욱 더 중요한!!! – 사용자의 요청 처리용!!!(많은 정보가 필요하다) • Log4j 등과 같은 툴의 이용 – Log4plus, Log4cxx, Log4cpp
  • 27. 적절한 로그가 필요하다. • [2010/11/20 08:30:12] 127.0.0.1 charsyam LOGIN • [2010/11/20 08:30:13] 127.0.0.1 charsyam GET_ITEM SWORD 100 • [2010/11/20 08:30:15] 127.0.0.1 charsyam GET_ITEM GOLD 100 • [2010/11/20 08:32:12] 127.0.0.1 charsyam CHANGE_ITEM jinuki79 SWORD 100 GOLD 2000 • [2010/11/20 08:35:12] 127.0.0.1 charsyam LOGOUT • 너무 많으면 중요한 작업이라도 꼭 남겨야 합니다.(이건 기획과 협의)