SlideShare a Scribd company logo
1 of 159
Download to read offline
클라우드 시스템을 관리하는 기술 :
클라우드 관리자가 알아야 할 웹 규모 분산 시스템 설계와 운영
초판발행 2016년 02월 25일
지은이 토머스 리몬첼리, 스트래터 체일럽, 크리스티나 호건 / 옮긴이 류광 / 펴낸이 김태헌
펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124
등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-261-8 93000
총괄 전태호 / 책임편집 김창수 / 기획 이복연
디자인 표지 강은영, 조판 이경숙
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 서은옥, 변지영 / 제작 박성우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
THE PRACTICE OF CLOUD SYSTEM ADMINISTRATION: DESIGNING AND OPERATING
LARGE DISTRIBUTED SYSTEM, VOLUME 2 by THOMAS A. LIMONCELLI, STRATA R. CHALUP,
CHRISTINA J. HOGAN.
Authorized translation from the English language edition, entitled THE PRACTICE OF CLOUD
SYSTEM ADMINISTRATION: DESIGNING AND OPERATING LARGE DISTRIBUTED
SYSTEM, VOLUME 2, 1st edition by THOMAS A. LIMONCELLI, STRATA R. CHALUP,
CHRISTINA J. HOGAN, ISBN 978-0321943187, published by Pearson Education, Inc, publishing
as Addison-Wesley Professional, Copyright © 2015.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from Pearson Education, Inc. KOREAN language edition
published by HANBIT MEDIA INC., Copyright © 2016.
이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다.
저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
4
지은이 토머스 A. 리몬첼리Thomas A. Limoncelli
국제적으로 유명한 저자이자 강연자, 시스템 관리자이다. Google NYC에서 7년간 재직하면서 구
글 블로그 검색(Google Blog Search)이나 Ganeti 같은 프로젝트들과 구글 내부의 여러 전사
적 IT 서비스들을 위한 SRE(사이트 신뢰성 기술자)로 일했다. 현재 그는 ServerFault.com과
StackOverflow.com의 모회사인 Stack Exchange, Inc.에서 SRE로 일하고 있다. 1987년
Drew University 재학 중에 처음으로 유급 시스템 관리 일을 한 그는 이후 AT&T/Lucent Bell
Labs를 비롯한 크고 작은 회사들에서 일했다. 유명 저서로는 Time Management for System
Administrators(O’Reilly)와 The Practice of System and Network Administration
제2판(Addison-Wesley) 등이 있다. 여가 시간에는 풀뿌리 운동(grassroots activism)에도
참여하는데, 그의 노력은 주(state)와 미국 전체 수준에서 알려졌다. 현재 미국 뉴저지에서 살고
있다.
지은이 스트래터 R. 체일럽Strata R. Chalup
수년간 복잡한 IT 프로젝트들을 지휘, 관리하면서 프로젝트 관리자에서 운영 책임자에 이르기까
지 다양한 역할을 수행했다. 스트래터는 팀 관리와 협동에 관한 수많은 글을 썼으며, 자신의 관리
능력을 BayLISA와 SAGE를 비롯한 여러 자원봉사 단체들에 적용했다. 1983년 그녀는 보스턴
의 MIT에서 VAX Ultrix와 Unisys UNIX의 관리를 시작했으며, 닷컴 시절에는 실리콘 밸리에서
iPlanet과 Palm 같은 고객사들을 위해 인터넷 서비스를 구축했다. 2007년에는 톰(토머스 A. 리
몬첼리)과 크리스티나와 함께 The Practice of System and Network Administration 제2판
(Addison-Wesley)을 저술했다. 취미로는 Arduino와 여러 2차원 CAD/CAM 장치들을 비롯
한 새로운 기술들을 배우는 것과 원예전문가(master gardener)가 되는 것을 들 수 있다. 현재 미
국 캘리포니아의 산타클라라 카운티에 살고 있다.
지은이·옮긴이 소개
5
지은이 크리스티나 J. 호건Christina J. Hogan
실리콘 밸리와 이탈리아, 스위스에서 20년 간 시스템 관리와 네트워크 관리를 수행한 경력이 있
다. 그녀는 작은 신생기업은 물론 중간 크기의 기술 기업과 다국적 대기업들에서 경험을 쌓았
다. 크리스티나는 수년간 보안 컨설턴트로 일했는데, 고객사로는 eBay, Silicon Graphics,
SystemExperts 등이 있다. 2005년에 그녀와 톰은 저서 The Practice of System and
Network Administration(Addison-Wesley)으로 SAGE Outstanding Achievement
Award를 공동 수상했다. 그녀는 수학 학사 학위와 컴퓨터 과학 석사 학위, 항공공학 박사 학위를
가지고 있으며, 법학 과정도 졸업했다. 또한 그녀는 6년간 포뮬러 1 레이싱 팀에서 공기역학자로 일
했으며, 1988년 체스 올림피아드에 아일랜드 대표로 참가했다. 현재 스위스에서 살고 있다.
옮긴이 류광
옮긴이 류광은 1996년부터 활동해 온 프로그래밍 서적 전문 번역가로, Game Programming
Gems 시리즈와 컴퓨터 프로그래밍의 예술(The Art of Computer Programming) 제1~4A권,
UNIX 고급 프로그래밍(Advanced Programming in UNIX Environment) 제2판과 제3판,
Effective Modern C++을 포함해 60여 권의 다양한 IT 전문서를 번역했다. 번역과 프로그래밍 외
에 소프트웨어 문서화에도 많은 관심이 있으며, 수많은 오픈소스 프로젝트들의 표준 문서 형식으로
쓰이는 DocBook의 국내 사용자 모임인 닥북 한국(http://docbook.kr)의 일원이다. 현재 번
역서 정보 사이트 occam’s Razor(http://occamsrazr.net)와 게임 개발 및 개발서 관련 사
이트 GpgStudy(http://www.gpgstudy.com)를 운영하고 있다.
6
C++의 창시자 비야네 스트롭스트룹Bjarne Stroustrup은 자신의 저서 Programming - Principles
and Practice Using C++(번역서는 (C++로 배우는)프로그래밍의 원리와 실제, 류광 옮김)에서
“우리 문명은 소프트웨어를 바탕으로 돌아간다”라고 말했습니다. 현재 그러한 소프트웨어의 상당
부분은 최종 사용자와는 떨어져 있는 ‘구름’, 즉 클라우드 시스템 안에서 돌아가고 있으며, 점점 더
많은 소프트웨어와 자료가 점점 더 빨리 구름 안으로 이주할 것입니다. 그런 만큼 클라우드 시스템
을 개발하고 관리, 운영하는 사람은 단지 자신의 조직의 이익을 위해 일하는 사람이 아니라, 어쩌면
문명의 유지와 발전에 큰 몫을 담당하는 사람일 것입니다. 저자들도 아마 그런 자부심을 가지고 이
책을 저술했으리라 짐작합니다. 나중에 독자가 ‘맺음말(p.533)’을 그런 자부심과 자신감을 느끼면
서 읽을 수 있게 된다면 더 바랄 것이 없겠습니다.
	 독자가 본문을 거쳐서 맺음말에 무사히 도달하고 그 뒤의 부록들까지 충실하게 읽으려면 번역
품질에 문제가 없어야 할 텐데, 어떨지 모르겠습니다. 항상 그렇지만 번역과 교정을 마치고 옮긴이
의 말을 쓸 때에는 번역과 교정에 좀 더 많은 시간을 들일 수 있었다면 하는 아쉬움을 느낍니다. 특
히 이 책은 통상적인 소프트웨어 개발이나 프로그래밍 이외의 여러 분야(경영학, 산업공학, 공공안
전 등등)에서 쓰이는 용어들이 많이 등장해서 번역하기가 쉽지 않았습니다. 가능하면 해당 분야에
서 흔히 쓰이는 용어를 존중하되, 전체적인 어법과 잘 맞지 않거나 다른 분야의 용어와 충돌하는 등
그대로 가져다 쓰기가 좀 곤란할 때에는 기존 용어의 조어법을 참고해서 새로운 용어를 만들기도 했
습니다. 부연 설명이 필요한 경우에는 역주를 추가하기도 했지만 충분치는 않을 것입니다. 부족한
부분은 제 홈페이지 occam’s Razor(http://occamsrazr.net/)의 ‘번역서 정보’ 페이지에서
접근할 수 있는 이 책 페이지를 통해서 함께 논의했으면 합니다.
	 감사 인사로 옮긴이의 말을 마무리하겠습니다. 제게 번역을 맡겨 주신 최현우 님과 번역 및 교
정 과정을 매끄럽게 이끌어 주신 이복연 님 고맙습니다. 그리고 조판을 맡아주신 이경숙 님을 비롯
한, 출판 전과정에서 제가 미처 알지 못하는 여러 작업을 충실히 수행해서 이 책의 출판을 현실로 만
든 모든 관련자 분께 감사 인사 올립니다. 마지막으로, 최종 결과물만 봐서는 상상하기 힘든 황당한
오타와 오역을 수없이 잡아 준 아내 오현숙에게 감사와 사랑의 마음을 전합니다.
_ 류광
옮긴이의 말
7
다음 중 참인 문장은 무엇인가?
1.	신뢰성이 아주 높은 시스템은 싸고 신뢰성 없는(unreliable) 구성요소들로 만들어진다.
2.	구글Google이 수십억의 사용자에 맞게 규모를 변화시키는 데 사용하는 기법들은 수백 명의
사용자를 감당하는 시스템의 규모 변화(scaling)에 사용할 수 있는 기법들과 동일한 패턴
을 따른다.
3.	어떤 절차가 위험할수록 그 절차를 자주 수행해야 한다.
4.	가장 중요한 소프트웨어 기능 중에는 사용자가 결코 보지 못하는 것들도 있다.
5.	무작위로 컴퓨터를 선택해서 전원을 꺼야 한다.
6.	6개월 이내에 공개될 페이스북Facebook의 모든 기능의 코드가 독자의 브라우저 안에 이미 들
어 있을 가능성이 크다.
7.	하루에 소프트웨어를 여러 번 갱신하는 데에는 사람의 노력이 거의 필요하지 않다.
8.	호출대기 중이라고 해서 반드시 스트레스를 받거나 일이 힘들어야 하는 것은 아니다.
9.	기계(컴퓨터)가 작동 중인지를 사람이 감시할 필요는 없다.
10.	실험과 증거가 관여하는 과학적 원리들을 이용해서 운영과 관리를 수행하는 것이 가능하다.
11.	구글은 좀비들이 쳐들어왔을 때의 대응 방안에 관한 예행연습을 수행한 적이 있다.
이 문장들은 모두 참이다. 이 책을 다 읽고 나면 왜 그런지 알게 될 것이다.
	 이 책은 대규모 클라우드 기반 서비스, 즉 수백만 또는 수십억의 사용자들을 위한 인터넷 기반
서비스의 구축과 운영에 관한 책이다. 해당 기법들을 채용하는 기업들이 매일같이 늘어난다는 점에
서, 이 책은 모든 사람을 위한 책이라 할 수 있다.
	 이 책의 대상 독자는 시스템 관리자(system administrator)들과 그들을 관리하는 관리자
(manager)들이다. 독자가 컴퓨터 과학에 대한 배경 지식을 갖추고 있다고 가정하지는 않지만,
UNIX/Linux 시스템 관리와 네트워킹에 관한 경험이 있고 운영 시스템 개념들에 익숙하다고 가정
한다.
서문
8
	 이 책의 초점은 클라우드 기반 서비스의 사용법이 아니라, 그런 클라우드를 구성하는 서비스들
을 구축하고 운영하는 방법이다.
	 클라우드 서비스는 항상 사용 가능해야(가용성) 하고 빨라야(속도) 하며 안전해야(보안) 한
다. 클라우드 규모에서 이들을 모두 달성하는 것은 공학적으로 대단히 어려운 일이다. 따라서 클라
우드 규모 서비스는 전형적인 전사적(enterprise) 서비스와는 다른 방식으로 설계해야 한다. 가용
성이 중요한 것은, 인터넷이 24×7(하루 24시간, 주 7일)로 열려 있고 모든 시간대에 사용자들이
있기 때문이다. 속도가 중요한 것은, 서비스가 느리면 사용자들이 짜증을 내며, 결과적으로 더 빠른
경쟁 서비스에 밀려나기 때문이다. 보안이 중요한 것은, 우리는 다른 사람들의 자료를 관리하며, 따
라서 다른 사람의 자료를 보호할 의무가 있기(법적으로나 도의적으로나) 때문이다.
	 이러한 요구사항들은 서로 맞물려 있다. 가용성의 정의로 볼 때, 안전하지 않은 사이트는 가용
성이 없는 것이다. 그리고 빠르지 않은 사이트는 가용성이 충분치 않은 것이다. 속도의 정의로 볼
때, 가동이 중단된 사이트는 빠르지 않은 것이다.
	 클라우드 규모 서비스들 중 일반 사용자들의 눈에 가장 잘 띄는 것은 웹사이트이다. 그러나 인
터넷으로 접근하긴 하지만 웹 브라우저로 접근하는 것이 아닌, 보이지 않는 인터넷 기반 서비스들의
거대한 생태계가 존재한다. 예를 들어 스마트폰 앱들은 API 호출을 통해서 클라우드 기반 서비스들
에 접근한다.
	 이 책의 나머지 부분에서는 ‘클라우드 컴퓨팅’ 대신 ‘분산 컴퓨팅’이라는 용어를 주로 사용한다.
클라우드 컴퓨팅cloud computing은 사용하는 사람마다 그 뜻이 다른 마케팅 용어이다. 반면 분산 컴퓨
팅(distributed computing)은 한 대가 아니라 여러 대의 기계들을 이용해서 응용 프로그램과
서비스를 제공하는 구조(architecture)를 뜻한다.
	 이 책은 시기를 타지 않는 근본적인 원리(principle)들과 관행(practice; 실천 사항)들을 다
룬다. 따라서 특정 제품이나 기술을 사용하라고 독자에게 권하지는 않는다. 가장 인기 있는 다섯 가
지 웹 서버나 NoSQL 데이터베이스, 지속적 구축 시스템을 독자에게 추천할 수도 있겠지만, 그러
면 출판되는 순간 이 책은 구식이 되어버린다. 대신 이 책은 그런 제품이나 시스템을 선택할 때 독자
9
가 반드시 살펴봐야 할 품질들을 논의한다. 이러한 접근방식은 시간이 흘러서 기술들이 변해도 독자
가 이 업계에서 여전히 준비된 전문가로 남게 하기 위한 것이다. 물론 요점을 설명하는 과정에서 특
정 기술이나 제품들을 언급하긴 하지만, 그런 제품들과 서비스들을 우리 저자들이 특별히 보증하는
것은 아니다.
	 이 책은 종종 이상주의적인 태도를 취하는데, 이는 의도적인 것이다. 이 책은 독자가 추구해야
할 더 나은 상황을 제시한다. 이 책에서 우리 저자들은 기준을 높이고자 했다.
이 책의 구성
이 책은 크게 두 부(part)로 이루어져 있다. 제1부는 ‘설계’이고 제2부는 ‘운영’이다.
	 제1부는 크고 복잡한 클라우드 기반 분산 컴퓨팅 시스템의 설계에 관한 우리 저자들의 생각을
담고 있다. ‘소개’ 장 다음의 제1장부터는 최하층에서부터 최상층까지 설계의 각 요소를 차례로 살펴
본다. 이 책에서는 분산 시스템을 컴퓨터 과학자가 아니라 시스템 관리자의 관점에서 다룬다. 시스
템을 운영하려면 그 내부를 반드시 이해해야 한다.
	 제2부는 그러한 시스템을 운영하는 방법을 설명한다. 처음 몇 장(chapter)들은 가장 근본적인
주제들을 다루고, 그 이후의 장들은 좀 더 내밀한 기술적 활동들을 파고든다. 마지막 장들에서는 그
때까지 다룬 모든 것을 통합하는 고수준 계획 수립과 전략을 논의한다.
	 제2부 다음에는 운영팀을 위한 평가 체계, 분산 시스템의 역사(저자들의 의견이 강하게 반영
된), 본문에 언급된 문서 양식들, 추천 읽을거리, 참고문헌들이 나온다.
	 특히, 이번 책에서 운영팀 평가 체계를 소개하게 되어서 아주 기쁘다. 이 체계는 독자가 스스로
자신의 운영을 평가하고 개선점을 찾는 데 사용할 수 있는 일련의 질문들로 이루어져 있다. 평가 질
문들과 ‘징표’ 제안들은 부록 A에 있다. 제20장은 이 체계의 활용 설명서에 해당한다.
10
제1부 설계: 시스템 만들기
제1장 분산 세계에서의 설계· ······· 분산 시스템 설계의 개요.
제2장 운영을 위한 설계············· 매끄러운 운영을 위해 소프트웨어가 갖추어야 할 기능들.
제3장 서비스 플랫폼 선택··········· 물리적 기계와 가상 기계, 사설 클라우드와 공용 클라우드.
제4장 응용 프로그램 구조··········· 웹 응용 프로그램이나 기타 응용 프로그램의 작성을 위한
구축 요소들.
제5장 규모 변화를 위한 설계 패턴···· 서비스의 성장을 위한 구축 요소들.
제6장 탄력성을 위한 설계 패턴······· 고장을 견디는 시스템의 작성을 위한 구축 요소들.
제2부 운영: 시스템 실행하기
제7장 분산 세계에서의 운영········· 분산 시스템 실행의 개요.
제8장 개발운영 문화· ·············· 개발운영 문화 및 그 역사와 관행의 소개.
제9장 서비스 인도: 구축 국면········ 실무 운영을 위해 서비스를 구축하고 준비하는 방법.
제10장 서비스 인도: 배치 국면······· 서비스를 검사, 승인하고 실무에 투입하는 방법.
제11장 활성 서비스의 업그레이드· ··· 가동 중단 없이 서비스를 업그레이드하는 방법.
제12장 자동화· ··················· 도구 작성과 운영 작업 자동화.
제13장 설계 문서·················· 설계와 의도를 문서를 통해 의사소통하는 방법.
제14장 호출대기··················· 예외 상황 다루기.
제15장 재난 대비·················· 계획 수립과 연습을 통해서 시스템을 더 강하게 만드는
방법.
제16장 감시의 기초················ 감시 기술과 전략.
제17장 감시 시스템의 구조와 관행· ·· 감시의 구성요소와 관행.
제18장 수용량 계획 수립············ 추가 자원이 필요해지기 전에 자원들을 마련하고 제공하
는 방법.
11
제19장 KPI 작성·················· 측정과 반영을 통한 과학적인 행동 추동.
제20장 탁월한 운영················ 지속적인 개선을 위한 전략들.
맺음말· ·························· 남은 이야기 몇 가지.
제3부 부록
부록 A: 평가
부록 B: 분산 컴퓨팅과 클라우드의 기원과 미래
부록 C: 규모 변화 관련 용어 및 개념
부록 D: 문서 양식과 예제 문서
부록 E: 읽을거리 추천
참고문헌
찾아보기
감사의 글
이 분야의 공동체와 전 세계의 여러 사람의 도움과 피드백이 없었다면 이 책이 나오지 못했을
것이다. 이 책은 ‘개발운영(DevOps)’ 공동체의 후한 도움을 받았다.
	 우선, 우리 저자들의 배우자들과 가족들에 감사하고자 한다. 이 책은 Christine Polk,
Mike Chalup, 그리고 Eliot과 Joanna Lear의 사랑과 인내 덕분에 탄생했다.
	 만일 우리가 더 멀리 내다볼 수 있었다면, 그것은 우리가 거인들의 어깨에 서 있었기 때
문이다. 몇몇 장들은 특정 인물들의 지원과 조언에 크게 의존했다. 제1장은 John Looney와
Cian Synnott, 제5장은 Marty Abbott과 Michael Fisher, 제9장은 Damon Edwards, Alex
Honor, Jez Humble, 제15장은 John Allspaw, 제15장은 Brent Chapman, 제16장과 제17
장은 Caskey Dickson과 Theo Schlossnagle, 제18장은 Arun Kejariwal과 Bruce Yan, 제
19장은 Benjamin Treynor Sloss, 제20장과 부록 A는 Geoff Halprin의 도움을 받았다.
12
	 ‘전략적인’ 영감과 격려를 제공한 Gene Kim에게 감사한다. 수십 명의 사람이 우리를 도
왔다. 실제 사례들을 제공한 사람들도 있고 책 전체 또는 일부를 검토해준 사람들도 있다. 그
모든 분께 감사하는 유일하게 공평한 방법은 그분들의 이름을 알파벳순으로 나열하고, 혹시
라도 빼먹었다면 사과하는 것이리라. Thomas Baden, George Beech, Raymond Blum,
Kyle Brandt, Mark Burgess, Nick Craver, Geoff Dalgas, Robert P. J. Day, Patrick
Debois, Bill Duane, Paul Evans, David Fullerton, Tom Geller, Peter Grace,
Elizabeth Hamon Reid, Jim Hickstein, Zachary Hueras, Matt Jones, Jennifer Joy,
Jimmy Kaplowitz, Daniel V. Klein, Steven Levine, Cory Lueninghoener, Shane
Madden, Jim Maurer, Stephen McHenry, Dinah McNutt, Scott Hazen Mueller,
Steve Murawski, Mohit Muthanna, Lenny Rachitsky, Amy Rich, Adele Shakal,
Bart Silverstrim, Josh Simon, Joel Spolsky, Desiree Sylvester, Win Treese, Todd
Underwood, Nicole Forsgren Velasquez, Dave Zwieback에게 감사한다.
	 마지막으로, Addison-Wesley의 모든 분께 감사한다. 특히 Addison-Wesley와 작업
하는 내내 우리를 올바른 방향으로 이끌어준 Debra Williams Cauley와 초안들을 편집하고
훨씬 나은 원고를 만들어 준 Michael Thurston, 우리가 당황해서 허둥댈 때에도 침착하게 상
황을 조정하고 우리를 보조한 Kim Boedigheimer, LaTeX 마법사 Lori Hughes, 제품 관리
자 Julie Nahil, 조판자 Jill Hobbs, 그리고 우리의 모든 특별한 요청을 참아준 John Fuller와
Mark Taub에게 감사한다.
13
CONTENTS
지은이·옮긴이 소개 ..........................................................................................................
4
옮긴이의 말 ......................................................................................................................
6
서문 .................................................................................................................................
7
소개	 33
사업 목표 .........................................................................................................................
33
이상적인 시스템 구조 .........................................................................................................
34
이상적인 릴리스 과정 .........................................................................................................
35
이상적인 운영 ...................................................................................................................
38
PART I 설계: 시스템 만들기
CHAPTER 1 분산 세계에서의 설계	 43
1.1 대규모 시스템의 가시성 ...............................................................................................
45
1.2 단순함의 중요성 .........................................................................................................
46
1.3 조합 .........................................................................................................................
46
1.3.1 부하 분산기와 다수의 뒷단 복제본들 ....................................................................
47
1.3.2 서버와 다수의 뒷단들 ........................................................................................
49
1.3.3 서버 트리 ........................................................................................................
52
1.4 상태의 분산 ...............................................................................................................
54
1.5 CAP 원리 .................................................................................................................
57
1.5.1 일관성 ............................................................................................................
58
1.5.2 가용성 ............................................................................................................
58
1.5.3 분리 저항 ........................................................................................................
59
14
CONTENTS
1.6 느슨히 결합된 시스템 ..................................................................................................
62
1.7 속도 .........................................................................................................................
64
1.8 요약 .........................................................................................................................
68
연습문제 ..........................................................................................................................
69
CHAPTER 2 운영을 위한 설계	 71
2.1 운영상의 요구사항 ......................................................................................................
72
2.1.1 구성 ...............................................................................................................
73
2.1.2 시동과 종료 .....................................................................................................
75
2.1.3 대기열 배출 .....................................................................................................
76
2.1.4 소프트웨어 업그레이드 ......................................................................................
77
2.1.5 백업과 복구 .....................................................................................................
77
2.1.6 중복성(redundancy) ........................................................................................
78
2.1.7 복제된 데이터베이스 .........................................................................................
79
2.1.8 즉석 교체 ........................................................................................................
80
2.1.9 개별 기능 켜고 끄기 ..........................................................................................
81
2.1.10 우아한 강등 ...................................................................................................
82
2.1.11 접근 제어와 속도 제한 .....................................................................................
83
2.1.12 자료 도입 제어 ...............................................................................................
84
2.1.13 감시 .............................................................................................................
85
2.1.14 감사 .............................................................................................................
85
2.1.15 디버깅 계장(instrumentation) ..........................................................................
86
2.1.16 예외 수집 ......................................................................................................
87
2.1.17 운영을 위한 문서화 .........................................................................................
88
2.2 운영을 위한 설계의 구현 ...............................................................................................
89
2.2.1 기능을 처음부터 구축 ........................................................................................
89
15
2.2.2 필요성을 발견한 후 개발팀에 요청 .......................................................................
89
2.2.3 운영팀이 기능을 직접 작성 .................................................................................
91
2.2.4 서드파티 공급업체와 협력 ..................................................................................
92
2.3 모형의 개선 ................................................................................................................
93
2.4 요약 .........................................................................................................................
94
연습문제 ..........................................................................................................................
94
CHAPTER 3 서비스 플랫폼 선택	 95
3.1 서비스 추상 수준 ........................................................................................................
96
3.1.1 IaaS(서비스로서의 기반구조) ..............................................................................
97
3.1.2 PaaS(서비스로서의 플랫폼) ...............................................................................
99
3.1.3 SaaS(서비스로서의 소프트웨어) .......................................................................
100
3.2 기계의 종류 .............................................................................................................
102
3.2.1 물리적 기계 ...................................................................................................
102
3.2.2 가상 기계 ......................................................................................................
102
3.2.3 컨테이너 .......................................................................................................
106
3.3 자원 공유 수준 .........................................................................................................
109
3.3.1 법규 준수 ......................................................................................................
110
3.3.2 개인정보 .......................................................................................................
110
3.3.3 비용 .............................................................................................................
111
3.3.4 제어권 ...........................................................................................................
111
3.4 코로케이션 ..............................................................................................................
112
3.5 선택 전략 ................................................................................................................
113
3.6 요약 .......................................................................................................................
116
연습문제 ........................................................................................................................
117
16
CONTENTS
CHAPTER 4 응용 프로그램 구조	 119
4.1 단일 기계 웹 서버 .....................................................................................................
120
4.2 3층 웹 서비스 ..........................................................................................................
122
4.2.1 부하 분산기의 종류 .........................................................................................
123
4.2.2 부하 분산 방법 ...............................................................................................
125
4.2.3 공유 상태가 있는 부하 분산 ..............................................................................
126
4.2.4 사용자 신원 ...................................................................................................
127
4.2.5 규모 변화 ......................................................................................................
128
4.3 4층 웹 서비스 ..........................................................................................................
129
4.3.1 앞단 ..............................................................................................................
130
4.3.2 응용 프로그램 서버 .........................................................................................
132
4.3.3 구성 옵션 ......................................................................................................
132
4.4 역 프록시 서비스 ......................................................................................................
133
4.5 클라우드 규모 서비스 ................................................................................................
134
4.5.1 전역 부하 분산기 ............................................................................................
135
4.5.2 전역 부하 분산 방법 ........................................................................................
135
4.5.3 사용자 고유 자료에 근거한 전역 부하 분산 .........................................................
136
4.5.4 내부 기간망 ...................................................................................................
136
4.6 메시지 버스 구조 ......................................................................................................
139
4.6.1 메시지 버스의 설계 .........................................................................................
141
4.6.2 메시지 버스의 신뢰성 ......................................................................................
141
4.6.3 예제 1: 링크 단축 사이트 .................................................................................
142
4.6.4 예제 2: 직원 인적자원 자료 갱신 .......................................................................
145
4.7 서비스 지향 구조 ......................................................................................................
146
4.7.1 유연성 ..........................................................................................................
146
4.7.2 지원 .............................................................................................................
147
4.7.3 모범 관행 ......................................................................................................
147
17
4.8 요약 .......................................................................................................................
148
연습문제 ........................................................................................................................
149
CHAPTER 5 규모 변화를 위한 설계 패턴	 151
5.1 일반 전략 ................................................................................................................
152
5.1.1 병목 식별 ......................................................................................................
153
5.1.2 구성요소들의 재공학 .......................................................................................
153
5.1.3 결과의 측정 ...................................................................................................
154
5.1.4 능동적 대처 ...................................................................................................
154
5.2 규모 확장 ................................................................................................................
155
5.3 AKF 규모 변화 입방체 ...............................................................................................
156
5.3.1 x축: 수평 중복 ................................................................................................
157
5.3.2 y축: 기능 또는 서비스별 분할 ...........................................................................
158
5.3.3 z축: 조회 지향적 분할 ......................................................................................
160
5.3.4 조합 .............................................................................................................
162
5.4 캐싱 .......................................................................................................................
162
5.4.1 캐시 효율성 ...................................................................................................
163
5.4.2 캐시 위치 ......................................................................................................
164
5.4.3 캐시 영속성 ...................................................................................................
165
5.4.4 캐시 교체 알고리즘 .........................................................................................
166
5.4.5 캐시 항목 무효화 ............................................................................................
167
5.4.6 캐시 크기 ......................................................................................................
168
5.5 자료 파편화 .............................................................................................................
169
5.6 스레드 적용 .............................................................................................................
172
5.7 대기열 적용 .............................................................................................................
173
5.7.1 장점 .............................................................................................................
174
5.7.2 변형들 ..........................................................................................................
174
18
5.8 CDN ......................................................................................................................
175
5.9 요약 .......................................................................................................................
177
연습문제 ........................................................................................................................
178
CHAPTER 6 탄력성을 위한 설계 패턴	 179
6.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성 ..............................................................
181
6.2 모든 것은 결국에는 고장난다 ......................................................................................
182
6.2.1 분산 시스템의 MTBF ......................................................................................
182
6.2.2 전통적인 접근방식 ..........................................................................................
183
6.2.3 분산 컴퓨팅 접근방식 ......................................................................................
184
6.3 예비 수용량을 이용한 탄력성 확보 ...............................................................................
185
6.3.1 예비 수용량 결정 ............................................................................................
187
6.3.2 부하 공유 대 즉석 예비 ....................................................................................
188
6.4 장애 영역 ................................................................................................................
189
6.5 소프트웨어 장애 .......................................................................................................
190
6.5.1 소프트웨어 충돌 .............................................................................................
190
6.5.2 소프트웨어 멈춤 .............................................................................................
192
6.5.3 죽음의 질의 ...................................................................................................
193
6.6 물리적 장애 .............................................................................................................
194
6.6.1 부품과 구성요소 .............................................................................................
195
6.6.2 기계 ..............................................................................................................
198
6.6.3 부하 분산기 ...................................................................................................
198
6.6.4 랙 .................................................................................................................
201
6.6.5 데이터센터 .....................................................................................................
202
6.7 과부하 장애 .............................................................................................................
203
6.7.1 소통량 급증 ...................................................................................................
203
CONTENTS
19
6.7.2 DoS 및 DDoS 공격 .......................................................................................
205
6.7.3 스크레이핑 공격 .............................................................................................
206
6.8 사람의 실수 .............................................................................................................
207
6.9 요약 .......................................................................................................................
208
연습문제 ........................................................................................................................
209
PART II 운영: 시스템 실행하기
CHAPTER 7 분산 세계에서의 운영	 213
7.1 분산 시스템의 운영 ....................................................................................................
215
7.1.1 SRE팀 대 전통적인 전사적 IT 부서 ...................................................................
215
7.1.2 변화 대 안정성 ...............................................................................................
216
7.1.3 SRE의 정의 ...................................................................................................
218
7.1.4 대규모 운영 ...................................................................................................
220
7.2 서비스의 수명 주기 ....................................................................................................
223
7.2.1 서비스 개시 ...................................................................................................
225
7.2.2 서비스 폐지 ...................................................................................................
228
7.3 운영팀을 위한 조직화 전략 ..........................................................................................
229
7.3.1 팀원의 업무일 구분 .........................................................................................
232
7.3.2 기타 전략들 ....................................................................................................
235
7.4 가상 사무실 .............................................................................................................
237
7.4.1 의사소통 메커니즘 ..........................................................................................
237
7.4.2 의사소통 방침 ................................................................................................
238
7.5 요약 .......................................................................................................................
238
연습문제 ........................................................................................................................
240
20
CHAPTER 8 개발운영 문화	 241
8.1 개발운영이란? .........................................................................................................
242
8.1.1 전통적인 접근방식 ..........................................................................................
244
8.1.2 개발운영 접근방식 ..........................................................................................
246
8.2 개발운영의 3대 방법 ..................................................................................................
247
8.2.1 제1 방법: 작업흐름 .........................................................................................
247
8.2.2 제2 방법: 피드백 개선 ......................................................................................
248
8.2.3 제3 방법: 끊임없는 실험과 학습 ........................................................................
249
8.2.4 작은 일괄 단위들이 더 낫다 ..............................................................................
250
8.2.5 전략의 적용 ...................................................................................................
251
8.3 개발운영의 역사 ........................................................................................................
252
8.3.1 진화 .............................................................................................................
252
8.3.2 사이트 신뢰성 공학 .........................................................................................
253
8.4 개발운영의 가치와 원리 .............................................................................................
254
8.4.1 관계 .............................................................................................................
254
8.4.2 통합 .............................................................................................................
254
8.4.3 자동화 ..........................................................................................................
255
8.4.4 지속적인 개선 .................................................................................................
255
8.4.5 흔한 비기술적 개발운영 관행 ............................................................................
256
8.4.6 개발운영의 일반적인 기술적 관행들 ...................................................................
257
8.4.7 릴리스 공학과 관련된 개발운영의 관행들 ...........................................................
259
8.5 개발운영으로의 전환 ..................................................................................................
260
8.5.1 첫걸음 ..........................................................................................................
260
8.5.2 사업 수준에서의 개발운영 ................................................................................
261
8.6 애자일과 지속적 인도 ................................................................................................
262
8.6.1 애자일이란 무엇인가? .....................................................................................
262
8.6.2 지속적 인도란 무엇인가? .................................................................................
263
CONTENTS
21
8.7 요약 .......................................................................................................................
266
연습문제 ........................................................................................................................
267
CHAPTER 9 서비스 인도: 구축 국면	 269
9.1 서비스 인도 전략 ......................................................................................................
271
9.1.1 패턴: 현대적인 개발운영 방법론 ........................................................................
271
9.1.2 반反패턴(안티패턴): 폭포수 방법론 .....................................................................
273
9.2 품질의 선순환 ..........................................................................................................
274
9.3 구축 국면의 단계들 ....................................................................................................
277
9.3.1 개발 .............................................................................................................
277
9.3.2 커밋 .............................................................................................................
278
9.3.3 구축 .............................................................................................................
279
9.3.4 패키지 ..........................................................................................................
280
9.3.5 등록 ..............................................................................................................
280
9.4 구축 콘솔 ................................................................................................................
281
9.5 지속적 통합 ..............................................................................................................
282
9.6 작업 이전 인터페이스로서의 패키지 .............................................................................
284
9.7 요약 .......................................................................................................................
285
연습문제 ........................................................................................................................
286
CHAPTER 10 서비스 인도: 배치 국면	 287
10.1 배치 국면의 단계들 .................................................................................................
288
10.1.1 승격 ............................................................................................................
288
10.1.2 설치 ............................................................................................................
289
10.1.3 구성 ............................................................................................................
289
22
10.2 검사와 승인 ...........................................................................................................
291
10.2.1 검사 ...........................................................................................................
292
10.2.2 승인 ...........................................................................................................
294
10.3 운영 콘솔 ..............................................................................................................
294
10.4 기반구조 자동화 전략 ..............................................................................................
295
10.4.1 물리적 기계 마련 ..........................................................................................
295
10.4.2 가상 기계 마련 .............................................................................................
296
10.4.3 운영 체제와 서비스 설치 ................................................................................
296
10.5 지속적 인도 ...........................................................................................................
299
10.6 코드로서의 기반구조 ...............................................................................................
300
10.7 기타 플랫폼 서비스들 ..............................................................................................
300
10.8 요약 .....................................................................................................................
301
연습문제 ........................................................................................................................
302
CHAPTER 11 활성 서비스의 업그레이드	 303
11.1 서비스 중단 후 업그레이드 .......................................................................................
303
11.2 순회식 업그레이드 ..................................................................................................
304
11.3 카나리아 공정 ........................................................................................................
306
11.4 국면별 롤아웃 ........................................................................................................
308
11.5 비례식 차단 ...........................................................................................................
309
11.6 청록 배치 ..............................................................................................................
309
11.7 기능 켜고 끄기 .......................................................................................................
310
11.8 활성 스키마 변경 ....................................................................................................
313
11.9 활성 코드 변경 .......................................................................................................
316
11.10 지속적 배치 .........................................................................................................
317
11.11 코드 투입 실패의 처리 ...........................................................................................
320
CONTENTS
23
11.12 릴리스 원자성 ......................................................................................................
321
11.13 요약 ..................................................................................................................
322
연습문제 ........................................................................................................................
323
CHAPTER 12 자동화	 325
12.1 자동화 접근방식들 ..................................................................................................
326
12.1.1 잔여물 원리를 따르는 자동화 접근방식 .............................................................
327
12.1.2 보충 원리를 따르는 자동화 접근방식 ................................................................
329
12.1.3 상보성 원리를 따르는 자동화 접근방식 .............................................................
330
12.1.4 시스템 관리자를 위한 자동화 ..........................................................................
331
12.1.5 경험에서 얻은 교훈들 ....................................................................................
332
12.2 도구 구축 대 자동화 ................................................................................................
333
12.2.1 예: 자동차 제조 .............................................................................................
334
12.2.2 예: 컴퓨터 구성 .............................................................................................
334
12.2.3 예: 계정 생성 ................................................................................................
335
12.2.4 도구는 좋다, 자동화는 더 좋다 ........................................................................
335
12.3 자동화의 목표 ........................................................................................................
336
12.4 자동화 작성 ...........................................................................................................
339
12.4.1 자동화 작성 시간 마련 ...................................................................................
340
12.4.2 고역 줄이기 .................................................................................................
341
12.4.3 첫 번째 자동화 대상 선정 ...............................................................................
342
12.5 자동화 방법 ...........................................................................................................
342
12.6 언어 도구들 ...........................................................................................................
343
12.6.1 셸 스크립팅 언어 ..........................................................................................
343
12.6.2 스크립팅 언어 ..............................................................................................
344
12.6.3 컴파일식 언어 ..............................................................................................
345
12.6.4 구성 관리용 언어 ..........................................................................................
346
24
12.7 소프트웨어 공학 도구들과 기법들 ..............................................................................
348
12.7.1 문제점 추적 시스템 .......................................................................................
349
12.7.2 버전 관리 시스템 ..........................................................................................
351
12.7.3 소프트웨어 패키지 작성 .................................................................................
352
12.7.4 스타일 지침 .................................................................................................
353
12.7.5 TDD ...........................................................................................................
355
12.7.6 코드 검토 ....................................................................................................
356
12.7.7 딱 필요한 만큼의 코드를 작성 .........................................................................
357
12.8 다중 입주 시스템 ....................................................................................................
358
12.9 요약 .....................................................................................................................
360
연습문제 ........................................................................................................................
361
CHAPTER 13 설계 문서	 363
13.1 설계 문서의 개요 ....................................................................................................
363
13.1.1 변경과 그 논거의 문서화 ................................................................................
364
13.1.2 과거 의사결정들을 보관하는 문서화 .................................................................
365
13.2 설계 문서의 구성 ....................................................................................................
365
13.3 문서 양식 ..............................................................................................................
368
13.4 문서 보관소 ...........................................................................................................
369
13.5 설계 문서 검토의 작업흐름 .......................................................................................
369
13.5.1 검토자와 승인자 ...........................................................................................
370
13.5.2 결재 ............................................................................................................
371
13.6 설계 문서 표준의 채용 .............................................................................................
372
13.7 요약 .....................................................................................................................
373
연습문제 ........................................................................................................................
374
CONTENTS
25
CHAPTER 14 호출대기	 375
14.1 호출대기의 설계 .....................................................................................................
376
14.1.1 SLA로 시작 .................................................................................................
376
14.1.2 호출대기 명단 ..............................................................................................
377
14.1.3 당직대기 .....................................................................................................
378
14.1.4 호출대기 일정 설계 .......................................................................................
379
14.1.5 호출대기 일정표 ...........................................................................................
382
14.1.6 호출대기의 빈도 ...........................................................................................
383
14.1.7 통지의 종류 .................................................................................................
383
14.1.8 근무 시간 외 유지보수 조정 ............................................................................
386
14.2 호출대기 수행 ........................................................................................................
386
14.2.1 교대근무 전 임무 ..........................................................................................
386
14.2.2 정규 호출대기 임무 .......................................................................................
387
14.2.3 경보 처리 임무 .............................................................................................
388
14.2.4 관찰, 지향, 결정, 실행: OODA 루프 .................................................................
390
14.2.5 호출대기 각본 ..............................................................................................
390
14.2.6 서드파티 상부 보고 .......................................................................................
391
14.2.7 교대근무 마감 임무 .......................................................................................
392
14.3 다음 호출대기 교대근무까지의 작업 ...........................................................................
393
14.3.1 장기적 해결책 ..............................................................................................
393
14.3.2 사후 분석 ....................................................................................................
394
14.4 주기적인 경보 검토 .................................................................................................
398
14.5 경보 줄이기 ...........................................................................................................
399
14.6 요약 .....................................................................................................................
400
연습문제 ........................................................................................................................
401
26
CHAPTER 15 재난 대비	 403
15.1 사고방식 ...............................................................................................................
404
15.1.1 반취약 시스템 ..............................................................................................
405
15.1.2 위험 줄이기 .................................................................................................
406
15.2 개인 훈련: 불운의 바퀴 ............................................................................................
408
15.3 팀 훈련: 소방 훈련 ..................................................................................................
410
15.3.1 서비스 검사 ..................................................................................................
411
15.3.2 무작위 검사 ..................................................................................................
412
15.4 조직 훈련: 게임 데이/DiRT .......................................................................................
413
15.4.1 첫걸음 ........................................................................................................
414
15.4.2 범위 확장 ....................................................................................................
415
15.4.3 계획과 구현 .................................................................................................
416
15.4.4 DiRT 검사의 예 ............................................................................................
419
15.5 사고지휘체계 .........................................................................................................
423
15.5.1 작동 방식: 공공 안전 분야 ..............................................................................
424
15.5.2 작동 방식: IT 운영 분야 .................................................................................
425
15.5.3 사고 대응 활동 계획서 ...................................................................................
426
15.5.4 모범 관행 ....................................................................................................
427
15.5.5 사고지휘체계의 예 ........................................................................................
428
15.6 요약 .....................................................................................................................
429
연습문제 ........................................................................................................................
430
CONTENTS
27
CHAPTER 16 감시의 기초	 431
16.1 개요 .....................................................................................................................
432
16.1.1 감시의 용도 ..................................................................................................
434
16.1.2 서비스 관리 .................................................................................................
434
16.2 감시 정보의 소비자 .................................................................................................
435
16.3 감시 대상 ..............................................................................................................
437
16.4 감시 자료의 유지 ....................................................................................................
439
16.5 메타 감시 ..............................................................................................................
441
16.6 로그 .....................................................................................................................
442
16.6.1 접근방식 .....................................................................................................
443
16.6.2 타임스탬프 ..................................................................................................
443
16.7 요약 .....................................................................................................................
444
연습문제 ........................................................................................................................
445
CHAPTER 17 감시 시스템의 구조와 관행	 447
17.1 감지 및 측정 ..........................................................................................................
448
17.1.1 블랙박스 측정 대 화이트박스 측정 ...................................................................
449
17.1.2 직접 측정 대 합성 측정 ..................................................................................
450
17.1.3 속도 측정 대 능력 측정 ..................................................................................
450
17.1.4 계측치 측정 대 카운터 측정 ............................................................................
451
17.2 수집 .....................................................................................................................
453
17.2.1 밀기 대 당기기 .............................................................................................
453
17.2.2 프로토콜 선택 ..............................................................................................
454
17.2.3 서버 자체 측정 대 에이전트 대 주기적 점검 ......................................................
455
17.2.4 중앙 수집기 대 지역별 수집기 .........................................................................
456
28
17.3 분석 및 계산 ..........................................................................................................
456
17.4 경보 및 상부 보고 구성요소 ......................................................................................
458
17.4.1 경보, 상부 보고, 확인 .....................................................................................
459
17.4.2 소음 대 금지 .................................................................................................
460
17.5 시각화 ..................................................................................................................
462
17.5.1 백분위수 .....................................................................................................
463
17.5.2 스택 랭킹 ....................................................................................................
465
17.5.3 히스토그램 ..................................................................................................
466
17.6 저장 .....................................................................................................................
467
17.7 구성 .....................................................................................................................
468
17.8 요약 .....................................................................................................................
469
연습문제 ........................................................................................................................
470
CHAPTER 18 수용량 계획 수립	 471
18.1 표준 수용량 계획 수립 .............................................................................................
472
18.1.1 현재 사용량 .................................................................................................
474
18.1.2 정상 성장 ....................................................................................................
476
18.1.3 계획된 성장 .................................................................................................
476
18.1.4 여유분 ........................................................................................................
476
18.1.5 탄력성 ........................................................................................................
477
18.1.6 시간표 ........................................................................................................
478
18.2 고급 수용량 계획 수립 .............................................................................................
478
18.2.1 1차 자원의 식별 ...........................................................................................
479
18.2.2 수용량 한계 파악 ..........................................................................................
480
18.2.3 핵심 동인 식별 .............................................................................................
481
18.2.4 참여도 측정 .................................................................................................
482
CONTENTS
29
18.2.5 자료의 분석 ..................................................................................................
482
18.2.6 핵심지표 감시 ..............................................................................................
489
18.2.7 수용량 계획 수립의 위임 ................................................................................
490
18.3 자원 회귀 ..............................................................................................................
490
18.4 새 서비스 개시 .......................................................................................................
491
18.5 조달 시간 줄이기 ....................................................................................................
494
18.6 요약 .....................................................................................................................
495
연습문제 ........................................................................................................................
496
CHAPTER 19 KPI 작성	 497
19.1 KPI란 무엇인가? ....................................................................................................
498
19.2 KPI 작성 ..............................................................................................................
500
19.2.1 단계 1: 이상적 상황을 상상한다 ......................................................................
500
19.2.2 단계 2: 이상과의 거리를 재는 방법을 고안한다 ..................................................
501
19.2.3 단계 3: 사람들의 행동 변화를 예상한다 ............................................................
501
19.2.4 단계 4: 수정하고 선택한다 .............................................................................
502
19.2.5 단계 5: KPI를 배치한다 .................................................................................
503
19.3 KPI의 예: 가상 기계 할당 .........................................................................................
504
19.3.1 첫 번째 패스 ................................................................................................
505
19.3.2 두 번째 패스 ................................................................................................
506
19.3.3 KPI의 평가 ..................................................................................................
508
19.4 사례 연구: 구글 오류 예산 .........................................................................................
509
19.4.1 목표 대립 ....................................................................................................
509
19.4.2 통합된 목표 ..................................................................................................
510
19.4.3 모두의 이익 .................................................................................................
510
19.5 요약 .....................................................................................................................
512
연습문제 ........................................................................................................................
513
30
CHAPTER 20 탁월한 운영	 515
20.1 탁월한 운영은 어떤 모습인가? ..................................................................................
516
20.2 훌륭함을 측정하는 방법 ...........................................................................................
517
20.3 평가 방법론 ...........................................................................................................
518
20.3.1 주요 운영 책무 .............................................................................................
518
20.3.2 평가 수준 ....................................................................................................
520
20.3.3 평가를 위한 질문과 징표 ................................................................................
522
20.4 서비스 평가 ...........................................................................................................
523
20.4.1 평가 대상 식별 .............................................................................................
523
20.4.2 각 서비스의 평가 ..........................................................................................
524
20.4.3 서비스 간 결과 비교 ......................................................................................
525
20.4.4 결과에 기초한 행동 .......................................................................................
526
20.4.5 평가와 프로젝트 계획 수립의 빈도 ...................................................................
526
20.5 조직 차원의 평가 ....................................................................................................
527
20.6 개선 수준 ..............................................................................................................
528
20.7 평가 체계의 도입과 적용 ..........................................................................................
529
20.8 요약 .....................................................................................................................
530
연습문제 ........................................................................................................................
531
맺음말	 533
CONTENTS
31
PART III 부록
APPENDIX A 평가	 539
A.1 정규 과제 ................................................................................................................
540
A.2 비상 대응 ................................................................................................................
543
A.3 감시와 측정 .............................................................................................................
545
A.4 수용량 계획 수립 ......................................................................................................
548
A.5 변경 관리 ................................................................................................................
550
A.6 신제품 도입 및 제거 ..................................................................................................
552
A.7 서비스 배치 및 폐지 ..................................................................................................
554
A.8 성능과 효율성 ..........................................................................................................
556
A.9 서비스 인도: 구축 국면 ...............................................................................................
559
A.10 서비스 인도: 배치 국면 ............................................................................................
561
A.11 고역 줄이기 ...........................................................................................................
563
A.12 재난 대비 ..............................................................................................................
565
APPENDIX B 분산 컴퓨팅과 클라우드의 기원과 미래	 569
B.1 웹 이전 시대(1985–1994) .......................................................................................
570
B.2 제1차 웹 시대: 닷컴 거품(1995–2000) .......................................................................
573
B.3 닷컴 붕괴 시대(2000–2003) ....................................................................................
579
B.4 제2차 웹 시대(2003–2010) .....................................................................................
585
B.5 클라우드 컴퓨팅 시대(2010~현재) .............................................................................
590
B.6 결론 .......................................................................................................................
594
연습문제 ........................................................................................................................
595
32
APPENDIX C 규모 변화 관련 용어 및 개념	 597
C.1 상수, 선형, 지수 규모 변화 .........................................................................................
597
C.2 대문자 O 표기법 ......................................................................................................
598
C.3 대문자 O 표기법의 한계 ............................................................................................
601
APPENDIX D 문서 양식과 예제 문서	 605
D.1 설계 문서 양식 ........................................................................................................
605
D.2 설계 문서의 예 ........................................................................................................
606
D.3 사후 분석 보고서 양식 ...............................................................................................
608
APPENDIX E 읽을거리 추천 	
611
참고문헌 ........................................................................................................................
615
찾아보기 ........................................................................................................................
626
CONTENTS
331.3 조합
이 책의 목표는 독자가 가능한 최상의 클라우드 규모 서비스를 구축하고 운영하는 데 도움을
주는 것이다. 그럼 우리가 만들고자 하는 이상적인 환경을 살펴보자.
사업 목표
간단히 말해서, 우리가 추구하는 이상적인 환경의 최종 결과는 사업 목표(business
objective; 또는 경영목표, 업무 목표)들을 만족하는 것이다. 좀 따분하게 들리겠지만, 사실
회사 전체가 같은 목표에 전념해서 함께 일한다는 것은 상당히 신나는 일이다.
	 이를 달성하려면 반드시 사업 목표들을 파악한 후 그로부터 되짚어 나아가서 이상적인 시
스템(우리가 구축해야 하는)에 도달해야 한다.
	 사업 목표들을 만족하려면 우선 그 목표들이 무엇인지 알아야 하고, 그것들을 달성하는 계
획을 세워야 하고, 그 계획의 수행을 방해하는 걸림돌들을 처리해야 한다.
	 잘 정의된 사업 목표들은 측정 가능하며, 그런 측정치들을 자동화된 방식으로 수집할 수
있다. 그로부터 현황판(dashboard)을 자동으로 생성하면 모두가 진행(progress) 정도를
파악할 수 있게 된다. 이러한 투명성은 신뢰도를 높여준다.
다음은 사업 목표의 예 몇 가지이다.
소개
34 1장 분산 세계에서의 설계
●● 	우리 제품을 웹사이트를 통해서 판매한다.
●● 	서비스를 99.99%의 시간으로 제공한다.
●● 	월 x 백만 건의 구매를 처리하고, 매달 10% 성장한다.
●● 	한 주에 두 번 새 기능을 도입한다.
●● 	주요 버그들을 24시간 안에 잡는다.
이상적인 환경에서 사업팀과 기술팀은 자신의 사업 목표와 프로젝트 목표를 예측 가능하고 신
뢰성 있게 달성한다. 이 덕분에, 사업팀과 기술팀 둘 다 상대방 팀이 그들의 향후 목표들을 달
성하리라고 믿는다. 그 결과로 팀들은 더 나은 계획을 세우게 된다. 팀들은 외부 의존성들이 실
패하지* 않을 것이라는 믿음이 있기 때문에 좀 더 공격적인 계획을 세울 수 있다. 그러면 더욱
공격적인 계획 수립이 가능해진다. 이러한 접근방식은 회사 전체를 관통하며 진행을 가속화하
는 상향 나선을 만들어냄으로써 모두에게 이득이 된다.
이상적인 시스템 구조
이상적인 서비스는 견고한 시스템 구조(architecture) 위에 구축된다. 그러한 구조는 오늘날
의 서비스들이 요구하는 조건들을 만족하며, 시스템이 유명해져서 더 많은 소통량을 받게 될
때 시스템의 규모를 성장시키는 방법이 명확하다. 이상적인 구조는 장애(failure; 고장)에 대
한 탄력성(resiliency; 회복력)을 갖추고 있다. 그런 시스템은 장애를 예기치 못한 예외로 취
급하지 않는다. 대신 하드웨어 및 소프트웨어의 장애를 정보기술(information technology,
IT )의 물리학(physics )의 일부로 포용한다. 그 결과로 구조에는 장애를 우회하는 중복
(redundancy) 및 회복 기능들이 포함된다. 개별 구성요소는 실패해도 시스템은 살아남는다.
	 서비스를 구성하는 각 하위 시스템은 그 자체로 서비스이다. 모든 하위 시스템은 응용 프
로그래밍 인터페이스(API)를 통해서 프로그래밍할 수 있다. 따라서 전체 시스템은 여러 하
위 서비스가 서로 연결된 하나의 생태계이다. 이를 서비스 지향 구조(service-oriented
architecture, SOA)라고 부른다. 이러한 시스템들은 모두 동일한 바탕 프로토콜을 통해서 통
신하므로, 시스템들의 관리 방식에 통일성이 존재한다. 각 하위 서비스는 다른 서비스들과 느
*  옮긴이_ 이런 문맥에서 어떤 요소가 ‘실패한다’는 것은 소프트웨어 오작동이나 하드웨어 고장 등의 장애가 발생해서 그 요소가 자신에게
주어진 임무를 다하지 못하는 것을 말한다.
351.3 조합
슨하게 결합되어 있기 때문에, 각자 독립적으로 확장, 업그레이드, 대체할 수 있다.
	 기반구조(infrastructure )의 구성은 전자적인 파일 형태로 서술한다. 이러한 전자
적 서술을 IT 자동화 시스템이 읽어서, 사람의 개입 없이 자동으로 실무 환경(production
environment)을 구축한다. 이러한 자동화 덕분에 전체 기반구조를 다른 장소에서 재생성하
는 것이 가능하다. 소프트웨어 기술자들은 이러한 자동화를 이용해서 개인적으로 사용할 소규
모 버전의 환경을 생성한다. 비슷하게, 품질 및 검사 기술자들은 자동화를 이용해서 시스템 검
사를 위한 환경을 생성한다.
	 이러한 ‘코드로서의 기반구조(infrastructure as code)’는 그것을 실행하는 기계(컴퓨터)
가 물리적 기계이든 가상 기계(virtual machine)이든, 그리고 그런 기계들이 데이터센터에
있든, 우리가 직접 운영하든, 또는 클라우드 제공자가 제공한 환경에 상주하든 달성 가능하다.
가상 기계들을 사용하는 경우에는 자명한 API를 통해서 새 기계를 손쉽게 배치할 수 있다. 물
리적 기계를 사용한다고 해도, 단순한 쇳덩어리에서 실제로 작동하는 시스템으로의 전체 흐름
을 자동화할 수 있다. 우리가 생각하는 이상적인 세계에서는 자동화 덕분에 물리적 기계와 가
상 기계의 조합을 이용해서 환경을 생성하는 것이 가능하다. 개발자들이 가상 기계들로부터 환
경을 구축할 수도 있다. 실무 환경은 물리적 기계와 가상 기계의 혼합으로 구성될 수 있다. 예
기치 않게 일시적으로 용량(수용량) 추가가 필요한 경우에는 실무 환경을 일정 기간 하나 이상
의 클라우드 제공업체들로 확장해야 할 수도 있다.
이상적인 릴리스 과정
이상적인 환경에서는 개발 단계에서 운영(operation) 단계로 코드가 매끄럽게 흘러간다.
전통적인 환경(지금 말하는 이상적인 환경이 아닌)에서 그러한 흐름은 다음과 같은 모습이다.
1.	개발자가 코드를 저장소(repository)에 체크인한다.
2.	검사 기술자(test engineer)는 코드에 대해 일단의 검사들을 적용한다.
3.	코드가 모든 검사를 통과했으면, 릴리스 기술자(release engineer)는 소프트웨어의 배
치(deploy)에 쓰일 패키지를 구축한다. 대부분의 파일은 소스 코드 저장소에서 가져오지
만, 일부 파일은 그래픽 부서나 문서화 작성자 같은 다른 출처에서 가져와야 할 수도 있다.
4.	검사 환경을 생성한다. 단, ‘코드로서의 기반구조’ 모형은 적용하지 않는다(그러려면 몇 주
가 걸릴 수 있다).
36 1장 분산 세계에서의 설계
5.	패키지를 검사 환경에 배치한다.
6.	검사 기술자가 추가 검사들을 수행한다. 여기서 초점은 하위 시스템들 사이의 상호작용
이다.
7.	모든 검사가 성공적이면 코드를 실무 환경에 투입한다.
8.	시스템 관리자는 시스템을 업그레이드하되, 장애가 발생하는지 살펴본다.
9.	장애가 발생했다면 소프트웨어를 이전 상태로 되돌린다(roll back).
이러한 단계들을 사람이 직접 수행하는 것은 아주 위험하다. 작업에 적합한 사람이 있어야 하
고, 단계들을 매번 같은 방식으로 수행해야 하며, 그 과정에서 실수가 없어야 하고, 모든 과제
를 제시간 안에 끝내야 한다는 조건들이 모두 만족되어야 하기 때문이다.
	 물론 실수, 버그, 오류는 항상 발생한다. 그 결과로 결함(defect)들이 과정의 다음 단계로
전파된다. 실수가 발견되면 진행의 흐름을 되돌려서, 이전 단계를 담당한 팀원들에게 문제를
알려서 바로잡게 해야 한다. 이는 진행이 멈추어서 시간이 낭비됨을 뜻한다.
	 위험이 큰 과정에 대한 사람들의 전형적인 반응은 그런 과정을 최대한 피하는 것이다. 그
래서 릴리스를 최대한 줄이려는 유혹에 빠진다. 그 결과로 ‘거대규모 릴리스(mega-release)’
를 한 해에 몇 번만 내놓는 현상이 나타난다.
	 그러나 그런 거대규모 릴리스는 수많은 변화를 한꺼번에 적용하는 것이므로 사실은 위험
이 더 커진다. 수천 개의 변경 사항들을 동시에 릴리스했을 때 첫 시도에서 모든 것이 제대로
되리라고 확신할 수 있는가? 그럴 수는 없다. 이 때문에 변화를 더욱 꺼리고 두려워하게 된다.
결국에는 변화가 거의 불가능해져서 더 이상의 혁신이 일어나지 않는다.
	 우리가 말하는 이상적인 환경에서는 그렇지 않다.
	 이상적인 환경에서는 소프트웨어 구축과 검사, 릴리스, 배치 과정의 모든 수동 단계들을
자동화를 이용해서 제거한다. 자동화는 검사들을 정확하고 일관되게 수행하기 때문에 결함이
다음 단계로 전파되는 일이 없다. 그 결과로 진행의 흐름은 항상 단방향, 즉 전진 방향이다.
	 이상적인 환경에서는 거대규모 릴리스 대신 미세규모 릴리스(micro-release)를 만든다.
작은 변화들로 이루어진 배치를 자주 수행함으로써 위험도를 낮춘다. 실제로, 하루에 배치를
100번 할 수도 있다.
1.	개발자가 코드를 체크인하면 시스템은 그 사실을 감지하고 일련의 자동화된 검사들을 실행
한다. 그 검사들은 기본적인 코드 기능성을 확인한다.
2.	그 검사들이 통과되었다면 패키지 구축 과정이 실행된다. 이 역시 완전히 자동화된 방식으
371.3 조합
로 진행된다.
3.	새 패키지가 성공적으로 만들어지면 검사 환경 생성 과정이 시작된다. 예전에는 검사 환경
을 구축하려면 한 주 내내 케이블을 연결하고 기계를 설치하는 수고가 필요했다. 그러나 코
드로서의 기반구조 모형에서는 전체 환경을 사람의 개입 없이 빠르게 생성할 수 있다.
4.	검사 환경이 완성되면 일련의 자동화된 검사들을 실행한다.
5.	검사들이 성공적으로 끝나면 새 패키지를 실무 환경으로 롤아웃roll-out한다. 이 롤아웃 역시
자동으로 진행되지만, 체계적이고 조심스럽게 진행된다.
6.	일부 시스템을 먼저 업그레이드해서 장애가 발생하는지 본다. 검사 환경은 실무 환경을 구
축하는 데 쓰이는 것과 동일한 자동화를 통해서 구축되므로, 두 환경 사이의 차이는 아주
적어야 한다.
7.	장애가 없다면 전체 실무 환경이 업그레이드될 때까지 새 패키지를 점점 더 많은 시스템에
롤아웃한다.
이상적인 환경에서는 모든 문제가 실무 환경에 도달하기 전에 검출된다. 즉, 롤아웃은 검사의
형태가 아니다. 실무 환경으로의 롤아웃 도중의 장애는 본질적으로 제거된다. 그런데도 장애가
발생한다면, 이를 아주 심각한 문제로 간주해서 새 릴리스를 실무 환경에 투입하는 것을 멈추
고 먼저 근본 원인을 분석한다. 분석 후에는 이후 이러한 장애를 검출하고 재발을 방지하는 데
필요한 검사들을 추가한다. 이러한 과정 덕분에 시스템은 시간이 지남에 따라 더욱 강해진다.
	 이러한 자동화 덕분에 기존의 릴리스 공학, 품질 보증, 배치 관련 인력은 기존 회사에서 자
신이 주로 하던 일을 사실상 인식하지 못하게 된다. 수많은 시간의 수고로운 노동(‘고역’)이 사
라지며, 따라서 패키지 작성 시스템과 소프트웨어 품질을 개선하고 배치 공정을 다듬는 데 더
많은 시간을 투여할 수 있다. 다른 말로 하면, 사람들은 자신의 작업 자체를 수행하는 것보다
그 작업이 수행되는 방식을 개선하는 데 더 많은 시간을 사용한다.
	 서드파티third-party 소프트웨어에도 비슷한 과정이 적용된다. 환경의 모든 시스템을 회사 내
부에서 직접 만들지는 않으며, 해당 소스 코드가 주어지지 않는 경우도 많다. 서드파티 서비스
와 제품의 배치 역시 릴리스와 검사, 배치와 비슷한 패턴을 따른다. 단, 이 제품들과 서비스들
은 외부에서 개발되므로, 약간 다른 과정이 필요하다. 새 릴리스가 나오는 횟수가 상대적으로
적으며, 각각의 새 릴리스에 포함되는 기능을 우리가 원하는 만큼 제어할 수가 없다. 일반적으
로 이런 구성요소들을 검사할 때에는 기능(feature), 호환성, 통합(integration)과 관련된 검
사들이 필요하다.
38 1장 분산 세계에서의 설계
이상적인 운영
일단 코드가 실무 환경에 배치되고 나면 운영 목표(operational objective)들이 중요해진다.
운영 감시(monitoring)를 위해, 소프트웨어에 계장(instrumentation)을 위한 코드를 포함
해 둔다. 계장 코드는 내부 API로 요청된 트랜잭션들뿐만 아니라 외부 사용자가 요청한 트랜잭
션들을 처리하는 데 걸린 시간도 수집한다. 또한 메모리 사용량 같은 다른 지표들도 감시한다.
이러한 자료 수집 덕분에, 운영상의 결정을 추측이나 운, 희망이 아니라 자료에 근거해서 내릴
수 있다. 수집된 자료를 수년간 축적하므로, 향후의 수용량 증가 필요성을 예측하는 데 활용할
수도 있다.
	 측정(measurement)은 내부 문제점을 검출하는 데 쓰인다. 특히 측정은 내부 문제점이
아직 작을 때, 즉 사용자에게 보이는 운영 중단(outage)으로까지 번지기 전에 잡아내는 데 유
효하다. 이상적인 운영에서는 문제점들을 운영 중단으로 이어지기 전에 바로잡는다. 실제 운영
중단은 드물며, 아주 세심하게 조사해야 한다. 문제점이 검출되면 그런 문제점을 식별, 처리해
서 빠르게 해결할 수 있게 하는 과정이 진행된다.
	 자동화된 시스템은 문제점을 검출해서 호출대기(oncall) 중인 사람에게 경보(alert)를
보낸다. 호출대기 일정은 순번제(rotation)로 정하되, 각 교대근무(shift)* 기간에 평균적으
로 감당할 수 있는 개수의 경보를 받을 수 있도록 시간을 조율한다. 임의의 주어진 시간에서 주
된 호출대기자는 한 사람이며, 그 사람이 경보를 가장 먼저 받게 된다. 그 사람이 제때 응답하
지 않으면 두 번째 사람에게 경보가 전달된다. 호출대기 일정은 사람들이 휴가, 여가 활동, 개
인 시간을 계획할 수 있을 정도로 충분히 미리 준비한다.
	 발생할 수 있는 모든 경보를 처리하는 방법을 알려주는 ‘각본(playbook; 대응 매뉴얼)’이
존재한다. 각 종류의 경보마다 문제점과 그것이 업무에 미치는 영향 및 해결책을 기술적으로
서술해서 문서화한다. 각본은 계속 개선된다. 호출대기자는 각본에 따라 문제점을 바로잡는다.
각본의 해결책이 충분치 않음이 드러나면 잘 정의된 상부 보고(escalation) 절차가 진행된다.
보통의 경우 그 절차에 의해 관련 하위 시스템의 호출대기자에게 문제점이 전달된다. 개발자들
도 호출대기 순번에 참여하므로, 자신들이 구축하는 시스템의 운영상의 애로사항을 이해하게
된다.
*  옮긴이_ 이런 문맥에서 shift는 두 가지 의미로 쓰인다. 예를 들어 하루를 8시간 단위로 나누어서 3교대로 근무한다고 할 때, 여덟 시간
이 지나서 근무자를 교대하는 것을 shift라고 부를 뿐만 아니라 여덟 시간의 근무 기간 또는 그 기간에 하는 일 자체도 shift라고 부른다.
이 번역서에서는 전자를 근무 교대, 후자를 ‘교대근무’로 옮기고, 둘의 구분이 중요하지 않을 때에는 간단히 ‘교대’라고도 한다.
391.3 조합
	 모든 장애에는 그에 해당하는 대응책(countermeasure)이 존재한다. 수동적으로 발동
(활성화)되는 대응책도 있고 자동으로 발동되는 대응책도 있다. 자주 발동되는 대응책들은 항
상 자동화된다. 감시 시스템은 남용(overuse)을 검출한다. 남용은 더 큰 문제점을 나타낼 수
있기 때문이다. 장애율(고장률)을 줄이고 대응책들을 개선하기 위해, 감시 시스템은 기술자들
이 사용하는 내부 지표 자료를 수집한다.
	 대응책이 덜 자주 발동될수록, 그것이 다음번에 필요할 때 잘 작동하리라는 확신 역시 낮
아진다. 그래서, 덜 자주 발동되는 대응책들에 대해서는 주기적으로, 그리고 자동으로 해당 장
애를 일으켜서 대응책을 발동시켜본다. 비상시 어떻게 행동해야 할지를 모두가 숙지하도록 학
생들에게 화재 대피 훈련을 시키는 것과 마찬가지로, 이상적인 운영 환경에서는 운영에 관한
‘화재 대피 훈련’을 실시한다. 그러면 팀은 대응책 구현에 관한 경험을 쌓게 되며, 대응책이 잘
작동하리라는 확신이 높아진다. 데이터베이스 장애 조치(failover) 과정이 예기치 않은 의
존성 때문에 작동하지 않을 수도 있는데, 그런 문제점을 일요일 새벽 4시의 운영 중단 상황에
서 알게 되는 것보다는 월요일 아침 10시의 현장 훈련에서 알게 되는 것이 낫다. 이 역시 반복
(repetition)을 꺼리기보다는 증가함으로써 위험을 줄인다는 원칙에 해당한다. 반복을 통해
서 뭔가에 능숙해지는 것을 전문 용어로 ‘연습(practice)’이라고 부른다. 우리는 “연습이 완벽
함을 만든다”는 점을 굳게 믿는다.*
	 이상적인 환경은 규모 확장(scaling up)이 자동으로 일어난다. 수용량(capacity)이 더
필요해지면 내부 또는 외부 클라우드 제공자로부터 추가 수용량이 도입된다. 단순히 RAM이나
디스크, CPU를 더 투입하는 것보다 구조를 재정립하는 것이 더 나은 해결책일 수도 있는데,
그런 시점이 되었는지는 현황판을 보고 판단할 수 있다.
	 규모 축소(scaling down ) 역시 자동적이다. 시스템에 과부하가 걸렸거나 퇴행한
(degraded) 경우에도 “503—Service Unavailable” 오류로 사용자를 외면하는 일은 결코
없다. 대신 시스템은 자동으로 자원을 덜 사용하는 알고리즘으로 전환한다. 대역폭이 소진되
면 서비스의 저대역폭 버전이 작동해서 그래픽을 덜 표시하거나 좀 더 단순화된 사용자 인터페
이스를 표시한다. 데이터베이스가 깨져도, 서비스의 읽기 전용 버전을 통해서 사용자 대부분을
만족시킨다.
*  옮긴이_ practice는 문맥에 따라 연습, 실천, 관행 등 여러 한국어 단어에 대응된다. 이 번역어에서 주로 쓰이는 것은 ‘관행’이다. 관행
과 연습은 동전의 양면과 같다. 뭔가에 능숙해지기 위해 여러 번 되풀이해서 수행하는 것을 연습이라고 한다면, 자주 되풀이하다보니 능숙
해진 뭔가가 바로 관행이다. 안타깝게도 일상에서(특히 신문 기사에서) 관행은 부정적인 의미로 쓰이는 경우가 많지만, 이 책에서 말하는
관행은 중립적이다. 단지 나쁜 관행과 좋은 관행이 있을 뿐이다. 일상에서 관행이 긍정적인 의미로 쓰이는 경우로 ‘모범 관행’이 있는데, 이
는 최고의 관행(best practice)에 해당한다.
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기

More Related Content

Viewers also liked

Facilidad para hacer negocios Cade 2010
Facilidad para hacer negocios Cade 2010Facilidad para hacer negocios Cade 2010
Facilidad para hacer negocios Cade 2010
IPAE
 
Фирмана презентация - ORM.BG
Фирмана презентация - ORM.BGФирмана презентация - ORM.BG
Фирмана презентация - ORM.BG
Kalin Vasilev
 

Viewers also liked (17)

Green chemistry
Green chemistryGreen chemistry
Green chemistry
 
Turkey is a New Kind Of Silicon Valley
Turkey is a New Kind Of Silicon ValleyTurkey is a New Kind Of Silicon Valley
Turkey is a New Kind Of Silicon Valley
 
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsTag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
 
3. 精心建造會幕 (2)
3. 精心建造會幕 (2)3. 精心建造會幕 (2)
3. 精心建造會幕 (2)
 
Bannery a PPC vs. video a social media (případová studie)
Bannery a PPC vs. video a social media (případová studie)Bannery a PPC vs. video a social media (případová studie)
Bannery a PPC vs. video a social media (případová studie)
 
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
 
Spelling Quiz ( Commonly Misspelled English Words)
Spelling Quiz ( Commonly Misspelled English Words)Spelling Quiz ( Commonly Misspelled English Words)
Spelling Quiz ( Commonly Misspelled English Words)
 
Croissance durable : les bénéfices de l'économie circulaire pour la filière b...
Croissance durable : les bénéfices de l'économie circulaire pour la filière b...Croissance durable : les bénéfices de l'économie circulaire pour la filière b...
Croissance durable : les bénéfices de l'économie circulaire pour la filière b...
 
Aseemearth
AseemearthAseemearth
Aseemearth
 
理性的设计 最新修订版 西乔
理性的设计 最新修订版 西乔理性的设计 最新修订版 西乔
理性的设计 最新修订版 西乔
 
Facilidad para hacer negocios Cade 2010
Facilidad para hacer negocios Cade 2010Facilidad para hacer negocios Cade 2010
Facilidad para hacer negocios Cade 2010
 
Making the Web Searchable - Keynote ICWE 2015
Making the Web Searchable - Keynote ICWE 2015Making the Web Searchable - Keynote ICWE 2015
Making the Web Searchable - Keynote ICWE 2015
 
गोष्टी सांगेन युक्तीच्या चार
गोष्टी सांगेन युक्तीच्या चारगोष्टी सांगेन युक्तीच्या चार
गोष्टी सांगेन युक्तीच्या चार
 
Sosiale medier i departementene
Sosiale medier i departementeneSosiale medier i departementene
Sosiale medier i departementene
 
Ukrainian Olympic champions
Ukrainian Olympic championsUkrainian Olympic champions
Ukrainian Olympic champions
 
আই লাভ ইউতে বাড়ে সুখ!!
আই লাভ ইউতে বাড়ে সুখ!!আই লাভ ইউতে বাড়ে সুখ!!
আই লাভ ইউতে বাড়ে সুখ!!
 
Фирмана презентация - ORM.BG
Фирмана презентация - ORM.BGФирмана презентация - ORM.BG
Фирмана презентация - ORM.BG
 

Similar to 『클라우드 시스템을 관리하는 기술』 - 맛보기

『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 

Similar to 『클라우드 시스템을 관리하는 기술』 - 맛보기 (20)

『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론
 
Agile sw development 101
Agile sw development 101Agile sw development 101
Agile sw development 101
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기
 
DB툴 선택시 고려사항 top10
DB툴 선택시 고려사항 top10DB툴 선택시 고려사항 top10
DB툴 선택시 고려사항 top10
 
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
Enterprise Knowledge Management And Emerging Technologies
Enterprise Knowledge Management And Emerging TechnologiesEnterprise Knowledge Management And Emerging Technologies
Enterprise Knowledge Management And Emerging Technologies
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
 
월간 리드잇(beta) 2018년 10월호
월간 리드잇(beta) 2018년 10월호월간 리드잇(beta) 2018년 10월호
월간 리드잇(beta) 2018년 10월호
 
하루에 1시간을 벌 수 있는 10가지 방법
하루에 1시간을 벌 수 있는 10가지 방법하루에 1시간을 벌 수 있는 10가지 방법
하루에 1시간을 벌 수 있는 10가지 방법
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
 
소프트웨어 공학의 사실과 오해
소프트웨어 공학의 사실과 오해소프트웨어 공학의 사실과 오해
소프트웨어 공학의 사실과 오해
 
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
 

More from 복연 이

『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기
복연 이
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
복연 이
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
복연 이
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
복연 이
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
복연 이
 

More from 복연 이 (20)

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
 
어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
 
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
 
『안드로이드 시큐리티 인터널』 - 미리보기
『안드로이드 시큐리티 인터널』 - 미리보기『안드로이드 시큐리티 인터널』 - 미리보기
『안드로이드 시큐리티 인터널』 - 미리보기
 
『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기
 

『클라우드 시스템을 관리하는 기술』 - 맛보기

  • 1.
  • 2.
  • 3.
  • 4. 클라우드 시스템을 관리하는 기술 : 클라우드 관리자가 알아야 할 웹 규모 분산 시스템 설계와 운영 초판발행 2016년 02월 25일 지은이 토머스 리몬첼리, 스트래터 체일럽, 크리스티나 호건 / 옮긴이 류광 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-261-8 93000 총괄 전태호 / 책임편집 김창수 / 기획 이복연 디자인 표지 강은영, 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 서은옥, 변지영 / 제작 박성우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr THE PRACTICE OF CLOUD SYSTEM ADMINISTRATION: DESIGNING AND OPERATING LARGE DISTRIBUTED SYSTEM, VOLUME 2 by THOMAS A. LIMONCELLI, STRATA R. CHALUP, CHRISTINA J. HOGAN. Authorized translation from the English language edition, entitled THE PRACTICE OF CLOUD SYSTEM ADMINISTRATION: DESIGNING AND OPERATING LARGE DISTRIBUTED SYSTEM, VOLUME 2, 1st edition by THOMAS A. LIMONCELLI, STRATA R. CHALUP, CHRISTINA J. HOGAN, ISBN 978-0321943187, published by Pearson Education, Inc, publishing as Addison-Wesley Professional, Copyright © 2015. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. KOREAN language edition published by HANBIT MEDIA INC., Copyright © 2016. 이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
  • 5.
  • 6. 4 지은이 토머스 A. 리몬첼리Thomas A. Limoncelli 국제적으로 유명한 저자이자 강연자, 시스템 관리자이다. Google NYC에서 7년간 재직하면서 구 글 블로그 검색(Google Blog Search)이나 Ganeti 같은 프로젝트들과 구글 내부의 여러 전사 적 IT 서비스들을 위한 SRE(사이트 신뢰성 기술자)로 일했다. 현재 그는 ServerFault.com과 StackOverflow.com의 모회사인 Stack Exchange, Inc.에서 SRE로 일하고 있다. 1987년 Drew University 재학 중에 처음으로 유급 시스템 관리 일을 한 그는 이후 AT&T/Lucent Bell Labs를 비롯한 크고 작은 회사들에서 일했다. 유명 저서로는 Time Management for System Administrators(O’Reilly)와 The Practice of System and Network Administration 제2판(Addison-Wesley) 등이 있다. 여가 시간에는 풀뿌리 운동(grassroots activism)에도 참여하는데, 그의 노력은 주(state)와 미국 전체 수준에서 알려졌다. 현재 미국 뉴저지에서 살고 있다. 지은이 스트래터 R. 체일럽Strata R. Chalup 수년간 복잡한 IT 프로젝트들을 지휘, 관리하면서 프로젝트 관리자에서 운영 책임자에 이르기까 지 다양한 역할을 수행했다. 스트래터는 팀 관리와 협동에 관한 수많은 글을 썼으며, 자신의 관리 능력을 BayLISA와 SAGE를 비롯한 여러 자원봉사 단체들에 적용했다. 1983년 그녀는 보스턴 의 MIT에서 VAX Ultrix와 Unisys UNIX의 관리를 시작했으며, 닷컴 시절에는 실리콘 밸리에서 iPlanet과 Palm 같은 고객사들을 위해 인터넷 서비스를 구축했다. 2007년에는 톰(토머스 A. 리 몬첼리)과 크리스티나와 함께 The Practice of System and Network Administration 제2판 (Addison-Wesley)을 저술했다. 취미로는 Arduino와 여러 2차원 CAD/CAM 장치들을 비롯 한 새로운 기술들을 배우는 것과 원예전문가(master gardener)가 되는 것을 들 수 있다. 현재 미 국 캘리포니아의 산타클라라 카운티에 살고 있다. 지은이·옮긴이 소개
  • 7. 5 지은이 크리스티나 J. 호건Christina J. Hogan 실리콘 밸리와 이탈리아, 스위스에서 20년 간 시스템 관리와 네트워크 관리를 수행한 경력이 있 다. 그녀는 작은 신생기업은 물론 중간 크기의 기술 기업과 다국적 대기업들에서 경험을 쌓았 다. 크리스티나는 수년간 보안 컨설턴트로 일했는데, 고객사로는 eBay, Silicon Graphics, SystemExperts 등이 있다. 2005년에 그녀와 톰은 저서 The Practice of System and Network Administration(Addison-Wesley)으로 SAGE Outstanding Achievement Award를 공동 수상했다. 그녀는 수학 학사 학위와 컴퓨터 과학 석사 학위, 항공공학 박사 학위를 가지고 있으며, 법학 과정도 졸업했다. 또한 그녀는 6년간 포뮬러 1 레이싱 팀에서 공기역학자로 일 했으며, 1988년 체스 올림피아드에 아일랜드 대표로 참가했다. 현재 스위스에서 살고 있다. 옮긴이 류광 옮긴이 류광은 1996년부터 활동해 온 프로그래밍 서적 전문 번역가로, Game Programming Gems 시리즈와 컴퓨터 프로그래밍의 예술(The Art of Computer Programming) 제1~4A권, UNIX 고급 프로그래밍(Advanced Programming in UNIX Environment) 제2판과 제3판, Effective Modern C++을 포함해 60여 권의 다양한 IT 전문서를 번역했다. 번역과 프로그래밍 외 에 소프트웨어 문서화에도 많은 관심이 있으며, 수많은 오픈소스 프로젝트들의 표준 문서 형식으로 쓰이는 DocBook의 국내 사용자 모임인 닥북 한국(http://docbook.kr)의 일원이다. 현재 번 역서 정보 사이트 occam’s Razor(http://occamsrazr.net)와 게임 개발 및 개발서 관련 사 이트 GpgStudy(http://www.gpgstudy.com)를 운영하고 있다.
  • 8. 6 C++의 창시자 비야네 스트롭스트룹Bjarne Stroustrup은 자신의 저서 Programming - Principles and Practice Using C++(번역서는 (C++로 배우는)프로그래밍의 원리와 실제, 류광 옮김)에서 “우리 문명은 소프트웨어를 바탕으로 돌아간다”라고 말했습니다. 현재 그러한 소프트웨어의 상당 부분은 최종 사용자와는 떨어져 있는 ‘구름’, 즉 클라우드 시스템 안에서 돌아가고 있으며, 점점 더 많은 소프트웨어와 자료가 점점 더 빨리 구름 안으로 이주할 것입니다. 그런 만큼 클라우드 시스템 을 개발하고 관리, 운영하는 사람은 단지 자신의 조직의 이익을 위해 일하는 사람이 아니라, 어쩌면 문명의 유지와 발전에 큰 몫을 담당하는 사람일 것입니다. 저자들도 아마 그런 자부심을 가지고 이 책을 저술했으리라 짐작합니다. 나중에 독자가 ‘맺음말(p.533)’을 그런 자부심과 자신감을 느끼면 서 읽을 수 있게 된다면 더 바랄 것이 없겠습니다. 독자가 본문을 거쳐서 맺음말에 무사히 도달하고 그 뒤의 부록들까지 충실하게 읽으려면 번역 품질에 문제가 없어야 할 텐데, 어떨지 모르겠습니다. 항상 그렇지만 번역과 교정을 마치고 옮긴이 의 말을 쓸 때에는 번역과 교정에 좀 더 많은 시간을 들일 수 있었다면 하는 아쉬움을 느낍니다. 특 히 이 책은 통상적인 소프트웨어 개발이나 프로그래밍 이외의 여러 분야(경영학, 산업공학, 공공안 전 등등)에서 쓰이는 용어들이 많이 등장해서 번역하기가 쉽지 않았습니다. 가능하면 해당 분야에 서 흔히 쓰이는 용어를 존중하되, 전체적인 어법과 잘 맞지 않거나 다른 분야의 용어와 충돌하는 등 그대로 가져다 쓰기가 좀 곤란할 때에는 기존 용어의 조어법을 참고해서 새로운 용어를 만들기도 했 습니다. 부연 설명이 필요한 경우에는 역주를 추가하기도 했지만 충분치는 않을 것입니다. 부족한 부분은 제 홈페이지 occam’s Razor(http://occamsrazr.net/)의 ‘번역서 정보’ 페이지에서 접근할 수 있는 이 책 페이지를 통해서 함께 논의했으면 합니다. 감사 인사로 옮긴이의 말을 마무리하겠습니다. 제게 번역을 맡겨 주신 최현우 님과 번역 및 교 정 과정을 매끄럽게 이끌어 주신 이복연 님 고맙습니다. 그리고 조판을 맡아주신 이경숙 님을 비롯 한, 출판 전과정에서 제가 미처 알지 못하는 여러 작업을 충실히 수행해서 이 책의 출판을 현실로 만 든 모든 관련자 분께 감사 인사 올립니다. 마지막으로, 최종 결과물만 봐서는 상상하기 힘든 황당한 오타와 오역을 수없이 잡아 준 아내 오현숙에게 감사와 사랑의 마음을 전합니다. _ 류광 옮긴이의 말
  • 9. 7 다음 중 참인 문장은 무엇인가? 1. 신뢰성이 아주 높은 시스템은 싸고 신뢰성 없는(unreliable) 구성요소들로 만들어진다. 2. 구글Google이 수십억의 사용자에 맞게 규모를 변화시키는 데 사용하는 기법들은 수백 명의 사용자를 감당하는 시스템의 규모 변화(scaling)에 사용할 수 있는 기법들과 동일한 패턴 을 따른다. 3. 어떤 절차가 위험할수록 그 절차를 자주 수행해야 한다. 4. 가장 중요한 소프트웨어 기능 중에는 사용자가 결코 보지 못하는 것들도 있다. 5. 무작위로 컴퓨터를 선택해서 전원을 꺼야 한다. 6. 6개월 이내에 공개될 페이스북Facebook의 모든 기능의 코드가 독자의 브라우저 안에 이미 들 어 있을 가능성이 크다. 7. 하루에 소프트웨어를 여러 번 갱신하는 데에는 사람의 노력이 거의 필요하지 않다. 8. 호출대기 중이라고 해서 반드시 스트레스를 받거나 일이 힘들어야 하는 것은 아니다. 9. 기계(컴퓨터)가 작동 중인지를 사람이 감시할 필요는 없다. 10. 실험과 증거가 관여하는 과학적 원리들을 이용해서 운영과 관리를 수행하는 것이 가능하다. 11. 구글은 좀비들이 쳐들어왔을 때의 대응 방안에 관한 예행연습을 수행한 적이 있다. 이 문장들은 모두 참이다. 이 책을 다 읽고 나면 왜 그런지 알게 될 것이다. 이 책은 대규모 클라우드 기반 서비스, 즉 수백만 또는 수십억의 사용자들을 위한 인터넷 기반 서비스의 구축과 운영에 관한 책이다. 해당 기법들을 채용하는 기업들이 매일같이 늘어난다는 점에 서, 이 책은 모든 사람을 위한 책이라 할 수 있다. 이 책의 대상 독자는 시스템 관리자(system administrator)들과 그들을 관리하는 관리자 (manager)들이다. 독자가 컴퓨터 과학에 대한 배경 지식을 갖추고 있다고 가정하지는 않지만, UNIX/Linux 시스템 관리와 네트워킹에 관한 경험이 있고 운영 시스템 개념들에 익숙하다고 가정 한다. 서문
  • 10. 8 이 책의 초점은 클라우드 기반 서비스의 사용법이 아니라, 그런 클라우드를 구성하는 서비스들 을 구축하고 운영하는 방법이다. 클라우드 서비스는 항상 사용 가능해야(가용성) 하고 빨라야(속도) 하며 안전해야(보안) 한 다. 클라우드 규모에서 이들을 모두 달성하는 것은 공학적으로 대단히 어려운 일이다. 따라서 클라 우드 규모 서비스는 전형적인 전사적(enterprise) 서비스와는 다른 방식으로 설계해야 한다. 가용 성이 중요한 것은, 인터넷이 24×7(하루 24시간, 주 7일)로 열려 있고 모든 시간대에 사용자들이 있기 때문이다. 속도가 중요한 것은, 서비스가 느리면 사용자들이 짜증을 내며, 결과적으로 더 빠른 경쟁 서비스에 밀려나기 때문이다. 보안이 중요한 것은, 우리는 다른 사람들의 자료를 관리하며, 따 라서 다른 사람의 자료를 보호할 의무가 있기(법적으로나 도의적으로나) 때문이다. 이러한 요구사항들은 서로 맞물려 있다. 가용성의 정의로 볼 때, 안전하지 않은 사이트는 가용 성이 없는 것이다. 그리고 빠르지 않은 사이트는 가용성이 충분치 않은 것이다. 속도의 정의로 볼 때, 가동이 중단된 사이트는 빠르지 않은 것이다. 클라우드 규모 서비스들 중 일반 사용자들의 눈에 가장 잘 띄는 것은 웹사이트이다. 그러나 인 터넷으로 접근하긴 하지만 웹 브라우저로 접근하는 것이 아닌, 보이지 않는 인터넷 기반 서비스들의 거대한 생태계가 존재한다. 예를 들어 스마트폰 앱들은 API 호출을 통해서 클라우드 기반 서비스들 에 접근한다. 이 책의 나머지 부분에서는 ‘클라우드 컴퓨팅’ 대신 ‘분산 컴퓨팅’이라는 용어를 주로 사용한다. 클라우드 컴퓨팅cloud computing은 사용하는 사람마다 그 뜻이 다른 마케팅 용어이다. 반면 분산 컴퓨 팅(distributed computing)은 한 대가 아니라 여러 대의 기계들을 이용해서 응용 프로그램과 서비스를 제공하는 구조(architecture)를 뜻한다. 이 책은 시기를 타지 않는 근본적인 원리(principle)들과 관행(practice; 실천 사항)들을 다 룬다. 따라서 특정 제품이나 기술을 사용하라고 독자에게 권하지는 않는다. 가장 인기 있는 다섯 가 지 웹 서버나 NoSQL 데이터베이스, 지속적 구축 시스템을 독자에게 추천할 수도 있겠지만, 그러 면 출판되는 순간 이 책은 구식이 되어버린다. 대신 이 책은 그런 제품이나 시스템을 선택할 때 독자
  • 11. 9 가 반드시 살펴봐야 할 품질들을 논의한다. 이러한 접근방식은 시간이 흘러서 기술들이 변해도 독자 가 이 업계에서 여전히 준비된 전문가로 남게 하기 위한 것이다. 물론 요점을 설명하는 과정에서 특 정 기술이나 제품들을 언급하긴 하지만, 그런 제품들과 서비스들을 우리 저자들이 특별히 보증하는 것은 아니다. 이 책은 종종 이상주의적인 태도를 취하는데, 이는 의도적인 것이다. 이 책은 독자가 추구해야 할 더 나은 상황을 제시한다. 이 책에서 우리 저자들은 기준을 높이고자 했다. 이 책의 구성 이 책은 크게 두 부(part)로 이루어져 있다. 제1부는 ‘설계’이고 제2부는 ‘운영’이다. 제1부는 크고 복잡한 클라우드 기반 분산 컴퓨팅 시스템의 설계에 관한 우리 저자들의 생각을 담고 있다. ‘소개’ 장 다음의 제1장부터는 최하층에서부터 최상층까지 설계의 각 요소를 차례로 살펴 본다. 이 책에서는 분산 시스템을 컴퓨터 과학자가 아니라 시스템 관리자의 관점에서 다룬다. 시스 템을 운영하려면 그 내부를 반드시 이해해야 한다. 제2부는 그러한 시스템을 운영하는 방법을 설명한다. 처음 몇 장(chapter)들은 가장 근본적인 주제들을 다루고, 그 이후의 장들은 좀 더 내밀한 기술적 활동들을 파고든다. 마지막 장들에서는 그 때까지 다룬 모든 것을 통합하는 고수준 계획 수립과 전략을 논의한다. 제2부 다음에는 운영팀을 위한 평가 체계, 분산 시스템의 역사(저자들의 의견이 강하게 반영 된), 본문에 언급된 문서 양식들, 추천 읽을거리, 참고문헌들이 나온다. 특히, 이번 책에서 운영팀 평가 체계를 소개하게 되어서 아주 기쁘다. 이 체계는 독자가 스스로 자신의 운영을 평가하고 개선점을 찾는 데 사용할 수 있는 일련의 질문들로 이루어져 있다. 평가 질 문들과 ‘징표’ 제안들은 부록 A에 있다. 제20장은 이 체계의 활용 설명서에 해당한다.
  • 12. 10 제1부 설계: 시스템 만들기 제1장 분산 세계에서의 설계· ······· 분산 시스템 설계의 개요. 제2장 운영을 위한 설계············· 매끄러운 운영을 위해 소프트웨어가 갖추어야 할 기능들. 제3장 서비스 플랫폼 선택··········· 물리적 기계와 가상 기계, 사설 클라우드와 공용 클라우드. 제4장 응용 프로그램 구조··········· 웹 응용 프로그램이나 기타 응용 프로그램의 작성을 위한 구축 요소들. 제5장 규모 변화를 위한 설계 패턴···· 서비스의 성장을 위한 구축 요소들. 제6장 탄력성을 위한 설계 패턴······· 고장을 견디는 시스템의 작성을 위한 구축 요소들. 제2부 운영: 시스템 실행하기 제7장 분산 세계에서의 운영········· 분산 시스템 실행의 개요. 제8장 개발운영 문화· ·············· 개발운영 문화 및 그 역사와 관행의 소개. 제9장 서비스 인도: 구축 국면········ 실무 운영을 위해 서비스를 구축하고 준비하는 방법. 제10장 서비스 인도: 배치 국면······· 서비스를 검사, 승인하고 실무에 투입하는 방법. 제11장 활성 서비스의 업그레이드· ··· 가동 중단 없이 서비스를 업그레이드하는 방법. 제12장 자동화· ··················· 도구 작성과 운영 작업 자동화. 제13장 설계 문서·················· 설계와 의도를 문서를 통해 의사소통하는 방법. 제14장 호출대기··················· 예외 상황 다루기. 제15장 재난 대비·················· 계획 수립과 연습을 통해서 시스템을 더 강하게 만드는 방법. 제16장 감시의 기초················ 감시 기술과 전략. 제17장 감시 시스템의 구조와 관행· ·· 감시의 구성요소와 관행. 제18장 수용량 계획 수립············ 추가 자원이 필요해지기 전에 자원들을 마련하고 제공하 는 방법.
  • 13. 11 제19장 KPI 작성·················· 측정과 반영을 통한 과학적인 행동 추동. 제20장 탁월한 운영················ 지속적인 개선을 위한 전략들. 맺음말· ·························· 남은 이야기 몇 가지. 제3부 부록 부록 A: 평가 부록 B: 분산 컴퓨팅과 클라우드의 기원과 미래 부록 C: 규모 변화 관련 용어 및 개념 부록 D: 문서 양식과 예제 문서 부록 E: 읽을거리 추천 참고문헌 찾아보기 감사의 글 이 분야의 공동체와 전 세계의 여러 사람의 도움과 피드백이 없었다면 이 책이 나오지 못했을 것이다. 이 책은 ‘개발운영(DevOps)’ 공동체의 후한 도움을 받았다. 우선, 우리 저자들의 배우자들과 가족들에 감사하고자 한다. 이 책은 Christine Polk, Mike Chalup, 그리고 Eliot과 Joanna Lear의 사랑과 인내 덕분에 탄생했다. 만일 우리가 더 멀리 내다볼 수 있었다면, 그것은 우리가 거인들의 어깨에 서 있었기 때 문이다. 몇몇 장들은 특정 인물들의 지원과 조언에 크게 의존했다. 제1장은 John Looney와 Cian Synnott, 제5장은 Marty Abbott과 Michael Fisher, 제9장은 Damon Edwards, Alex Honor, Jez Humble, 제15장은 John Allspaw, 제15장은 Brent Chapman, 제16장과 제17 장은 Caskey Dickson과 Theo Schlossnagle, 제18장은 Arun Kejariwal과 Bruce Yan, 제 19장은 Benjamin Treynor Sloss, 제20장과 부록 A는 Geoff Halprin의 도움을 받았다.
  • 14. 12 ‘전략적인’ 영감과 격려를 제공한 Gene Kim에게 감사한다. 수십 명의 사람이 우리를 도 왔다. 실제 사례들을 제공한 사람들도 있고 책 전체 또는 일부를 검토해준 사람들도 있다. 그 모든 분께 감사하는 유일하게 공평한 방법은 그분들의 이름을 알파벳순으로 나열하고, 혹시 라도 빼먹었다면 사과하는 것이리라. Thomas Baden, George Beech, Raymond Blum, Kyle Brandt, Mark Burgess, Nick Craver, Geoff Dalgas, Robert P. J. Day, Patrick Debois, Bill Duane, Paul Evans, David Fullerton, Tom Geller, Peter Grace, Elizabeth Hamon Reid, Jim Hickstein, Zachary Hueras, Matt Jones, Jennifer Joy, Jimmy Kaplowitz, Daniel V. Klein, Steven Levine, Cory Lueninghoener, Shane Madden, Jim Maurer, Stephen McHenry, Dinah McNutt, Scott Hazen Mueller, Steve Murawski, Mohit Muthanna, Lenny Rachitsky, Amy Rich, Adele Shakal, Bart Silverstrim, Josh Simon, Joel Spolsky, Desiree Sylvester, Win Treese, Todd Underwood, Nicole Forsgren Velasquez, Dave Zwieback에게 감사한다. 마지막으로, Addison-Wesley의 모든 분께 감사한다. 특히 Addison-Wesley와 작업 하는 내내 우리를 올바른 방향으로 이끌어준 Debra Williams Cauley와 초안들을 편집하고 훨씬 나은 원고를 만들어 준 Michael Thurston, 우리가 당황해서 허둥댈 때에도 침착하게 상 황을 조정하고 우리를 보조한 Kim Boedigheimer, LaTeX 마법사 Lori Hughes, 제품 관리 자 Julie Nahil, 조판자 Jill Hobbs, 그리고 우리의 모든 특별한 요청을 참아준 John Fuller와 Mark Taub에게 감사한다.
  • 15. 13 CONTENTS 지은이·옮긴이 소개 .......................................................................................................... 4 옮긴이의 말 ...................................................................................................................... 6 서문 ................................................................................................................................. 7 소개 33 사업 목표 ......................................................................................................................... 33 이상적인 시스템 구조 ......................................................................................................... 34 이상적인 릴리스 과정 ......................................................................................................... 35 이상적인 운영 ................................................................................................................... 38 PART I 설계: 시스템 만들기 CHAPTER 1 분산 세계에서의 설계 43 1.1 대규모 시스템의 가시성 ............................................................................................... 45 1.2 단순함의 중요성 ......................................................................................................... 46 1.3 조합 ......................................................................................................................... 46 1.3.1 부하 분산기와 다수의 뒷단 복제본들 .................................................................... 47 1.3.2 서버와 다수의 뒷단들 ........................................................................................ 49 1.3.3 서버 트리 ........................................................................................................ 52 1.4 상태의 분산 ............................................................................................................... 54 1.5 CAP 원리 ................................................................................................................. 57 1.5.1 일관성 ............................................................................................................ 58 1.5.2 가용성 ............................................................................................................ 58 1.5.3 분리 저항 ........................................................................................................ 59
  • 16. 14 CONTENTS 1.6 느슨히 결합된 시스템 .................................................................................................. 62 1.7 속도 ......................................................................................................................... 64 1.8 요약 ......................................................................................................................... 68 연습문제 .......................................................................................................................... 69 CHAPTER 2 운영을 위한 설계 71 2.1 운영상의 요구사항 ...................................................................................................... 72 2.1.1 구성 ............................................................................................................... 73 2.1.2 시동과 종료 ..................................................................................................... 75 2.1.3 대기열 배출 ..................................................................................................... 76 2.1.4 소프트웨어 업그레이드 ...................................................................................... 77 2.1.5 백업과 복구 ..................................................................................................... 77 2.1.6 중복성(redundancy) ........................................................................................ 78 2.1.7 복제된 데이터베이스 ......................................................................................... 79 2.1.8 즉석 교체 ........................................................................................................ 80 2.1.9 개별 기능 켜고 끄기 .......................................................................................... 81 2.1.10 우아한 강등 ................................................................................................... 82 2.1.11 접근 제어와 속도 제한 ..................................................................................... 83 2.1.12 자료 도입 제어 ............................................................................................... 84 2.1.13 감시 ............................................................................................................. 85 2.1.14 감사 ............................................................................................................. 85 2.1.15 디버깅 계장(instrumentation) .......................................................................... 86 2.1.16 예외 수집 ...................................................................................................... 87 2.1.17 운영을 위한 문서화 ......................................................................................... 88 2.2 운영을 위한 설계의 구현 ............................................................................................... 89 2.2.1 기능을 처음부터 구축 ........................................................................................ 89
  • 17. 15 2.2.2 필요성을 발견한 후 개발팀에 요청 ....................................................................... 89 2.2.3 운영팀이 기능을 직접 작성 ................................................................................. 91 2.2.4 서드파티 공급업체와 협력 .................................................................................. 92 2.3 모형의 개선 ................................................................................................................ 93 2.4 요약 ......................................................................................................................... 94 연습문제 .......................................................................................................................... 94 CHAPTER 3 서비스 플랫폼 선택 95 3.1 서비스 추상 수준 ........................................................................................................ 96 3.1.1 IaaS(서비스로서의 기반구조) .............................................................................. 97 3.1.2 PaaS(서비스로서의 플랫폼) ............................................................................... 99 3.1.3 SaaS(서비스로서의 소프트웨어) ....................................................................... 100 3.2 기계의 종류 ............................................................................................................. 102 3.2.1 물리적 기계 ................................................................................................... 102 3.2.2 가상 기계 ...................................................................................................... 102 3.2.3 컨테이너 ....................................................................................................... 106 3.3 자원 공유 수준 ......................................................................................................... 109 3.3.1 법규 준수 ...................................................................................................... 110 3.3.2 개인정보 ....................................................................................................... 110 3.3.3 비용 ............................................................................................................. 111 3.3.4 제어권 ........................................................................................................... 111 3.4 코로케이션 .............................................................................................................. 112 3.5 선택 전략 ................................................................................................................ 113 3.6 요약 ....................................................................................................................... 116 연습문제 ........................................................................................................................ 117
  • 18. 16 CONTENTS CHAPTER 4 응용 프로그램 구조 119 4.1 단일 기계 웹 서버 ..................................................................................................... 120 4.2 3층 웹 서비스 .......................................................................................................... 122 4.2.1 부하 분산기의 종류 ......................................................................................... 123 4.2.2 부하 분산 방법 ............................................................................................... 125 4.2.3 공유 상태가 있는 부하 분산 .............................................................................. 126 4.2.4 사용자 신원 ................................................................................................... 127 4.2.5 규모 변화 ...................................................................................................... 128 4.3 4층 웹 서비스 .......................................................................................................... 129 4.3.1 앞단 .............................................................................................................. 130 4.3.2 응용 프로그램 서버 ......................................................................................... 132 4.3.3 구성 옵션 ...................................................................................................... 132 4.4 역 프록시 서비스 ...................................................................................................... 133 4.5 클라우드 규모 서비스 ................................................................................................ 134 4.5.1 전역 부하 분산기 ............................................................................................ 135 4.5.2 전역 부하 분산 방법 ........................................................................................ 135 4.5.3 사용자 고유 자료에 근거한 전역 부하 분산 ......................................................... 136 4.5.4 내부 기간망 ................................................................................................... 136 4.6 메시지 버스 구조 ...................................................................................................... 139 4.6.1 메시지 버스의 설계 ......................................................................................... 141 4.6.2 메시지 버스의 신뢰성 ...................................................................................... 141 4.6.3 예제 1: 링크 단축 사이트 ................................................................................. 142 4.6.4 예제 2: 직원 인적자원 자료 갱신 ....................................................................... 145 4.7 서비스 지향 구조 ...................................................................................................... 146 4.7.1 유연성 .......................................................................................................... 146 4.7.2 지원 ............................................................................................................. 147 4.7.3 모범 관행 ...................................................................................................... 147
  • 19. 17 4.8 요약 ....................................................................................................................... 148 연습문제 ........................................................................................................................ 149 CHAPTER 5 규모 변화를 위한 설계 패턴 151 5.1 일반 전략 ................................................................................................................ 152 5.1.1 병목 식별 ...................................................................................................... 153 5.1.2 구성요소들의 재공학 ....................................................................................... 153 5.1.3 결과의 측정 ................................................................................................... 154 5.1.4 능동적 대처 ................................................................................................... 154 5.2 규모 확장 ................................................................................................................ 155 5.3 AKF 규모 변화 입방체 ............................................................................................... 156 5.3.1 x축: 수평 중복 ................................................................................................ 157 5.3.2 y축: 기능 또는 서비스별 분할 ........................................................................... 158 5.3.3 z축: 조회 지향적 분할 ...................................................................................... 160 5.3.4 조합 ............................................................................................................. 162 5.4 캐싱 ....................................................................................................................... 162 5.4.1 캐시 효율성 ................................................................................................... 163 5.4.2 캐시 위치 ...................................................................................................... 164 5.4.3 캐시 영속성 ................................................................................................... 165 5.4.4 캐시 교체 알고리즘 ......................................................................................... 166 5.4.5 캐시 항목 무효화 ............................................................................................ 167 5.4.6 캐시 크기 ...................................................................................................... 168 5.5 자료 파편화 ............................................................................................................. 169 5.6 스레드 적용 ............................................................................................................. 172 5.7 대기열 적용 ............................................................................................................. 173 5.7.1 장점 ............................................................................................................. 174 5.7.2 변형들 .......................................................................................................... 174
  • 20. 18 5.8 CDN ...................................................................................................................... 175 5.9 요약 ....................................................................................................................... 177 연습문제 ........................................................................................................................ 178 CHAPTER 6 탄력성을 위한 설계 패턴 179 6.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성 .............................................................. 181 6.2 모든 것은 결국에는 고장난다 ...................................................................................... 182 6.2.1 분산 시스템의 MTBF ...................................................................................... 182 6.2.2 전통적인 접근방식 .......................................................................................... 183 6.2.3 분산 컴퓨팅 접근방식 ...................................................................................... 184 6.3 예비 수용량을 이용한 탄력성 확보 ............................................................................... 185 6.3.1 예비 수용량 결정 ............................................................................................ 187 6.3.2 부하 공유 대 즉석 예비 .................................................................................... 188 6.4 장애 영역 ................................................................................................................ 189 6.5 소프트웨어 장애 ....................................................................................................... 190 6.5.1 소프트웨어 충돌 ............................................................................................. 190 6.5.2 소프트웨어 멈춤 ............................................................................................. 192 6.5.3 죽음의 질의 ................................................................................................... 193 6.6 물리적 장애 ............................................................................................................. 194 6.6.1 부품과 구성요소 ............................................................................................. 195 6.6.2 기계 .............................................................................................................. 198 6.6.3 부하 분산기 ................................................................................................... 198 6.6.4 랙 ................................................................................................................. 201 6.6.5 데이터센터 ..................................................................................................... 202 6.7 과부하 장애 ............................................................................................................. 203 6.7.1 소통량 급증 ................................................................................................... 203 CONTENTS
  • 21. 19 6.7.2 DoS 및 DDoS 공격 ....................................................................................... 205 6.7.3 스크레이핑 공격 ............................................................................................. 206 6.8 사람의 실수 ............................................................................................................. 207 6.9 요약 ....................................................................................................................... 208 연습문제 ........................................................................................................................ 209 PART II 운영: 시스템 실행하기 CHAPTER 7 분산 세계에서의 운영 213 7.1 분산 시스템의 운영 .................................................................................................... 215 7.1.1 SRE팀 대 전통적인 전사적 IT 부서 ................................................................... 215 7.1.2 변화 대 안정성 ............................................................................................... 216 7.1.3 SRE의 정의 ................................................................................................... 218 7.1.4 대규모 운영 ................................................................................................... 220 7.2 서비스의 수명 주기 .................................................................................................... 223 7.2.1 서비스 개시 ................................................................................................... 225 7.2.2 서비스 폐지 ................................................................................................... 228 7.3 운영팀을 위한 조직화 전략 .......................................................................................... 229 7.3.1 팀원의 업무일 구분 ......................................................................................... 232 7.3.2 기타 전략들 .................................................................................................... 235 7.4 가상 사무실 ............................................................................................................. 237 7.4.1 의사소통 메커니즘 .......................................................................................... 237 7.4.2 의사소통 방침 ................................................................................................ 238 7.5 요약 ....................................................................................................................... 238 연습문제 ........................................................................................................................ 240
  • 22. 20 CHAPTER 8 개발운영 문화 241 8.1 개발운영이란? ......................................................................................................... 242 8.1.1 전통적인 접근방식 .......................................................................................... 244 8.1.2 개발운영 접근방식 .......................................................................................... 246 8.2 개발운영의 3대 방법 .................................................................................................. 247 8.2.1 제1 방법: 작업흐름 ......................................................................................... 247 8.2.2 제2 방법: 피드백 개선 ...................................................................................... 248 8.2.3 제3 방법: 끊임없는 실험과 학습 ........................................................................ 249 8.2.4 작은 일괄 단위들이 더 낫다 .............................................................................. 250 8.2.5 전략의 적용 ................................................................................................... 251 8.3 개발운영의 역사 ........................................................................................................ 252 8.3.1 진화 ............................................................................................................. 252 8.3.2 사이트 신뢰성 공학 ......................................................................................... 253 8.4 개발운영의 가치와 원리 ............................................................................................. 254 8.4.1 관계 ............................................................................................................. 254 8.4.2 통합 ............................................................................................................. 254 8.4.3 자동화 .......................................................................................................... 255 8.4.4 지속적인 개선 ................................................................................................. 255 8.4.5 흔한 비기술적 개발운영 관행 ............................................................................ 256 8.4.6 개발운영의 일반적인 기술적 관행들 ................................................................... 257 8.4.7 릴리스 공학과 관련된 개발운영의 관행들 ........................................................... 259 8.5 개발운영으로의 전환 .................................................................................................. 260 8.5.1 첫걸음 .......................................................................................................... 260 8.5.2 사업 수준에서의 개발운영 ................................................................................ 261 8.6 애자일과 지속적 인도 ................................................................................................ 262 8.6.1 애자일이란 무엇인가? ..................................................................................... 262 8.6.2 지속적 인도란 무엇인가? ................................................................................. 263 CONTENTS
  • 23. 21 8.7 요약 ....................................................................................................................... 266 연습문제 ........................................................................................................................ 267 CHAPTER 9 서비스 인도: 구축 국면 269 9.1 서비스 인도 전략 ...................................................................................................... 271 9.1.1 패턴: 현대적인 개발운영 방법론 ........................................................................ 271 9.1.2 반反패턴(안티패턴): 폭포수 방법론 ..................................................................... 273 9.2 품질의 선순환 .......................................................................................................... 274 9.3 구축 국면의 단계들 .................................................................................................... 277 9.3.1 개발 ............................................................................................................. 277 9.3.2 커밋 ............................................................................................................. 278 9.3.3 구축 ............................................................................................................. 279 9.3.4 패키지 .......................................................................................................... 280 9.3.5 등록 .............................................................................................................. 280 9.4 구축 콘솔 ................................................................................................................ 281 9.5 지속적 통합 .............................................................................................................. 282 9.6 작업 이전 인터페이스로서의 패키지 ............................................................................. 284 9.7 요약 ....................................................................................................................... 285 연습문제 ........................................................................................................................ 286 CHAPTER 10 서비스 인도: 배치 국면 287 10.1 배치 국면의 단계들 ................................................................................................. 288 10.1.1 승격 ............................................................................................................ 288 10.1.2 설치 ............................................................................................................ 289 10.1.3 구성 ............................................................................................................ 289
  • 24. 22 10.2 검사와 승인 ........................................................................................................... 291 10.2.1 검사 ........................................................................................................... 292 10.2.2 승인 ........................................................................................................... 294 10.3 운영 콘솔 .............................................................................................................. 294 10.4 기반구조 자동화 전략 .............................................................................................. 295 10.4.1 물리적 기계 마련 .......................................................................................... 295 10.4.2 가상 기계 마련 ............................................................................................. 296 10.4.3 운영 체제와 서비스 설치 ................................................................................ 296 10.5 지속적 인도 ........................................................................................................... 299 10.6 코드로서의 기반구조 ............................................................................................... 300 10.7 기타 플랫폼 서비스들 .............................................................................................. 300 10.8 요약 ..................................................................................................................... 301 연습문제 ........................................................................................................................ 302 CHAPTER 11 활성 서비스의 업그레이드 303 11.1 서비스 중단 후 업그레이드 ....................................................................................... 303 11.2 순회식 업그레이드 .................................................................................................. 304 11.3 카나리아 공정 ........................................................................................................ 306 11.4 국면별 롤아웃 ........................................................................................................ 308 11.5 비례식 차단 ........................................................................................................... 309 11.6 청록 배치 .............................................................................................................. 309 11.7 기능 켜고 끄기 ....................................................................................................... 310 11.8 활성 스키마 변경 .................................................................................................... 313 11.9 활성 코드 변경 ....................................................................................................... 316 11.10 지속적 배치 ......................................................................................................... 317 11.11 코드 투입 실패의 처리 ........................................................................................... 320 CONTENTS
  • 25. 23 11.12 릴리스 원자성 ...................................................................................................... 321 11.13 요약 .................................................................................................................. 322 연습문제 ........................................................................................................................ 323 CHAPTER 12 자동화 325 12.1 자동화 접근방식들 .................................................................................................. 326 12.1.1 잔여물 원리를 따르는 자동화 접근방식 ............................................................. 327 12.1.2 보충 원리를 따르는 자동화 접근방식 ................................................................ 329 12.1.3 상보성 원리를 따르는 자동화 접근방식 ............................................................. 330 12.1.4 시스템 관리자를 위한 자동화 .......................................................................... 331 12.1.5 경험에서 얻은 교훈들 .................................................................................... 332 12.2 도구 구축 대 자동화 ................................................................................................ 333 12.2.1 예: 자동차 제조 ............................................................................................. 334 12.2.2 예: 컴퓨터 구성 ............................................................................................. 334 12.2.3 예: 계정 생성 ................................................................................................ 335 12.2.4 도구는 좋다, 자동화는 더 좋다 ........................................................................ 335 12.3 자동화의 목표 ........................................................................................................ 336 12.4 자동화 작성 ........................................................................................................... 339 12.4.1 자동화 작성 시간 마련 ................................................................................... 340 12.4.2 고역 줄이기 ................................................................................................. 341 12.4.3 첫 번째 자동화 대상 선정 ............................................................................... 342 12.5 자동화 방법 ........................................................................................................... 342 12.6 언어 도구들 ........................................................................................................... 343 12.6.1 셸 스크립팅 언어 .......................................................................................... 343 12.6.2 스크립팅 언어 .............................................................................................. 344 12.6.3 컴파일식 언어 .............................................................................................. 345 12.6.4 구성 관리용 언어 .......................................................................................... 346
  • 26. 24 12.7 소프트웨어 공학 도구들과 기법들 .............................................................................. 348 12.7.1 문제점 추적 시스템 ....................................................................................... 349 12.7.2 버전 관리 시스템 .......................................................................................... 351 12.7.3 소프트웨어 패키지 작성 ................................................................................. 352 12.7.4 스타일 지침 ................................................................................................. 353 12.7.5 TDD ........................................................................................................... 355 12.7.6 코드 검토 .................................................................................................... 356 12.7.7 딱 필요한 만큼의 코드를 작성 ......................................................................... 357 12.8 다중 입주 시스템 .................................................................................................... 358 12.9 요약 ..................................................................................................................... 360 연습문제 ........................................................................................................................ 361 CHAPTER 13 설계 문서 363 13.1 설계 문서의 개요 .................................................................................................... 363 13.1.1 변경과 그 논거의 문서화 ................................................................................ 364 13.1.2 과거 의사결정들을 보관하는 문서화 ................................................................. 365 13.2 설계 문서의 구성 .................................................................................................... 365 13.3 문서 양식 .............................................................................................................. 368 13.4 문서 보관소 ........................................................................................................... 369 13.5 설계 문서 검토의 작업흐름 ....................................................................................... 369 13.5.1 검토자와 승인자 ........................................................................................... 370 13.5.2 결재 ............................................................................................................ 371 13.6 설계 문서 표준의 채용 ............................................................................................. 372 13.7 요약 ..................................................................................................................... 373 연습문제 ........................................................................................................................ 374 CONTENTS
  • 27. 25 CHAPTER 14 호출대기 375 14.1 호출대기의 설계 ..................................................................................................... 376 14.1.1 SLA로 시작 ................................................................................................. 376 14.1.2 호출대기 명단 .............................................................................................. 377 14.1.3 당직대기 ..................................................................................................... 378 14.1.4 호출대기 일정 설계 ....................................................................................... 379 14.1.5 호출대기 일정표 ........................................................................................... 382 14.1.6 호출대기의 빈도 ........................................................................................... 383 14.1.7 통지의 종류 ................................................................................................. 383 14.1.8 근무 시간 외 유지보수 조정 ............................................................................ 386 14.2 호출대기 수행 ........................................................................................................ 386 14.2.1 교대근무 전 임무 .......................................................................................... 386 14.2.2 정규 호출대기 임무 ....................................................................................... 387 14.2.3 경보 처리 임무 ............................................................................................. 388 14.2.4 관찰, 지향, 결정, 실행: OODA 루프 ................................................................. 390 14.2.5 호출대기 각본 .............................................................................................. 390 14.2.6 서드파티 상부 보고 ....................................................................................... 391 14.2.7 교대근무 마감 임무 ....................................................................................... 392 14.3 다음 호출대기 교대근무까지의 작업 ........................................................................... 393 14.3.1 장기적 해결책 .............................................................................................. 393 14.3.2 사후 분석 .................................................................................................... 394 14.4 주기적인 경보 검토 ................................................................................................. 398 14.5 경보 줄이기 ........................................................................................................... 399 14.6 요약 ..................................................................................................................... 400 연습문제 ........................................................................................................................ 401
  • 28. 26 CHAPTER 15 재난 대비 403 15.1 사고방식 ............................................................................................................... 404 15.1.1 반취약 시스템 .............................................................................................. 405 15.1.2 위험 줄이기 ................................................................................................. 406 15.2 개인 훈련: 불운의 바퀴 ............................................................................................ 408 15.3 팀 훈련: 소방 훈련 .................................................................................................. 410 15.3.1 서비스 검사 .................................................................................................. 411 15.3.2 무작위 검사 .................................................................................................. 412 15.4 조직 훈련: 게임 데이/DiRT ....................................................................................... 413 15.4.1 첫걸음 ........................................................................................................ 414 15.4.2 범위 확장 .................................................................................................... 415 15.4.3 계획과 구현 ................................................................................................. 416 15.4.4 DiRT 검사의 예 ............................................................................................ 419 15.5 사고지휘체계 ......................................................................................................... 423 15.5.1 작동 방식: 공공 안전 분야 .............................................................................. 424 15.5.2 작동 방식: IT 운영 분야 ................................................................................. 425 15.5.3 사고 대응 활동 계획서 ................................................................................... 426 15.5.4 모범 관행 .................................................................................................... 427 15.5.5 사고지휘체계의 예 ........................................................................................ 428 15.6 요약 ..................................................................................................................... 429 연습문제 ........................................................................................................................ 430 CONTENTS
  • 29. 27 CHAPTER 16 감시의 기초 431 16.1 개요 ..................................................................................................................... 432 16.1.1 감시의 용도 .................................................................................................. 434 16.1.2 서비스 관리 ................................................................................................. 434 16.2 감시 정보의 소비자 ................................................................................................. 435 16.3 감시 대상 .............................................................................................................. 437 16.4 감시 자료의 유지 .................................................................................................... 439 16.5 메타 감시 .............................................................................................................. 441 16.6 로그 ..................................................................................................................... 442 16.6.1 접근방식 ..................................................................................................... 443 16.6.2 타임스탬프 .................................................................................................. 443 16.7 요약 ..................................................................................................................... 444 연습문제 ........................................................................................................................ 445 CHAPTER 17 감시 시스템의 구조와 관행 447 17.1 감지 및 측정 .......................................................................................................... 448 17.1.1 블랙박스 측정 대 화이트박스 측정 ................................................................... 449 17.1.2 직접 측정 대 합성 측정 .................................................................................. 450 17.1.3 속도 측정 대 능력 측정 .................................................................................. 450 17.1.4 계측치 측정 대 카운터 측정 ............................................................................ 451 17.2 수집 ..................................................................................................................... 453 17.2.1 밀기 대 당기기 ............................................................................................. 453 17.2.2 프로토콜 선택 .............................................................................................. 454 17.2.3 서버 자체 측정 대 에이전트 대 주기적 점검 ...................................................... 455 17.2.4 중앙 수집기 대 지역별 수집기 ......................................................................... 456
  • 30. 28 17.3 분석 및 계산 .......................................................................................................... 456 17.4 경보 및 상부 보고 구성요소 ...................................................................................... 458 17.4.1 경보, 상부 보고, 확인 ..................................................................................... 459 17.4.2 소음 대 금지 ................................................................................................. 460 17.5 시각화 .................................................................................................................. 462 17.5.1 백분위수 ..................................................................................................... 463 17.5.2 스택 랭킹 .................................................................................................... 465 17.5.3 히스토그램 .................................................................................................. 466 17.6 저장 ..................................................................................................................... 467 17.7 구성 ..................................................................................................................... 468 17.8 요약 ..................................................................................................................... 469 연습문제 ........................................................................................................................ 470 CHAPTER 18 수용량 계획 수립 471 18.1 표준 수용량 계획 수립 ............................................................................................. 472 18.1.1 현재 사용량 ................................................................................................. 474 18.1.2 정상 성장 .................................................................................................... 476 18.1.3 계획된 성장 ................................................................................................. 476 18.1.4 여유분 ........................................................................................................ 476 18.1.5 탄력성 ........................................................................................................ 477 18.1.6 시간표 ........................................................................................................ 478 18.2 고급 수용량 계획 수립 ............................................................................................. 478 18.2.1 1차 자원의 식별 ........................................................................................... 479 18.2.2 수용량 한계 파악 .......................................................................................... 480 18.2.3 핵심 동인 식별 ............................................................................................. 481 18.2.4 참여도 측정 ................................................................................................. 482 CONTENTS
  • 31. 29 18.2.5 자료의 분석 .................................................................................................. 482 18.2.6 핵심지표 감시 .............................................................................................. 489 18.2.7 수용량 계획 수립의 위임 ................................................................................ 490 18.3 자원 회귀 .............................................................................................................. 490 18.4 새 서비스 개시 ....................................................................................................... 491 18.5 조달 시간 줄이기 .................................................................................................... 494 18.6 요약 ..................................................................................................................... 495 연습문제 ........................................................................................................................ 496 CHAPTER 19 KPI 작성 497 19.1 KPI란 무엇인가? .................................................................................................... 498 19.2 KPI 작성 .............................................................................................................. 500 19.2.1 단계 1: 이상적 상황을 상상한다 ...................................................................... 500 19.2.2 단계 2: 이상과의 거리를 재는 방법을 고안한다 .................................................. 501 19.2.3 단계 3: 사람들의 행동 변화를 예상한다 ............................................................ 501 19.2.4 단계 4: 수정하고 선택한다 ............................................................................. 502 19.2.5 단계 5: KPI를 배치한다 ................................................................................. 503 19.3 KPI의 예: 가상 기계 할당 ......................................................................................... 504 19.3.1 첫 번째 패스 ................................................................................................ 505 19.3.2 두 번째 패스 ................................................................................................ 506 19.3.3 KPI의 평가 .................................................................................................. 508 19.4 사례 연구: 구글 오류 예산 ......................................................................................... 509 19.4.1 목표 대립 .................................................................................................... 509 19.4.2 통합된 목표 .................................................................................................. 510 19.4.3 모두의 이익 ................................................................................................. 510 19.5 요약 ..................................................................................................................... 512 연습문제 ........................................................................................................................ 513
  • 32. 30 CHAPTER 20 탁월한 운영 515 20.1 탁월한 운영은 어떤 모습인가? .................................................................................. 516 20.2 훌륭함을 측정하는 방법 ........................................................................................... 517 20.3 평가 방법론 ........................................................................................................... 518 20.3.1 주요 운영 책무 ............................................................................................. 518 20.3.2 평가 수준 .................................................................................................... 520 20.3.3 평가를 위한 질문과 징표 ................................................................................ 522 20.4 서비스 평가 ........................................................................................................... 523 20.4.1 평가 대상 식별 ............................................................................................. 523 20.4.2 각 서비스의 평가 .......................................................................................... 524 20.4.3 서비스 간 결과 비교 ...................................................................................... 525 20.4.4 결과에 기초한 행동 ....................................................................................... 526 20.4.5 평가와 프로젝트 계획 수립의 빈도 ................................................................... 526 20.5 조직 차원의 평가 .................................................................................................... 527 20.6 개선 수준 .............................................................................................................. 528 20.7 평가 체계의 도입과 적용 .......................................................................................... 529 20.8 요약 ..................................................................................................................... 530 연습문제 ........................................................................................................................ 531 맺음말 533 CONTENTS
  • 33. 31 PART III 부록 APPENDIX A 평가 539 A.1 정규 과제 ................................................................................................................ 540 A.2 비상 대응 ................................................................................................................ 543 A.3 감시와 측정 ............................................................................................................. 545 A.4 수용량 계획 수립 ...................................................................................................... 548 A.5 변경 관리 ................................................................................................................ 550 A.6 신제품 도입 및 제거 .................................................................................................. 552 A.7 서비스 배치 및 폐지 .................................................................................................. 554 A.8 성능과 효율성 .......................................................................................................... 556 A.9 서비스 인도: 구축 국면 ............................................................................................... 559 A.10 서비스 인도: 배치 국면 ............................................................................................ 561 A.11 고역 줄이기 ........................................................................................................... 563 A.12 재난 대비 .............................................................................................................. 565 APPENDIX B 분산 컴퓨팅과 클라우드의 기원과 미래 569 B.1 웹 이전 시대(1985–1994) ....................................................................................... 570 B.2 제1차 웹 시대: 닷컴 거품(1995–2000) ....................................................................... 573 B.3 닷컴 붕괴 시대(2000–2003) .................................................................................... 579 B.4 제2차 웹 시대(2003–2010) ..................................................................................... 585 B.5 클라우드 컴퓨팅 시대(2010~현재) ............................................................................. 590 B.6 결론 ....................................................................................................................... 594 연습문제 ........................................................................................................................ 595
  • 34. 32 APPENDIX C 규모 변화 관련 용어 및 개념 597 C.1 상수, 선형, 지수 규모 변화 ......................................................................................... 597 C.2 대문자 O 표기법 ...................................................................................................... 598 C.3 대문자 O 표기법의 한계 ............................................................................................ 601 APPENDIX D 문서 양식과 예제 문서 605 D.1 설계 문서 양식 ........................................................................................................ 605 D.2 설계 문서의 예 ........................................................................................................ 606 D.3 사후 분석 보고서 양식 ............................................................................................... 608 APPENDIX E 읽을거리 추천 611 참고문헌 ........................................................................................................................ 615 찾아보기 ........................................................................................................................ 626 CONTENTS
  • 35. 331.3 조합 이 책의 목표는 독자가 가능한 최상의 클라우드 규모 서비스를 구축하고 운영하는 데 도움을 주는 것이다. 그럼 우리가 만들고자 하는 이상적인 환경을 살펴보자. 사업 목표 간단히 말해서, 우리가 추구하는 이상적인 환경의 최종 결과는 사업 목표(business objective; 또는 경영목표, 업무 목표)들을 만족하는 것이다. 좀 따분하게 들리겠지만, 사실 회사 전체가 같은 목표에 전념해서 함께 일한다는 것은 상당히 신나는 일이다. 이를 달성하려면 반드시 사업 목표들을 파악한 후 그로부터 되짚어 나아가서 이상적인 시 스템(우리가 구축해야 하는)에 도달해야 한다. 사업 목표들을 만족하려면 우선 그 목표들이 무엇인지 알아야 하고, 그것들을 달성하는 계 획을 세워야 하고, 그 계획의 수행을 방해하는 걸림돌들을 처리해야 한다. 잘 정의된 사업 목표들은 측정 가능하며, 그런 측정치들을 자동화된 방식으로 수집할 수 있다. 그로부터 현황판(dashboard)을 자동으로 생성하면 모두가 진행(progress) 정도를 파악할 수 있게 된다. 이러한 투명성은 신뢰도를 높여준다. 다음은 사업 목표의 예 몇 가지이다. 소개
  • 36. 34 1장 분산 세계에서의 설계 ●● 우리 제품을 웹사이트를 통해서 판매한다. ●● 서비스를 99.99%의 시간으로 제공한다. ●● 월 x 백만 건의 구매를 처리하고, 매달 10% 성장한다. ●● 한 주에 두 번 새 기능을 도입한다. ●● 주요 버그들을 24시간 안에 잡는다. 이상적인 환경에서 사업팀과 기술팀은 자신의 사업 목표와 프로젝트 목표를 예측 가능하고 신 뢰성 있게 달성한다. 이 덕분에, 사업팀과 기술팀 둘 다 상대방 팀이 그들의 향후 목표들을 달 성하리라고 믿는다. 그 결과로 팀들은 더 나은 계획을 세우게 된다. 팀들은 외부 의존성들이 실 패하지* 않을 것이라는 믿음이 있기 때문에 좀 더 공격적인 계획을 세울 수 있다. 그러면 더욱 공격적인 계획 수립이 가능해진다. 이러한 접근방식은 회사 전체를 관통하며 진행을 가속화하 는 상향 나선을 만들어냄으로써 모두에게 이득이 된다. 이상적인 시스템 구조 이상적인 서비스는 견고한 시스템 구조(architecture) 위에 구축된다. 그러한 구조는 오늘날 의 서비스들이 요구하는 조건들을 만족하며, 시스템이 유명해져서 더 많은 소통량을 받게 될 때 시스템의 규모를 성장시키는 방법이 명확하다. 이상적인 구조는 장애(failure; 고장)에 대 한 탄력성(resiliency; 회복력)을 갖추고 있다. 그런 시스템은 장애를 예기치 못한 예외로 취 급하지 않는다. 대신 하드웨어 및 소프트웨어의 장애를 정보기술(information technology, IT )의 물리학(physics )의 일부로 포용한다. 그 결과로 구조에는 장애를 우회하는 중복 (redundancy) 및 회복 기능들이 포함된다. 개별 구성요소는 실패해도 시스템은 살아남는다. 서비스를 구성하는 각 하위 시스템은 그 자체로 서비스이다. 모든 하위 시스템은 응용 프 로그래밍 인터페이스(API)를 통해서 프로그래밍할 수 있다. 따라서 전체 시스템은 여러 하 위 서비스가 서로 연결된 하나의 생태계이다. 이를 서비스 지향 구조(service-oriented architecture, SOA)라고 부른다. 이러한 시스템들은 모두 동일한 바탕 프로토콜을 통해서 통 신하므로, 시스템들의 관리 방식에 통일성이 존재한다. 각 하위 서비스는 다른 서비스들과 느 *  옮긴이_ 이런 문맥에서 어떤 요소가 ‘실패한다’는 것은 소프트웨어 오작동이나 하드웨어 고장 등의 장애가 발생해서 그 요소가 자신에게 주어진 임무를 다하지 못하는 것을 말한다.
  • 37. 351.3 조합 슨하게 결합되어 있기 때문에, 각자 독립적으로 확장, 업그레이드, 대체할 수 있다. 기반구조(infrastructure )의 구성은 전자적인 파일 형태로 서술한다. 이러한 전자 적 서술을 IT 자동화 시스템이 읽어서, 사람의 개입 없이 자동으로 실무 환경(production environment)을 구축한다. 이러한 자동화 덕분에 전체 기반구조를 다른 장소에서 재생성하 는 것이 가능하다. 소프트웨어 기술자들은 이러한 자동화를 이용해서 개인적으로 사용할 소규 모 버전의 환경을 생성한다. 비슷하게, 품질 및 검사 기술자들은 자동화를 이용해서 시스템 검 사를 위한 환경을 생성한다. 이러한 ‘코드로서의 기반구조(infrastructure as code)’는 그것을 실행하는 기계(컴퓨터) 가 물리적 기계이든 가상 기계(virtual machine)이든, 그리고 그런 기계들이 데이터센터에 있든, 우리가 직접 운영하든, 또는 클라우드 제공자가 제공한 환경에 상주하든 달성 가능하다. 가상 기계들을 사용하는 경우에는 자명한 API를 통해서 새 기계를 손쉽게 배치할 수 있다. 물 리적 기계를 사용한다고 해도, 단순한 쇳덩어리에서 실제로 작동하는 시스템으로의 전체 흐름 을 자동화할 수 있다. 우리가 생각하는 이상적인 세계에서는 자동화 덕분에 물리적 기계와 가 상 기계의 조합을 이용해서 환경을 생성하는 것이 가능하다. 개발자들이 가상 기계들로부터 환 경을 구축할 수도 있다. 실무 환경은 물리적 기계와 가상 기계의 혼합으로 구성될 수 있다. 예 기치 않게 일시적으로 용량(수용량) 추가가 필요한 경우에는 실무 환경을 일정 기간 하나 이상 의 클라우드 제공업체들로 확장해야 할 수도 있다. 이상적인 릴리스 과정 이상적인 환경에서는 개발 단계에서 운영(operation) 단계로 코드가 매끄럽게 흘러간다. 전통적인 환경(지금 말하는 이상적인 환경이 아닌)에서 그러한 흐름은 다음과 같은 모습이다. 1. 개발자가 코드를 저장소(repository)에 체크인한다. 2. 검사 기술자(test engineer)는 코드에 대해 일단의 검사들을 적용한다. 3. 코드가 모든 검사를 통과했으면, 릴리스 기술자(release engineer)는 소프트웨어의 배 치(deploy)에 쓰일 패키지를 구축한다. 대부분의 파일은 소스 코드 저장소에서 가져오지 만, 일부 파일은 그래픽 부서나 문서화 작성자 같은 다른 출처에서 가져와야 할 수도 있다. 4. 검사 환경을 생성한다. 단, ‘코드로서의 기반구조’ 모형은 적용하지 않는다(그러려면 몇 주 가 걸릴 수 있다).
  • 38. 36 1장 분산 세계에서의 설계 5. 패키지를 검사 환경에 배치한다. 6. 검사 기술자가 추가 검사들을 수행한다. 여기서 초점은 하위 시스템들 사이의 상호작용 이다. 7. 모든 검사가 성공적이면 코드를 실무 환경에 투입한다. 8. 시스템 관리자는 시스템을 업그레이드하되, 장애가 발생하는지 살펴본다. 9. 장애가 발생했다면 소프트웨어를 이전 상태로 되돌린다(roll back). 이러한 단계들을 사람이 직접 수행하는 것은 아주 위험하다. 작업에 적합한 사람이 있어야 하 고, 단계들을 매번 같은 방식으로 수행해야 하며, 그 과정에서 실수가 없어야 하고, 모든 과제 를 제시간 안에 끝내야 한다는 조건들이 모두 만족되어야 하기 때문이다. 물론 실수, 버그, 오류는 항상 발생한다. 그 결과로 결함(defect)들이 과정의 다음 단계로 전파된다. 실수가 발견되면 진행의 흐름을 되돌려서, 이전 단계를 담당한 팀원들에게 문제를 알려서 바로잡게 해야 한다. 이는 진행이 멈추어서 시간이 낭비됨을 뜻한다. 위험이 큰 과정에 대한 사람들의 전형적인 반응은 그런 과정을 최대한 피하는 것이다. 그 래서 릴리스를 최대한 줄이려는 유혹에 빠진다. 그 결과로 ‘거대규모 릴리스(mega-release)’ 를 한 해에 몇 번만 내놓는 현상이 나타난다. 그러나 그런 거대규모 릴리스는 수많은 변화를 한꺼번에 적용하는 것이므로 사실은 위험 이 더 커진다. 수천 개의 변경 사항들을 동시에 릴리스했을 때 첫 시도에서 모든 것이 제대로 되리라고 확신할 수 있는가? 그럴 수는 없다. 이 때문에 변화를 더욱 꺼리고 두려워하게 된다. 결국에는 변화가 거의 불가능해져서 더 이상의 혁신이 일어나지 않는다. 우리가 말하는 이상적인 환경에서는 그렇지 않다. 이상적인 환경에서는 소프트웨어 구축과 검사, 릴리스, 배치 과정의 모든 수동 단계들을 자동화를 이용해서 제거한다. 자동화는 검사들을 정확하고 일관되게 수행하기 때문에 결함이 다음 단계로 전파되는 일이 없다. 그 결과로 진행의 흐름은 항상 단방향, 즉 전진 방향이다. 이상적인 환경에서는 거대규모 릴리스 대신 미세규모 릴리스(micro-release)를 만든다. 작은 변화들로 이루어진 배치를 자주 수행함으로써 위험도를 낮춘다. 실제로, 하루에 배치를 100번 할 수도 있다. 1. 개발자가 코드를 체크인하면 시스템은 그 사실을 감지하고 일련의 자동화된 검사들을 실행 한다. 그 검사들은 기본적인 코드 기능성을 확인한다. 2. 그 검사들이 통과되었다면 패키지 구축 과정이 실행된다. 이 역시 완전히 자동화된 방식으
  • 39. 371.3 조합 로 진행된다. 3. 새 패키지가 성공적으로 만들어지면 검사 환경 생성 과정이 시작된다. 예전에는 검사 환경 을 구축하려면 한 주 내내 케이블을 연결하고 기계를 설치하는 수고가 필요했다. 그러나 코 드로서의 기반구조 모형에서는 전체 환경을 사람의 개입 없이 빠르게 생성할 수 있다. 4. 검사 환경이 완성되면 일련의 자동화된 검사들을 실행한다. 5. 검사들이 성공적으로 끝나면 새 패키지를 실무 환경으로 롤아웃roll-out한다. 이 롤아웃 역시 자동으로 진행되지만, 체계적이고 조심스럽게 진행된다. 6. 일부 시스템을 먼저 업그레이드해서 장애가 발생하는지 본다. 검사 환경은 실무 환경을 구 축하는 데 쓰이는 것과 동일한 자동화를 통해서 구축되므로, 두 환경 사이의 차이는 아주 적어야 한다. 7. 장애가 없다면 전체 실무 환경이 업그레이드될 때까지 새 패키지를 점점 더 많은 시스템에 롤아웃한다. 이상적인 환경에서는 모든 문제가 실무 환경에 도달하기 전에 검출된다. 즉, 롤아웃은 검사의 형태가 아니다. 실무 환경으로의 롤아웃 도중의 장애는 본질적으로 제거된다. 그런데도 장애가 발생한다면, 이를 아주 심각한 문제로 간주해서 새 릴리스를 실무 환경에 투입하는 것을 멈추 고 먼저 근본 원인을 분석한다. 분석 후에는 이후 이러한 장애를 검출하고 재발을 방지하는 데 필요한 검사들을 추가한다. 이러한 과정 덕분에 시스템은 시간이 지남에 따라 더욱 강해진다. 이러한 자동화 덕분에 기존의 릴리스 공학, 품질 보증, 배치 관련 인력은 기존 회사에서 자 신이 주로 하던 일을 사실상 인식하지 못하게 된다. 수많은 시간의 수고로운 노동(‘고역’)이 사 라지며, 따라서 패키지 작성 시스템과 소프트웨어 품질을 개선하고 배치 공정을 다듬는 데 더 많은 시간을 투여할 수 있다. 다른 말로 하면, 사람들은 자신의 작업 자체를 수행하는 것보다 그 작업이 수행되는 방식을 개선하는 데 더 많은 시간을 사용한다. 서드파티third-party 소프트웨어에도 비슷한 과정이 적용된다. 환경의 모든 시스템을 회사 내 부에서 직접 만들지는 않으며, 해당 소스 코드가 주어지지 않는 경우도 많다. 서드파티 서비스 와 제품의 배치 역시 릴리스와 검사, 배치와 비슷한 패턴을 따른다. 단, 이 제품들과 서비스들 은 외부에서 개발되므로, 약간 다른 과정이 필요하다. 새 릴리스가 나오는 횟수가 상대적으로 적으며, 각각의 새 릴리스에 포함되는 기능을 우리가 원하는 만큼 제어할 수가 없다. 일반적으 로 이런 구성요소들을 검사할 때에는 기능(feature), 호환성, 통합(integration)과 관련된 검 사들이 필요하다.
  • 40. 38 1장 분산 세계에서의 설계 이상적인 운영 일단 코드가 실무 환경에 배치되고 나면 운영 목표(operational objective)들이 중요해진다. 운영 감시(monitoring)를 위해, 소프트웨어에 계장(instrumentation)을 위한 코드를 포함 해 둔다. 계장 코드는 내부 API로 요청된 트랜잭션들뿐만 아니라 외부 사용자가 요청한 트랜잭 션들을 처리하는 데 걸린 시간도 수집한다. 또한 메모리 사용량 같은 다른 지표들도 감시한다. 이러한 자료 수집 덕분에, 운영상의 결정을 추측이나 운, 희망이 아니라 자료에 근거해서 내릴 수 있다. 수집된 자료를 수년간 축적하므로, 향후의 수용량 증가 필요성을 예측하는 데 활용할 수도 있다. 측정(measurement)은 내부 문제점을 검출하는 데 쓰인다. 특히 측정은 내부 문제점이 아직 작을 때, 즉 사용자에게 보이는 운영 중단(outage)으로까지 번지기 전에 잡아내는 데 유 효하다. 이상적인 운영에서는 문제점들을 운영 중단으로 이어지기 전에 바로잡는다. 실제 운영 중단은 드물며, 아주 세심하게 조사해야 한다. 문제점이 검출되면 그런 문제점을 식별, 처리해 서 빠르게 해결할 수 있게 하는 과정이 진행된다. 자동화된 시스템은 문제점을 검출해서 호출대기(oncall) 중인 사람에게 경보(alert)를 보낸다. 호출대기 일정은 순번제(rotation)로 정하되, 각 교대근무(shift)* 기간에 평균적으 로 감당할 수 있는 개수의 경보를 받을 수 있도록 시간을 조율한다. 임의의 주어진 시간에서 주 된 호출대기자는 한 사람이며, 그 사람이 경보를 가장 먼저 받게 된다. 그 사람이 제때 응답하 지 않으면 두 번째 사람에게 경보가 전달된다. 호출대기 일정은 사람들이 휴가, 여가 활동, 개 인 시간을 계획할 수 있을 정도로 충분히 미리 준비한다. 발생할 수 있는 모든 경보를 처리하는 방법을 알려주는 ‘각본(playbook; 대응 매뉴얼)’이 존재한다. 각 종류의 경보마다 문제점과 그것이 업무에 미치는 영향 및 해결책을 기술적으로 서술해서 문서화한다. 각본은 계속 개선된다. 호출대기자는 각본에 따라 문제점을 바로잡는다. 각본의 해결책이 충분치 않음이 드러나면 잘 정의된 상부 보고(escalation) 절차가 진행된다. 보통의 경우 그 절차에 의해 관련 하위 시스템의 호출대기자에게 문제점이 전달된다. 개발자들 도 호출대기 순번에 참여하므로, 자신들이 구축하는 시스템의 운영상의 애로사항을 이해하게 된다. *  옮긴이_ 이런 문맥에서 shift는 두 가지 의미로 쓰인다. 예를 들어 하루를 8시간 단위로 나누어서 3교대로 근무한다고 할 때, 여덟 시간 이 지나서 근무자를 교대하는 것을 shift라고 부를 뿐만 아니라 여덟 시간의 근무 기간 또는 그 기간에 하는 일 자체도 shift라고 부른다. 이 번역서에서는 전자를 근무 교대, 후자를 ‘교대근무’로 옮기고, 둘의 구분이 중요하지 않을 때에는 간단히 ‘교대’라고도 한다.
  • 41. 391.3 조합 모든 장애에는 그에 해당하는 대응책(countermeasure)이 존재한다. 수동적으로 발동 (활성화)되는 대응책도 있고 자동으로 발동되는 대응책도 있다. 자주 발동되는 대응책들은 항 상 자동화된다. 감시 시스템은 남용(overuse)을 검출한다. 남용은 더 큰 문제점을 나타낼 수 있기 때문이다. 장애율(고장률)을 줄이고 대응책들을 개선하기 위해, 감시 시스템은 기술자들 이 사용하는 내부 지표 자료를 수집한다. 대응책이 덜 자주 발동될수록, 그것이 다음번에 필요할 때 잘 작동하리라는 확신 역시 낮 아진다. 그래서, 덜 자주 발동되는 대응책들에 대해서는 주기적으로, 그리고 자동으로 해당 장 애를 일으켜서 대응책을 발동시켜본다. 비상시 어떻게 행동해야 할지를 모두가 숙지하도록 학 생들에게 화재 대피 훈련을 시키는 것과 마찬가지로, 이상적인 운영 환경에서는 운영에 관한 ‘화재 대피 훈련’을 실시한다. 그러면 팀은 대응책 구현에 관한 경험을 쌓게 되며, 대응책이 잘 작동하리라는 확신이 높아진다. 데이터베이스 장애 조치(failover) 과정이 예기치 않은 의 존성 때문에 작동하지 않을 수도 있는데, 그런 문제점을 일요일 새벽 4시의 운영 중단 상황에 서 알게 되는 것보다는 월요일 아침 10시의 현장 훈련에서 알게 되는 것이 낫다. 이 역시 반복 (repetition)을 꺼리기보다는 증가함으로써 위험을 줄인다는 원칙에 해당한다. 반복을 통해 서 뭔가에 능숙해지는 것을 전문 용어로 ‘연습(practice)’이라고 부른다. 우리는 “연습이 완벽 함을 만든다”는 점을 굳게 믿는다.* 이상적인 환경은 규모 확장(scaling up)이 자동으로 일어난다. 수용량(capacity)이 더 필요해지면 내부 또는 외부 클라우드 제공자로부터 추가 수용량이 도입된다. 단순히 RAM이나 디스크, CPU를 더 투입하는 것보다 구조를 재정립하는 것이 더 나은 해결책일 수도 있는데, 그런 시점이 되었는지는 현황판을 보고 판단할 수 있다. 규모 축소(scaling down ) 역시 자동적이다. 시스템에 과부하가 걸렸거나 퇴행한 (degraded) 경우에도 “503—Service Unavailable” 오류로 사용자를 외면하는 일은 결코 없다. 대신 시스템은 자동으로 자원을 덜 사용하는 알고리즘으로 전환한다. 대역폭이 소진되 면 서비스의 저대역폭 버전이 작동해서 그래픽을 덜 표시하거나 좀 더 단순화된 사용자 인터페 이스를 표시한다. 데이터베이스가 깨져도, 서비스의 읽기 전용 버전을 통해서 사용자 대부분을 만족시킨다. *  옮긴이_ practice는 문맥에 따라 연습, 실천, 관행 등 여러 한국어 단어에 대응된다. 이 번역어에서 주로 쓰이는 것은 ‘관행’이다. 관행 과 연습은 동전의 양면과 같다. 뭔가에 능숙해지기 위해 여러 번 되풀이해서 수행하는 것을 연습이라고 한다면, 자주 되풀이하다보니 능숙 해진 뭔가가 바로 관행이다. 안타깝게도 일상에서(특히 신문 기사에서) 관행은 부정적인 의미로 쓰이는 경우가 많지만, 이 책에서 말하는 관행은 중립적이다. 단지 나쁜 관행과 좋은 관행이 있을 뿐이다. 일상에서 관행이 긍정적인 의미로 쓰이는 경우로 ‘모범 관행’이 있는데, 이 는 최고의 관행(best practice)에 해당한다.