[대규모 서비스를 지탱하는 기술 #1] 대규모 웹서비스 개발 오리엔테이션 개발 스터디

이 포스팅은 "대규모 서비스를 지탱하는 기술"이라는 책을 읽고 나름대로 중요한것만 요약해본 것입니다.


=============================================================================


* 스케일 아웃 : 서버대수를 늘리는 것

* 스케일 업 : 하드웨어 자체 스펙을 높이는 것.


<대규모 서비스 시 고려할 점>

- 확장성, 부하분산

- 다중성 : 하나가 죽더라도 서비스는 지속되어야 한다.

- 효율성 : 서버량이 늘어남에 따른 모니터링 방안, 문제 발생 시, 요소 파악 및 해결까지 걸리는 시간 단축을 위한 고민.

- 개발자 및 프로젝트 관리 : 개발 표준화, 언어 & 라이브러리 통일, 코딩 컨벤션, 신입 교육?, PM …

- 대용량 데이터 핸들링 : 최소한의 횟수로 필요한 데이터 접근 방법, 효과적인 데이터 분산, 최대한 적은 데이터로 서비스가 가능하도록 설계 (중복제거 등)


<서버의 부하분산>

- 서비스의 각 병목지점 파악

- I/O 부하가 높은곳 : 메모리 업

- CPU 부하가 높은곳 : CPU 업

- 로드밸런서(LVS) + 가동감시 (Keep alive)

- OS 가상화 : 가동률 + 유지보수성 업

* 처음부터 완벽한 부하분산 시스템을 구축하려고 하면 비용이 너무 많이드므로 심플한 방법이 나을 수도 있음.

* Minimum start 를 할 수 있도록 서비스를 준비하는 현명함이 필요하다.


<서비스 개발 흐름>

- 매일 아침 짧은 미팅(10분) : 진척상황, Todo 확인 (이 미팅에서 Task 별 담당자 배정)

- 곧바로 구현에 들어감 : 가능한 한 테스트 프로그램을 작성.  '항상 모두' 는 아님

- 구현 완료 되면 시스템에 커밋 + 다른 엔지니어에게 보고 하여 코드 리뷰

- 리뷰끝나면 master 에 머지 > 스테이징 서버에 배포하여 테스트

- 테스트가 끝나면 리얼 배포하여 서비스 적용.

- 구현자의 실력에 따라 짝프로그래밍 진행. 전제척으로 애자일 개발 스타일


<개발 환경 구성>

- 최대한 통일 시키는것이 좋다. 하지만 각 개발자의 취향에 따라 익숙한 환경을 사용할 수 있도록 하는 유연성도 필요.

- 개발 언어

- 미들웨어 : OS, DB, Web Server 등

- 앱 프레임워크

- 개발 머신의 OS 및 에디터

- 코드 버전관리, BTS(Bug Tracking System)

- 프로젝트 매니징 관리 툴

- 커뮤니케이션 툴




통계 위젯 (블랙)

135157
897
189175

GoogleAdsenseResponsive

Cluster map