SlideShare a Scribd company logo
알람몬으로 알아보는 Node.js
트러블 슈팅 케이스 스터디
말랑스튜디오 최치웅
소개
• 2006.03 ~ 2008.05 ㈜모빌탑
• 2008.06 ~ 2010.12 ㈜네이블커뮤니케이션즈
• 2011.01 ~ 2011.12 ㈜말랑스튜디오
• 2012.01 ~ 2014.01 ㈜삼성전자
• 2014.02 ~ 현재 ㈜말랑스튜디오
0. 시작하기에 앞서
• 알람몬
• Standalone Application 형태
• 이미 유저는 많이 모인 상태
• 비즈니스 모델 고도화를 위하여 서버 개발이 필요했음
• 회사에는 서버 개발 해본 사람이 없음
• 처음에는 KTH에서 서비스하던 baas.io를 사용, baas.io의 서비스 종료로 인하여
node.js로 직접 서버 개발 및 구축
1. Spike traffic
• 다들 비슷한 시간에 일어남
• 대부분의 사람들이 0, 15, 30 등 딱 떨어지는 숫자를 선호
• 알람 어플의 특성 상 그 외의 시간은 자원들이 놀고 있음
1. Spike traffic
1. Spike traffic
• Shared Instance
• Node.js – Heroku
• MongoDB – compose.io
• Redis - RedisLabs
• Time based Scaling
• Heroku API를 이용하여 직접 구현
2. Cluster
• Node.js를 돌릴 때, 아무리 성능 좋은 서버에 배포하더라도 실제 성능이 나아지지
않음
• Single thread 사용
• V8 엔진 자체의 기본 제약조건들이 영향을 미침
• 위의 부분들을 해결하기 위해 Node.js에서는 Cluster API를 제공
• Cluster API가 굉장히 쉽게 되어있지만 더 잘 만들어진 throng을 사용
• https://github.com/hunterloftis/throng
3. Database
• 특별히 이상 지표가 없이 DB와 관련된 부분의 성능이 급격히 하락하기 시작함
3. Database
• 1차 수정
• Connection Pool 사이즈 조정
• Default: 5 -> 10으로 조정
3. Database
• 2차 수정
• Index를 생성하기 시작
• Compound Index를 적극적으로 활용
3. Database
• 2차 수정
• explain()을 적극 활용
3. Database
• 3차 수정
• KeepAlive 설정을 활성화
4. Cache
• MongoDB의 Index 추가 이후로도 성능문제가 해결되지 않아 Redis를 이용한
Cache를 도입
• Peak Time의 Transaction Data를 분석 시, Redis가 병목
4. Cache
• CDN을 API 서버 앞에 도입
• GET에 한하여 Expire header로 Cache control
TIP – EC2
• 메모리 릭에 주의!!
• (EC2 사용 중 RAM을 모두 사용하면 ssh조차 붙지 못하는 좀비 모드(가칭)에 들어감)
• Auto Scaling은 만능 툴이 아님
• Auto Scaling으로 EC2 Instance가 추가될 때 EBS I/O가 발생하여 추가 요금 발생함
TIP – Atomic Function by MySQL
• MySQL의 User Lock을 이용하여 Atomic Function을 구현
TIP – Optimistic Lock by Redis
• Redis의 Transaction을 이용하여 MongoDB에서 지원하지 않는 Optimistic Lock
을 구현
5. 결론
• 리소스를 알뜰하게 투자하면서 투자대비 효용성 높은 목표지향
• 외부서비스 사용에는 장점과 단점이 분명히 존재함
• 외부서비스를 사용시 서비스 선정의 기준을 세우는것이 중요함
그러나 무엇보다 중요한것은
메인 프로덕트와 핵심 비즈니스에
집중할 수 있는 시간을 만드는것!
Q&A
감사합니다.

More Related Content

PDF
PaaS를 이용한 No Ops 개발
PPTX
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
PPTX
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
PPTX
Saturday Azure Live 1701 Azure WebApp 개념원리
PDF
SQL Azure 실무 도입하기
PDF
HB Smith에서는 AWS 이렇게 사용한다
PDF
Project TIMAT - infrastructure as code
PDF
클라우드 춘추전국시대 서버 개발자 생존기
PaaS를 이용한 No Ops 개발
글로벌 웹사이트 구축을 꿈꾸는 당신에게: Azure WebSites and WebJobs
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
Saturday Azure Live 1701 Azure WebApp 개념원리
SQL Azure 실무 도입하기
HB Smith에서는 AWS 이렇게 사용한다
Project TIMAT - infrastructure as code
클라우드 춘추전국시대 서버 개발자 생존기

What's hot (20)

PDF
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
PPTX
1611 azure-live-세션-2
PDF
AWSKRUG 소개 및 연혁 (정민영) - 4회 정기 세미나
PDF
20180124 스타트업부터 대기업까지 aws와 함께한 7년
PDF
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
PPTX
한국 중소기업 개발자의 AWS 사용방법
PPTX
[AUSG] 초보자를 위한 AWS 뿌시기 세미나 1회 - 비트코인 챗봇 만들기 가즈아ㅏㅏ
PDF
20170829 HB Smith에서는 AWS 이렇게 사용한다
PDF
[TD 2015] Microsoft Azure IaaS v2(최정현)
PPTX
Getting started with Azure Services Platform
PPTX
Windows Azure 개요
PDF
AWS Lambdas with a Static Outgoing IP
PPTX
[Azure study group] azure의 부하분산
PDF
20170718 hb smith에서는 aws 이렇게 사용한다
PPTX
170325 스마트앱개발자포럼-세선1-부산창조혁신센터
PPTX
1711 azure-live
PPTX
1701 azure-live-세션-3
PDF
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
PPTX
2017 boot camp listen1_iaas
2. microsoft azure 클라우드 및 쉐어포인트 포탈 소개
1611 azure-live-세션-2
AWSKRUG 소개 및 연혁 (정민영) - 4회 정기 세미나
20180124 스타트업부터 대기업까지 aws와 함께한 7년
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
한국 중소기업 개발자의 AWS 사용방법
[AUSG] 초보자를 위한 AWS 뿌시기 세미나 1회 - 비트코인 챗봇 만들기 가즈아ㅏㅏ
20170829 HB Smith에서는 AWS 이렇게 사용한다
[TD 2015] Microsoft Azure IaaS v2(최정현)
Getting started with Azure Services Platform
Windows Azure 개요
AWS Lambdas with a Static Outgoing IP
[Azure study group] azure의 부하분산
20170718 hb smith에서는 aws 이렇게 사용한다
170325 스마트앱개발자포럼-세선1-부산창조혁신센터
1711 azure-live
1701 azure-live-세션-3
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
2017 boot camp listen1_iaas
Ad

Similar to 알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디 (20)

PDF
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
PDF
[2017 AWS Startup Day] 인프라 관점에서 접근하는 리디스토리 개발기
PPTX
Node.js의 도입과 활용
PDF
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
PDF
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
PDF
텀 프로젝트에서 제품 프로젝트로 - 성준영님
PDF
MEAN Stack 기반 모바일 서비스 개발 overview
PDF
Nodejs발표자료 - 팀 세미나용
PDF
서버학개론(백엔드 서버 개발자를 위한)
PDF
Javascript everywhere - Node.js | Devon 2012
PDF
Node.js 시작하기
PDF
9월 기술사항
PPTX
Node.js + Websocket 삽질기
PDF
NRISE 개발스택
PDF
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
PDF
하드웨어 스타트업의 소프트웨어 이야기
PPTX
Node.js
PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
PDF
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
PDF
게임 고객 사례를 통해 살펴보는 AWS 활용 전략 :: 이경안 :: AWS Summit Seoul 2016
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
[2017 AWS Startup Day] 인프라 관점에서 접근하는 리디스토리 개발기
Node.js의 도입과 활용
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
텀 프로젝트에서 제품 프로젝트로 - 성준영님
MEAN Stack 기반 모바일 서비스 개발 overview
Nodejs발표자료 - 팀 세미나용
서버학개론(백엔드 서버 개발자를 위한)
Javascript everywhere - Node.js | Devon 2012
Node.js 시작하기
9월 기술사항
Node.js + Websocket 삽질기
NRISE 개발스택
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
하드웨어 스타트업의 소프트웨어 이야기
Node.js
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
게임 고객 사례를 통해 살펴보는 AWS 활용 전략 :: 이경안 :: AWS Summit Seoul 2016
Ad

알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디

  • 1. 알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디 말랑스튜디오 최치웅
  • 2. 소개 • 2006.03 ~ 2008.05 ㈜모빌탑 • 2008.06 ~ 2010.12 ㈜네이블커뮤니케이션즈 • 2011.01 ~ 2011.12 ㈜말랑스튜디오 • 2012.01 ~ 2014.01 ㈜삼성전자 • 2014.02 ~ 현재 ㈜말랑스튜디오
  • 3. 0. 시작하기에 앞서 • 알람몬 • Standalone Application 형태 • 이미 유저는 많이 모인 상태 • 비즈니스 모델 고도화를 위하여 서버 개발이 필요했음 • 회사에는 서버 개발 해본 사람이 없음 • 처음에는 KTH에서 서비스하던 baas.io를 사용, baas.io의 서비스 종료로 인하여 node.js로 직접 서버 개발 및 구축
  • 4. 1. Spike traffic • 다들 비슷한 시간에 일어남 • 대부분의 사람들이 0, 15, 30 등 딱 떨어지는 숫자를 선호 • 알람 어플의 특성 상 그 외의 시간은 자원들이 놀고 있음
  • 6. 1. Spike traffic • Shared Instance • Node.js – Heroku • MongoDB – compose.io • Redis - RedisLabs • Time based Scaling • Heroku API를 이용하여 직접 구현
  • 7. 2. Cluster • Node.js를 돌릴 때, 아무리 성능 좋은 서버에 배포하더라도 실제 성능이 나아지지 않음 • Single thread 사용 • V8 엔진 자체의 기본 제약조건들이 영향을 미침 • 위의 부분들을 해결하기 위해 Node.js에서는 Cluster API를 제공 • Cluster API가 굉장히 쉽게 되어있지만 더 잘 만들어진 throng을 사용 • https://github.com/hunterloftis/throng
  • 8. 3. Database • 특별히 이상 지표가 없이 DB와 관련된 부분의 성능이 급격히 하락하기 시작함
  • 9. 3. Database • 1차 수정 • Connection Pool 사이즈 조정 • Default: 5 -> 10으로 조정
  • 10. 3. Database • 2차 수정 • Index를 생성하기 시작 • Compound Index를 적극적으로 활용
  • 11. 3. Database • 2차 수정 • explain()을 적극 활용
  • 12. 3. Database • 3차 수정 • KeepAlive 설정을 활성화
  • 13. 4. Cache • MongoDB의 Index 추가 이후로도 성능문제가 해결되지 않아 Redis를 이용한 Cache를 도입 • Peak Time의 Transaction Data를 분석 시, Redis가 병목
  • 14. 4. Cache • CDN을 API 서버 앞에 도입 • GET에 한하여 Expire header로 Cache control
  • 15. TIP – EC2 • 메모리 릭에 주의!! • (EC2 사용 중 RAM을 모두 사용하면 ssh조차 붙지 못하는 좀비 모드(가칭)에 들어감) • Auto Scaling은 만능 툴이 아님 • Auto Scaling으로 EC2 Instance가 추가될 때 EBS I/O가 발생하여 추가 요금 발생함
  • 16. TIP – Atomic Function by MySQL • MySQL의 User Lock을 이용하여 Atomic Function을 구현
  • 17. TIP – Optimistic Lock by Redis • Redis의 Transaction을 이용하여 MongoDB에서 지원하지 않는 Optimistic Lock 을 구현
  • 18. 5. 결론 • 리소스를 알뜰하게 투자하면서 투자대비 효용성 높은 목표지향 • 외부서비스 사용에는 장점과 단점이 분명히 존재함 • 외부서비스를 사용시 서비스 선정의 기준을 세우는것이 중요함 그러나 무엇보다 중요한것은 메인 프로덕트와 핵심 비즈니스에 집중할 수 있는 시간을 만드는것!
  • 19. Q&A