『클라우드 시스템을 관리하는...

159

Upload: wegra-bokyeon-lee

Post on 14-Apr-2017

1.101 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 『클라우드 시스템을 관리하는 기술』 - 맛보기
Page 2: 『클라우드 시스템을 관리하는 기술』 - 맛보기
Page 3: 『클라우드 시스템을 관리하는 기술』 - 맛보기
Page 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 / 이메일 [email protected]

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.

이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다.

저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.

지금 하지 않으면 할 수 없는 일이 있습니다.

책으로 펴내고 싶은 아이디어나 원고를 메일 ( [email protected] ) 로 보내주세요.

한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.

Page 5: 『클라우드 시스템을 관리하는 기술』 - 맛보기
Page 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 )가 되는 것을 들 수 있다. 현재 미

국 캘리포니아의 산타클라라 카운티에 살고 있다.

지은이·옮긴이 소개

Page 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 )를 운영하고 있다.

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

6

C++의 창시자 비야네 스트롭스트룹Bjarne Stroustrup은 자신의 저서 Programming - Principles

and Practice Using C++(번역서는 (C++로 배우는)프로그래밍의 원리와 실제, 류광 옮김)에서

“우리 문명은 소프트웨어를 바탕으로 돌아간다”라고 말했습니다. 현재 그러한 소프트웨어의 상당

부분은 최종 사용자와는 떨어져 있는 ‘구름’, 즉 클라우드 시스템 안에서 돌아가고 있으며, 점점 더

많은 소프트웨어와 자료가 점점 더 빨리 구름 안으로 이주할 것입니다. 그런 만큼 클라우드 시스템

을 개발하고 관리, 운영하는 사람은 단지 자신의 조직의 이익을 위해 일하는 사람이 아니라, 어쩌면

문명의 유지와 발전에 큰 몫을 담당하는 사람일 것입니다. 저자들도 아마 그런 자부심을 가지고 이

책을 저술했으리라 짐작합니다. 나중에 독자가 ‘맺음말(p.533 )’을 그런 자부심과 자신감을 느끼면

서 읽을 수 있게 된다면 더 바랄 것이 없겠습니다.

독자가 본문을 거쳐서 맺음말에 무사히 도달하고 그 뒤의 부록들까지 충실하게 읽으려면 번역

품질에 문제가 없어야 할 텐데, 어떨지 모르겠습니다. 항상 그렇지만 번역과 교정을 마치고 옮긴이

의 말을 쓸 때에는 번역과 교정에 좀 더 많은 시간을 들일 수 있었다면 하는 아쉬움을 느낍니다. 특

히 이 책은 통상적인 소프트웨어 개발이나 프로그래밍 이외의 여러 분야(경영학, 산업공학, 공공안

전 등등)에서 쓰이는 용어들이 많이 등장해서 번역하기가 쉽지 않았습니다. 가능하면 해당 분야에

서 흔히 쓰이는 용어를 존중하되, 전체적인 어법과 잘 맞지 않거나 다른 분야의 용어와 충돌하는 등

그대로 가져다 쓰기가 좀 곤란할 때에는 기존 용어의 조어법을 참고해서 새로운 용어를 만들기도 했

습니다. 부연 설명이 필요한 경우에는 역주를 추가하기도 했지만 충분치는 않을 것입니다. 부족한

부분은 제 홈페이지 occam’s Razor (http://occamsrazr.net/ )의 ‘번역서 정보’ 페이지에서

접근할 수 있는 이 책 페이지를 통해서 함께 논의했으면 합니다.

감사 인사로 옮긴이의 말을 마무리하겠습니다. 제게 번역을 맡겨 주신 최현우 님과 번역 및 교

정 과정을 매끄럽게 이끌어 주신 이복연 님 고맙습니다. 그리고 조판을 맡아주신 이경숙 님을 비롯

한, 출판 전과정에서 제가 미처 알지 못하는 여러 작업을 충실히 수행해서 이 책의 출판을 현실로 만

든 모든 관련자 분께 감사 인사 올립니다. 마지막으로, 최종 결과물만 봐서는 상상하기 힘든 황당한

오타와 오역을 수없이 잡아 준 아내 오현숙에게 감사와 사랑의 마음을 전합니다.

_ 류광

옮긴이의 말

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

7

다음 중 참인 문장은 무엇인가?

1. 신뢰성이 아주 높은 시스템은 싸고 신뢰성 없는(unreliable ) 구성요소들로 만들어진다.

2. 구글Google이 수십억의 사용자에 맞게 규모를 변화시키는 데 사용하는 기법들은 수백 명의

사용자를 감당하는 시스템의 규모 변화(scaling )에 사용할 수 있는 기법들과 동일한 패턴

을 따른다.

3. 어떤 절차가 위험할수록 그 절차를 자주 수행해야 한다.

4. 가장 중요한 소프트웨어 기능 중에는 사용자가 결코 보지 못하는 것들도 있다.

5. 무작위로 컴퓨터를 선택해서 전원을 꺼야 한다.

6. 6개월 이내에 공개될 페이스북Facebook의 모든 기능의 코드가 독자의 브라우저 안에 이미 들

어 있을 가능성이 크다.

7. 하루에 소프트웨어를 여러 번 갱신하는 데에는 사람의 노력이 거의 필요하지 않다.

8. 호출대기 중이라고 해서 반드시 스트레스를 받거나 일이 힘들어야 하는 것은 아니다.

9. 기계(컴퓨터)가 작동 중인지를 사람이 감시할 필요는 없다.

10. 실험과 증거가 관여하는 과학적 원리들을 이용해서 운영과 관리를 수행하는 것이 가능하다.

11. 구글은 좀비들이 쳐들어왔을 때의 대응 방안에 관한 예행연습을 수행한 적이 있다.

이 문장들은 모두 참이다. 이 책을 다 읽고 나면 왜 그런지 알게 될 것이다.

이 책은 대규모 클라우드 기반 서비스, 즉 수백만 또는 수십억의 사용자들을 위한 인터넷 기반

서비스의 구축과 운영에 관한 책이다. 해당 기법들을 채용하는 기업들이 매일같이 늘어난다는 점에

서, 이 책은 모든 사람을 위한 책이라 할 수 있다.

이 책의 대상 독자는 시스템 관리자(system administrator )들과 그들을 관리하는 관리자

(manager )들이다. 독자가 컴퓨터 과학에 대한 배경 지식을 갖추고 있다고 가정하지는 않지만,

UNIX/Linux 시스템 관리와 네트워킹에 관한 경험이 있고 운영 시스템 개념들에 익숙하다고 가정

한다.

서문

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

8

이 책의 초점은 클라우드 기반 서비스의 사용법이 아니라, 그런 클라우드를 구성하는 서비스들

을 구축하고 운영하는 방법이다.

클라우드 서비스는 항상 사용 가능해야(가용성) 하고 빨라야(속도) 하며 안전해야(보안) 한

다. 클라우드 규모에서 이들을 모두 달성하는 것은 공학적으로 대단히 어려운 일이다. 따라서 클라

우드 규모 서비스는 전형적인 전사적(enterprise ) 서비스와는 다른 방식으로 설계해야 한다. 가용

성이 중요한 것은, 인터넷이 24×7 (하루 24시간, 주 7일)로 열려 있고 모든 시간대에 사용자들이

있기 때문이다. 속도가 중요한 것은, 서비스가 느리면 사용자들이 짜증을 내며, 결과적으로 더 빠른

경쟁 서비스에 밀려나기 때문이다. 보안이 중요한 것은, 우리는 다른 사람들의 자료를 관리하며, 따

라서 다른 사람의 자료를 보호할 의무가 있기(법적으로나 도의적으로나) 때문이다.

이러한 요구사항들은 서로 맞물려 있다. 가용성의 정의로 볼 때, 안전하지 않은 사이트는 가용

성이 없는 것이다. 그리고 빠르지 않은 사이트는 가용성이 충분치 않은 것이다. 속도의 정의로 볼

때, 가동이 중단된 사이트는 빠르지 않은 것이다.

클라우드 규모 서비스들 중 일반 사용자들의 눈에 가장 잘 띄는 것은 웹사이트이다. 그러나 인

터넷으로 접근하긴 하지만 웹 브라우저로 접근하는 것이 아닌, 보이지 않는 인터넷 기반 서비스들의

거대한 생태계가 존재한다. 예를 들어 스마트폰 앱들은 API 호출을 통해서 클라우드 기반 서비스들

에 접근한다.

이 책의 나머지 부분에서는 ‘클라우드 컴퓨팅’ 대신 ‘분산 컴퓨팅’이라는 용어를 주로 사용한다.

클라우드 컴퓨팅cloud computing은 사용하는 사람마다 그 뜻이 다른 마케팅 용어이다. 반면 분산 컴퓨

팅(distributed computing )은 한 대가 아니라 여러 대의 기계들을 이용해서 응용 프로그램과

서비스를 제공하는 구조(architecture )를 뜻한다.

이 책은 시기를 타지 않는 근본적인 원리(principle )들과 관행(practice; 실천 사항)들을 다

룬다. 따라서 특정 제품이나 기술을 사용하라고 독자에게 권하지는 않는다. 가장 인기 있는 다섯 가

지 웹 서버나 NoSQL 데이터베이스, 지속적 구축 시스템을 독자에게 추천할 수도 있겠지만, 그러

면 출판되는 순간 이 책은 구식이 되어버린다. 대신 이 책은 그런 제품이나 시스템을 선택할 때 독자

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

9

가 반드시 살펴봐야 할 품질들을 논의한다. 이러한 접근방식은 시간이 흘러서 기술들이 변해도 독자

가 이 업계에서 여전히 준비된 전문가로 남게 하기 위한 것이다. 물론 요점을 설명하는 과정에서 특

정 기술이나 제품들을 언급하긴 하지만, 그런 제품들과 서비스들을 우리 저자들이 특별히 보증하는

것은 아니다.

이 책은 종종 이상주의적인 태도를 취하는데, 이는 의도적인 것이다. 이 책은 독자가 추구해야

할 더 나은 상황을 제시한다. 이 책에서 우리 저자들은 기준을 높이고자 했다.

이 책의 구성

이 책은 크게 두 부(part )로 이루어져 있다. 제1부는 ‘설계’이고 제2부는 ‘운영’이다.

제1부는 크고 복잡한 클라우드 기반 분산 컴퓨팅 시스템의 설계에 관한 우리 저자들의 생각을

담고 있다. ‘소개’ 장 다음의 제1장부터는 최하층에서부터 최상층까지 설계의 각 요소를 차례로 살펴

본다. 이 책에서는 분산 시스템을 컴퓨터 과학자가 아니라 시스템 관리자의 관점에서 다룬다. 시스

템을 운영하려면 그 내부를 반드시 이해해야 한다.

제2부는 그러한 시스템을 운영하는 방법을 설명한다. 처음 몇 장(chapter )들은 가장 근본적인

주제들을 다루고, 그 이후의 장들은 좀 더 내밀한 기술적 활동들을 파고든다. 마지막 장들에서는 그

때까지 다룬 모든 것을 통합하는 고수준 계획 수립과 전략을 논의한다.

제2부 다음에는 운영팀을 위한 평가 체계, 분산 시스템의 역사(저자들의 의견이 강하게 반영

된), 본문에 언급된 문서 양식들, 추천 읽을거리, 참고문헌들이 나온다.

특히, 이번 책에서 운영팀 평가 체계를 소개하게 되어서 아주 기쁘다. 이 체계는 독자가 스스로

자신의 운영을 평가하고 개선점을 찾는 데 사용할 수 있는 일련의 질문들로 이루어져 있다. 평가 질

문들과 ‘징표’ 제안들은 부록 A에 있다. 제20장은 이 체계의 활용 설명서에 해당한다.

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

10

제1부 설계: 시스템 만들기

제1장 분산 세계에서의 설계 ·······분산 시스템 설계의 개요.

제2장 운영을 위한 설계 ············매끄러운 운영을 위해 소프트웨어가 갖추어야 할 기능들.

제3장 서비스 플랫폼 선택 ··········물리적 기계와 가상 기계, 사설 클라우드와 공용 클라우드.

제4장 응용 프로그램 구조 ·········· 웹 응용 프로그램이나 기타 응용 프로그램의 작성을 위한

구축 요소들.

제5장 규모 변화를 위한 설계 패턴 ···서비스의 성장을 위한 구축 요소들.

제6장 탄력성을 위한 설계 패턴 ······고장을 견디는 시스템의 작성을 위한 구축 요소들.

제2부 운영: 시스템 실행하기

제7장 분산 세계에서의 운영 ········분산 시스템 실행의 개요.

제8장 개발운영 문화 ··············개발운영 문화 및 그 역사와 관행의 소개.

제9장 서비스 인도: 구축 국면 ·······실무 운영을 위해 서비스를 구축하고 준비하는 방법.

제10장 서비스 인도: 배치 국면 ······서비스를 검사, 승인하고 실무에 투입하는 방법.

제11장 활성 서비스의 업그레이드 ···가동 중단 없이 서비스를 업그레이드하는 방법.

제12장 자동화 ···················도구 작성과 운영 작업 자동화.

제13장 설계 문서 ·················설계와 의도를 문서를 통해 의사소통하는 방법.

제14장 호출대기 ··················예외 상황 다루기.

제15장 재난 대비 ················· 계획 수립과 연습을 통해서 시스템을 더 강하게 만드는

방법.

제16장 감시의 기초 ···············감시 기술과 전략.

제17장 감시 시스템의 구조와 관행 ··감시의 구성요소와 관행.

제18장 수용량 계획 수립 ··········· 추가 자원이 필요해지기 전에 자원들을 마련하고 제공하

는 방법.

Page 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의 도움을 받았다.

Page 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에게 감사한다.

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

Page 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

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

331.3 조합

이 책의 목표는 독자가 가능한 최상의 클라우드 규모 서비스를 구축하고 운영하는 데 도움을

주는 것이다. 그럼 우리가 만들고자 하는 이상적인 환경을 살펴보자.

사업 목표

간단히 말해서, 우리가 추구하는 이상적인 환경의 최종 결과는 사업 목표(business

objective; 또는 경영목표, 업무 목표)들을 만족하는 것이다. 좀 따분하게 들리겠지만, 사실

회사 전체가 같은 목표에 전념해서 함께 일한다는 것은 상당히 신나는 일이다.

이를 달성하려면 반드시 사업 목표들을 파악한 후 그로부터 되짚어 나아가서 이상적인 시

스템(우리가 구축해야 하는)에 도달해야 한다.

사업 목표들을 만족하려면 우선 그 목표들이 무엇인지 알아야 하고, 그것들을 달성하는 계

획을 세워야 하고, 그 계획의 수행을 방해하는 걸림돌들을 처리해야 한다.

잘 정의된 사업 목표들은 측정 가능하며, 그런 측정치들을 자동화된 방식으로 수집할 수

있다. 그로부터 현황판(dashboard )을 자동으로 생성하면 모두가 진행(progress ) 정도를

파악할 수 있게 된다. 이러한 투명성은 신뢰도를 높여준다.

다음은 사업 목표의 예 몇 가지이다.

소개

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

34 1장 분산 세계에서의 설계

● 우리 제품을 웹사이트를 통해서 판매한다.

● 서비스를 99.99%의 시간으로 제공한다.

● 월 x 백만 건의 구매를 처리하고, 매달 10% 성장한다.

● 한 주에 두 번 새 기능을 도입한다.

● 주요 버그들을 24시간 안에 잡는다.

이상적인 환경에서 사업팀과 기술팀은 자신의 사업 목표와 프로젝트 목표를 예측 가능하고 신

뢰성 있게 달성한다. 이 덕분에, 사업팀과 기술팀 둘 다 상대방 팀이 그들의 향후 목표들을 달

성하리라고 믿는다. 그 결과로 팀들은 더 나은 계획을 세우게 된다. 팀들은 외부 의존성들이 실

패하지* 않을 것이라는 믿음이 있기 때문에 좀 더 공격적인 계획을 세울 수 있다. 그러면 더욱

공격적인 계획 수립이 가능해진다. 이러한 접근방식은 회사 전체를 관통하며 진행을 가속화하

는 상향 나선을 만들어냄으로써 모두에게 이득이 된다.

이상적인 시스템 구조

이상적인 서비스는 견고한 시스템 구조(architecture ) 위에 구축된다. 그러한 구조는 오늘날

의 서비스들이 요구하는 조건들을 만족하며, 시스템이 유명해져서 더 많은 소통량을 받게 될

때 시스템의 규모를 성장시키는 방법이 명확하다. 이상적인 구조는 장애(failure; 고장)에 대

한 탄력성(resiliency; 회복력)을 갖추고 있다. 그런 시스템은 장애를 예기치 못한 예외로 취

급하지 않는다. 대신 하드웨어 및 소프트웨어의 장애를 정보기술(information technology,

IT )의 물리학(physics )의 일부로 포용한다. 그 결과로 구조에는 장애를 우회하는 중복

(redundancy ) 및 회복 기능들이 포함된다. 개별 구성요소는 실패해도 시스템은 살아남는다.

서비스를 구성하는 각 하위 시스템은 그 자체로 서비스이다. 모든 하위 시스템은 응용 프

로그래밍 인터페이스(API )를 통해서 프로그래밍할 수 있다. 따라서 전체 시스템은 여러 하

위 서비스가 서로 연결된 하나의 생태계이다. 이를 서비스 지향 구조(service-oriented

architecture, SOA )라고 부른다. 이러한 시스템들은 모두 동일한 바탕 프로토콜을 통해서 통

신하므로, 시스템들의 관리 방식에 통일성이 존재한다. 각 하위 서비스는 다른 서비스들과 느

*  옮긴이_ 이런 문맥에서 어떤 요소가 ‘실패한다’는 것은 소프트웨어 오작동이나 하드웨어 고장 등의 장애가 발생해서 그 요소가 자신에게

주어진 임무를 다하지 못하는 것을 말한다.

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

351.3 조합

슨하게 결합되어 있기 때문에, 각자 독립적으로 확장, 업그레이드, 대체할 수 있다.

기반구조(infrastructure )의 구성은 전자적인 파일 형태로 서술한다. 이러한 전자

적 서술을 IT 자동화 시스템이 읽어서, 사람의 개입 없이 자동으로 실무 환경(production

environment )을 구축한다. 이러한 자동화 덕분에 전체 기반구조를 다른 장소에서 재생성하

는 것이 가능하다. 소프트웨어 기술자들은 이러한 자동화를 이용해서 개인적으로 사용할 소규

모 버전의 환경을 생성한다. 비슷하게, 품질 및 검사 기술자들은 자동화를 이용해서 시스템 검

사를 위한 환경을 생성한다.

이러한 ‘코드로서의 기반구조(infrastructure as code )’는 그것을 실행하는 기계(컴퓨터)

가 물리적 기계이든 가상 기계(virtual machine )이든, 그리고 그런 기계들이 데이터센터에

있든, 우리가 직접 운영하든, 또는 클라우드 제공자가 제공한 환경에 상주하든 달성 가능하다.

가상 기계들을 사용하는 경우에는 자명한 API를 통해서 새 기계를 손쉽게 배치할 수 있다. 물

리적 기계를 사용한다고 해도, 단순한 쇳덩어리에서 실제로 작동하는 시스템으로의 전체 흐름

을 자동화할 수 있다. 우리가 생각하는 이상적인 세계에서는 자동화 덕분에 물리적 기계와 가

상 기계의 조합을 이용해서 환경을 생성하는 것이 가능하다. 개발자들이 가상 기계들로부터 환

경을 구축할 수도 있다. 실무 환경은 물리적 기계와 가상 기계의 혼합으로 구성될 수 있다. 예

기치 않게 일시적으로 용량(수용량) 추가가 필요한 경우에는 실무 환경을 일정 기간 하나 이상

의 클라우드 제공업체들로 확장해야 할 수도 있다.

이상적인 릴리스 과정

이상적인 환경에서는 개발 단계에서 운영(operation ) 단계로 코드가 매끄럽게 흘러간다.

전통적인 환경(지금 말하는 이상적인 환경이 아닌)에서 그러한 흐름은 다음과 같은 모습이다.

1. 개발자가 코드를 저장소(repository )에 체크인한다.

2. 검사 기술자(test engineer )는 코드에 대해 일단의 검사들을 적용한다.

3. 코드가 모든 검사를 통과했으면, 릴리스 기술자(release engineer )는 소프트웨어의 배

치(deploy )에 쓰일 패키지를 구축한다. 대부분의 파일은 소스 코드 저장소에서 가져오지

만, 일부 파일은 그래픽 부서나 문서화 작성자 같은 다른 출처에서 가져와야 할 수도 있다.

4. 검사 환경을 생성한다. 단, ‘코드로서의 기반구조’ 모형은 적용하지 않는다(그러려면 몇 주

가 걸릴 수 있다).

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

36 1장 분산 세계에서의 설계

5. 패키지를 검사 환경에 배치한다.

6. 검사 기술자가 추가 검사들을 수행한다. 여기서 초점은 하위 시스템들 사이의 상호작용

이다.

7. 모든 검사가 성공적이면 코드를 실무 환경에 투입한다.

8. 시스템 관리자는 시스템을 업그레이드하되, 장애가 발생하는지 살펴본다.

9. 장애가 발생했다면 소프트웨어를 이전 상태로 되돌린다(roll back ).

이러한 단계들을 사람이 직접 수행하는 것은 아주 위험하다. 작업에 적합한 사람이 있어야 하

고, 단계들을 매번 같은 방식으로 수행해야 하며, 그 과정에서 실수가 없어야 하고, 모든 과제

를 제시간 안에 끝내야 한다는 조건들이 모두 만족되어야 하기 때문이다.

물론 실수, 버그, 오류는 항상 발생한다. 그 결과로 결함(defect )들이 과정의 다음 단계로

전파된다. 실수가 발견되면 진행의 흐름을 되돌려서, 이전 단계를 담당한 팀원들에게 문제를

알려서 바로잡게 해야 한다. 이는 진행이 멈추어서 시간이 낭비됨을 뜻한다.

위험이 큰 과정에 대한 사람들의 전형적인 반응은 그런 과정을 최대한 피하는 것이다. 그

래서 릴리스를 최대한 줄이려는 유혹에 빠진다. 그 결과로 ‘거대규모 릴리스(mega-release )’

를 한 해에 몇 번만 내놓는 현상이 나타난다.

그러나 그런 거대규모 릴리스는 수많은 변화를 한꺼번에 적용하는 것이므로 사실은 위험

이 더 커진다. 수천 개의 변경 사항들을 동시에 릴리스했을 때 첫 시도에서 모든 것이 제대로

되리라고 확신할 수 있는가? 그럴 수는 없다. 이 때문에 변화를 더욱 꺼리고 두려워하게 된다.

결국에는 변화가 거의 불가능해져서 더 이상의 혁신이 일어나지 않는다.

우리가 말하는 이상적인 환경에서는 그렇지 않다.

이상적인 환경에서는 소프트웨어 구축과 검사, 릴리스, 배치 과정의 모든 수동 단계들을

자동화를 이용해서 제거한다. 자동화는 검사들을 정확하고 일관되게 수행하기 때문에 결함이

다음 단계로 전파되는 일이 없다. 그 결과로 진행의 흐름은 항상 단방향, 즉 전진 방향이다.

이상적인 환경에서는 거대규모 릴리스 대신 미세규모 릴리스(micro-release )를 만든다.

작은 변화들로 이루어진 배치를 자주 수행함으로써 위험도를 낮춘다. 실제로, 하루에 배치를

100번 할 수도 있다.

1. 개발자가 코드를 체크인하면 시스템은 그 사실을 감지하고 일련의 자동화된 검사들을 실행

한다. 그 검사들은 기본적인 코드 기능성을 확인한다.

2. 그 검사들이 통과되었다면 패키지 구축 과정이 실행된다. 이 역시 완전히 자동화된 방식으

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

371.3 조합

로 진행된다.

3. 새 패키지가 성공적으로 만들어지면 검사 환경 생성 과정이 시작된다. 예전에는 검사 환경

을 구축하려면 한 주 내내 케이블을 연결하고 기계를 설치하는 수고가 필요했다. 그러나 코

드로서의 기반구조 모형에서는 전체 환경을 사람의 개입 없이 빠르게 생성할 수 있다.

4. 검사 환경이 완성되면 일련의 자동화된 검사들을 실행한다.

5. 검사들이 성공적으로 끝나면 새 패키지를 실무 환경으로 롤아웃roll-out한다. 이 롤아웃 역시

자동으로 진행되지만, 체계적이고 조심스럽게 진행된다.

6. 일부 시스템을 먼저 업그레이드해서 장애가 발생하는지 본다. 검사 환경은 실무 환경을 구

축하는 데 쓰이는 것과 동일한 자동화를 통해서 구축되므로, 두 환경 사이의 차이는 아주

적어야 한다.

7. 장애가 없다면 전체 실무 환경이 업그레이드될 때까지 새 패키지를 점점 더 많은 시스템에

롤아웃한다.

이상적인 환경에서는 모든 문제가 실무 환경에 도달하기 전에 검출된다. 즉, 롤아웃은 검사의

형태가 아니다. 실무 환경으로의 롤아웃 도중의 장애는 본질적으로 제거된다. 그런데도 장애가

발생한다면, 이를 아주 심각한 문제로 간주해서 새 릴리스를 실무 환경에 투입하는 것을 멈추

고 먼저 근본 원인을 분석한다. 분석 후에는 이후 이러한 장애를 검출하고 재발을 방지하는 데

필요한 검사들을 추가한다. 이러한 과정 덕분에 시스템은 시간이 지남에 따라 더욱 강해진다.

이러한 자동화 덕분에 기존의 릴리스 공학, 품질 보증, 배치 관련 인력은 기존 회사에서 자

신이 주로 하던 일을 사실상 인식하지 못하게 된다. 수많은 시간의 수고로운 노동(‘고역’)이 사

라지며, 따라서 패키지 작성 시스템과 소프트웨어 품질을 개선하고 배치 공정을 다듬는 데 더

많은 시간을 투여할 수 있다. 다른 말로 하면, 사람들은 자신의 작업 자체를 수행하는 것보다

그 작업이 수행되는 방식을 개선하는 데 더 많은 시간을 사용한다.

서드파티third-party 소프트웨어에도 비슷한 과정이 적용된다. 환경의 모든 시스템을 회사 내

부에서 직접 만들지는 않으며, 해당 소스 코드가 주어지지 않는 경우도 많다. 서드파티 서비스

와 제품의 배치 역시 릴리스와 검사, 배치와 비슷한 패턴을 따른다. 단, 이 제품들과 서비스들

은 외부에서 개발되므로, 약간 다른 과정이 필요하다. 새 릴리스가 나오는 횟수가 상대적으로

적으며, 각각의 새 릴리스에 포함되는 기능을 우리가 원하는 만큼 제어할 수가 없다. 일반적으

로 이런 구성요소들을 검사할 때에는 기능(feature ), 호환성, 통합(integration )과 관련된 검

사들이 필요하다.

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

38 1장 분산 세계에서의 설계

이상적인 운영

일단 코드가 실무 환경에 배치되고 나면 운영 목표(operational objective )들이 중요해진다.

운영 감시(monitoring )를 위해, 소프트웨어에 계장(instrumentation )을 위한 코드를 포함

해 둔다. 계장 코드는 내부 API로 요청된 트랜잭션들뿐만 아니라 외부 사용자가 요청한 트랜잭

션들을 처리하는 데 걸린 시간도 수집한다. 또한 메모리 사용량 같은 다른 지표들도 감시한다.

이러한 자료 수집 덕분에, 운영상의 결정을 추측이나 운, 희망이 아니라 자료에 근거해서 내릴

수 있다. 수집된 자료를 수년간 축적하므로, 향후의 수용량 증가 필요성을 예측하는 데 활용할

수도 있다.

측정(measurement )은 내부 문제점을 검출하는 데 쓰인다. 특히 측정은 내부 문제점이

아직 작을 때, 즉 사용자에게 보이는 운영 중단(outage )으로까지 번지기 전에 잡아내는 데 유

효하다. 이상적인 운영에서는 문제점들을 운영 중단으로 이어지기 전에 바로잡는다. 실제 운영

중단은 드물며, 아주 세심하게 조사해야 한다. 문제점이 검출되면 그런 문제점을 식별, 처리해

서 빠르게 해결할 수 있게 하는 과정이 진행된다.

자동화된 시스템은 문제점을 검출해서 호출대기(oncall ) 중인 사람에게 경보(alert )를

보낸다. 호출대기 일정은 순번제(rotation )로 정하되, 각 교대근무(shift )* 기간에 평균적으

로 감당할 수 있는 개수의 경보를 받을 수 있도록 시간을 조율한다. 임의의 주어진 시간에서 주

된 호출대기자는 한 사람이며, 그 사람이 경보를 가장 먼저 받게 된다. 그 사람이 제때 응답하

지 않으면 두 번째 사람에게 경보가 전달된다. 호출대기 일정은 사람들이 휴가, 여가 활동, 개

인 시간을 계획할 수 있을 정도로 충분히 미리 준비한다.

발생할 수 있는 모든 경보를 처리하는 방법을 알려주는 ‘각본(playbook; 대응 매뉴얼)’이

존재한다. 각 종류의 경보마다 문제점과 그것이 업무에 미치는 영향 및 해결책을 기술적으로

서술해서 문서화한다. 각본은 계속 개선된다. 호출대기자는 각본에 따라 문제점을 바로잡는다.

각본의 해결책이 충분치 않음이 드러나면 잘 정의된 상부 보고(escalation ) 절차가 진행된다.

보통의 경우 그 절차에 의해 관련 하위 시스템의 호출대기자에게 문제점이 전달된다. 개발자들

도 호출대기 순번에 참여하므로, 자신들이 구축하는 시스템의 운영상의 애로사항을 이해하게

된다.

*  옮긴이_ 이런 문맥에서 shift는 두 가지 의미로 쓰인다. 예를 들어 하루를 8시간 단위로 나누어서 3교대로 근무한다고 할 때, 여덟 시간

이 지나서 근무자를 교대하는 것을 shift라고 부를 뿐만 아니라 여덟 시간의 근무 기간 또는 그 기간에 하는 일 자체도 shift라고 부른다.

이 번역서에서는 전자를 근무 교대, 후자를 ‘교대근무’로 옮기고, 둘의 구분이 중요하지 않을 때에는 간단히 ‘교대’라고도 한다.

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

391.3 조합

모든 장애에는 그에 해당하는 대응책(countermeasure )이 존재한다. 수동적으로 발동

(활성화)되는 대응책도 있고 자동으로 발동되는 대응책도 있다. 자주 발동되는 대응책들은 항

상 자동화된다. 감시 시스템은 남용(overuse )을 검출한다. 남용은 더 큰 문제점을 나타낼 수

있기 때문이다. 장애율(고장률)을 줄이고 대응책들을 개선하기 위해, 감시 시스템은 기술자들

이 사용하는 내부 지표 자료를 수집한다.

대응책이 덜 자주 발동될수록, 그것이 다음번에 필요할 때 잘 작동하리라는 확신 역시 낮

아진다. 그래서, 덜 자주 발동되는 대응책들에 대해서는 주기적으로, 그리고 자동으로 해당 장

애를 일으켜서 대응책을 발동시켜본다. 비상시 어떻게 행동해야 할지를 모두가 숙지하도록 학

생들에게 화재 대피 훈련을 시키는 것과 마찬가지로, 이상적인 운영 환경에서는 운영에 관한

‘화재 대피 훈련’을 실시한다. 그러면 팀은 대응책 구현에 관한 경험을 쌓게 되며, 대응책이 잘

작동하리라는 확신이 높아진다. 데이터베이스 장애 조치(failover ) 과정이 예기치 않은 의

존성 때문에 작동하지 않을 수도 있는데, 그런 문제점을 일요일 새벽 4시의 운영 중단 상황에

서 알게 되는 것보다는 월요일 아침 10시의 현장 훈련에서 알게 되는 것이 낫다. 이 역시 반복

(repetition )을 꺼리기보다는 증가함으로써 위험을 줄인다는 원칙에 해당한다. 반복을 통해

서 뭔가에 능숙해지는 것을 전문 용어로 ‘연습(practice )’이라고 부른다. 우리는 “연습이 완벽

함을 만든다”는 점을 굳게 믿는다.*

이상적인 환경은 규모 확장(scaling up )이 자동으로 일어난다. 수용량(capacity )이 더

필요해지면 내부 또는 외부 클라우드 제공자로부터 추가 수용량이 도입된다. 단순히 RAM이나

디스크, CPU를 더 투입하는 것보다 구조를 재정립하는 것이 더 나은 해결책일 수도 있는데,

그런 시점이 되었는지는 현황판을 보고 판단할 수 있다.

규모 축소(scaling down ) 역시 자동적이다. 시스템에 과부하가 걸렸거나 퇴행한

(degraded ) 경우에도 “503—Service Unavailable” 오류로 사용자를 외면하는 일은 결코

없다. 대신 시스템은 자동으로 자원을 덜 사용하는 알고리즘으로 전환한다. 대역폭이 소진되

면 서비스의 저대역폭 버전이 작동해서 그래픽을 덜 표시하거나 좀 더 단순화된 사용자 인터페

이스를 표시한다. 데이터베이스가 깨져도, 서비스의 읽기 전용 버전을 통해서 사용자 대부분을

만족시킨다.

*  옮긴이_ practice는 문맥에 따라 연습, 실천, 관행 등 여러 한국어 단어에 대응된다. 이 번역어에서 주로 쓰이는 것은 ‘관행’이다. 관행

과 연습은 동전의 양면과 같다. 뭔가에 능숙해지기 위해 여러 번 되풀이해서 수행하는 것을 연습이라고 한다면, 자주 되풀이하다보니 능숙

해진 뭔가가 바로 관행이다. 안타깝게도 일상에서(특히 신문 기사에서) 관행은 부정적인 의미로 쓰이는 경우가 많지만, 이 책에서 말하는

관행은 중립적이다. 단지 나쁜 관행과 좋은 관행이 있을 뿐이다. 일상에서 관행이 긍정적인 의미로 쓰이는 경우로 ‘모범 관행’이 있는데, 이

는 최고의 관행(best practice)에 해당한다.

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

40 1장 분산 세계에서의 설계

서비스의 각 기능을 개별적으로 활성화 또는 비활성화할 수 있다. 어떤 기능이 부정적인

영향(이를테면 보안 구멍이나 예기치 못한 저성능 등)을 미친다는 점이 판명되면, 다른 소프

트웨어 릴리스를 배치하지 않고 그 기능만 비활성화할 수 있다.

한 기능을 개정(revision )해도, 새 코드 때문에 기존 기능성이 제거되지는 않는다. 새 코

드의 행동을 비활성화면 기존 행동이 다시 드러난다. 이는 새로운 사용자 인터페이스를 롤아웃

할 때 특히나 유용하다. 어떤 릴리스가 기존 사용자 인터페이스와 새 사용자 인터페이스를 모

두 생성한다면, 새 사용자 인터페이스를 사용자별로 활성화할 수 있다. 이를 통해 ‘앞서 해보기

(early access )’ 사용자로부터 의견을 받을 수 있게 된다. 공식 릴리스 날짜부터는 점점 더 큰

사용자 그룹들에 대해 새 기능을 활성화한다. 성능 문제가 발견되면 해당 기능을 손쉽게 이전

버전으로 되돌리거나 완전히 꺼버릴 수 있다.

이상적인 환경에는 운영상의 훌륭한 예방 조처가 존재한다. 마치 이를 닦듯이, 우리는 운

영을 위생적으로 유지하는 데 필요한 일들을 정기적으로 수행한다. 모든 대응책과 과정, 경보

를 처리하는 방법에 대한 깔끔한 문서화를 마련하고 갱신한다. 과민반응 경보도 무시하지 않고

세밀하게 조율한다. 해결되지 않은 버그들의 개수를 최소한으로 유지한다. 운영 중단이 발생하

면 향후 시스템 개선안을 포함한 사후 분석(postmortem ) 보고서를 발행한다. 모든 ‘응급조

치(quick fix )’ 후에는 근본 원인을 분석하고 장기적인 해결책을 구현한다.

가장 중요하게는, 개발자들과 운영자들이 자신들을 서로 구별되는 두 개의 팀으로 생각하

지 않는다. 이들은 단지 커다란 한 팀 안에서 각자 특화된 임무를 수행하는 것일 뿐이다. 한 팀

안에서 다른 사람보다 코드를 더 많이 작성하는 사람이 있는가 하면 다른 사람보다 운영 프로

젝트를 더 많이 수행하는 사람이 있는 것이지, 팀 자체가 실제로 구분된 것은 아니다. 모든 사

람은 가동시간(uptime )을 길게 유지할 책임을 공유한다. 이를 위해 모든 구성원은 호출대기

(호출기를 이용한) 순번제에 참여한다. 운영상의 애로사항을 직접 체험한 개발자는 운영에 영

향을 미치는 코드를 대단히 적극적으로 개선하게 된다. 마찬가지로, 운영자가 개발자와 생산적

으로 협동하기 위해서는 개발 과정을 이해할 필요가 있다.

이상이 우리가 생각하는 이상적인 환경이다. 이 책의 나머지 부분은 이를 만들고 실행하는 방

법을 설명한다.

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

411.3 조합

설계: 시스템 만들기

Part

I

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

CHAPTER 1 분산 세계에서의 설계

CHAPTER 2 운영을 위한 설계

CHAPTER 3 서비스 플랫폼 선택

CHAPTER 4 응용 프로그램 구조

CHAPTER 5 규모 변화를 위한 설계 패턴

CHAPTER 6 탄력성을 위한 설계 패턴

Part I

설계: 시스템 만들기

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

43

소프트웨어를 만드는 방법은 두 가지이다. 하나는 결함이 없음이 명백할

정도로 단순하게 만드는 것이고, 또 하나는 명백한 결함이 드러나지 않을

정도로 복잡하게 만드는 것이다.

- C.A.R. 호어Hoare, 1980년 ACM 튜링상 수상 강연에서

구글 검색(Google Search )은 어떻게 작동할까? 페이스북Facebook 타임라인이 24시간 쉬지 않

고 최신의 상태를 유지하고, 아마존Amazon이 점점 커지는 제품 카탈로그를 제때 스캔해서 이 제

품을 산 사람들이 양말도 샀다는 점을 알려줄 수 있는 비결은 무엇일까?

마법일까? 그렇지 않다. 비결은 분산 컴퓨팅(distributed computing )이다.

이번 장은 분산 컴퓨팅 기술을 사용하는 서비스의 설계에 관여하는 것들을 개괄한다. 모든

대형 웹 사이트는 이번 장에서 말하는 것들을 이용해서 자신의 크기와 규모, 속도, 신뢰성을 유

지한다.

분산 컴퓨팅은 대규모 시스템을 구축하는 데 쓰이는 기술로, 핵심은 주어진 작업을 여러

컴퓨터들이 나누어 수행한다는 것이다. 이는 하나의 서비스를 제공하는 소프트웨어를 한 대의

컴퓨터가 실행하는 전통적인 컴퓨팅 시스템이나 여러 컴퓨터가 하나의 중앙집중적 서비스에

접근하는 클라이언트-서버 컴퓨팅과 대조되는 특징이다. 분산 컴퓨팅에서는 수백, 수천의 기

계가 협동해서 하나의 커다란 서비스를 제공한다.

분산 컴퓨팅과 전통적 컴퓨팅의 차이는 여러 가지이다. 그 차이점들 대부분은 분산 컴퓨팅

시스템 자체의 거대한 크기에서 비롯된 것이다. 분산 컴퓨팅 시스템은 수백, 수천의 컴퓨터로

분산 세계에서의 설계

CHAPTER 1

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

44 1장 분산 세계에서의 설계

이루어질 수 있으며, 그것을 사용하는 사용자는 수백만, 처리하는 질의의 수는 수십억 규모일

수 있다.

속도(speed )는 중요하다. 서비스가 빠르고 잘 반응한다는 것은 경쟁에서 유리한 장점이

다. 웹사이트 사용자들은 응답이 약 200ms (밀리초) 이내로 돌아오지 않으면 사이트가 느리다

고 생각한다. 그 시간의 대부분을 네트워크 잠복지연(latency )이 차지하므로, 남은 시간이 그

리 넉넉치 않다. 서비스는 얼마 남지 않은 시간 안에 웹페이지를 조합할 수 있어야 한다.

분산 시스템에서는 장애가 일상다반사이다. 하드웨어 고장은 드물지만, 기계가 수천 대이

면 장애가 더 이상 드물지 않은 일이 된다. 따라서 항상 장애가 발생할 것을 가정하고 그것을

극복할 수 있도록 시스템을 설계해야 하며, 장애를 예상하고 소프트웨어를 구현해야 한다. 분

산 세계에서 장애는 이미 예상된 풍경의 일부이다.

분산 시스템은 크기가 어마어마하기 때문에, 그 운영을 반드시 자동화해야 한다. 수백, 수

천 대의 기계가 관여하는 작업을 사람이 손으로 직접 하는 것은 비현실적이다. 소프트웨어의

준비와 배치, 일상적인 운영, 장애 처리에서 자동화는 필수적인 수단이다.

알아야 할 용어들

서버(server ): 어떠한 기능(function )이나 응용 프로그래밍 인터페이스(API )를 제공하는 소

프트웨어. (서버 하드웨어를 말하는 것이 아님.)

서비스(service ): 여러 개의 서버로 이루어진, 사용자에게 보이는 시스템 또는 제품.

기계(machine ): 가상 또는 물리적 기계.*

QPS: queries per second, 즉 초당 질의 수의 약자. 흔히 초 당 웹페이지 방문 횟수나 API

호출 횟수를 뜻한다.

소통(traffic ): 서버에 전달된 질의나 API 호출, 기타 요청들을 통칭하는 용어.

퍼포먼트(performant ): 시스템의 성능이 설계상의 요구사항들을 준수하는(만족 또는 초과)

상태임을 뜻하거나 그러한 시스템을 가리키는 용어로, “performance”와 “conformant”를 합

쳐서 만든 신조어이다.

응용 프로그래밍 인터페이스(Application Programming Interface, API ): 서버와 서버의 의

사소통을 관장하는 규약(프로토콜).

*  옮긴이_ 간단히 말해서 컴퓨터를 뜻하나, 흔히 보는 데스크톱 컴퓨터뿐만 아니라 모든 ‘계산 가능한’ 디지털 기기를 아우르는 용어이다.

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

451.1 대규모 시스템의 가시성

1.1 대규모 시스템의 가시성

대형 분산 시스템을 관리하기 위해서는 시스템의 가시성(visibility )을 확보할 필요가 있다. 내

부 상태를 조사하는 것을 내성(introspection; 자기 조사)이라고 부르는데, 대형 시스템의 운

영, 디버깅, 조율, 보수를 위해서는 내성 능력이 꼭 필요하다.

전통적인 시스템에서는 한 사람의 기술자가 모든 핵심 구성요소를 감시하거나 시스템의

문제점을 경험에 근거해서 ‘즉시 알아내는’ 것이 가능했다. 그러나 대형 시스템에서는 그런 수

준의 가시성을 반드시 의도적인 설계(정보를 추출하고 그것을 사람이 볼 수 있게 하는)를 통

해서 확보해야 한다. 사람 한 명이나 팀 하나가 시스템의 모든 부분을 직접 챙기는 것은 불가능

하다.

따라서 분산 시스템에서는 구성요소들이 시스템 안에서 일어난 일을 상세히 말해주는 로

그log들을 풍부하게 기록해야 한다. 그리고 그 기록들을 취합해서 한 곳으로 모으고, 저장하고,

분석해야 한다. 시스템이 아주 높은 수준의 정보를 기록할 수도 있다. 예를 들어 사용자가 제품

을 구매할 때마다 로그를 기록하거나 각각의 웹 질의나 API 호출마다 로그를 기록할 수 있다.

또한 코드의 핵심 부분에서 일어난 모든 함수 호출의 매개변수들 같은 더 낮은 수준의 정보도

기록할 수 있다.

시스템은 측정치(metrics )들을 외부에 제공해야 한다. 특정 API 호출 등 관심의 대상이

되는 사건들의 횟수를 세어야 하며, 그러한 횟수를 시스템 외부에서 볼 수 있게 해야 한다.

많은 경우, 시스템은 내부 상태를 특별한 URL을 통해서 제공한다. 예를 들어 Apache

HTTP 웹 서버에는 ‘서버 상태’ 페이지(http://www.example.com/server-status/ )가

있다.

또한, 종종 분산 시스템의 구성요소들은 자신의 건강을 검진하고 그 결과를 가시화한다.

예를 들어 구성요소가 특정 URL을 통해서 시스템이 새 요청을 받을 준비가 되었음을 뜻하는

문자열 “OK”를 제공한다고 하자. 그 URL이 바이트 O 다음에 바이트 K로 이루어진 출력 이외

의 어떤 것을 돌려주었다면(또는 아무것도 돌려주지 않았다면), 시스템이 아직 새 요청을 받

을 준비가 되지 않은 것이다. 부하 분산기(load balancer )는 이러한 정보를 이용해서 서버가

잘 돌아가고 있으며 소통량을 받을 준비가 되었는지 판단한다. 서버가 아직 시동 중이고 초기

화가 끝나지 않았거나 종료 중이면, 또는 기존 요청들은 처리하고 있지만 새 요청을 받지는 않

을 상황이면, 서버는 부정적인 응답을 보낸다.

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

46 1장 분산 세계에서의 설계

1.2 단순함의 중요성

서비스의 요구들을 만족하는 한에서 설계를 최대한 단순하게 유지하는 것이 가능하다. 시스템

은 시간이 흐르면서 점차 성장하고 복잡해진다. 처음부터 복잡한 시스템으로 시작하는 것은 애

초에 불리한 상태로 시작하는 것이라 할 수 있다.

시스템을 경쟁력 있게 운영하려면 운영자의 머릿속에 시스템에 대한 심적心的 모형(mental

model )이 갖추어져 있어야 한다. 시스템을 구축할 때에는 머리 속에서 시스템을 운영해 보면

서 그 심적 모형을 이용해서 시스템의 작동 방식을 추적하며, 시스템이 제대로 돌아가지 않아

서 디버깅할 때에도 그 심적 모형에 의존한다. 시스템이 너무 복잡하면 그 누구도 시스템 전체

를 머릿속으로 이해하지 못하는 상황에 부닥친다.

The Elements of Programming Style (Kernighan & Plauger 1978 )에는 다음과 같은

문구가 나온다.

디버깅은 애초에 코드를 작성하는 것보다 두 배 더 어렵다. 따라서, 만일 여러분이 코드를 최

대한 영리하게 작성했다면, 정의에 의해 여러분은 그 코드를 디버깅할 수 있을 정도로 영리하

지는 못한 것이다.

이는 분산 시스템에서도 참이다. 설계를 단순화하는 데 들인 모든 시간은 시스템 운영 시 거듭

해서 보상으로 돌아온다.

1.3 조합

분산 시스템은 다수의 더 작은 시스템들로 구성된다. 이번 절에서는 다음과 같은 근본적인 조

합 패턴(composition pattern )들을 상세히 살펴본다.

● 부하 분산기와 다수의 뒷단 복제본들

● 서버와 다수의 뒷단들

● 서버 트리

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

471.3 조합

1.3.1 부하 분산기와 다수의 뒷단 복제본들

첫 조합 패턴은 부하 분산기(load balancer )*를 여러 개의 뒷단 복제들과 결합하는 것이다.

[그림 1.1 ]에서 보듯이, 요청들을 받는 것은 부하 분산기 서버이다. 요청마다 부하 분산기는 하

나의 뒷단(backend )을 선택해서 요청을 전달한다. 뒷단의 응답은 다시 부하 분산기 서버로

오며, 부하 분산기는 그것을 원래의 요청자에게 전달한다.

이러한 뒷단들을 복제본(replica )이라고 부르는데, 이는 이들이 모두 같은 뒷단을 복제한

것들이기 때문이다. 같은 요청에 대해 모든 복제본은 같은 응답을 산출해야 한다.

부하 분산기는 현재 살아 있으며 요청을 받을 준비가 되어 있는 뒷단들을 항상 파악하고 있

어야 한다. 부하 분산기는 초 당 수십 번씩 건강 점검(health check ) 질의를 뒷단들에게 보내

며, 그 점검에 실패한 뒷단들에게는 더 이상 소통 요청을 보내지 않는다. 건강 점검은 반드시

빠르게 처리해야 하는 간단한 질의이다. 건강 점검 질의에 대해 시스템은 자신이 소통 요청을

받아야 하는지의 여부를 돌려주어야 한다.

질의를 전달할 뒷단을 선택하는 과정은 간단한 수도 있고 복잡할 수도 있다. 간단한 방

법은 그냥 뒷단들을 차례로 선택하는 것이다. 이를 흔히 라운드로빈round-robin 방식이라고 부

른다. 그런데 뒷단들의 처리 능력이 다를 수도 있다. 그런 경우에는 비례식 라운드 로빈

(proportional round-robin )을 이용해서 더 강력한 뒷단들을 좀 더 자주 선택할 수도 있

*  옮긴이_ 이 책에서는 다른 문서나 웹에서 흔히 쓰이는 용어인 ‘부하 분산기’를 사용하긴 했지만, 단지 부하를 여러 곳으로 나눌 뿐만 아

니라 그럼으로써 시스템 전체에서 부하의 ‘균형’을 맞춘다는 뜻이 부족하다는 점에서 ‘부하 균형기’라는 용어도 생각해 볼 수 있겠다.

부하 분산기

뒷단2뒷단1 뒷단3

그림 1.1 부하 분산기와 다수의 뒷단 복제본들

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

48 1장 분산 세계에서의 설계

다. 좀 더 복잡한 방법으로는 최소 부하(least loaded ) 방식이 있는데, 이 접근방식에서 부하

분산기는 각 뒷단의 부하를 추적해서 항상 부하가 가장 적은 뒷단을 선택한다.

부하가 최소인 뒷단을 선택하는 것이 합리적인 방식처럼 들리겠지만, 이를 순진하게 구현

하면 재앙이 될 수 있다. 뒷단에 과부하가 걸렸을 때 그 증상이 즉시 나타나지 않고 한참 후에

야 나타날 수도 있기 때문이다. 이런 문제의 근본 원인은 시스템의 부하를 정확히 측정하기 어

렵다는 점이다. 부하를 서버가 최근 받은 연결의 수로 측정한다면, 연결 중에는 오래 유지되는

것도 있고 빨리 끝나는 것도 있다는 점을 간과하게 된다. CPU 사용량을 기준으로 측정한다면,

입출력(I/O ) 과부하를 간과할 수 있다. 흔히 쓰이는 측정 방식은 최근 5분간 발생한 부하의

후행 평균(trailing average )을 구하는 것이다. 그러나 후행 평균은 말 그대로 평균이기 때문

에 현재가 아니라 과거를 반영한다는 문제점이 있다. 그래서 일시적인 급격한 부하 증가가 한

동안 평균에 반영되지 않게 된다.

부하 분산기 하나가 열 개의 뒷단 복제본들과 결합해 있다고 하자. 각 뒷단의 부하는 80%

이다. 여기에 새 뒷단 하나를 추가한다. 새로 추가된 뒷단에는 아직 부하가 걸리지 않으며, 따

라서 부하 분산기는 그 뒷단을 최소 부하 뒷단으로 선택한다. 순진한 최소 부하 알고리즘은 모

든 소통 요청을 새 뒷단에 보내고, 다른 열 개의 뒷단에게는 전혀 보내지 않는다. 그러면 새 뒷

단의 부하가 급증해서 소통 요청들에 완전히 매몰된다. 이전에 열 개의 뒷단이 처리하던 소통

량을 하나의 뒷단이 처리할 수는 없는 일이다. 부하를 후행 평균으로 측정하면 일정 시간 동안

기존 뒷단들은 실제보다 높은 부하량을 보고하며, 새 뒷단은 실제보다 낮은 부하를 보고하게

된다.

이러한 방식에서 부하 분산기는 한참 동안 새 기계의 부하가 다른 모든 기계의 부하보

다 낮다고 믿는다. 그런 상황에서는 새 기계에 과부하가 너무 걸려서 충돌(crash ) 및 재시동

(reboot )으로 이어질 수 있다. 또는, 상황을 타개하기 위해 시스템 관리자가 직접 새 기계를

재시동할 수도 있다. 어떤 경우이든, 새 기계가 다시 서비스에 참여하면 같은 과정이 반복된다.

이런 상황을 생각하면 단순한 라운드로빈 방식이 상당히 괜찮아 보인다. 최소 부하 방식을

좀 더 현명하게 구현해서, 같은 컴퓨터에게 연속해서 보내는 요청의 수를 제한할 수도 있다. 이

를 느린 시작(slow start ) 알고리즘이라고 부른다.

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

491.3 조합

순진한 최소 부하 알고리즘의 문제점

느린 시작 기법을 사용하지 않는 부하 분산기가 문제를 일으킨 사례가 많다. 유명한 사례 하나는

2001년 9월 11일의 9.11 공격 당시 CNN.com 웹 사이트에 생긴 일이다. 너무나 많은 사람이

CNN.com에 접속하려 했기 때문에 뒷단들이 과부하되었다. 한 뒷단이 충돌했으며, 재시동된

후 다시 충돌했다. 이는 순진한 최소 부하 알고리즘 때문에 모든 소통 요청이 그 뒷단으로 몰렸

기 때문이다. 그후 다른 뒷단이 과부하가 걸려서 충돌했다. 이런 식으로 각 뒷단이 한 번에 하나

씩 과부하, 충돌, 재시동 후 다시 과부하(모든 소통량이 몰려서), 충돌하는 과정을 되풀이했다.

결과적으로, 시스템 관리자가 상황을 파악하고 해결하는 동안 서비스가 사실상 사용 불가능한

상태가 되었다. 관련자들의 변명은, 웹이 비교적 새로운 것이라서 9월 11에 발생한 급격한 소통

량 증가 같은 사건을 겪어본 사람이 아무도 없었다는 것이었다.

CNN은 모든 뒷단을 중지한 후 동시에 재시동해서 문제를 해결했다. 그러면 모든 뒷단이 부

하가 하나도 없는 상태로 시작하므로 모두가 같은 양의 소통 요청을 받게 된다.

이후 CNN 팀은 사고 며칠 전에 부하 분산기 소프트웨어의 업그레이드본을 받았지만 미처 설

치하지 못했음을 발견했다. 그 업그레이드본에는 느린 시작 메커니즘이 추가되어 있었다.

1.3.2 서버와 다수의 뒷단들

그다음 조합 패턴은 앞단(frontend ) 서버 하나에 여러 개의 뒷단이 결합하는 형태이다. 요청

을 받은 앞단 서버는 여러 뒷단 서버들에게 질의를 보내고, 뒷단들의 응답을 조합해서 최종적

인 응답을 만든다. 이러한 접근방식은 원래의 질의를 여러 개의 독립적인 질의로 해체하고 그

응답들을 다시 조합해서 최종적인 응답을 만드는 것이 쉬운 경우에 주로 쓰인다.

[그림 1.2 ]의 (a )는 간단한 검색 엔진이 다수의 뒷단들의 도움을 받아서 질의를 처리하는

과정을 보여준다. 앞단 서버가 요청을 받아서 여러 뒷단 서버들에게 질의를 전달한다. 철자 검

사(spell check ) 서버는 앞단이 사용자에게 다른 형태의 철자를 제공하는 데 사용할 수 있는

정보를 담은 응답을 제공한다. 웹 검색 뒷단과 이미지 검색 뒷단은 질의에 관련된 웹 사이트 목

록과 이미지 목록을 담은 응답을 돌려준다. 광고 서버는 질의에 관련된 광고들을 돌려준다. 앞

단은 뒷단들이 제공한 정보를 이용해서 검색 결과 페이지(사용자가 볼)를 구성하는 HTML을

생성한 후 사용자에게 전송한다.

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

50 1장 분산 세계에서의 설계

서버

광고 이미지 검색 웹 검색 철자 검사

(a) 단일

서버

광고

(b) 복제

이미지 검색 웹 검색 철자 검사

그림 1.2 이 서비스는 하나의 서버와 다수의 뒷단으로 구성된다.

[그림 1.2 ]의 (b )는 기본적으로 (a )와 같은 구조이되, 뒷단들을 복제해서 부하의 균형을

맞춘다는 점이 다르다. (a )와 같은 원칙이 적용되나, 규모가변적이고 장애 시 좀 더 잘 살아남

는다.

이런 종류의 조합에는 여러 장점이 있다. 뒷단들은 자신의 작업을 병렬로 실행한다. 따라

서 한 뒷단의 처리가 끝나야 다음 질의를 처리할 수 있다는 제약이 없다. 시스템은 느슨하게 결

합된다. 한 종류의 뒷단이 실패한다고 해도, 해당 부분에 기본 정보를 채우거나 그냥 비워 두고

페이지를 구축하면 된다.

또한, 이 패턴에서는 좀 더 정교한 잠복지연 관리가 가능하다. 이 시스템이 결과를 약

200ms 이내에 돌려주어야 한다고 하자. 만일 어떤 이유로 뒷단 중 하나의 처리가 늦어져도 앞

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

511.3 조합

단은 그 뒷단을 기다릴 필요가 없다. 응답들을 조합해서 HTML을 만들고 그것을 전송하는 데

10ms가 걸린다고 할 때, 190ms가 되면 앞단은 느린 뒷단을 포기하고 자신이 가진 정보로 페

이지를 생성해서 전송하면 된다. 이런 식으로 잠복지연 시간 예산(budget )을 관리하는 능력

은 아주 강력한 효과를 낼 수 있다. 예를 들어 광고 시스템이 느리면, 광고가 없는 검색 결과를

표시하면 된다.

잠깐 정리하고 넘어가자면, ‘앞단’과 ‘뒷단’의 구분은 관점에 따라 달라질 수 있다. 기본적으

로 앞단은 뒷단에게 요청을 보내며, 뒷단은 요청을 처리한 결과로 응답한다. 하나의 서버가 앞

단이자 뒷단으로 작용할 수도 있다. 앞의 예에서 서버는 웹 브라우저의 관점에서 볼 때에는 뒷

단이지만 철자 검사 서버의 관점에서는 앞단이다.

이 패턴에는 다양한 변형이 있다. 각 뒷단을 수용량 증대나 탄력성(resiliency; 회복력)

개선을 위해 복제할 수 있으며, 캐싱을 여러 수준에서 수행할 수 있다.

하나의 질의에서 여러 개의 새로운 질의가 나오는 것을 산개(fan out; 또는 전개)라고 말

한다. 질의는 개별 뒷단들로 산개한다. 그 응답들은 다시 앞단으로 집결(fan in )하며, 앞단은

그것들을 취합해서 최종 결과를 만든다.

모든 집결 상황은 혼잡(congestion, 밀집)* 문제를 일으킬 위험이 있다. 종종 작은 질의

에서 아주 많은 수의 응답이 만들어지기도 한다. 그래서 산개에서는 대역폭이 조금만 소비되지

만 집결 시에는 대역폭이 모자라는 경우가 발생한다. 그러면 네트워크 연결들에서 혼잡이 발생

해서 서버에 과부하가 걸리는 결과로 이어질 수 있다. 질의와 응답의 크기가 일관적이거나 커

다란 응답이 가끔만 발생한다면 네트워크와 서버 용량을 미리 적절하게 잡는 것이 가능하다.

그러나 예기치 않은 큰 응답들이 갑자기 몰리는 현상을 대비해서 설계하기란 어려운 일이다.

그런 돌발 사태 시 더 많은 버퍼 공간을 동적으로 마련해서 사태를 완화하도록 설계된 네트워

크 장비도 있다. 그와 마찬가지로, 뒷단이 질의 처리 비율을 스스로 제한함으로써 그런 상황을

애초에 방지할 수도 있다. 끝으로, 앞단은 새 질의들을 뒷단들에 보내는 속도를 제한하거나, 뒷

단들에게 속도를 늦추라고 통지하거나, 또는 질의들의 범람(flood )을 더 잘 처리하는 비상 대

책(emergency measure )을 구현함으로써 혼잡 문제를 관리할 수 있다. 마지막 옵션은 제5

장에서 논의한다.

*  옮긴이_ 혼잡混雜이라는 단어는 뭔가가 “뒤섞여서 어수선한” 상황을 암시하지만, 이런 문맥에서 말하는 ‘congestion’은 “빽빽하게 몰려

있는” 상황에 더 가깝다. 예를 들어 아직 처리되지 않은 자료나 작업이 빽빽하게, 그러나 ‘질서 정연하게’ 모여 있는 상황도 congestion이라고 부를 수 있다는 점에서, ‘혼잡’보다는 ‘밀집密集’이 더 적합한 용어일 것이다. 그러나 기존 관례나 ‘교통 혼잡’ 같은 일상적인 용례와의

연관성 등을 고려해서 ‘혼잡’이라는 용어를 사용하기로 한다.

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

52 1장 분산 세계에서의 설계

1.3.3 서버 트리

또 다른 근본적인 조합 패턴은 서버 트리(server tree )이다. [그림 1.3 ]에서 보듯이, 이 방식

에서는 여러 개의 서버가 하나의 트리를 형성해서 함께 작동한다. 하나의 서버 트리에는 뿌

리(root )에 해당하는 서버 하나와 뿌리 아래의 여러 부모 서버들, 그리고 트리 최하단의 잎

(leaf, 말단) 서버들이 있다. (컴퓨터 과학에서는 트리(나무)를 그릴 때 뿌리를 위에 둔다.)

이 패턴의 전형적인 용도는 전문용어로 총체(corpus; 텍스트 자료의 경우에는 말뭉치)라고

부르는 커다란 자료집합(dataset )에 접근하는 것이다. 자료 총체는 임의의 한 기계가 담을 수

있는 것보다 크다. 따라서 각 잎 서버는 전체의 한 부분을 저장한다. 그런 부분을 파편(shard )

이라고 부른다. 뿌리 서버, 잎 서버

전체 자료집합에 대한 질의를 처리하는 과정은 이렇다. 뿌리는 원래의 질의를 받아서 부모

들에게 전달한다. 부모들은 그 질의를 잎 서버들에게 전달하며, 각 잎은 총체 중 자신이 담당한

부분을 검색해서 그 결과를 부모에 보낸다. 부모는 잎 서버 결과들을 정렬하고 걸러서 뿌리에

넘겨준다. 뿌리는 모든 부모의 결과를 취합해서 최종적인 응답을 생성, 전송한다.

어떤 백과사전에서 조지 워싱턴George Washington이 언급된 횟수를 알고 싶다고 하자. 한 가지

뿌리

부모0

잎0

부모1

잎1

그림 1.3 서버 트리

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

531.3 조합

방법은 한 사람이 백과사전을 구성하는 모든 권(volume )을 차례로 훑으면서 횟수를 세는 것

이다. 아니면, 각 권을 각자 다른 사람에 배정해서 각자가 병렬로 횟수를 세게 할 수도 있다. 최

종 결과를 더 빨리 얻을 수 있는 방식은 후자일 것이다.

이 패턴의 주된 장점은 큰 자료 총체를 병렬로 검색할 수 있다는 것이다. 잎들이 자신의 파

편을 검색하는 것뿐만 아니라, 부모들이 검색 결과를 정렬하고 등급을 매기는 과정 역시 병렬

로 일어난다.

예를 들어 미국 국회도서관의 모든 책에서 발췌한 텍스트로 이루어진 말뭉치를 생각해보

자. 그 말뭉치를 한 대의 컴퓨터에 담을 수는 없기 때문에 수백, 수천의 잎 기계들에 분산시킨

다고 하자. 잎 컴퓨터들 외에 부모들과 뿌리 서버도 있다. 검색 질의는 우선 뿌리 서버로 간다.

뿌리 서버는 그것을 모든 부모 서버에 전달하며, 부모들은 그 질의를 각자 자신의 잎 노드들에

넘겨준다. 잎 노드들의 응답을 받은 부모는 그것들을 유관성(relevancy )에 따라 정렬하고 등

급을 매긴다.

예를 들어 어떤 잎 서버가 한 책에서 질의의 모든 단어가 포함된 문단을 발견했지만, 다른

어떤 책에서는 질의어들 중 일부만 포함된 문단을 발견할 수도 있다(유관성이 더 낮다). 질의

어들이 여러 문단이나 여러 페이지에 흩어져 있는 책을 발견할 수도 있을 것이다(유관성이 더

욱 낮다). 질의가 상위 결과 50개를 돌려달라는 것이었다고 할 때, 부모는 상위 결과 50개만

추려서 뿌리에 보내고 나머지는 폐기한다. 그러면 뿌리는 각 부모의 결과들을 모두 취합해서

그중 상위 50개를 뽑아서 최종 응답을 구축한다.

이러한 방식에서도 개발자들은 잠복지연 예산을 지키는 방식으로 서버들을 설계할 수 있

다. 만일 완벽한 답보다 빠른 답이 더 중요하다면, 잠복지연 마감 시간이 가까워졌을 때 부모들

과 뿌리는 느린 응답들을 더 기다리지 않고 진행하면 된다.

이 패턴을 여러 가지로 변형할 수 있다. 여분의 서버들을 추가해서 작업량을 분산하고 고

장 난 서버를 교체하는 식의 부하 분산 기법을 도입할 수도 있다. 잎 서버들을 늘려서 각 잎 서

버가 말뭉치의 더 작은 부분을 검색하게 할 수도 있고, 말뭉치의 각 파편을 여러 대의 잎 서버

에 배치함으로써 가용성(availability )을 높일 수도 있다. 각 수준에서의 부모들의 수를 늘리

면 결과의 정렬 및 등급 평가 수용량이 증가한다. 뿌리와 잎 사이에 하나가 아니라 여러 수준의

부모들을 둘 수도 있다. 그러면 트리가 더 높아진다. 그런 추가적인 부모 서버 수준들이 있으면

산개를 더 넓힐 수 있는데, 이는 엄청나게 거대한 말뭉치에서 중요한 요인이다. 부모 서버가 잎

서버에 가해지는 압력을 완화하는 캐싱 기능을 제공할 수도 있다. 이 경우 부모 수준이 많을수

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

54 1장 분산 세계에서의 설계

록 캐시 효율성이 좋아진다. 이전 절에서 논의했듯이, 이러한 기법들은 집결과 관련된 혼잡 문

제를 완화하는 데에도 도움이 된다.

1.4 상태의 분산

대형 시스템은 저장하거나 처리해야 할 상태(state )의 양도 큰 경우가 많다. 상태는 데이터베

이스처럼 자주 갱신되는 자료로 구성된다. 반면 자료 총체 또는 말뭉치는 비교적 정적이거나

가끔만(이를테면 새로운 판본이 나올 때에만) 갱신된다. 한 예로, 미합중국 의회 도서관을 검

색하는 시스템은 매주 새로운 말뭉치를 받을 것이다. 반면 이메일 시스템에서는 새로운 자료가

끊임없이 들어오고, 자료가 계속 갱신되고(이를테면 특정 편지를 ‘읽은 상태’로 표시하거나 다

른 폴더로 옮기는 등) 삭제된다.

분산 컴퓨팅 시스템이 상태를 다루는 방법은 여러 가지이다. 그러나 그런 방법들은 모두

어떤 형태로든 복제와 파편화(sharding )를 사용한다. 그런데 복제와 파편화는 일관성, 가용

성, 분리와 관련된 문제점을 일으킨다.

상태를 저장하는 가장 간단한 방법은 [그림 1.4 ]에서처럼 그냥 하나의 기계에 상태를 모두

저장하는 것이다. 안타깝게도 이 방법은 순식간에 한계에 봉착한다. 개별 컴퓨터가 담을 수 있

는 상태의 양에는 한계가 있으며, 만일 그 컴퓨터가 죽으면 시스템은 모든 상태에 접근할 수 없

게 된다. 또한 개별 컴퓨터의 처리 능력은 유한하며, 따라서 동시적인 상태 읽기 및 쓰기 연산

횟수에 상한이 존재한다.

분산 컴퓨팅에서는 전체 상태를 여러 ‘파편’들로 나누어서 여러 대의 컴퓨터에 분산 저장한

다. 이렇게 하면 최대 저장 용량은 오직 사용 가능한 기계의 수로만 한정된다. 또한, 하나의 파

N qps

데이터베이스

상태M개의 객체

그림 1.4 상태를 한 장소에 담기: 분산 컴퓨팅이 아니다.

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

551.4 상태의 분산

편을 여러 기계에 저장할 수 있으므로, 한 기계가 고장나도 상태에 접근하지 못하게 되는 일이

없다. 각 복제본은 초당 일정 횟수의 질의를 처리할 수 있으므로, 초당 처리할 수 있는 동시적

상태 읽기/쓰기 요청을 늘리고 싶다면 복제본의 수를 더 늘리면 된다. [그림 1.5 ]가 이상의 방

법을 나타낸 것이다. 그림의 예에서 부하 분산기는 초당 N개의 질의를 받아서 세 파편에 분산

한다. 각 파편은 세 개의 복제본으로 이루어져 있다. 따라서 각 복제본 서버는 평균적으로 전체

상태 질의의 9분의 1을 처리한다.

상태 쓰기, 즉 상태 갱신 요청이 들어오면 모든 복제본을 갱신해야 한다. 이 갱신 과정이

진행되는 동안 어떤 클라이언트가 아직 갱신되지 않은 상태 복제본에서 상태를 읽는 일이 발생

할 수도 있다. [그림 1.6 ]은 하나의 쓰기가 아직 갱신되지 않은 캐시의 읽기 때문에 복잡해지는

상황을 보여준다. 이에 대해서는 다음 절에서 좀 더 논의하겠다.

대부분의 간단한 패턴에서, 상태 저장·조회 요청들을 받는 것은 뿌리 서버이다. 뿌리 서

버는 해당 상태가 담긴 파편을 파악해서 그에 해당하는 잎 서버에 요청을 전달한다. 잎 서버의

응답은 트리를 따라 올라와서 뿌리 서버에 도달한다. 이전 절에서 본 서버 트리 패턴과 비슷해

보이지만, 다른 점이 두 가지 있다. 첫째로, 질의는 모든 잎 서버가 아니라 하나의 잎 서버에만

전달된다. 둘째로, 읽기 요청뿐만 아니라 갱신(쓰기) 요청이 들어올 수도 있다. 하나의 상태

파편이 여러 복제본에 저장되어 있으면 갱신이 좀 더 복잡하다. 하나의 파편을 갱신하려면 그

에 해당하는 모든 복제본을 갱신해야 한다. 이를 위해 뿌리 서버가 모든 잎 서버를 갱신하게 할

수도 있고, 잎 서버들이 서로 의사소통하면서 갱신들을 진행하게 할 수도 있다.

shard0

state

shard0

state

shard0

state

shard0

state

shard0

state

shard0

state

N qps

N/3 qps

파편당 복제본 3개

분산기

파편0

상태

파편1

상태

파편2

상태

그림 1.5 상태를 다수의 복제본으로 이루어진 여러 파편으로 분산한다.

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

56 1장 분산 세계에서의 설계

상태

뒷단0 캐시

앞단0 앞단1 앞단2

분산기

읽기

쓰기

그림 1.6 캐싱된 자료를 이용해서 상태를 갱신하면 일관되지 않은 뷰가 생길 수 있다.

이 패턴의 한 변형으로, 대량의 자료를 전송할 때 좀 더 적합한 것이 있다. 이 변형에서 뿌

리 서버는 자료 자체가 아니라 자료를 얻는 방법에 관한 정보를 알려준다. 요청자는 그 정보를

이용해서 해당 자료원(data source )에게 직접 자료를 요청한다.

예를 들어 수 페타바이트(1페타바이트는 약 1,000테라바이트)의 자료가 수천 대의 기

계에 분산된 분산 파일 시스템을 생각해보자. 각 파일은 기가바이트 크기의 토막(chunk )들

로 나누어져 있다. 각 토막은 중복성을 위해 여러 대의 기계에 저장된다. 이러한 방식에서는

하나의 기계에 담을 수 있는 것보다 더 큰 파일을 생성하는 것도 가능하다. 주 서버(master

server )는 파일들의 목록을 관리하고 파일의 토막들이 있는 장소를 식별한다. UNIX 파일 시

스템에 익숙한 독자라면, 주 서버는 i-노드(inode )들, 즉 파일당 자료 블록들의 목록들을 저

장하고, 다른 기계들은 실제 자료 블록들을 저장한다고 생각하면 이해가 쉬울 것이다. 파일 시

스템 연산 요청은 주 서버로 전달되며, 주 서버는 i-노드 비슷한 정보를 이용해서 그 연산에 관

련된 개별 기계를 찾아낸다.

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

571.5 CAP 원리

커다란 읽기 연산 요청이 하나 들어왔다고 하자. 주 서버는 해당 읽기 중 몇 테라바이트는

한 컴퓨터에 저장되어 있고 나머지 몇 테라바이트는 다른 컴퓨터에 저장되어 있음을 파악한다.

이때 주 서버가 두 컴퓨터에서 자료를 읽어서 요청자에게 돌려줄 수도 있지만, 커다란 자료 토

막을 받고 넘겨주다 보면 주 서버가 금세 과부하될 수 있다. 대신 주 서버는 자료가 있는 컴퓨

터들의 목록을 요청자에게 돌려주고, 요청자는 그 목록을 이용해서 해당 기계들에 직접 접촉한

다. 이 경우 주 서버는 대량 자료 전송의 중간자(middle man ) 역할을 하는 것이 아니다. 이

러한 상황이 [그림 1.7 ]에 나와 있다.

클라이언트1

일꾼1

주 서버

일꾼2 일꾼3

클라이언트0

일꾼0

그림 1.7 이 주 서버는 클라이언트에 대한 응답을 다른 서버들에 위임한다.

1.5 CAP 원리

CAP는 Consistency (일관성), Availability (가용성), Partition resistance (분리 저항)를

뜻한다. CAP 원리란, 일관성과 가용성, 그리고 분리에 대한 저항을 모두 보장하는 분산 시스

템은 구축하는 것이 불가능하다는 것이다. 둘 중 임의의 하나나 둘은 달성할 수 있지만, 셋을

동시에 달성할 수는 없다. 그런 시스템을 사용할 때에는 무엇이 보장되고 무엇이 보장되지 않

는지를 반드시 파악해야 한다.

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

58 1장 분산 세계에서의 설계

1.5.1 일관성

일관성은 모든 노드가 같은 시점(time )에서 같은 자료를 본다는 뜻이다. 일관성을 보장하는

시스템에서는, 다수의 복제본에 대해 갱신이 진행되는 도중 모든 사용자는 비록 각자 다른 복

제본에서 자료를 읽는다고 해도 모두 같은 시점에서 동일하게 갱신된 자료를 보게 된다. 일관

성을 보장하지 않는 시스템이라고 해도 결과적 일관성(eventual consistency )을 보장할 수

는 있다. 예를 들어 어느 정도 시간이 지나면 임의의 갱신이 모든 복제본에 전파된다는 점을 보

장하는 것이 가능하다. 물론 그 시간에 도달하기 전에는, 어떤 질의는 새 자료를 담은 응답을

받지만 어떤 질의는 오래된, 갱신되지 않은 자료를 담은 응답을 받을 수 있다.

완벽한 일관성이 항상 중요한 것은 아니다. 어떤 소셜 네트워크가 긍정적인 행동을

한 독자에게 명성치 점수를 보상으로 제공한다고 상상해 보자. 사용자의 총 명성치 점수

(reputation point )는 사용자의 이름과 함께 항상 표시된다. 명성치 데이터베이스는 북미와

유럽, 아시아의 서버들에 복제되어 있다. 유럽의 한 사용자가 명성치 점수를 받았다고 할 때,

그 변화가 북미와 아시아 복제본에 전파되기까지는 몇 분이 걸린다. 절대적으로 정확한 명성치

가 사용자 이름과 함께 표시되는 것이 그 소셜 네트워크의 필수적인 기능은 아니므로, 몇 분의

지연시간은 용납할 수 있다. 네트워크 혼잡 때문에 수 분이 더 걸리거나 심지어 네트워크 장애

때문에 수 시간이 걸린다고 해도 아주 심각한 사고는 아닐 것이다.

그러나 같은 시스템으로 은행 거래 응용 프로그램을 만든다고 생각해 보자. 북미의 한 사

용자와 유럽의 한 사용자가 미리 짜고 같은 시간에 같은 계정에서 돈을 찾기로 한다. 각 사용자

가 사용하는 ATM은 가장 가까운 데이터베이스 복제본에 질의를 보낸다. 만일 금액이 잔고를

넘지 않는다면 실제로 돈이 인출될 것이다. 그런데 해당 갱신이 너무 늦게 전파되면, 은행이 돈

이 이중으로 빠졌다는 점을 깨닫기도 전에 두 사람은 각자 현찰을 챙겨서 떠날 것이다.1

1.5.2 가용성

가용성이 있다는 것은, 모든 요청이 그 요청의 성공 또는 실패 여부에 관한 응답을 반드시 받게

된다는 뜻이다. 아주 간단히 말하면 가용성은 시스템이 정상적으로 가동 중이라는 뜻이다. 예

1  사실 전 지구적 ATM 시스템은 데이터베이스 일관성을 요구하지 않는다. 불순한 사용자가 네트워크 지연이나 장애를 악용해서 데이터

베이스 일관성을 깨는 것이 가능하기 때문이다. 은행으로서는, ATM 네트워크가 죽었을 때 제한된 양의 금액을 포기하는 쪽이 돈을 못 찾

아서 불만인 고객들을 다루는 쪽보다 비용이 덜 든다. 사기성 거래는 사건이 일어난 후에 처리한다. 일일 인출량 제한 덕분에 큰 금액의 사

기가 방지된다. 초과요금(overage fee)을 산정하는 것이 전 지구적으로 일관된 데이터베이스를 구현하기보다 더 쉽다.

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

591.5 CAP 원리

를 들어 클라이언트가 항상 접근할 수 있는 자료를 여러 복제본에 저장해 두면, 그 복제본 중

하나만 돌아가도 가용성이 보장된다.

CAP 원리에서 말하는 가용성은 시스템이 장애를 보고하는 능력을 갖추고 있다는 뜻이기

도 하다. 예를 들어 시스템은 자신이 과부하 상태임을 감지하고, 요청자에게 ‘나중에 다시 시도

하세요’라는 뜻의 오류 코드를 보낼 수 있다. 요청자의 관점에서는, 응답을 몇 분이나 몇 시간

동안 기다리다가 포기하고 떠나는 것보다는 즉시 이런 오류 코드를 받는 것이 더 낫다.

1.5.3 분리 저항

분리 저항 또는 분리 내구성(partition tolerance )은 임의의 메시지가 유실되거나 시스템 일

부가 실패해도 시스템이 계속 가동함을 뜻한다. 분리 내구성의 가장 간단한 예는, 어떤 서비스

를 담당하는 기계의 네트워크 연결이 끊겨서(‘분리’) 다른 기계들과 통신하지 못해도 시스템

자체는 계속 운영되는 것이다(그림 1.8 ).

복제본의 예로 돌아가서, 만일 시스템이 읽기 전용이라면 시스템의 분리 내구성을 갖추는

것이 어렵지 않다. 그런 시스템에서는 복제본들이 서로 통신할 필요가 없기 때문이다. 그러나

복제본들이 상태를 담고 있다면 상황이 다르다. 그런 경우 한 복제본을 먼저 갱신하고, 그것을

다른 복제본에 복사해야 한다. 만일 복제본들이 서로 통신할 수 없으면 시스템은 시간이 지나

면 갱신들이 전파될 것임을 보장할 수 없으며, 따라서 시스템 자체가 실패하게 된다.

이제 두 서버가 감독-일꾼* 관계로 작동한다고 하자. 둘 다 상태의 완전한 복사본을 유지

하며, 만일 감독에 장애가 발생하면 일꾼이 감독의 역할을 맡는다. 감독의 장애 여부는 ‘심박

(heartbeat )’에 대한 응답 여부로 판정한다. 심박은 두 서버 사이의 주기적인 건강 점검 질의

를 뜻하는데, 전용(dedicated ) 네트워크를 통해서 주고받는 경우가 많다. 둘 사이의 심박 네

트워크가 분리되면, 비록 원래의 감독이 아직 가동 중일 수도 있지만 그래도 심박 네트워크를

통해서 통신할 수 없는 상황이므로, 일꾼은 자신을 감독으로 격상시킨다. 그러면 시스템에 두

개의 감독이 있는 상황이 되어서 시스템이 실패한다. 이런 상황을 분리된 뇌(split brain )라고

부른다.

*  옮긴이_ 원문은 master-slave(주인-노예)이지만, 좀 더 순화된 용어인 boss-worker에 해당하는 감독-일꾼으로 대체했다. 사실

이 예에서 주로 일하는 것은 일꾼(노예)이 아니라 감독(주인)이라는 점에서 원문 자체에 조금 오해의 소지가 있는데, 아마도 “한 곳에 감독

(주인)이 둘인 모순적인 상황”을 강조하려다 보니 이런 용어를 사용한 것이 아닌가 한다.

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

60 1장 분산 세계에서의 설계

복제본4

복제본0

복제본3

복제본1

복제본2

분리

그림 1.8 서로 분리된 노드들

분리에는 몇 가지 특별한 경우가 존재한다. 패킷 소실(packet loss; 또는 패킷 유실)은

CAP 원리가 적용된다는 점에서 시스템의 일시적 분리로 간주된다. 또 다른 특별한 경우는 네

트워크가 완전히 먹통이 되는 것이다. 분리를 가장 잘 견디는 시스템이라도 그런 상황에서는

가동될 수 없다.

앞에서 말했듯이 CAP 원리는 이상의 세 가지 특성 중 임의의 하나나 둘은 달성할 수 있지

만 셋 모두 달성할 수는 없다는 것이다. 2002년에 길버트Gilbert와 린치Lynch는 원래의 추측에 대

한 공식적인 증명을 발표했다. 이에 의해 CAP 원리는 하나의 정리(theorem )가 되었다. 이

를, 두 특성의 달성을 위해 세 번째 특성이 희생하는 것으로 생각해도 될 것이다.

[그림 1.9 ]는 CAP 원리를 삼각형으로 도식화한 것이다. Oracle이나 MySQL,

PostgreSQL 같은 전통적인 관계형 데이터베이스는 CA로 표시되어 있는데, 이는 이들이 일관

성(C )과 가용성(A )을 보장한다는 뜻이다. 이런 데이터베이스 시스템은 트랜잭션과 기타 데

이터베이스 기법들을 이용해서 갱신이 원자적으로 진행됨을 보장한다. 즉, 갱신은 완전히 전

파되거나, 전혀 전파되지 않는다. 따라서 모든 사용자는 같은 시점에서 반드시 같은 상태를 보

게 된다. Hbase, Redis, Bigtable 같은 좀 더 최근의 저장 시스템들은 CP에, 즉 일관성과 분

리 내구성(P )에 초점을 둔다. 분리가 발생했을 때 이런 시스템들은 어떤 사용자는 기존 내용

을 보고 또 어떤 사용자는 새로운 내용을 보는 비일관적 상황을 허용하는 대신, 읽기 전용으로

전환하거나 모든 요청에 응답하지 않음으로써 일관성을 보장한다. 마지막으로, Cassandra나

Riak, Dynamo 같은 시스템들은 AP, 즉 가용성과 분리 내구성에 초점을 둔다. 이들은 비록

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

611.5 CAP 원리

일부 클라이언트가 예전 자료를 담은 결과를 보는 일이 있더라도 서버가 요청에 항상 응답할

수 있게 만드는 것을 강조한다. 그런 시스템은 각 복제본이 인터넷처럼 신뢰성이 떨어지는 매

체를 통해서 서로 통신하는 전 지구적(global )* 분산 네트워크에 많이 쓰인다.

SQL이나 기타 관계형 데이터베이스는 CAP 삼각형의 해당 변(CA )을 ACID라

는 용어로 서술한다. ACID는 Atomicity (원자성; 트랜잭션은 “전부 아니면 전무”이다),

Consistency (일관성; 각 트랜잭션 이후 데이터베이스는 유효한 상태이다), Isolation (격리

성; 동시적인 트랜잭션들은 직렬로 실행했을 때와 동일한 결과를 낸다), Durability (내구성;

완수된 트랜잭션의 자료는 충돌이나 기타 문제가 발생해도 유실되지 않는다)를 뜻한다. 더 약

한 일관성 모형을 제공하는 데이터베이스들을 흔히 NoSQL이라고 부르는데, 그런 데이터베

이스들은 자신을 BASE라고 표현한다. BASE는 Basically Available Soft-state services

with Eventual consistency (결과적 일관성을 갖춘, 기본적으로 가용인 약 상태 서비스)를

줄인 것이다.

MongoDB, HBase, Redis, MemcacheDB, Bigtable 같은 시스템들

항상 접근 가능하고 가동 가능한 상태를 유지한다

가용성

Voldemort, Riak, Cassandra, CouchDB, Dynamo

같은 시스템들

분리 내구성네트워크 전체가 실패한

경우에만 시스템이 부정확하게 응답한다.

일관성커밋들이

분산 시스템 전체에서 원자적이다

전통적인 관계형 데이터베이스(PostgreSQL, MySQL)와

Vertica, Spanner

그림 1.9 CAP 원리

*  옮긴이_ 흔히 ‘전역’이라고 하지만, 실제로 지구 전체를 의미하는 경우에는 ‘시스템 전역’ 같은 용법과 구분하기 위해 ‘전 지구적’이라는

용어를 사용하기로 한다.

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

62 1장 분산 세계에서의 설계

1.6 느슨히 결합된 시스템

우리는 분산 시스템이 고도의 가용성을 제공하고, 오랫동안 지속되고, 장애 없이 진화하고 변

화하길 기대한다. 시스템이 가동, 운영되는 중에 하위 시스템을 통째로 교체하는 일도 흔하다.

이를 달성하기 위해 분산 시스템은 추상 (abstraction )을 이용해서 느슨히 결합된

(loosely coupled ) 시스템을 구축한다. 추상은 각 구성요소가 구현 세부를 숨기는 방식으

로 정의된 인터페이스를 제공함을 뜻한다. 시스템의 각 구성요소가 다른 구성요소의 내부에 관

해 아는 것이 (거의) 없을 때, 그러한 시스템을 가리켜 “느슨히 결합되었다”라고 말한다. 느슨

히 결합된 시스템에서는 한 하위 시스템을 그 하위 시스템과 동일한 추상 인터페이스를 제공하

는 다른 하위 시스템으로 교체할 수 있다. 심지어 구현이 완전히 다르다고 해도 그런 일이 가능

하다.

예를 들어 철자 검사 서비스를 생각해보자. 이 서비스를 적절한 수준으로 추상한다면, 텍

스트를 받아서 철자가 틀린 단어들을 식별하고 틀린 단어마다 그것을 바로잡을만한 대안 단어

들의 목록을 만들어서 돌려주는 서비스라고 서술할 수 있다. 그러나 그냥 “앞단들이 비슷한 단

어들을 질의할 수 있는 어휘 목록(lexicon )에 대한 접근을 제공한다”라고 말하는 것은 잘못된

수준의 추상일 것이다. 만일 철자를 검사하는 전혀 새로운 방식이 고안된다면 철자 검사 서비

스를 사용하는 모든 앞단을 다시 작성해야 한다는 점에서, 후자는 좋은 추상이 아니다. 새 버전

의 철자 검사 서비스가 어휘 목록에 의존하지 않고 기계 학습이라고 하는 인공지능 기법을 적

용한다고 가정하자. 좋은 추상에서는 그 어떤 앞단도 수정할 필요가 없다. 앞단들은 여전히 같

은 종류의 요청을 새 철자 검사 서버에 보내면 된다. 그러나 나쁜 추상을 사용한다면 앞단들을

모두 뜯어고쳐야 한다.

이런 이유와 기타 여러 이유로, 느슨히 결합된 시스템은 시간이 흐름에 따라 진화시키고

변경하기가 쉽다.

철자 검사 서비스의 예를 계속 이어서, 새 철자 검사 서비스의 개시를 준비하는 과정에서

기존 버전과 새 버전을 병렬로 실행할 수도 있다. 그런 경우 철자 검사 시스템의 앞단에 놓인

부하 분산기가 모든 요청을 새 시스템과 기존 시스템 모두에 보내게 할 수도 있다. 사용자에게

는 기존 버전의 결과를 보내되, 새 버전의 결과를 수집하고 그것을 기존 버전의 결과와 비교해

서 품질 관리에 활용하면 좋을 것이다. 초기에는 새 시스템이 기존 시스템만큼 좋은 결과를 내

지 못할 수 있지만, 시간이 지남에 따라 점차 개선되어서 결국에는 기존 시스템보다 더 나은

(측량 가능한 수준으로) 결과를 내게 될 것이며, 그러면 새 시스템을 실무(production )에 투

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

631.6 느슨히 결합된 시스템

입하면 된다. 신중을 기하려 한다면, 처음에는 모든 질의의 1%만 새 시스템에 보내고, 만일 불

만을 제기하는 사용자가 없다면 좀 더 큰 비율의 질의를 새 시스템에 보내는 방식도 가능할 것

이다. 결국에는 모든 질의를 새 시스템이 처리하는 시점에 도달할 것이며, 그러면 기존 시스템

을 폐기해도 된다.

철자 검사 시스템보다 정밀도와 정확성이 좀 더 높아야 하는 시스템도 있다. 예를 들어 새

시스템이 기존 시스템과 버그 대 버그까지 호환됨을 확인한 후에야 새 시스템을 실무에 투입해

야 한다는 조건이 걸릴 수도 있다. 즉, 새 시스템은 기존 시스템의 기능뿐만 아니라 버그들도

그대로 재현해야 한다. 이 경우 두 시스템 모두에 요청을 보내서 그 결과를 비교하는 기능은 시

스템을 배치하는 운영팀에게 없어서는 안 될 기능이다.

사례 연구: 에뮬레이션 후 개선

Cibernet에서 일할 때 톰*은 기존 시스템을 교체하는 프로젝트에 관여한 적이 있다. 그 시스템

은 금융 시스템이었기 때문에, 새 시스템이 기존 시스템과 버그 대 버그 수준으로 호환됨을 확인

한 후에야 새 시스템을 배치할 수 있었다.

기존 시스템은 웹 이전의 구식 기술로 구축된 것으로, 너무나 복잡해지고 굳어져서 새 기능을

추가하는 것이 불가능했다. 새 시스템은 좀 더 새롭고 나은 기술로 구축되었으며, 설계가 더 깔

끔했기 때문에 새 기능성을 좀 더 쉽게 도입할 수 있었다. 톰이 속한 팀은 두 시스템을 병렬로 실

행해서 결과를 비교했다.

그 시점에서 기술자들이 기존 시스템의 버그를 하나 발견했다. 화폐 단위 변환이 비표준적인

방식으로 실행되어서 변환 결과에 약간의 오차가 있었던 것이다. 두 시스템의 결과를 비교할 수

있게 하려고 개발자들은 그 버그를 역공학(reverse-engineering )해서 새 시스템에서 버그를

에뮬레이션했다.

덕분에 기존 시스템과 새 시스템의 결과가 1센트 단위까지 일치했다. 회사는 새 시스템이 기

존 것과 버그 대 버그 수준으로 호환된다는 점을 좀 더 확신하게 되었으며, 그래서 새 시스템을

주 시스템으로 만들고 기존 시스템을 비활성화시켰다.

그때부터는 새 기능들과 개선들을 시스템에 도입할 수 있었다. 예상했겠지만, 첫 번째 개선은

화폐 단위 변환 버그를 에뮬레이션하는 코드를 제거하는 것이었다.

*  옮긴이_ 저자 중 한 명인 토머스 리몬첼리Thomas A. Limoncelli를 말한다.

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

64 1장 분산 세계에서의 설계

1.7 속도

지금까지 대형 분산 시스템의 설계에 관련된 여러 고려사항을 상세히 설명했다. 웹이나 기타

대화식(interactive ) 서비스에서는 한 가지 항목이 가장 중요한데, 바로 속도(speed )이다.

정보를 얻고, 저장하고, 계산하고, 변환하고, 전송하는 데에는 시간이 걸린다. 그 어떤 일도 즉

시 일어나지는 않는다.

대화식 시스템은 반응이 빨라야 한다. 사용자는 약 200ms보다 빠른 것을 ‘즉시’라고 느끼

는 경향이 있다. 또한, 사용자는 느린 것보다는 빠른 것을 선호한다. 50ms 정도의 짧은 지연을

웹 사이트에 인위적으로 추가하자 수익이 급격히 떨어진 사례를 보고한 연구들이 있다. 시간은

총 처리량(throughput; 산출량)이 작업 유입량과 일치하거나 초과해야 하는 일괄식, 비대화

식 시스템에서도 중요하다.

퍼포먼트한 시스템을 설계하는 일반적인 전략은, 하나의 요청을 처리하는 데 걸리는 시간

을 최대한 잘 추정하고, 원형을 구축해서 그 추정치를 검증해 보는 것이다. 만일 추정치가 틀렸

다면 다시 추정 단계로 돌아가서 같은 과정을 반복한다. 다음 반복에서는 적어도 그때까지 배

운 것들을 활용해서 더 나은 결과를 얻을 수 있을 것이다. 시스템을 구축해 나가는 과정에서 만

일 추정치와 원형이 우리가 기대했던 것만큼 좋은 지침을 제공하지 못함을 발견한다면, 설계를

재측정하고 조정하면 된다.

설계 과정의 초반에는 여러 개의 설계를 만들어서 각각의 속도를 추정하고 충분히 빠르지

않은 것들을 제거하는 식으로 진행하는 경우가 많다. 이때 무조건 가장 빠른 설계를 선택하지

는 않는다. 가장 빠른 설계가 충분히 빠른 설계보다 훨씬 비용이 클 수 있기 때문이다.

주어진 설계가 추구할만한 가치가 있는 설계인지 어떻게 판단할까? 원형을 구축하는 데에

는 시간이 오래 걸린다. 몇 가지 간단한 추정 요령들을 이용하면 시간을 크게 줄일 수 있다. 한

가지 요령은, 흔한 트랜잭션 몇 개를 택해서 더 작은 단계들로 분할하고, 각 단계에 걸리는 시

간을 추정하는 것이다.

시간을 가장 많이 잡아먹는 요인 두 가지는 디스크 접근과 네트워크 지연이다.

디스크 접근이 느린 것은 물리적(기계적) 작동이 관여하기 때문이다. 한 블록의 자료를 디

스크에서 읽으려면 읽기 팔(read arm )을 적절한 트랙으로 이동해야 하고, 해당 블록이 읽기

헤드 아래에 올 때까지 플래터platter를 회전해야 한다. 일반적으로 이 과정에 10ms가 걸린다.

같은 양의 정보를 RAM에서 읽는 데에는 0.002ms밖에 걸리지 않는다. 이는 약 5,000배 빠른

속도이다. 읽기 팔과 플래터(스핀들spindle이라고 부른다)는 한 번에 하나의 요청만 처리할 수

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

651.7 속도

있다. 그러나 일단 읽기 헤드가 적절한 트랙 위에 놓이면, 그때부터는 연속된 다수의 블록을 읽

을 수 있다. 따라서 두 블록이 인접해 있다면 블록 두 개를 읽는 데 걸리는 시간이 블록 하나를

읽는 데 걸리는 시간에 거의 근접한 경우가 많다. SSD (solid-state drive; 고체 상태 드라이

브)에는 기계적으로 회전하는 플래터가 없어서 훨씬 빠르지만 더 비싸다.

네트워크 접근이 느린 근본 이유는 빛의 속도가 유한하기 때문이다. 하나의 패킷이 캘리포

니아에서 네덜란드로 가려면 약 75ms가 걸린다. 그 여행 시간의 약 절반은 빛의 속도 때문이

다. 그리고 각 라우터나 구리선과 광섬유 통신 사이의 변환을 담당하는 전자기기의 처리 시간

과 통신의 양 끝단에서 패킷을 조립하고 해체하는 데 걸리는 시간 등도 지연 시간에 기여한다.

같은 네트워크 구획 안의 두 컴퓨터는 마치 즉각적으로 통신하는 것처럼 보이지만 실제로

는 그렇지 않다. 이 경우에는 시간 척도가 아주 작아서 다른 지연들이 미치는 영향이 더 커진

다. 예를 들어 지역망에서 자료를 전송할 때 첫 바이트는 빠르게 도달하겠지만, 받은 쪽의 프로

그램은 패킷 전체가 도달해야 비로소 자료를 처리할 수 있다.

여러 시스템에서, 실제 계산에 걸리는 시간은 네트워크 지연과 디스크 연산에 비하면 미

미한 수준이다. 따라서 그냥 사용자와 데이터센터 사이의 거리와 필요한 디스크 탐색(disk

seek ) 횟수만 알면 한 트랜잭션에 걸리는 시간을 추정할 수 있는 경우가 많다. 대체로, 그런

식으로 얻은 추정치는 명백히 나쁜 설계들을 걸러내는 목적으로는 충분히 유용하다.

이해를 돕기 위해, 메시지 저장 시스템에서 메시지를 하나 받아서 표시하기까지의 시간이

300ms를 넘지 않아야 한다는 요구 조건이 있는 이메일 시스템을 구축하는 예를 생각해보자.

[그림 1.10 ]은 해결책을 구축하는 데 사용할 몇 가지 시간 근사치들이다.

먼저 트랜잭션을 처음부터 끝까지 따라가보자. 다른 대륙에 있을 수도 있는 어떤 사용자가

웹 브라우저를 통해서 요청을 보낸다. 시스템은 먼저 그 요청을 인증(authentication )한다.

그런 다음 요청된 메시지 텍스트가 저장되어 있는 위치를 데이터베이스 색인을 이용해서 파악

하고, 그 메시지 텍스트를 조회하고, 최종적으로 응답을 서식화(formatting )해서 사용자에게

보낸다.

이제 우리가 제어할 수 없는 항목의 예산을 추정해보자. 캘리포니아에서 유럽으로(또는 그

반대로) 패킷을 보내는 데에는 보통 75ms가 걸리는데, 빛의 속도를 바꾸는 것은 물리적으로

불가능하므로 이 시간을 더 줄일 수는 없다. 요청이 오는 데 그만큼의 시간이 걸리는 것과 마찬

가지로 응답을 보내는 데에도 그만큼의 시간이 걸리므로, 300ms 예산에서 총 150ms를 제해

야 한다. 우리가 제어할 수 없는 항목이 예산의 절반을 차지한 셈이다.

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

66 1장 분산 세계에서의 설계

구글의 특별 연구원(Fellow)인 제프 딘Jeff Dean이 널리 알린 이 표는 구축이나 규모 조정 시 도움이 되는 주요 수

치들을 제공한다. 이 표에서 보듯이, 시간 차이가 몇 배 수준이 아니라 10의 몇 거듭제곱배 수준인 옵션들이 존재

한다. 이 수치들은 매년 개선된다. 개정판을 웹에서 찾을 수 있을 것이다.

동작 전형적인 시간

L1 캐시 참조 0.5ns

분기 예측 실패 5ns

L2 캐시 참조 7ns

뮤텍스 잠금/해제 100ns

주 메모리 참조 100ns

1K 개의 바이트들을 Zippy로 압축 10,000ns (0.01ms)

2K 개의 바이트들을 1Gbps 네트워크에서 전송 20,000ns (0.02ms)

1MB의 자료를 메모리에서 순차적으로 읽기 250,000ns (0.25ms)

같은 데이터센터 안에서의 왕복운행(rount trip) 1회 500,000ns (0.5ms)

1MB의 자료를 SSD에서 읽기 1,000,000ns (3ms)

디스크 탐색 10,000,000ns (10ms)

1MB의 자료를 네트워크에서 순차적으로 읽기 10,000,000ns (10ms)

1MB의 자료를 디스크에서 순차적으로 읽기 30,000,000ns (30ms)

패킷을 캘리포니아에서 네덜란드로, 다시 캘리포니아로 전송 150,000,000ns (150ms)

그림 1.10 모든 기술자가 알아야 할 수치들

다음으로 인증에는 얼마만큼의 시간이 필요할까? 인증 시스템을 운영하는 팀에게 문의해

보니 3ms로 잡는 것이 좋겠다고 한다.

자료의 서식화에는 시간이 거의 걸리지 않는다. 다른 추정치에 비하면 새 발의 피이므로

무시해도 된다.

이제 147ms가 남았는데, 이 시간 안에 저장소에서 메시지를 조회해야 한다. 전형적인 색

인 조회에 디스크를 세 번 탐색하고(탐색 1회당 10ms ) 1MB의 정보를 읽어야 한다고 하자.

1MB를 읽는 데 30ms가 소비되므로 총 60ms가 필요하다. 일반적으로 메시지 자체를 읽는 데

에는 디스크 탐색 4회와 정보 2MB 읽기가 필요할 것이다. 그러면 100ms이다. 총합은 160ms

인데, 이는 남아 있는 예산 147ms를 넘는 수치이다.

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

671.7 속도

수치들의 근거

색인을 읽는 데 디스크 탐색이 3회가 필요하다는 가정은 어디에서 온 것일까? 그런 수치는 기본

적으로 UNIX 파일 시스템의 내부 작동 방식, 즉 한 디렉터리의 파일들을 조회해서 i-노드를 찾

고 i-노드를 이용해서 자료 블록을 찾는 과정에 관한 지식에서 비롯된 것이다. 그래서 시스템이

사용하는 운영 체제의 내부를 이해하는 것이 분산 시스템의 설계와 운영에 꼭 필요하다. UNIX

운영 체제나 UNIX류 운영 체제의 내부는 잘 문서화되어 있으며, 이는 그런 운영 체제들이 다른

운영 체제보다 유리한 점 중 하나이다.

우리의 설계가 요구 사항들의 수치를 만족하지 못한다는 점은 안타깝지만, 대신 재앙을 피

했다는 점은 다행이다. 지금 미리 아는 것이 사고를 당하고야 알게 되는 것보다 낫다.

색인 조회에 60ms나 걸린다는 것은 다소 과한 것 같다. 이를 훨씬 더 개선할 수 있다. 색

인을 RAM에 담아 두면 어떨까? 그것이 가능할까? 잠깐 계산해 보면, 이 정도의 자료를 분산

저장하는 데 충분한 개수의 기계들에 질의를 산개하려면 참조 트리 조회 시 세 수준까지 들어

가야 함을 추정할 수 있다. 트리를 위아래로 훑으려면 패킷을 다섯 번 보내야 하며, 기계들이

모두 같은 데이터센터에 있다면 약 2.5ms가 소비된다. 이제 새로운 총합 150ms + 3ms +

2.5ms + 100ms = 255.5ms는 총예산 300ms보다 작다.

시간에 민감한 다른 요청들도 이런 과정을 통해서 예산을 추정한다. 예를 들어 이메일 메

시지를 전송하는 요청은 읽는 요청보다 드물게 일어나므로, 이메일 메시지 전송에 걸리는 시간

은 핵심적인 요인이 아니라고 간주할 수 있다. 반면 메시지 삭제는 메시지 읽기만큼이나 자주

일어난다. 몇 가지 삭제 방법들에 대해 앞에서와 같은 계산을 반복해서 효율성을 비교해볼 수

있다.

한 가지 삭제 방법은 서버와 접촉해서 저장 시스템과 색인으로부터 메시지를 삭제하는 것

이다. 또는, 저장 시스템이 그냥 메시지가 색인에서 삭제되었다고 표시만 해 두는 방법도 있다.

후자가 훨씬 더 빠르겠지만, 삭제 표시가 된 메시지들을 실제로 제거하고 가끔 색인을 압축(삭

제 표시가 된 색인 항목들을 제거)하는 새로운 구성요소가 필요해진다.

비동기 설계를 이용하면 반응 시간을 더욱 줄일 수 있다. 이 경우, 클라이언트의 요청을 받

은 서버는 요청이 완료될 때까지 기다리지 않고 즉시 제어권을 클라이언트에게 돌려준다. 실

제 작업이 느리게 진행된다고 해도, 사용자는 시스템이 더 빠르게 동작한다고 느끼게 된다. 그

러나 비동기 설계는 구현하기가 더 복잡하다. 한 가지 구현 방법은, 서버가 요청을 받아서 실제

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

68 1장 분산 세계에서의 설계

로 작업을 수행하는 대신 요청을 대기열에 담아 두면, 배경에서 다른 프로세스가 그 대기열에

서 요청을 읽어서 실제로 작업을 진행하는 것이다. 또는 그냥 클라이언트가 요청을 보낸 후 나

중에 직접 응답이 왔는지 확인하게 하거나, 스레드 또는 하위 프로세스를 돌려서 응답을 기다

리게 할 수도 있다.

이러한 설계들 모두 사용 가능한 옵션이나, 속도 및 구현 복잡도가 각기 다르다. 속도와 비

용을 추정하고 원형을 만들어서 검증해 보면 이들 중 어떤 것을 구현할 것인지 결정할 수 있을

것이다.

1.8 요약

분산 컴퓨팅은 전통적인 컴퓨터와 여러모로 다르다. 특히 규모가 더 크다. 분산 컴퓨팅 시스템

은 각자 특화된 과제를 수행하는 수많은 컴퓨터로 이루어진다. 서비스들을 복제함으로써 수용

량을 증대할 수 있다. 분산 컴퓨팅에서는 하드웨어 고장을 비상사태나 예외로 간주하지 않고

시스템의 예상된 일부로 간주한다. 따라서 시스템은 장애를 피해서 작동한다.

대형 시스템은 더 작은 부분들을 조합해서 구축한다. 이번 장에서는 부하 분산기와 다수의

뒷단 복제본, 앞단과 다수의 서로 다른 뒷단, 그리고 서버 트리라는 흔히 쓰이는 조합 세 가지

를 이야기했다.

부하 분산기는 소통량을 복제된 여러 시스템들에 배분한다. 앞단과 다수의 서로 다른 뒷단

들의 조합은 서로 다른 뒷단들을 병렬로 활용하는데, 각 뒷단은 각자 다른 과정을 수행한다. 서

버 트리는 트리 구성을 사용하는데, 트리의 각 수준은 각자 다른 역할을 담당한다.

분산 시스템에서 상태는 끊임없이 갱신되는 정보로 이루어진 커다란 데이터베이스일 수도

있고, 시스템이 끊임없이 접근해야 하는 몇몇 핵심적인 비트들일 수도 있다. 어떤 경우이든, 분

산 시스템에서 상태를 관리하는 것은 복잡한 문제이다. CAP 원리에 따르면 일관성과 가용성,

분리 저항을 동시에 보장하는 분산 시스템을 구축하는 것은 불가능하다. 셋 중 많아야 두 개만

달성할 수 있다.

시스템은 시간이 흐름에 따라 진화해야 마땅하다. 그러한 진화가 쉽게 일어나게 하기 위해

구성요소들을 느슨하게 결합한다. 각 구성요소는 자신이 제공하는 서비스의 추상을 체현한다.

이때 추상을 변경하지 않고도 구성요소의 내부를 교체하거나 개선할 수 있도록 체현하는 것이

중요하다. 그러면 새로운 기능의 이점을 취하기 위해 서비스들 사이의 의존관계를 변경해야 하

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

691.8 요약

는 일이 없다.

분산 시스템을 설계하려면 여러 연산의 실행 시간을 파악해야 한다. 그래야 시간에 민감한

과정들을 해당 잠복지연 예산을 만족하는 방식으로 설계할 수 있다.

연습문제

1. 분산 컴퓨팅이란 무엇인가?

2. 분산 컴퓨팅의 세 가지 주요 조합 패턴을 서술하라.

3. 상태 저장과 관련해서 논의한 세 가지 패턴은 무엇인가?

4. 주 서버가 실제 응답이 아니라 응답을 찾을 수 있는 장소를 돌려주기도 한다. 그런 방법의

장점은 무엇인가?

5. § 1.4에서는 분산 파일 시스템을 설명하면서 수 테라바이트의 자료를 읽는 예를 소개했다.

수 테라바이트의 자료의 기록(쓰기)은 어떤 식으로 일어날까?

6. CAP 원리를 설명하라. (CAP 원리를 좀 더 알고 싶은 독자에게는 “The Part-Time

Parliament”(Lamport & Marzullo 1998 )와 “Paxos Made Simple”(Lamport 2001 )

을 추천한다.)

7. 시스템이 느슨하게 결합되었다는 것이 무슨 뜻인가? 그런 시스템의 장점은 무엇인가?

8. 독자가 경험한, 느슨하게 결합된 시스템의 예와 단단하게 결합된(tightly coupled ) 시

스템의 예를 제시하라. 그 시스템이 느슨하게/단단하게 결합되게 만든 요인은 무엇이었는

가?

9. 한 시스템이 이메일 메시지 조회 같은 요청을 처리하는 데 걸리는 시간을 어떻게 추정할 수

있는가?

10. §1.7에서 이메일 삭제 요청 처리를 위한 설계 세 가지를 제시했다. 세 설계에 대해 하나의

이메일 메시지 삭제 요청을 처리하는 데 걸리는 시간을 각각 추정하라. 우선 필요한 단계

들을 개괄하고, 각 단계를 개별 연산으로 취급해서 추정치를 산출하라.

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

1515.1 일반 전략

진짜 문제는 규모 변화뿐이다. 그 외의 모든 것은 하위 문제이다.

-오델O’Dell의 공리

시스템의 규모 변화(scaling ) 능력, 즉 규모가변성(scalability )이란 간단히 말해서 시스템이

점점 늘어나는 작업 부하(workload )를 감당할 수 있는 능력이다. 규모가변성은 흔히 초당 트

랜잭션 수나 자료량, 사용자 수로 측정한다. 그러나 시스템의 규모 변화에는 한계가 있으며, 그

한계를 넘어서 시스템을 성장하게 하려면 재설계가 필요하다.

분산 시스템은 성장(growth )이 당연시되므로, 처음부터 규모가변적으로 구축해야 한다.

웹 기반 서비스를 구축하든 일괄 처리식 자료 분석 플랫폼을 구축하든, 목표는 항상 성공적인

서비스를 만드는 것이며, 일반적으로 성공을 위해서는 더 많은 사용자와 활용도, 자료를 끌어

모을 수 있어야 한다.

서비스가 빠르게 작동하고, 규모가 변해도 그 속도를 계속 유지하는 것이 아주 중요하다.

서비스의 규모가 매끄럽게 커지지 않으면, 다시 말해서 사용자가 많아지면서 속도가 너무 느려

지면, 사용자들은 다른 곳으로 가기 마련이다. 구글의 한 실험에 따르면, 검색 결과에 인위적으

로 400ms의 지연을 추가하자 검색을 수행하는 사용자가 0.2~0.6% 정도 감소했다. 이는 수백

만 또는 수십억 달러의 수익 감소를 의미한다.

모순적이게도, 아예 죽은 웹 서비스보다 느린 웹 서비스가 더 짜증스럽다. 웹사이트가 죽

으면 사용자는 그 사실을 즉시 알아채고 경쟁 사이트로 가거나 사이트가 다시 살아날 때까지

다른 일을 한다. 그러나 웹사이트가 느리면 사용자는 그냥 괴롭고 짜증이 날 뿐이다.

규모 변화를 위한 설계 패턴

CHAPTER 05

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

152 5장 규모 변화를 위한 설계 패턴

규모가변적 시스템이 저절로 구축되지는 않는다. 분산 시스템에 규모가변성이 자동으로

생기는 일은 없다. 초기부터 서비스의 요구사항들을 만족할 수 있는 규모가변성을 염두에 두고

시스템을 설계해야 하며, 또한 이후의 성장을 위한 옵션들을 생성하는 기능들도 반드시 포함해

야 한다. 시스템을 실제로 가동한 후에도, 더 나은 규모가변성을 위해 시스템을 계속해서 최적

화해야 한다.

이전 장들에서는 분산 시스템을 극단적인 크기로 성장시킬 수 있는 여러 기법을 논의했다.

이번 장에서는 그 기법들을 훨씬 더 자세하게 살펴본다. 규모 변화에 관련된 용어들을 검토하

고, 규모 변화 기법들에 깔린 이론을 살펴보고, 규모 변화에 쓰이는 구체적인 기법들을 설명하

겠다. 시스템의 성능과 규모가변성을 서술하는 데 쓰이는 수학 용어들이 부록 C에 나오니 참고

하기 바란다.

5.1 일반 전략

규모가변적 시스템을 구축하는 기본적인 전략은, 처음부터 규모가변성을 염두에 두고 시스템

을 설계하는 것과 향후 추가적인 규모 변화에 방해가 되는 설계 요소들을 피하는 것이다.

초기 요구사항들에는 반드시 원하는 규모에 관한 근사치들을 포함해야 한다. 이를테면 저

장할 자료의 크기, 자료를 처리하는 시스템들의 처리량(throughput ), 서비스가 현재 받는 소

통량, 기대 성장 속도 등을 추정하고, 설계 과정에서 이 모든 요인을 지침으로 삼아야 한다. 이

러한 설계 과정을 §1.7에서 설명했다. 규모 변화 전략

시스템을 운영하다 보면 성능 한계들에 부딪힌다. 추가적인 규모 변화를 가능하게 하는 설

계 요소들이 그때부터 제 몫을 하게 된다.

잠재적인 규모 변화 문제점들을 최선을 다해 예측한다고 해도, 현실적으로 그 문제점들 모

두에 공학적 노력을 기울이지는 못한다. 향후의 잠재적 규모 변화 문제점을 해결하기 위한 추

가적인 설계 및 코딩 노력보다는 오늘 발견한 문제점을 바로잡기 위한 코드 작성이 더 시급하

다. 발생할지 아닐지 알 수 없는 미래의 규모 변화 문제를 방지하기 위해 너무 많은 시간을 소

비하는 것은 소위 섣부른 최적화(premature optimization )에 해당하며, 이는 반드시 피해야

한다.

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

1535.1 일반 전략

5.1.1 병목 식별

병목(bottleneck )은 시스템에서 혼잡(congestion; 또는 밀집)이 발생하는 지점을 말한다.

자원이 고갈되어서 시스템 성능이 제한되는 지점이 바로 병목이다. 모든 시스템에는 병목이 있

다. 시스템의 성능이 기대 이하일 때 병목을 찾아서 고치면 시스템 성능이 높아질 수 있다. 시

스템이 잘 작동하는 경우에도 병목의 위치를 아는 것은 유용하다. 그러면 향후의 문제점을 예

측하고 방지할 수 있기 때문이다. 성능상의 문제점이 발생할 때까지 인위적으로 부하를 높여

보면(이를테면 검사용 환경에서) 병목을 발견할 수 있다.

규모 변화를 적용할 지점을 결정하는 것은 시스템의 병목을 찾아서 제거하는 문제에 해당

한다. 병목은 아직 처리하지 못한 작업들이 누적되는 지점이다. 병목 지점으로 올라가는 공정

을 최적화하면 누적 속도가 빨라질 뿐이다. 병목 지점에서 올라가는 공정을 최적화하면 그 부

분의 효율성은 증가할 수 있겠지만, 시스템 전체의 처리량은 개선되지 않는다. 따라서 병목 자

체에 초점을 두지 않은 모든 노력은 낭비일 뿐이다.

5.1.2 구성요소들의 재공학

현재 시스템을 조정 또는 조율하는 것으로 해결되는 규모 변화 문제점들도 있다. 예를 들어 캐

시의 크기는 그냥 구성 파일 하나만 조정하면 키울 수 있다. 그러나 그 외의 규모 변화 문제점

들에는 공학적 노력이 필요하다.

시스템의 한 부분을 다시 작성하는 것을 가리켜 재공학(reengineering )*이라고 부른다.

현재의 코드 구조(code structure )나 설계 구조의 원인이 된 이전의 설계상의 결정들 때문에

재공학을 적용하기가 어려운 경우도 있다. 그런 경우 해당 코드를 기능은 같되 재공학을 좀 더

수월하게 적용할 수 있는 내부 구조를 가진 다른 코드로 대체하는 것이 최선일 때가 많다. 기존

코드의 구조를 바꾸는 것, 즉 외부 행동은 그대로 유지하고 내부 구조를 변경하는 것을 가리켜

리팩터링(refactoring )이라고 부른다.

*  옮긴이_ ‘재설계’라는 용어도 있지만, reengineering이 설계에만 국한되는 것은 아니며 무엇보다도 redesign과 구분할 수 없으므로

부적합하다. 재공학은 reverse engineering을 ‘역공학’이라고 부르는 데에서 착안한 용어로, 최고의 선택은 아니겠지만 차악은 될 것

이다.

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

154 5장 규모 변화를 위한 설계 패턴

5.1.3 결과의 측정

규모 변화 해법들은 반드시 증거를 이용해서 평가해야 한다. 여기서 증거란 실제 시스템에서

수집한 자료를 말한다. 주요 수치들을 측정하고, 해법을 적용해 보고, 같은 수치들을 다시 측

정해 보면 그 해법의 효과를 알 수 있다. 효과가 크지 않거나 부정적인 해법은 채용하지 말아야

한다.

예를 들어 성능이 느린 시스템을 조사해 보니 캐시 적중률이 아주 낮게 측정되었다고 하

자. 그렇다면 캐시가 너무 작은 것이 문제일 수 있다. 이 경우 먼저 성능을 측정하고, 캐시 크기

를 변경하고, 다시 성능을 측정해 본다. 캐시 크기를 조정한 후 캐시 적중률이 개선되어도 시스

템 전체의 성능이 크게 나아지지는 않을 수 있거나, 추가로 필요한 RAM의 비용을 정당화할 만

큼 성능 개선이 크지는 않을 수 있다.

변경 이전과 이후에 성능을 측정하지 않으면 그 변경이 실제로 효과적인지 판단할 수 없

다. 측정 없는 변경은 최선의 경우라도 운에 의존하는 시스템 관리로 이어지며, 최악의 경우에

는 ‘아집’에 의한 시스템 관리로 귀결된다. 성급히 해결책을 적용하고 그 후에야 시스템을 측정

하는 우를 범하는 경우가 많은데, 비교의 기준이 없다는 점에서 이는 측정을 아예 하지 않는 것

과 마찬가지로 나쁜 일이다.

과거의 경험이 좋은 정보이자 지침이긴 하지만, 측정과 분석에 의거해서 의사결정을 진행

하는 과학적 공정을 건너뛰고 경험에만 의존하려는 유혹을 떨쳐버려야 한다. 어떤 분산 시스템

이든, 무엇을 하는 것이 좋은지를 임의의 한 사람이 “그냥 알 수 있는” 수준보다 훨씬 크다. 경

험 많은 시스템 관리자의 육감이나 추측보다는 과학적 분석에 시간을 들인 신참의 권고를 우선

시해야 한다. 즉, 자료 수집 메커니즘을 마련하고, 측정을 수행하고, 무엇인 문제인지에 관한

가설을 검증하고, 그것을 바로잡을 수 있는 이론을 시험해 보고, 그 결과를 분석하는 것이 더

중요하다.

5.1.4 능동적 대처

병목은 실제로 문제를 일으키기 전에 바로잡는 것이 최선이다. 이상적으로는, 병목이 문제를

일으키기 직전에 코드를 수정하는 것이 가장 좋다. 문제를 너무 빨리 바로잡는다면, 절대 나타

나지 않을 문제점에 노력(다른 어딘가에 투여했다면 좋았을)을 낭비하는 것일 수 있다. 해결

책의 설계와 구현을 늦게 시작한다면, 해결책을 적용하기 전에 문제가 발생할 것이다. 너무 오

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

1555.2 규모 확장

래 기다리면 운영팀이 아직 대비가 되지 않은 상태에서 문제점이 돌발할 것이며, 그러면 임시

방편으로 미봉책을 적용할 위험이 있다. 공학적 노력에는 시간이 걸리며, 성급히 진행하면 실

수가 벌어져서 더 많은 문제점이 발생하게 된다. 따라서 너무 일찍도 아니고 너무 늦지도 않은

‘적시’를 찾을 필요가 있다.

모든 시스템에는 병목 또는 제약이 있다. 그 자체는 나쁜 일이 아니다. 제약(constraint )

은 모든 시스템에 필연적으로 존재하는 요인이다. 제약은 가능한 처리 속도나 공정을 통해서

흐를 수 있는 작업량을 규정한다. 현재의 속도가 충분하다면 병목은 문제점이 되지 않는다. 다

른 말로 하면, 제약은 시스템이 목표를 달성하는 능력에 실제로 해가 될 때에만 문제점이다.

실행 중인 시스템의 규모 변화에 가장 좋은 전략은 문제점들을 예측하되, 적절한 해결책을

위해 충분한 시간을 확보할 수 있을 정도로 최대한 일찍 예측하는 것이다. 이를 위해서는 병목

들의 존재를 짐작할 수 있을 정도로 충분한 측정치들을 항상 수집해야 한다. 그리고 측정치들

을 세심하게 분석하면 병목이 언제 문제점이 될지 예측할 수 있어야 한다. 예를 들어 인터넷 대

역폭 소비량을 측정해서 그래프로 그려 보면 인터넷 연결의 용량이 소진될 시점을 어렵지 않게

예측할 수 있다. 대역폭을 더 주문하는 데 6주가 걸린다면, 용량 소진 시점을 적어도 6주 일찍

예측해서 미리 주문해야 할 것이다. 12주 일찍 주문한다면 더 좋다. 그러면 용량 증가 시도가

실패해도 한 번 더 시도할 여유가 있다.

그냥 구성 설정을 변경하는 것으로 즉시 구현할 수 있는 해결책들도 있지만, 몇 주 또는 몇

개월에 걸쳐 주요 시스템을 다시 작성하거나 교체하는 등의 좀 더 복잡한 공학적 노력이 필요

한 해결책들도 있다.

5.2 규모 확장

가장 간단한 시스템 규모 변화 방법은 더 크고 빠른 장비를 사용하는 것이다. 시스템이 너무 느

리게 실행된다면, 더 빠른 CPU 또는 더 많은 CPU와 더 많은 RAM, 더 빠른 디스크, 더 빠른

네트워크 인터페이스 등을 가진 컴퓨터로 시스템을 옮기면 된다. 컴퓨터 전체를 교체하는 대신

기존 컴퓨터의 CPU나 RAM, 디스크 등을 교체 또는 증설할 수도 있다. 시스템의 크기가 커진

다는 점에서, 이런 방식의 규모 변화를 규모 확장(scaling up; 또는 규모 증가)라고 부른다.

잘 작동하기만 한다면 이것이 가장 쉬운 해법이다. 소프트웨어 재설계가 필요하지 않기 때

문이다. 그러나 이런 방식의 규모 변경에는 여러 가지 문제점이 있다.

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

156 5장 규모 변화를 위한 설계 패턴

첫째로, 시스템 크기 증가에는 한계가 있다. 마련할 수 있는 가장 빠르고 가장 크고 가장

강력한 컴퓨터라도 주어진 과제를 감당하기에는 부족할 수 있다. 그 어떤 컴퓨터이든, 한 대의

컴퓨터로는 웹 검색 엔진의 말뭉치 전체를 저장할 수 없거나, CPU 능력이 페타바이트 규모의

자료집합을 처리할 정도가 되지 않거나, 초당 수백만 건의 HTTP 요청에 응답할 수는 없을 수

있다. 현재 시장에 나와 있는 컴퓨터의 능력에는 엄연히 한계가 존재한다.

둘째로, 이 접근방식은 경제적이지 못하다. 두 배 빠른 컴퓨터의 비용은 두 배를 넘는다.

그런 컴퓨터는 그리 많이 팔리지 않으므로 대량생산되지 않는다. 최신 CPU나 디스크 드라이

브, 기타 부품 역시 가격에 프리미엄이 붙는다.

마지막으로, 가장 중요한 것은 규모 확장이 통하지 않는 상황들이 있다는 것이다. 일반적

으로, 더 빠르고 강력한 기계를 산다고 해도 소프트웨어 설계를 변경하지 않으면 추가 비용 대

비 처리량 증가가 별로 좋지 않다. 단일 스레드로 실행되는 소프트웨어는 프로세서가 여럿인

컴퓨터에서 실행한다고 해도 더 빨라지지 않는다. 작업을 모든 프로세서에 분산시키도록 작성

된 소프트웨어라고 해도 일정 개수 이상의 CPU들에서는 자물쇠 경합(lock contention ) 같

은 병목 때문에 성능이 그리 향상되지 않을 수 있다.

마찬가지로, 임의의 한 구성요소의 성능을 향상한다고 해도 시스템 전체의 성능이 반드시

향상되는 것은 아니다. 예를 들어 네트워크 속도가 빨라진다고 해도, 잠복지연이 높을 때 프로

토콜이 잘 작동하지 않는다면 전반적인 처리량은 개선되지 않는다.

부록 B는 이런 문제점들을 좀 더 자세히 살펴보고, 이 문제점들이 분산 컴퓨팅의 발명으로

이어진 역사도 이야기한다.

5.3 AKF 규모 변화 입방체

시스템 전반의 규모 변경을 위한 방법론들은 크게 세 가지로 나뉘는데, 하나는 시스템 전체를

복제하는 것(수평적 중복)이고 또 하나는 시스템을 개별 기능, 서비스, 자원들로 나누는 것(기

능적 분할 또는 서비스 분할), 나머지 하나는 시스템을 개별 조각들로 분할하는 것(조회 분할

또는 공식 분할)이다.

[그림 5.1 ]은 이 세 범주를 각각 x, y, z축으로 도식화한 입방체이다. 창안자인 애봇Abbott

과 키븐Keeven, 피셔Fisher의 이름을 따서, 이 도식을 AKF 규모 변화 입방체(scaling cube )라고

부른다(Abbott & Fisher 2009 ).

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

1575.3 AKF 규모 변화 입방체

거의 무한대에 가까운 규모

큰 나머지 또는 해시

Z축 —

조회

또는

공식

적 분

분할 없음

복제본들을 읽고단일한 노드에 기록

X축 — 수평 중복

하나의, 전일적인 자료구조

서비스 또는 자료 친화도에

의한 분할

분할 없음

시작점

Y축

— 기

능이

나 서

비스

,

자원

에 의

한 분

그림 5.1 AKF 규모 변화 입방체. AKF Partners 등록상표.

허락하에 Scalability Rules: 50 Principles for Scaling Web Sites에서 재인용.

5.3.1 x축: 수평 중복

수평 중복(horizontal duplication )은 서비스를 복제함으로써 처리량을 늘린다. 이를 수평

규모 변화(horizontal scaling )나 스케일링 아웃scaling out이라고 부르기도 한다.

이런 종류의 복제는 이전 장들에서 논의했다. 예를 들어 하나의 부하 분산기 뒤에 한 웹 서

버의 여러 복제본을 두는 기법이 수평 규모 변화의 예이다.

여러 구성요소가 공유하는 자원들의 집합을 자원 풀(resource pool )이라고 부른다.

자원을 풀에 추가할 때에는 각 복제본이 같은 트랜잭션을 처리했을 때 동일한 또는 동등한

(equivalent ) 결과를 낼 수 있어야 한다.

자료가 증가하거나 특별한 처리가 필요한 복잡한 트랜잭션들이 증가할 때에는 x축의 규모

가 그리 잘 변화되지 않는다. 각 트랜잭션을 모든 복제본에서 독립적으로 완수할 수 있다면, 성

능 향상은 복제본 개수에 비례한다. 이 경우 규모 변화에 따른 효율성 감소는 전혀 없다.

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

178 5장 규모 변화를 위한 설계 패턴

연습문제

1. 규모 변화란 무엇인가?

2. CPU가 제한 요인인 서비스의 규모를 변화하는 방법으로는 어떤 것들이 있는가?

3. 저장 요구량이 증가하는 서비스의 규모를 변화하는 방법으로는 어떤 것들이 있는가?

4. 하드웨어 가격이 매년 내려가므로, [그림 1.10 ]에 나온 수치들은 이미 구식이 되었다. 최

근 몇 년에 맞게 그 도표를 갱신하라. 조금 변한 항목들은 무엇이고 크게 변한 항목들은 무

엇인가?

5. [그림 1.10 ]의 수치들을 상대적인 비율로 환산해 보라. 예를 들어 주 메모리를 읽는 데 1초

걸린다면, 다른 연산들은 얼마나 걸릴까? 추가 점수를 따고 싶은 독자라면, 그 답들을 달력

이나 태양계 비슷한 형태로 도식화하라.

6. [그림 1.10 ]의 표에 각 항목의 비용을 나타내는 열(column )을 추가하라. 그 비용들을 단

위가 같아지도록 비례시켜야 한다. 이를테면 RAM 1테라바이트의 비용, 디스크 1테라바이

트의 비용, L1 캐시 1테라바이트의 비용 등을 사용할 것. 그리고 비용 대비 성능을 보여주

는 열도 추가하라.

7. 서로 다른 규모 변화 기법들을 서술하는 이론적 모형(이번 장에서 언급한)은 무엇인가?

8. 규모 변화가 필요한 시점이 되었음을 어떻게 알 수 있을까?

9. 실무에서 흔히 쓰이는 규모 변화 기법들은 무엇이고 어떻게 작동하는가? 각각 어떨 때 사

용하는 것이 가장 적합한가?

10. 규모 변화 기법 중 탄력성도 향상하는 것들은 무엇인가?

11. 독자의 환경이 CDN을 활용하는 방식을 서술하라. CDN을 사용하지 않는다면, 어떤 식으

로 사용하면 좋을지 연구하라.

12. 암달의 법칙(Amdahl’s law )을 조사하고, 그것이 AKF 규모 변화 입방체와 어떻게 관련

되는지 설명하라.

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

1796.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성

성공은 끝이 아니고 실패는 파멸이 아니다.

중요한 것은 계속하고자 하는 용기이다.

-윈스턴 처칠Winston Churchill

탄력성(resiliency; 회복력)은 시스템이 장애를 건설적으로 처리하는 능력이다. 탄력적인(탄

력성이 있는) 시스템은 장애를 검출해서 피해간다. 비탄력적(탄력성이 없는) 시스템은 오작동

발생 시 쓰러지고 만다. 소프트웨어 기반 탄력성에 관한 이번 장에서는 탄력성을 갖추는 데 흔

히 쓰이는 기법들을 소개한다.

탄력성이 중요한 이유는 아주 간단하다. 다운된 웹사이트에는 아무도 가지 않기 때문이다.

하드웨어 고장은 일상다반사日常茶飯事이다. 세상에서 가장 믿음직하고 비싼 하드웨어를 산다고

해도 어느 정도의 고장은 발생한다. 충분히 큰 시스템에서는 발생 확률이 백만분의 1인 장애가

‘매일’ 발생한다.

전형적인 구글 데이터센터의 경우, 첫해에는 랙 전체의 가동 중단이 5회 정도 일어나고 라

우터에 연결된 기계들의 처리가 멈출 정도로 큰 라우터 고장이 3회 정도 일어난다. 예정된 유

지보수 작업에 의한 네트워크 가동 중단은 8회인데, 그중 절반에서는 30분간 연결들이 무작위

로 끊어진다. 그 동안 모든 디스크의 1~5%가 죽고 각 기계가 적어도 두 번 충돌한다(고장률이

2~4%) (Dean 2009 ).

제2장에서 설명했듯이, 우아한 강등(graceful degradation )이란 장애 상황이나 고부하

상황에서 기능성을 줄임으로써 소프트웨어가 그런 상황을 극복하도록 설계하는 것을 말한다.

탄력성을 위한 설계 패턴

CHAPTER 06

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

180 6장 탄력성을 위한 설계 패턴

알아야 할 용어들

중단(outage ): 서비스가 제공되지 않음을 사용자가 알아챌 수 있을 정도로 서비스에 문제가 있

는 상황.

장애(failure ): 시스템이나 하위 시스템 또는 구성요소가 작동을 멈추는 것.

오작동(malfunction ): ‘장애’와 같은 뜻으로 쓰인다.

서버(server ): 어떠한 기능(function )이나 응용 프로그래밍 인터페이스(API )를 제공하는 소

프트웨어. (서버 하드웨어를 말하는 것이 아님.)

서비스(service ): 여러 개의 서버로 이루어진, 사용자에게 보이는 시스템 또는 제품.

기계(machine ): 가상 또는 물리적 기계.

QPS: queries per second, 즉 초당 질의 수의 약자. 흔히 초 당 웹페이지 방문 횟수나 API

호출 횟수를 뜻한다.

예를 들어 동영상 스트리밍 서비스라면 인터넷 연결들 일부가 다운되었거나 기타 이유로 과부

하가 걸렸을 때 자동으로 동영상 해상도를 낮춤으로써 대역폭을 절약한다. 심층 방어(defense

in depth )라는 전략도 있는데, 이는 설계의 모든 계층에서 장애를 검출하고 그에 대응하게 하

는 것을 뜻한다. 여기서 말하는 장애에는 한 프로세스의 오작동 같은 작은 장애와 데이터센터

전체의 장애 같은 큰 장애가 모두 포함된다.

탄력성을 보장하는 오래된, 그리고 좀 더 전통적인 전략은 장애가 발생할 수 있는 모든 지

점에서 장애 발생 가능성을 줄이는 것이다. 이를테면 최상의 서버들과 최상의 네트워크 장비를

사서 신뢰성이 가장 큰 데이터센터에 넣는다. 이 전략을 사용해도 가동 중단은 여전히 발생하

겠지만, 빈도가 아주 낮아진다. 이 전략은 비용이 가장 큰 전략이다. 또 다른 전략은 의존 관계

를 분석해서 각 시스템이 고품질 부품에 의존하는지 확인하는 것이다. 공급업체들은 제품의 구

성요소의 신뢰성을 계산해서 MTBF (mean time between failure; 평균 무고장 시간) 등급

을 발표한다. 시스템 안의 의존 관계들을 분석해보면 시스템 전체의 MTBF를 예측할 수 있다.

시스템의 MTBF는 MTBF가 가장 낮은 구성요소의 MTBF를 넘지 못한다.

그런 전략은 예측적(predictive )이다. 즉, 시스템의 장애 가능성 또는 신뢰성을 예측할 수

있다.

탄력성이 있는 시스템은 예측적 전략의 한계를 넘어선 지점에서도 가동을 계속한다. 탄력

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

1816.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성

적인 시스템을 구축할 때에는 장애가 반드시 발생한다는 가정하에서 장애 발생 시 지능적으로

반응함으로써 시스템 전체가 살아남아서 서비스를 계속 제공할 수 있도록 시스템을 설계, 구현

한다. 탄력적 시스템은 더 나은 하드웨어를 갖추어서 장애를 피하거나 장애에 인간의 노력(그

리고 사과)으로 대응하는 수동적인 자세가 아니라 장애를 예상하고 살아남을 수 있는 메커니

즘을 미리 마련하는 능동적인 자세를 취한다.

탄력적 시스템은 구성요소의 장애를 사용자에게 드러나는 서비스 중단과 분리한다. 전통

적인 컴퓨팅에서는 한 구성요소가 실패하면 사용자에게 드러날 정도의 서비스 중단 상황이 벌

어진다. 생존 가능 시스템(survivable system; 또는 지속 가능 시스템)을 구축할 때에는 장애

라는 개념과 중단이라는 개념을 분리한다.

이번 장은 장애를 검출해서 우회하는 시스템을 설계하는 다양한 방법을 논의한다. 그 방법

들은 곧 생존 가능 시스템을 구축하는 방법이다. 이번 장은 그런 기법들을 물리적 고장, 공격,

인간의 실수, 예기치 못한 부하라는 네 가지 범주로 나누어서 소개한다.

6.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성

신뢰성 있는 시스템을 구축할 때 더 나은 하드웨어를 갖추는 데 주력할 수도 있고 더 나은 소프

트웨어를 갖추는 데 주력할 수도 있다. 더 나은 하드웨어를 갖춘다는 것은 특수 용도의 CPU나

부품, 저장 시스템 등을 마련하는 것을 말한다. 더 나은 소프트웨어를 갖춘다는 것은 장애를 검

출해서 우회할 정도의 지능을 시스템에 추가하는 것을 뜻한다.

여러 가지 이유로, 둘 중 소프트웨어적인 해결책이 더 낫다. 가장 중요한 이유는 소프트웨

어가 더 경제적이라는 것이다. 소프트웨어는 한 번만 작성하면 추가 비용 없이 여러 서비스와

여러 기계에 적용할 수 있다(직접 작성했거나 오픈소스라서 기계별 사용권을 구매할 필요가

없다고 할 때). 또한, 소프트웨어는 말 그대로 하드웨어보다 부드럽다. 즉, 고치거나, 업그레이

드하거나, 교체하기가 더 쉽다. 하드웨어 업그레이드와는 달리 소프트웨어 업그레이드는 자동

화할 수 있다. 결과적으로 소프트웨어는 자주 교체된다. 새 기능이 더 빨리, 그리고 더 자주 시

스템에 도입된다. 실험하기도 쉽다. 소프트웨어는 시간이 지날수록 더 강해진다. 버그가 교정

되고, 드문 극단적 경우(edge case )들이 더 잘 처리된다. 스폴스키Spolsky의 에세이 “Things

You Should Never Do”(Spolsky 2004 )에 여러 예가 나온다.

반면 더 나은 하드웨어를 갖추려면 더 큰 비용이 든다. 초기 구매 가격이 소프트웨어보다

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

182 6장 탄력성을 위한 설계 패턴

높다. 신뢰성 높은 CPU와 부품, 저장 시스템들은 흔히 쓰이는 일반적인 부품들보다 훨씬 비싸

다. 하드웨어에 주력하는 전략에 비용이 많이 드는 또 다른 이유는 시스템 규모를 키우기 위해

기계를 추가할 때마다 비용을 치러야 한다는 점이다. 하드웨어 업그레이드에는 기계 자체의 비

용뿐만 아니라 설치 인건비, 자본 감가상각, 기존 부품 폐기 비용 같은 추가 비용도 필요하다.

소프트웨어 설계보다 하드웨어 설계에 더 많은 시간이 걸리므로, 하드웨어 업그레이드는 상대

적으로 덜 일어나며, 새로운 시도를 실험하기가 더 어렵다. 하드웨어는 오래될수록 약해지고

고장이 잦아진다.

6.2 모든 것은 결국에는 고장난다

그 어떤 환경이든, 고장과 오작동은 필연적이다. 오작동은 모든 수준에서 발생할 수 있다. 예

를 들어 하드웨어 구성요소 수준(칩과 기타 전자 부품)에서 발생하기도 하고, 장치 수준(하드

드라이브, 메인보드, 네트워크 인터페이스 등)에서 발생하거나 시스템 수준(컴퓨터, 네트워크

장비, 전원 시스템 등)에서 발생하기도 한다. 또한, 오작동은 다양한 규모의 영역에서 발생한

다. 작게는 특정 랙 하나에 전원이 제대로 공급되지 않을 수 있으며, 좀 더 크게는 데이터센터

전체가 외부와 연결이 끊어질 수 있고, 심지어 도시나 지역 전체에 재해가 발생할 수도 있다.

사람 역시 오작동과 고장의 한 원인이다. 단순한 오타에서 심각한 소프트웨어 버그에 이르기까

지, 그리고 실수로 전원선을 발로 차서 플러그가 빠지는 사고에서 고의로 악의적인 공격을 수

행하는 것에 이르기까지 다양한 요인이 존재한다.

6.2.1 분산 시스템의 MTBF

큰 시스템에서는 작은 문제가 확대된다. 대형 시스템에서는 발생 확률이 백만분의 1인 장애가

자주 발생한다. MTBF가 1백만 시간인 하드 드라이브가 1년 동안 고장날 확률은 114분의 1이

다. 그런 하드 디스크가 10만 개이면, 하루 평균 두 개의 하드 드라이브가 고장날 수 있다.

1억 분의 1의 확률로 발동되는 CPU의 버그 때문에 집에서 사용하는 PC가 1년에 한 번 정

도는 충돌할 수 있다. 그런 경우 사용자는 투덜대면서 PC를 다시 부팅할 뿐, 그런 일이 다시 생

기리라고는 생각하지 않을 것이다. 발생 확률이 그 정도로 낮은 버그는 칩 제조사가 미리 검출

하지 못할 수 있다. 그러나 분산 컴퓨팅 시스템에서는 충돌 검출 및 분산 시스템에서 하나의 패

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

1836.2 모든 것은 결국에는 고장난다

턴으로 인식할 정도로 버그가 자주 발현될 수 있다. 그런 버그를 보고하면 칩 제조사는 아마

그런 버그가 존재한다는 점에 당황하고, 그런 버그를 누군가가 발견했다는 점에 놀라고, 핵심

CPU 설계가 여러 세대의 칩들을 거치는 동안 그 버그를 잡아내지 못했다는 점을 창피해 할 것

이다. 또한, 칩 제조사는 시스템 관리에 관한 책에서 그런 문제를 상세하게 문서화할 권한을 저

자에게 부여하지는 않을 가능성이 크다.

장애들은 모이기 마련이다. 그러다 보면 마치 기계들이 단결해서 사람에게 반항하는 것처

럼 보이기도 한다. 정전이 지나가면 여러 랙의 컴퓨터들이 동시에 재시동하며, 그러면 수십 개

의 디스크를 모두 돌리기에는 전력이 모자라는 상황이 벌어진다. 오래된 납땜 접점이 수축되고

갈라지면서 원인을 알 수 없는 고장이 발생한다. 같은 공장에서 같은 시기에 만들어진 구성요

소들은 수명이 비슷하기 때문에, 갑자기 여러 대의 기계가 동시에 고장나는 일도 발생한다.

이러한 다양한 잠재적 오작동과 장애들에 관한 논의에 겁을 먹고 시스템 관리 분야를 떠나

려는 독자가 없길 바랄 뿐이다!

6.2.2 전통적인 접근방식

전통적인 소프트웨어는 완벽하고 오작동 없는 세계를 가정한다. 그러한 가정하에서 하드웨어

시스템 기술자에게는 절대 실패하지 않는(고장나지 않는) 하드웨어를 공급하라는 불가능한

임무가 주어진다. 그래서 하드웨어가 절대 실패하지 않는 환경을 흉내내는 기술들이 탄생했다.

소프트웨어가 보기에 디스크가 결코 실패하지 않는 것처럼 가장하기 위한 RAID (redundant

array of inexpensive [independent ] disks; 저렴한 또는 독립적인 디스크들의 중복된 배

열) 시스템이 그러한 예이다. 이런 기술을 이용해서 고장으로 가득한 실제 세계의 현실과 격리

한 덕분에, 소프트웨어 개발자는 계속해서 완벽하고 오작동 없는 세계(물론 실재하지 않는)를

가정하고 소프트웨어를 작성할 수 있다.

예를 들어 UNIX 응용 프로그램을 작성할 때에는 파일 읽기와 쓰기가 오류 없이 진행된다

고 가정한다. 그래서 응용 프로그램에서 파일 쓰기 오류를 굳이 점검하지 않는다. 오류를 점

검한다면 오히려 시간 낭비가 될 수 있다. 왜냐하면 자료 블록이 디스크에 바로 기록되는 것

이 아니라 나중에, 심지어는 응용 프로그램이 종료된 후에야 기록될 수도 있기 때문이다. 한편,

Microsoft Word는 자신이 실행되는 컴퓨터가 계속해서 실행될 것이라는 가정하에서 작성되

었다.

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

184 6장 탄력성을 위한 설계 패턴

과장법 주의

앞의 문단에는 과장된 부분이 두 군데 있다. UNIX의 응용 프로그램 계층은 파일 시스템이 완벽

하다고 가정하지만, 그 바탕 계층들은 디스크가 완벽하다고 가정하지 않는다. Microsoft Word

는 충돌 시에도 사용자의 자료가 소실되지 않도록 일정 주기로 문서를 저장한다. 그러나 충돌 도

중에는 사용자가 문서를 수정할 수 없다.

회사들은 오작동 없는 세계라는 달성 불가능한 가정을 위해 많은 돈을 낭비한다. 신뢰성이

높다고 알려진 CPU나 부품, 저장 시스템은 일반적인 부품보다 훨씬 비싸다. 부록 B에서 이러

한 전통적인 전략의 역사와 이번 장에서 논의하는 분산 컴퓨팅 기법들의 경제적 이득을 상세히

설명한다.

6.2.3 분산 컴퓨팅 접근방식

전통적인 접근방식과는 달리 분산 컴퓨팅은 구성요소들의 장애와 오작동을 포용한다. 분산

컴퓨팅은 오작동이 일어나기 마련이라는 현실적인 접근방식을 취한다. 구글 문서(Google

Docs ) 사용자는 구글에 있는 한 컴퓨터가 고장나도 계속해서 문서를 편집할 수 있게 한다.

그런 경우 다른 컴퓨터가 그 자리를 대신하며, 사용자는 그런 교체가 일어났음을 눈치채지 못

한다.

전통적인 컴퓨팅은 하드웨어를 이용해서 신뢰성을 높이는 데 많은 노력을 들이다가 한계

에 부딪히면 적은 수의 장애들을 ‘정상’으로 받아들이거나 장애를 검출하고 우회하는 지능을 소

프트웨어에 추가한다. 애초에 소프트웨어로 장애를 우회할 수 있다면, 비싼 하드웨어에 돈을

들이는 것은 낭비일 뿐이다.

유명한 범퍼 스티커로 “Eat right. Exercise. Die anyway (잘 먹고 운동하라. 어차피 죽

는다)”라는 것이 있다. 아무리 비싼 하드웨어도 고장나기 마련이라면 애초에 최고의 제품을 구

매할 필요가 없다. 신뢰성을 위한 비용을 이중으로 치를 필요가 있겠는가?

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

1856.3 예비 수용량을 이용한 탄력성 확보

고장난 메모리나 금반지 삽니다

초창기 구글은 신뢰성 없는 하드웨어를 지능적인 소프트웨어를 이용해서 어느 정도까지나 감당할

수 있는지 시험해 보았다. 이를 위해 구글은 고장난 RAM 칩을 구매해서 활용할 방법을 찾아냈다.

구글은 장애에 대한 탄력성이 높은 소프트웨어들을 실행하는 기계들을 위해 수 테라바이트의

RAM을 구매했다. 한 칩이 고장나면 OS는 주 메모리의 해당 영역을 사용 불가능으로 표시해 둔

후 그 영역을 사용하는 모든 프로세스를 죽였다. 죽은 프로세스는 자동으로 재시작한다. 그 칩이

불량이라는 사실을 기록해 두기 때문에, 이후 OS가 재시동되어도 OS는 그 칩을 사용하지 말아

야 한다는 점을 알게 된다.

이런 방식에서는 칩 하나가 고장난다고 해서 컴퓨터 전체를 수리할 필요가 없다. 메모리 용량

이 가용 한계 이하로 떨어지기 전까지는 컴퓨터를 계속 실행해도 된다.

이런 방법을 도입한 후 구글에 생긴 일을 이해하려면, 고품질 RAM 칩과 보통 품질 RAM 칩의

차이는 검사 통과율뿐임을 알아야 한다. 제조사는 RAM 칩을 만든 후 검사한다. 가장 엄격한 QA

검사를 통과한 칩들은 ‘고품질’ 칩이라는 딱지를 달고 높은 가격으로 판매된다. 표준 QA 검사를

통과한 칩은 보통의 가격으로 판매된다. 표준 QA 검사조차 통과하지 못한 칩들은 폐기된다.

구글의 구매 부서 직원들은 만만찮은 협상가들이다. 이미 구글은 보통 품질 칩들을 구매하고

오작동 문제는 장애를 우회하기 위해 구글이 직접 작성한 소프트웨어를 통해 해결함으로써 많은

돈을 절약한 바 있다. 어느 날 구매 부서는 만일 폐기되는 칩들을 살 수 있으면 어떨까라는 생각

을 하게 되었다. 전에는 그런 요청을 받아본 적이 없는 칩 제조사들은 그런 칩들을 기꺼이 아주

싸게 넘겨주었다.

‘고장난’ RAM 칩들은 구글의 요구를 완벽하게 만족시켰다. 처음부터 작동하지 않은 것들도

있고 얼마 안가 고장나는 것들도 있었지만, 그래도 서비스를 계속해서 돌릴 수 있었다.

결국에는 이런 관행을 끝내긴 했지만, 수년 간 구글은 엄청난 용량의 RAM을 갖춘 서버들을

다른 경쟁사들보다 적은 비용으로 구축할 수 있다. 광고 단가가 몇 센트 수준인 사업에서 수 달

러를 절약한다는 것은 커다란 이득이다!

6.3 예비 수용량을 이용한 탄력성 확보

탄력성을 확보하는 데 쓰이는 일반적인 전략은 각자 독립적으로 실패할 수 있는 수용량 단위들

을 중복해서 마련하는 것이다. 그런 단위들 중 실패하는 것이 있으면 서비스에서 제거한다. 시

스템의 총 수용량은 줄어들겠지만, 그래도 시스템은 여전히 실행될 수 있다. 이런 전략을 위해

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

2117.1 분산 시스템의 운영

운영: 시스템 실행하기

Part

II

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

212 6장 탄력성을 위한 설계 패턴

CHAPTER 7 분산 세계에서의 운영

CHAPTER 8 개발운영 문화

CHAPTER 9 서비스 인도: 구축 국면

CHAPTER 10 서비스 인도: 배치 국면

CHAPTER 11 활성 서비스의 업그레이드

CHAPTER 12 자동화

CHAPTER 13 설계 문서

CHAPTER 14 호출대기

CHAPTER 15 재난 대비

CHAPTER 16 감시의 기초

CHAPTER 17 감시 시스템의 구조와 관행

CHAPTER 18 수용량 계획 수립

CHAPTER 19 KPI 작성

CHAPTER 20 탁월한 운영

맺음말

Part II

운영: 시스템 실행하기

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

2137.1 분산 시스템의 운영

경쟁력을 지속적으로 제공하는 근원이

조직의 학습 속도뿐인 시대가 조만간 올 것이다.

-피터 센지Peter Senge

이 책의 제1부에서는 분산 시스템을 구축하는 방법을 논의했다. 제2부에서는 분산 시스템을

실행하는 방법을 논의한다.

시스템을 계속 실행하는 데 필요한 최소한의 작업을 운영(operation )이라고 부른다. 좀

더 구체적으로, 운영은 서비스 수준 협약서(service level agreement, SLA )에 지정된 운영

상의 수치들을 만족 또는 초과하는 방식으로 시스템을 계속 실행하는 데 필요한 작업이다. 운

영에는 서비스 수명 주기의 모든 측면이 포함된다. 즉, 운영은 서비스의 초기 시동과 최종 폐기

사이의 모든 것을 포함한다.

일반적으로 운영 작업은 가용성(availability ), 속도, 성능, 보안, 수용량 계획, 소프

트웨어/하드웨어 업그레이드에 초점을 둔다. 이들 중 하나라도 실패하면 시스템의 신뢰성

(reliability )이 깨지는 결과가 발생한다. 서비스가 느리면 사용자는 서비스가 엉망이라고 간

주한다. 시스템의 보안이 허술하면 외부인이 시스템을 장악할 수 있다. 적절한 수용량 계획이

없으면 과부하가 걸려서 장애를 일으킨다. 업그레이드를 제대로 수행하지 못하면 서비스 가동

이 중단된다. 업그레이드를 아예 하지 않으면 버그들이 수정되지 않은 채로 남는다. 이 모든 활

동은 궁극적으로 시스템의 신뢰성에 영향을 미치므로, 구글은 운영을 사이트 신뢰성 공학(Site

Reliability Engineering, SRE )이라고 부른다. 그리고 다른 여러 회사도 그런 선례를 따랐다.

분산 세계에서의 운영

CHAPTER 07

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

214 7장 분산 세계에서의 운영

운영은 팀 활동이다. 운영은 한 사람이 하는 것이 아니라 함께 일하는 여러 명의 팀이 수행

한다. 그런 이유로 이번 장의 상당 부분은 운영자들이 개인들의 집합이 아니라 하나의 팀으로

서 일하는 데 도움이 되는 공정(process )과 방침(policy )들을 설명한다. 진행을 느리게 만드

는 관료주의적 미로처럼 보이는 공정들을 사용하는 회사들도 있다. 이번 장에 나오듯이, 그리

고 좀 더 중요하게는 우리 저자들의 개인적인 경험에 따르면, 아주 큰 컴퓨팅 시스템의 실행을

가능하게 하는 것은 바로 좋은 공정들이다. 다른 말로 하면, 공정은 팀이 옳은 일을 거듭 수행

할 수 있게 만드는 요인이다.

이번 장은 먼저 운영 관리에 관한 몇 가지 배경 지식을 짚은 후 운영 서비스 수명주기를 논

의하고, 마지막으로는 전형적인 운영 작업 전략들을 논의한다. 이번 장에서 다루는 모든 주제

를 이후의 장들에서 좀 더 자세히 살펴볼 것이다.

알아야 할 용어들

혁신(innovation ): 아직 해보지 않은 일(좋은 일)을 하는 것.

기계(machine ): 가상의 기계 또는 물리적 기계.

호출대기(oncall ): 가동 중단이나 경고 시 최초 대응자가 될 수 있도록 대기하는 것.

서버(server ): 어떠한 기능이나 API를 제공하는 소프트웨어. (서버 하드웨어를 말하는 것이

아님.)

서비스(service ): 여러 개의 서버로 이루어진, 사용자에게 보이는 시스템 또는 제품.

약한 개시(soft launch ): 새 서비스를 공표하지 않고 개시하는 것. 이렇게 하면 입소문이 퍼지

면서 소통량이 느리게 증가하므로, 너무 많은 사람이 보기 전에 운영팀이 문제점을 고치거나 시

스템의 규모를 확장할 여유가 생긴다.

SRE : Site Reliability Engineer (사이트 신뢰성 기술자) 또는 Site Reliability

Engineering (시스템 신뢰성 공학)의 약자. 구글에서 활성 서비스들을 유지보수하는 시스템 관

리자들 또는 그런 관리자들이 하는 일을 일컫는 용어이다.

이해관계자(stakeholder ): 프로젝트의 성공에 이해관계가 걸려 있는 개인 또는 조직.

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

2157.1 분산 시스템의 운영

7.1 분산 시스템의 운영

분산 시스템의 운영을 이해하려면 우선 분산 시스템의 운영이 전통적인 전사적全社的

(enterprise ) IT와 어떻게 다른지부터 이해해야 한다. 또한, 운영팀과 개발팀 사이의 긴장의

근원과 운영 규모 변화를 위한 기본적인 기법들도 이해해야 한다.

7.1.1 SRE팀 대 전통적인 전사적 IT 부서

시스템 관리는 하나의 연속체(continuum )이다. 연속체의 한끝에는 전통적인 데스크톱과

클라이언트-서버 기반구조를 담당하는, 흔히 전사적 IT라고 부르는 전통적인 IT 부서가 있

다. 다른 한끝에는 분산 컴퓨팅 환경(주로 웹사이트나 기타 서비스들과 연관되는)을 담당하는

SRE팀 또는 그에 상응하는 비슷한 부서가 있다. 이것이 다소 거친 일반화일 수 있겠지만, 그래

도 몇 가지 중요한 차이점을 설명하기에는 충분할 것이다.

SRE팀이 전사적 IT 부서와 다른 점은, SRE팀은 서비스 하나 또는 잘 정의된 서비스들의

집합 하나를 제공하는 데 집중하는 경향이 있다는 것이다. 반면 전통적인 전사적 IT 부서(이하

간단히 IT 부서)는 데스크톱 서비스, 백오피스backoffice 서비스, 그리고 그 사이의 모든 것(‘전원

플러그가 있는 모든 것’)을 책임지는 경향이 있다. SRE팀의 주된 고객은 서비스의 제품 관리자

들이지만 IT 부서의 고객들은 최종 사용자들이다. 이는 SRE팀의 활동이 각자 우선순위가 다른

여러 사용자에 좌지우지되기보다는 엄선된 몇몇 사업 수치들에 초점을 두고 수행됨을 뜻한다.

가동시간에 대한 태도에도 차이가 있다. SRE팀은 요구가 많은, 하루 24시간씩 일주일 내

내 가동되어야 하는 서비스를 관리한다. 이 때문에 SRE팀은 가동 중단에 뒤늦게 대응하기보다

는 문제점을 미리 방지하는 데 초점을 두며, 복잡하지만 비개입적인(non-intrusive ) 유지보

수 절차를 수행하는 데 주력한다. 반면 IT 부서에는 예정된 비가동시간(downtime )과 관련해

서 어느 정도의 유연성이 허용되며, SLA는 주로 서비스 중단 시 서비스를 얼마나 빨리 복원할

수 있는지에 초점을 둔다. SRE의 관점에서 비가동시간은 피해야 할 일이며, 서비스가 유지보

수 중이라고 해도 서비스의 가동을 중단해서는 안 된다.

SRE팀은 새 소프트웨어 릴리스나 수용량 추가 때문에 끊임없이 변하는 서비스들을 관리한

다. IT 부서는 그리 자주 업그레이드되지는 않는 서비스들을 운영하는 경향이 있다. IT 부서가

관리하는 서비스들은 외주 개발자들이 구축하는 경우가 많은데, 외주 개발자들은 일단 시스템

이 안정되면 손을 떼고 가버린다.

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

216 7장 분산 세계에서의 운영

SRE팀이 관리하는 시스템들은 더 많은 소통량과 더 큰 부하를 처리하기 위해 그 규모가 계

속 변하는 경우가 많다. SRE팀은 전체적인 처리량뿐만 아니라 잠복지연(특정 요청이 처리되

기까지의 시간)도 관리한다. 효율성이 중요한 문제가 되는데, 각 기계에 약간의 낭비가 있어도

기계들이 수백, 수천 대이면 큰 손실로 이어지기 때문이다. 반면 IT 부서가 관리하는 시스템들

은 연간 부하량 증가가 그리 크지 않다고 예상하는 환경에서 구축되는 경우가 많다. 그런 경우

에는 다음번 시스템 교체 시기까지 몇 년 동안의 예상 부하량을 처리할 수 있을 정도로 시스템

을 충분히 크게 구축하는 전략을 사용할 수 있다.

이러한 요구사항들 때문에, SRE팀의 시스템들은 직접 만들거나 오픈소스 또는 기타 서드

파티 구성요소들과 통합된 플랫폼 위에 맞춤형으로 구축한 것인 경향이 있다. ‘기성품’이나 턴

키 시스템이 아닌 것이다. SRE팀의 시스템은 활발하게 관리되지만, IT 부서의 시스템은 초기

인도 상태에서 별로 변하지 않는다. 이러한 차이 때문에 분산 컴퓨팅 시스템 서비스들은 개별

적인 팀이 맞춤형 운영 및 관리 관행들을 통해서 개별적으로 관리하는 것이 가장 좋다.

이러한 여러 차이점이 있지만, 최근에는 IT 부서들도 가동시간 및 규모가변성에 관한 요구

(SRE 환경에서 볼 수 있는)를 받기 시작했다. 그 결과 분산 컴퓨팅의 관리 기법들이 전사적 IT

환경에 빠르게 채용되고 있다.

7.1.2 변화 대 안정성

안전성을 향한 욕구와 변화를 향한 욕구 사이에는 긴장이 존재한다. 대체로 운영팀은 안전성을

선호하지만 개발팀은 변화를 선호한다. 연말 성과 평가 시 각 그룹을 평가하는 방식을 생각해

보자. 개발자는 자신이 작성한 코드가 실무 서비스에 실제로 쓰이게 되면 칭찬을 받는다. 서비

스를 눈에 띄게 변화시키면 다른 어떤 성과보다도 큰 보상을 받게 된다. 그래서 개발자는 새 릴

리스가 실무에 더 자주 투입되길 바란다. 반면 운영팀은 SLA를 잘 준수할수록 보상을 받는데,

SLA의 준수는 대부분 가동시간과 관련이 있다. 그래서 운영팀은 안정성을 우선시한다.

시스템은 기준 안정성에서 시작한다. 이후 시스템이 변하는데, 그럴 때마다 안정성에 악영

향이 미친다. 그러나 일종의 개입을 통해서 시스템이 다시 안정을 찾는다. 이를 변화-불안정성

주기(change-instability cycle )라고 부른다.

모든 소프트웨어 롤아웃은 안정성에 영향을 미친다. 어떤 변경 때문에 버그가 도입될 수 있

으며, 그러한 버그들은 우회책과 새 소프트웨어 릴리스를 통해서 수정된다. 새 버그를 전혀 도

입하지 않는 릴리스라도, 곧 업그레이드할 기계로부터 작업 부하를 다른 곳으로 옮기는 과정 때

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

2177.1 분산 시스템의 운영

문에 안정성이 나빠질 수 있다. 소프트웨어가 아닌 부분의 변경 역시 안정성을 해친다. 네트워

크 변경이 지역 네트워크를 따라 전파되는 동안에는 지역 네트워크의 안정성이 떨어질 수 있다.

안정성을 바라는 운영팀과 변화를 바라는 개발자 사이에 긴장 관계가 존재하므로, 적절한

균형점에 도달할 수 있는 메커니즘이 꼭 필요하다.

한 가지 전략은 새 기능을 추가하는 작업보다는 안정성을 향상하는 작업을 우선시하는 것

이다. 예를 들어 새 기능 요청보다는 버그 수정에 더 높은 우선순위를 둔다. 이러한 접근방식에

서는 주요 릴리스는 여러 새 기능을 도입하되 그다음 몇몇 릴리스는 버그 수정에 초점을 두고,

그런 다음 다시 새로운 주요 릴리스로 시작하는 주기를 반복한다. 기술적 관리의 요구 때문에

새 기능에 초점을 두고 버그 수정을 무시한다면, 시스템이 차츰 불안정해져서 급기야는 통제가

불가능한 상황에 다다를 수 있다.

또 다른 전략은 개발팀과 운영팀의 목표를 일치시키는 것이다. 두 단위 모두 SLA 준수는

물론 시스템의 변화 속도에도 책임을 지게 된다. 둘 다 연말 평가 시 SLA 준수에 관련된 항목

들은 물론 새 기능을 제때 인도하는 데 관련된 항목들을 평가받는다.

두 단위의 목표를 아주 성공적으로 일치시킨 조직들은 개발자들과 운영자들이 하나의 팀

으로 일하도록 조직 구성을 조정했다. 이는 제8장에서 설명하는 개발운영(DevOps ) 운동의

전제이다.

또 다른 전략은 안정성 향상을 위한 시간과 새 기능을 위한 시간의 예산(budget )을 짜두

는 것이다. 일반적으로 소프트웨어 공학 조직들은 소프트웨어 요청의 크기나 그 요청을 완수하

는 데 걸리는 평균 시간을 추정하는 방법을 갖추고 있다. 각각의 새 릴리스에는 일정한 크기 예

산 또는 시간 예산이 있는데, 그 예산을 넘지 않는 한에서 일정 분량의 안정성 향상 작업을 할

당한다. §2.2.2의 끝에 나온 사례 연구는 이러한 접근방식의 한 예이다. 마찬가지로, 안정성 관

련 코드 변경을 전담하는 사람들이 이러한 할당을 수행할 수도 있다.

예산을 SLA에 근거해서 결정할 수도 있다. 매달 시스템의 안정성 하락량을 예측하고, 그것

을 일종의 예산으로 간주한다. 각 롤아웃이 그 예산의 일부를 사용하며, 불안정성 관련 버그 역

시 예산을 소비한다. 개발자는 그러한 불안정성을 유발하는 코드를 개선하는 데 주력함으로써

각 달의 롤아웃 횟수를 최대화할 수 있다. 이로부터 양의(positive ) 피드백 루프가 생긴다. 이

런 방식의 예가 구글의 오류 예산(Error Budget )인데, 이에 대해서는 §19.4에서 좀 더 자세

히 설명한다.

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

218 7장 분산 세계에서의 운영

7.1.3 SRE의 정의

구글이 발표한 SRE 핵심 관행(core practice )들은 구글이 내부적으로 10년 이상 실제로 실

천해온 것들이다. 구글 사이트 신뢰성 공학 부사장인 벤자민 트레이너 슬로스Benjamin Treynor Sloss

는 첫 USENIX SREcon (2014 )의 기조연설에서 다음과 같은 원칙 또는 관행들을 나열했다.

사이트 신뢰성 관행

1. 코더coder들만 고용한다.

2. 서비스마다 SLA를 둔다.

3. 성능을 측정하고, SLA를 만족하지 못하는 사항을 보고한다.

4. 오류 예산을 활용하고, 개시(launch )들이 반드시 오류 예산을 지키게 한다.

5. 공통의 직원 풀에서 SRE팀과 개발팀에 인원을 공급한다.

6. 여분의(운영팀의 수용 능력을 넘는) 운영(Ops ) 작업은 개발팀(Dev )으로 흘러가게

한다.

7. SRE 운영 부하가 50%를 넘지 않게 한다.

8. 운영팀의 작업의 5%를 개발팀과 공유한다.

9. 호출대기 팀은 한 장소에 적어도 여덟 명으로 구성하거나, 여러 장소들 각각에 적어도

여섯 명으로 구성한다.

10. 호출대기의 한 교대근무(shift ) 기간에 발생하는 사건이 최대 2회를 넘지 않도록 한다.

11. 모든 사건에 대해 사후 분석(postmortem; 또는 사후 검토)을 수행한다.

12. 사후 분석이 누군가를 비난하는 기회가 되어서는 안 된다. 사람보다는 공정과 기술에

초점을 두어야 한다.

1번 항목은 SRE팀이 반드시 코드를 작성할 수 있어야 한다는 뜻이다. SRE팀의 모든 구성원이

전업 소프트웨어 개발자는 아니라고 해도, 자명하지 않은 문제들을 코드를 작성해서 해결하는

능력은 모든 구성원이 갖추어야 한다. 어떤 과제를 30번 반복한다고 할 때, 사이트 신뢰성 기술

자는 처음 두 번 반복 후 지루해져서 나머지 작업을 자동화로 해결하려 들어야 할 것이다. SRE

팀은 비슷한 수준의 개발자들과 의사소통이 가능할 정도의 소프트웨어 개발 경험을 반드시 갖

추어야 하며, 개발자가 하는 일과 컴퓨터가 할 수 있는/없는 일들을 제대로 알고 있어야 한다.

프로젝트들에 할당되는 기술자들의 수가 고정되어 있다고 할 때, SRE팀과 개발팀을 동일

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

2197.1 분산 시스템의 운영

한 직원 풀에서 충원한다는 것은 SRE팀에 사람이 필요할 때마다 개발팀의 인원이 빠진다는 뜻

이다. 반면 대부분의 기업에서는 시스템 관리자들과 개발자들이 개별적인 예산을 가진 팀들에

서 할당된다. 한 프로젝트에 참여하는 개발자의 수를 최대로 늘리길 원하는 것은 합당한 일이

라 할 수 있다. 새 기능을 작성하는 것은 바로 개발자들이기 때문이다. SRE팀과 개발팀의 인원

을 공통의 풀에서 충원한다면, 개발자들은 좀 더 적은 인원의 SRE팀이 효율적으로 운영할 수

있는 시스템을 만들고자 할 것이다.

운영상의 부담을 최소화하는 코드를 작성하도록 개발자들을 추동하는 또 다른 방법은 여

분의 운영 작업이 개발자들에게 흘러가게 하는 것이다. 이렇게 하면 개발자들이 요령을 피워서

운영 부담을 과도하게 키우는 문제를 억제할 수 있다(그런 부담이 결국에는 개발자 자신에게

돌아올 것이므로). 마찬가지로, 운영 작업의 5%를 수행하게 하면 개발자들은 운영상의 현실적

인 어려움에 신경을 더 쓰게 된다.

SRE팀 내에서 운영 부하를 50%로 제한하면 수작업의 양이 제한된다. 수작업(manual

labor )은 이를테면 그 수작업의 필요성을 제거하는 코드를 작성하는 것에 비해 투자 수익이

낮다. 이에 대해서는 §12.4.2 “고역 줄이기”에서 논의한다.

여러 SRE 실천 사항들은 변화에 대한 요구와 안정성에 대한 요구 사이의 균형점을 찾는 데

관련된 것이다. 이들 중 가장 중요한 것은 구글 SRE팀이 오류 예산이라고 부르는 것인데, 이에

대해서는 §19.4에서 자세히 설명한다.

오류 예산에서 핵심은 SLA이다. 모든 서비스에는 SLA가 있어야 한다. SLA는 시스템이 어

느 정도의 신뢰성을 갖추어야 하는지를 명시한다. SLA는 모든 작업의 측정에 쓰이는 하나의

기준이 된다. SLA는 제16장에서 논의하겠다.

가동 중단이나 기타 주요 SLA 관련 사건이 발생하면 반드시 사후 분석 보고서를 작성해야

한다. 그 보고서는 무엇이 발생했는지 상세히 기술해야 하며, 이후 그런 상황을 방지하는 데 필

요한 분석과 제안도 포함되어야 한다. 이 보고서를 회사 내에서 공유해서 전체 조직이 경험에

서 배울 수 있게 한다. 사후 분석의 초점은 공정과 기술이지 비난 대상을 찾는 것이 아니다. 사

후 분석은 §14.3.2의 주제이다. 모든 SLA 관련 사건에 대응하고 사후 분석 보고서를 작성하는

책임은 당시 호출대기 중인 사람에게 있다.

호출대기가 당면한 문제에 대응하는 방법인 것만은 아니다. 오히려, 미래의 문제를 줄이는

방법이라고 보아야 할 것이다. 따라서 호출대기자들이 버티지 못할 정도로 큰 스트레스를 주는

방식으로 운영해서는 안 되며, 장기적인 문제 해결과 재발 방지를 위한 행동을 끌어낼 수 있어

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

220 7장 분산 세계에서의 운영

야 한다. 호출대기 팀은 한 장소에서 적어도 여덟 명 또는 두 장소에서 각각 적어도 여섯 명으

로 이루어진다. 대체로 이 정도 크기는 호출대기자들의 능력 조합에 부족한 점이 없을 정도로

크며, 한편으로는 한 교대근무 동안 가동 중단 사건이 2회 이하로 발생하도록 교대근무 기간을

줄이기에 충분한 정도로 작다. 결과적으로 호출대기자마다 각 사건을 상세히 처리하기에 충분

한 시간이 주어지며, 따라서 필요한 장기적 해결책을 제대로 적용할 수 있다. 호출대기를 이런

식으로 관리하는 것은 제14장의 주제이다.

구글 이외의 회사들도 실제 활성 서비스를 관리하는 시스템 관리자들을 사이트 신뢰성 기

술자(SRE )라고 부르는 관례를 채용했다. 그러나 그 직위가 담당하는 구체적인 실천 사항들은

회사마다 다를 수 있다. 이전 절에서 논의한 것은 구글의 SRE를 정의하는 실천 사항들로, 이들

은 구글의 성공에 핵심적인 역할을 하고 있다.

7.1.4 대규모 운영

분산 컴퓨팅 시스템의 운영은 대규모로 진행된다. 분산 컴퓨팅 시스템에서는 수백, 수천 대의

컴퓨터가 협동적으로 운영된다. 이 때문에 분산 컴퓨팅 시스템의 운영은 전통적인 컴퓨팅 시스

템의 운영과 여러모로 다르다.

수작업에 의한 공정은 규모 변화가 어렵다. 어떤 과제를 수작업으로 처리하는 경우, 만일

과제의 양이 두 배가 되면 인간의 노력도 두 배가 필요해진다. 만일 시스템의 규모가 수천 대의

컴퓨터나 서버, 공정들로 확장된다면, 수작업으로는 그런 규모 확장을 감당할 수 없다. 반면 자

동화는 규모 변화가 쉽다. 한 번 작성한 코드는 몇천 번이라도 재사용할 수 있다. 수많은 기계

나 공정, 서버, 서비스로 이루어진 시스템은 반드시 자동화해야 한다. 이러한 관점은 컴퓨터 할

당, 운영 체제 구성, 소프트웨어 설치, 문제점 감시에 적용된다. 자동화는 ‘하면 좋은 것’이 아니

라 ‘반드시 해야 하는 것’이다. (자동화는 제12장의 주제이다.)

운영을 자동화하면 시스템 관리가 장인의 수공예보다는 공장의 조립 라인과 더 비슷해진

다. 시스템 관리자는 실제로 작업을 하는 사람에서 조립 라인의 로봇들을 관리하는 사람으로

변한다. 자동화 덕분에 제조업 분야의 대량생산 기법들과 운영 관행들을 분산 컴퓨팅에 도입할

수 있다. 예를 들어 실무(production )의 모든 단계에서 측정치들을 수집해서 통계 분석 기법

을 적용함으로써 시스템 처리량을 개선할 수 있다. 지속적 개선(continuous improvement )

같은 제조업 기법들은 개발운영의 ‘3대 방법(Three Ways )’의 토대이다. (§8.2를 보라.)

자동화되지 않은 것들은 크게 세 부류로 나뉜다. 하나는 자동화해야 마땅하지만 아직 자동

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

2217.1 분산 시스템의 운영

화되지 않은 것이고, 또 하나는 자동화할 가치가 없는 것, 마지막은 사람이 수행하는 공정이다.

아직 자동화되지 않은 과제

자동화를 만들고, 검사하고, 배치하는 데에는 시간이 걸린다. 따라서 자동화되길 기다리는 것

들이 항상 존재한다. 모든 것을 자동화할 만큼 시간이 넉넉한 경우는 없으므로, 반드시 우선순

위를 매기고 자동화 방법을 현명하게 선택해야 한다. (§2.2.2와 §12.1.1을 보라.)

아직 자동화되지 않았거나 자동화된 적이 없는 공정의 경우 소위 각본(playbook )이라고

부르는 절차 문서를 만들면 그 공정을 일관적이고 반복 가능하게 정련하는 데 도움이 된다. 좋

은 각본이 있으면 나중에 공정을 자동화하기가 쉬워진다. 뭔가를 자동화할 때 가장 어려운 부

분은 그 공정을 정확히 서술하는 것 자체인 경우가 많다. 각본이 공정을 정확히 서술한다면, 자

동화 코드를 작성하는 것은 비교적 쉬운 일이다.

자동화할 가치가 없는 과제

그리 자주 진행되지 않거나, 자동화하기가 너무 힘들거나, 자주 바뀌어서 자동화가 불가능한

공정은 자동화할 가치가 없다. 자동화는 시간과 노력을 투자하는 일이며, 투자 수익(ROI )의

관점에서 볼 때 자동화가 항상 이득이 되는 것은 아니다.

그렇긴 하지만, 자동화할 가치가 있는 공통의 경우들이 존재한다. 그런 것들을 자동화하면

좀 더 드문 경우(극단적 경우(edge case ) )들이 통합되거나 제거되기도 한다. 공통의 경우를

자동화해서 더 나은 서비스를 제공하면, 극단적 경우에 해당하는 고객이 특별 취급을 요구할

필요성이 갑자기 사라지는 경우가 많다.

공통의 경우를 자동화하는 것의 장점

어떤 회사의 이야기이다. 그 회사는 가상 기계들을 세 가지 방식으로 조달(provisioning )했다.

세 방식 모두 수작업이었으며, 그래서 고객들은 시스템 관리자가 작업을 수행할 여유가 생길 때

까지 며칠씩 기다려야 했다. 서로 다른 세 방식을 처리하는 것이 다소 복잡했기 때문에, 가상 기

계 조달을 자동화하는 프로젝트는 진척이 없었다. 덜 자주 쓰이는 두 방식의 사용자들은 자신들

이 특별한 고객이기 때문에 조달 공정이 달라야 한다고 요구했다. 그들은 아주 중대한, 그러나

일화적인 증거에 기초해서 자신들의 주장을 진지하게 정당화했으며, 아주 강력하고 강압적으로

자신들의 의사를 관철하려 했다. 프로젝트를 진행하기 위해 회사는 가장 흔한 경우를 일단 자동

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

222 7장 분산 세계에서의 운영

화하고 다른 두 극단적 경우들은 나중에 자동화하겠다고 약속했다.

이 방법이 애초의 모든 경우를 동시에 자동화하는 것보다 구현하기가 훨씬 쉬웠다. 초기 자동

화 덕분에 조달 시간이 몇 분으로 줄었으며, 시스템 관리자의 개입 없이도 조달이 가능했다. 심

지어 밤이나 주말에도 가상 기계를 조달할 수 있었다. 그러자 놀라운 일이 발생했다. 다른 두 경

우의 사용자들이 자신들의 특별함이 사라졌음을 갑자기 깨달은 것이다! 그들은 자동화된 방법을

받아들였다. 결과적으로 시스템 관리자가 두 극단적 경우를 자동화할 필요가 아예 사라졌으며,

조달 시스템은 복잡하지 않고 관리하기 쉬운 형태로 남았다.

자동화할 수 없는 과제

사람이 관여하는 공정은 자동화가 불가능하다. 이해관계자(고객, 투자자 등)들과의 관계를 유

지한다거나, 더 큰 구매를 위한 경매 공정을 관리하거나, 새 기술을 평가하거나, 팀원들 사이의

호출대기 일정을 조율하는 등은 자동화할 수 없다. 이들을 자동화를 통해서 제거할 수는 없지

만, 좀 더 능률화(streamlining )하는 것은 가능하다.

● 이해관계자들과의 상호작용의 상당 부분을 더 나은 문서화를 통해서 제거할 수 있다. 소개

문서나 사용자 문서, 모범 관행 추천, 스타일 지침 등을 제공하면 이해관계자들이 더 많은

것을 스스로 해결할 수 있다. 만일 독자의 서비스를 다른 여러 서비스나 서비스팀이 사용할

것이라면, 문서화를 제대로 갖추는 것이 더욱 중요해진다. 동영상 강의도 유용하며, 이미

강연 내용이 마련되어 있다면 그냥 녹화하기만 하면 되므로 큰 노력이 들지 않는다.

● 공통적인 요청들을 자급식으로 제출하게 바꾸면 이해관계자들과의 상호작용의 일부를 제

거할 수 있다. 향후의 수용량 요구사항을 고객과 직접 만나서 파악하기보다는, 웹 사용자

인터페이스나 API를 통해서 제출하게 하는 것이 낫다. 예를 들어 수백 개의 다른 팀에게

서비스를 제공한다면, 향후 수용량 요구 파악만으로 프로젝트 관리자의 모든 시간이 소비

될 것이다. 반면 적절한 조달 자동화를 회사의 공급망 관리 시스템과 통합한다면 최소한의

노력으로 문제가 해결될 것이다. 요청 자급식

● 새 기술을 평가하는 데에도 사람의 노력이 많이 소비될 수 있으나, 공통의 경우를 식별한다

면 종단 간(end-to-end ) 공정을 조립 라인 공정으로 변환해서 최적화할 수 있다. 예를 들

어 하드 드라이브를 수천 개 구매할 때에는 새 모델을 가끔씩만, 그리고 상세한 평가를 거

친 후에만 포함시키는 것이 현명하다. 그러한 평가 공정은 표준화, 자동화해야 하며, 이후

분석을 위해 평가 결과도 자동으로 저장해야 한다.

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

2237.2 서비스의 수명 주기

● 팀 공정을 자동화로 대체하거나 가속할 수 있다. 호출대기 일정을 짜다 보면 주요 휴일을

피하려는 팀원들 사이에서 혼란스럽고 지저분한 협상이 벌어지기 쉽다. 자동화를 이용하면

이를 자급식 시스템(사람들이 각자 가능한 시간을 제출하면 다음 몇 달간의 최적의 일정을

결정해 주는 형태의)으로 바꿀 수 있다. 즉, 자동화는 문제를 더 잘 해결하고 스트레스를

줄여준다.

● 의사소통이나 상태, 공정 추적(process tracking ) 같은 메타 공정(meta-process )의

진행을 온라인 시스템을 통해서 촉진할 수 있다. 팀이 커지면 모든 참여 단위 사이의 상호

작용과 의사소통을 추적하는 것 자체가 하나의 부담으로 작용할 수 있다. 그것을 자동화하

면 팀원마다 수 시간의 수작업을 줄일 수 있다. 예를 들어 자신이 받은 지시사항이 승인 절

차를 거쳐 가는 상황을 각 팀원이 웹 기반 시스템으로 확인할 수 있으면 팀원은 상태 보고

서를 작성할 필요가 없어지며, 그러면 예외 상황과 문제점을 처리하는 데에만 집중할 수 있

다. 어떤 하나의 공정에서 작업이 여러 팀을 오가는 경우, 현황판을 제공하고 작업 이전 시

기를 자동으로 팀들에게 통지하는 시스템을 도입한다면 필요 이상으로 많은 프로젝트 관리

자들을 둘 필요성이 줄어든다.

● 최상의 공정 최적화는 공정을 아예 제거하는 것이다. 제거된 과제는 더 이상 수행하거나 유

지보수할 필요가 없다. 그런 과제에는 버그도 없고 보안 구멍도 없다. 예를 들어 서비스를

제공하는 컴퓨터들에 쓰이는 운영 체제가 세 종류라고 할 때, 그것을 두 종류로 줄이면 많

은 작업이 제거된다. 독자의 서비스를 다른 서비스팀들이 사용한다면, 그리고 새 팀이 추가

될 때마다 긴 승인 절차를 거쳐야 한다면, 특정 종류의 사용자들을 자동으로 승인하도록 승

인 절차를 능률화하는 것이 더 나을 수 있다. 공정 제거

7.2 서비스의 수명 주기

운영은 크게 개시, 유지보수(정규 및 비상), 업그레이드, 폐지로 구성되는 서비스 수명 주기

(service life cycle ) 전체를 책임진다. 수명 주기의 단계들에는 각자 고유한 요구사항들이 존

재하므로, 각 단계를 다른 방식으로 관리하는 전략이 필요하다.

수명 주기의 단계들은 다음과 같다.

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

224 7장 분산 세계에서의 운영

● 서비스 개시: 개시(launch )란 서비스를 처음으로 제공하는 것을 말한다. 개시에 의해 서

비스의 수명이 시작되며, 최초의 고객들이 서비스를 사용하기 시작한다. 또한, 개시 이전에

발견하지 못한 문제점들이 드러나고 수정된다. (§7.2.1 )

● 비상 과제(emergency task ) : 예외적인 또는 예기치 않은 사건들을 처리하는 단계이다.

여기에는 가동 중단 처리가 포함되며, 더욱 중요하게는 가동 중단을 유발하는 조건들을 검

출하고 바로잡는 것이 포함된다. (제14장)

● 정상 과제(nonemergency task ) : 정상적으로 작동하는 시스템의 일부로 필요한 모든

수작업을 수행하는 단계이다. 여기에는 주기적인(주간 또는 월간) 유지보수 과제(이를테

면 월별 과금 절차 준비 등)는 물론이고 사용자 요청(이를테면 다른 내부 서비스나 팀이 사

용하는 서비스를 활성화해달라는 요청 등) 처리도 포함된다. (§7.3 )

● 업그레이드: 새 소프트웨어 릴리스와 하드웨어 플랫폼을 배치하는 것을 말한다. 이를 잘 해

낼수록 기업이 새로운 것을 더 적극적으로 시도하고 혁신할 수 있다. 새 소프트웨어 릴리

스를 배치하려면 먼저 그 릴리스를 구축하고 검사해야 한다. 검사에는 개발자가 수행하는

시스템 검사는 물론 운영팀이 수행하는 사용자 인수 검사(user acceptance test, UAT )

도 포함된다. UAT에는 성능 회귀(performance regression; 성능이 의도치 않게 하락

하는 것)가 없는지 확인하는 검사가 포함된다. 또한 보안 문제점을 검출하기 위한 취약성

(vulnerability ) 평가도 수행해야 한다. 새 하드웨어는 반드시 호환성, 성능 회귀, 운영 공

정의 변화 등을 점검하는 하드웨어 자격 검증(hardware qualification )을 거쳐야 한다.

(§10.2 )

● 폐지(decommissioning ) : 서비스를 내리는 것을 말한다. 이는 서비스 개시의 반대이다.

즉, 남아 있는 사용자들을 제거하고, 서비스를 끄고, 관련 서비스 구성들에서 해당 서비스

에 대한 참조를 제거하고, 모든 자원을 반환하고, 기존 자료를 보관하고, 하드웨어들을 재

사용, 판매, 폐기하기 전에 하드웨어들에 남아 있는 모든 자료를 철저히 삭제(erasing 또

는 scrubbing )한다. (§7.2.2 )

● 프로젝트 작업: 전용 자원들의 할당과 계획 수립이 필요할 정도로 큰 규모의 과제들을 수행

하는 것을 말한다. 사실 이것이 서비스 수명 주기의 직접적인 일부는 아니지만, 서비스를

관리하다보면 다른 과제보다 큰 과제를 수행해야 할 일이 생긴다. 이를테면 간헐적이지만

반복되는 고장을 고치는 것, 제품의 미래에 관한 일정과 계획을 이해관계자들과 협의하는

것, 서비스를 새 데이터센터로 옮기는 것, 서비스의 규모를 새로운 방식으로 변화하는 것

등이 있다. (§7.3 )

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

2418.1 개발운영이란?

개발운영의 반대말은 절망이다.

-진 킴Gene Kim

이번 장은 ‘개발운영(DevOps )’*이라고 부르는 문화 및 관행(practice, 실천 사항) 집합에

관한 것이다. 개발운영 조직에서는 소프트웨어 개발자들과 운영 기술자들이 한 팀을 이루어 일

하면서 웹 사이트나 웹 서비스에 대한 책임을 공유한다. 이는 개발자와 운영자가 개별적으로

일하는, 그리고 종종 목표가 상충하는 조직과는 다른 방식이다. 개발운영은 웹 서비스를 운영

하는 현대적인 방식이라 할 수 있다.

개발운영은 몇 가지 문화 및 자세 변화를 몇 가지 상식적인 공정과 결합한다. 개발운영은

원래 애자일 방법론을 운영에 적용하는 시도에서 시작된 것인데, 진화 과정을 거치면서 신뢰성

있는 서비스를 만들어 낼 수 있는 능률적인 원칙들과 공정들의 집합이 만들어졌다.

부록 B에서 보겠지만, 클라우드 또는 분산 컴퓨팅은 경제적인 하드웨어들의 등장에서 비롯

된 필연적인 결과라 할 수 있다. 비슷하게, 개발운영은 그런 환경에서 운영을 효율적으로 수행

하고자 하는 요구의 필연적인 결과이다.

하드웨어와 소프트웨어가 장애 내구성을 충분한 수준으로 갖추었다면, 남은 문제는 바로

*  옮긴이_ DevOps가 Development와 Operation을 합쳐서 만든 신조어인 것처럼, ‘개발운영’은 개발과 운영을 합쳐서 만든 신조어

이다. 이를 ‘개발 운영’으로 띄어 쓰거나(이를테면 일부 아마존 AWS 한국어 페이지) ‘개발/운영’ 또는 ‘개발·운영’으로 표기하는 예도 있

지만, 이 책에서는 개발과 운영을 매끄럽게 통합한다는 원래의 취지를 살려서 개발과 운영 사이에 아무것도 끼어들지 않는 ‘개발운영’이라

는 표기를 사용한다. 영문 표기 DevOps나 음차 데브옵스 대신 ‘개발운영’을 선택한 데에는, DevOps가 특정 분야, 특정 부류(또는 특정

‘진영’)의 사람들만 사용하는 일종의 ‘등록상표’ 또는 고유명사로 머무르지 않고 좀 더 광범위하고 보편적인 일반명사로 쓰이길 바라는(아마

이 대목에서 agile 대 Agile을 떠올리는 독자도 있을 것이다) 마음이 담겨 있다.

개발운영 문화

CHAPTER 08

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

242 8장 개발운영 문화

사람이다. 선구적 논문 “Why Do Internet Services Fail, and What Can Be Done about

It?”(Oppenheimer 외 2003 )은 향후 웹 서비스의 성공을 원한다면 운영 측면들을 반드시 개

선해야 한다는 점을 일깨웠다.

우리는 (1 ) 운영자 실수가 세 서비스 중 둘에서 단일 장애 원인으로는 가장 큰 원인이었으며,

(2 ) 운영자 실수를 바로잡는 데 많은 시간이 필요한 경우가 많으며, (3 ) 가장 많이 발생하

는 운영자 실수는 구성 오류이며, (4 ) 직접 작성한 앞단 소프트웨어의 장애가 두드려졌으며,

(5 ) 온라인 검사를 좀 더 상세하게 수행하고 구성요소 장애를 좀 더 철저히 노출, 검출함으로

써 적어도 한 서비스에서는 장애율을 줄일 수 있음을 발견했다.

다른 말로 하면, 이제는 기술의 신뢰성이 충분히 높아져서 그것을 관리하는 데 쓰이는 공

정의 문제점만 남은 상황이 된 것이다. 따라서 우리는 더 나은 관행이 필요하다.

대규모 운영을 개선하는 표준적인 방법은 W. 에드워드 데밍Edwards Deming의 “Shewhart

cycle”(Deming 2000 )이나 “Lean Manufacturing”(Spear & Bowen 1999 )을 적용하는

것이다. 개발운영의 핵심 원리들은 그런 기존 원리들을 웹 시스템 관리에 맞게 적응시킨 것이

라 할 수 있다. 서적 The Phoenix Project (Kim, Behr & Spafford 2013 )는 망해가는 IT 조

직을 개혁하는 과정에서 그런 원리들을 배워나가는 팀에 관한 소설 형태로 이를 설명한다.

8.1 개발운영이란?

개발운영은 문화와 관행들의 조합이다. 시스템 관리자, 소프트웨어 개발자, 웹 운영팀 구성원

들은 모두 개발운영 환경에 기여한다. 개발운영에서 시스템 관리자와 개발자는 서비스와 그 가

용성에 대한 책임을 공유한다. 개발운영은 개발자들과 시스템 관리자 또는 운영자들이 가동시

간에 대한 책임을 공유하게 함으로써 개발자들이 우선시하는 과제들과 시스템 관리자 또는 운

영자들이 우선시하는 과제들을 일치시킨다. 또한, 개발운영은 개발과 검사, 제작에 이르는 다

양한 환경 모두를 소프트웨어 버전 관리 및 제어하에 통합한다.

가장 근본적인 수준에서 개발운영은 사일로(부서 간 장벽)들을 무너뜨리고, 조직의 개발에서

운영으로의 인도(delivery ) 수명 주기를 망치는 병목과 위험 요소를 제거하는 것에 관한 것

이다. 목표는 명세서로 시작해서 고객과 접한 환경에서의 기능 실행으로 이어지는 흐름을 빠

르고도 신뢰성 있게 변화할 수 있게 하는 것이다(Edwards 2012 ).

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

2438.1 개발운영이란?

개발운영은 현재 발전 중인 분야이다. 현재 개발운영은 주로 웹 응용 프로그램과 클라우드

환경에서 실천되지만, 그 영향력이 모든 업계의 모든 부분으로 퍼지고 있다.

개발운영은 운영의 개선에 관한 것이다. 테오 슐로스네이글Theo Schlossnagle은 개발운영이 “세

계의 조작주의(the operationalism of the world )”라고 말했다(Schlossnagle 2011 ).

자신의 사업에서 운영 부분을 더욱 중요시하는 기업이 점점 많아지고 있다. 이는 프로젝트의

총소유비용(TCO )에 관한 관심이 커진 데서, 다시 말해서 초기 구매 비용뿐만 아니라 더 높은

신뢰성과 변화 속도를 달성하고자 하는 압력이 증가하는 데에서 비롯된 것이다. 효율성을 높이

고 새 기능과 혁신을 도입하려면 변화를 가하는 능력이 필요하다. 전통적으로 변화는 잠재적인

불안정 요인으로 간주되었지만, 개발운영은 기반구조(infrastructure ) 변화를 전반적인 안정

성이 증가하는 방식으로 빠르게, 그리고 자주 가할 수 있음을 보여주었다.

개발운영은 직책 이름이 아니다. 즉, ‘개발운영자’를 고용할 수는 없다. 개발운영은 제품 이

름도 아니다. ‘개발운영 소프트웨어’를 살 수는 없다. 개발운영은 개발운영 문화와 관행을 실

천하는 팀과 조직에 붙이는 용어이다. 물론 개발운영의 여러 관행을 돕는 소프트웨어 패키지

는 존재한다. 그러나 구매 후 개발운영 버튼을 누르기만 하면 마법처럼 개발운영을 “소유하

게” 되는 패키지 같은 것은 없다. 아담 제이콥Adam Jacob은 Velocity 2010에서 행한 선구적 강연

“Choose Your Own Adventure”(Jacob 2010 )에서 개발운영이 직책 이름이 아니고 하나

의 문화를 형성하는 포괄적인 운동임을 명확히 했다. 그러한 문화에 관여하는 모든 이는 전체

시스템의 작동 방식을 알고 있으며, 자신들이 실현하는 기본적 사업 가치를 확실히 이해한다.

그 결과로 가용성이 시스템 관리자만의 문제가 아니라 전체 조직의 문제가 된다.

개발운영이 개발자와 시스템 관리자만을 위한 것은 아니다. 데이먼 에드워즈Damon Edwards는

블로그 글 “DevOps is not a technology problem. DevOps is a business problem”

(Edwards 2010 )에서 개발운영이 조직 전체에 걸친 협동과 최적화에 관한 것임을 강조했다.

개발운영은 착안에서 시작해서 고객에까지 도달하는 공정을 돕는 형태로까지 확장된다. 개발

운영은 멋진 새 도구를 활용하는 차원의 문제가 아니다. 사실 소프트웨어에만 관련된 것도 아

니다.

개발운영 환경 창출과 관련된 조직적 변화는 전통적인 소프트웨어 개발 접근방식과 비교

하면 좀 더 이해하기 쉽다. 맞춤형 웹 응용 프로그램이나 클라우드 서비스 기능을 개발할 때 쓰

이는 방법들의 단점들을 극복해 나가면서, 그리고 그런 환경들의 더 높은 가용성에 대한 요구

를 만족하는 과정에서, 개발운영의 접근방식은 계속 진화한다.

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

244 8장 개발운영 문화

8.1.1 전통적인 접근방식

소매점에서 파는 비닐로 밀봉된 소프트웨어 패키지나 인터넷에서 내려받는 소프트웨어 패키지

의 경우 소프트웨어를 완성해서 발주하면 개발자의 일은 끝난다. 운영상의 사항들은 오직 고

객에게만 직접 영향을 미친다. 개발자는 운영에서 완전히 빠진다. 운영상의 문제점을 버그 보

고서나 개선 요청 형태로 개발자에게 전달하는 정도가 최선의 경우에 해당한다. 그런 경우에도

개발자는 자신의 코드에서 비롯된 운영상의 문제점에 직접 영향을 받지는 않는다.

전통적인 소프트웨어 개발은 소위 폭포수 방법론(waterfall methodology )을 사용한다.

이 경우 요구사항 수집, 설계, 구현, 검사, 검증, 배치(deployment )* 같은 개발 단계들 각각

을 개별적인 팀이 다른 단계들과는 격리된 상태로 수행한다. 각 단계(팀)는 독립적인 인도물

(deliverable )을 만들어서 다음 단계(팀)에 넘겨준다.

이를 ‘폭포수’ 개발이라고 부르는 것은, 이 단계들이 마치 다층 폭포 같은 모습이기 때문이

다(그림 8.1 ). 정보는 물처럼 아래로 흘러내려 간다.

이런 모형에서 주목할 점은, 적어도 설계가 완료될 때까지는 한 시스템의 운영상의 요구사

항들을 파악할 수 없다는 것이다. 사실 제품이 실제로 배치, 실행된 후에야 운영상의 요구사항

들을 파악할 수 있는 경우도 많다. 이 때문에 운영상의 요구사항들을 요구사항 수집 단계에서

고려하지 못하고, 모든 기능이 ‘동결된’ 후에야 고려하게 된다. 결과적으로, 이러한 접근방식에

서는 운영상의 요구사항들을 고려해봤자 너무 늦어서 더 이상 할 수 있는 일이 없는 상황에 도

달한다.

폭포수 방법에서 시스템 관리자는 소프트웨어의 배치에만 관여하며, 따라서 운영과 가동

시간 요구사항 만족은 전적으로 시스템 관리자의 책임이 된다. 시스템 관리자가 자신의 요구를

만족하도록 소프트웨어 개발에 영향을 미칠 가능성은 거의 없다. 사실 소프트웨어 개발자와 직

접 접촉할 가능성이 아예 없는 경우도 많다.

웹에 기초한 사업 모형(business model )을 가진 기업들이나 웹에서 존재감이 두드러진

기업들은 자신만의 맞춤형 소프트웨어를 개발한다. 그런 기업에서는 소프트웨어 개발자와 시

스템 관리자가 같은 회사 직원들이지만, 전통적으로는 그런 경우에도 소프트웨어 개발자와 시

스템 관리자의 상호작용이 거의 없다. 이들은 격리된 ‘사일로’들에서 일한다. 즉, 각 단위는 다

른 단위의 관심사를 알지 못하며, 결과적으로 그 어떤 단위도 ‘큰 그림’을 보지 못한다. 이런 조

*  옮긴이_ 여기서 배치配置는 배포와 설치를 줄인 말이다. 많은 경우 deployment는 소프트웨어 패키지를 특정 위치로 보내고(배포 또

는 배달), 그 위치에서 소프트웨어를 설치함으로써 이루어진다.

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

2458.1 개발운영이란?

직의 구성도에서 단위들은 CEO 수준까지 올라가야 만나게 된다. 소프트웨어 개발자들은 계속

격리된 상태로, 소프트웨어의 실제 용도와 관련된 동기 부여 없이 소프트웨어를 개발한다. 그

리고 시스템 관리자들은 버그투성이 소프트웨어로 높은 가용성(high availability; 고가용성)

요구사항을 만족하느라 고생하게 된다.

이런 상황에서 일반적으로 운영은 임시방편적 해결책을 통해서 개선된다. 즉, 문제점을 근

본적으로 해결하기보다는 우회할 뿐이고, 최적화 역시 제한된 범위로만 수행하게 된다. 이런

접근방식은 운영 효율성, 성과, 가동시간의 향상에 방해가 된다. 더 나은 대안이 아직 나오지

않았던1 시절의 유물인 폭포수 접근방식이 아직도 쓰이는 것은 안타까운 일이다.

요구사항

구현

설계

검증

유지보수

그림 8.1 폭포수 방법론: 정보는 아래로만 흐른다. 이러한 단방향 정보 흐름은 개발운영의 안티테제(반명제)이다.

1  그런데 과연 그랬던가? 폭포수 모형의 ‘시초’로 간주하는 로이스Royce의 1970년 논문은 사실 폭포수 모형을 비판하고 개선안을 제시하

기 위해 그 모형을 소개했다. 그는 이 모형에서 “설계 반복들이 결코 다음 단계로 제한되지 않으며”, 그래서 이 모형이 “위험하고 장애를

일으킨다”고 썼다. 로이스가 대안으로 제시한 방법은 요즘 애자일이라고 부르는 것과 비슷하다. 안타깝게도, 추측건대 논문 전체를 읽지

않은 사람들 때문에 수 세대에 걸쳐 소프트웨어 개발자들이 폭포수 프로젝트로 고생했다(Pfeiffer 2010).

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

30311.1 서비스 중단 후 업그레이드

쉬운 일들을 수행해봤자 여러분이 더 강해지지 않으며,

뭔가 달성했다는 기분도 느낄 수 없습니다.

-제리 닐슨Jerri Nielsen 박사(의사)

이번 장은 새 릴리스를 실무 환경에 배치하는 문제를 다룬다. 실무 환경 배치는 기타 환경에 릴

리스를 배치하는 것과 성격이 다르다.

새 소프트웨어 릴리스를 이용해서 어떤 환경을 업그레이드하는 공정을 코드 투입(code

push )이라고 부른다. 실무 환경에 코드를 투입한다는 것은 실행 중인 시스템을 수정하는 것인

데, 이는 쉽지 않은 일이다. 마치 고속도로를 시속 90km로 달리는 차의 바퀴를 가는 것과 비

슷하다. 불가능하지는 않지만, 계획을 잘 세워서 세심하게 수행해야 한다.

다행한 일은, 다양한 상황에 맞는 여러 가지 기법들이 존재한다는 것이다. 이번 장에서는

가장 흔히 쓰이는 기법들을 종류별로 소개한다. 그런 다음에는 지속적 배치 같은 모범 관행들

과 기타 실천 사항들을 논의한다.

11.1 서비스 중단 후 업그레이드

서비스를 업그레이드하는 한 가지 방법은 서비스를 내리고(중단하고), 모든 새 시스템에 새

코드를 투입하고, 서비스를 다시 가동하는 것이다. 이 방법의 장점은 구현이 아주 간단하다는

활성 서비스의 업그레이드

CHAPTER 11

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

304 11장 활성 서비스의 업그레이드

것과 실제 사용자가 새로 업그레이드된 서비스에 접근하기 전에 서비스를 검사해 볼 수 있다는

것이다.

안타깝게도 이 방법에서는 필연적으로 비가동시간(downtime )이 발생하는데, 대부분의

서비스에서는 그러한 비가동시간이 허용되지 않는다. 그러나 예정된 비가동시간을 허용하는

개발 환경이나 시연 환경에는 이 방법을 적용할 수 있다. 서비스 대체

이 기법은 또한 기존 서비스를 완전히 다른 서비스로 대체할 때에도 유용하다. 예비 수용

량이 충분하다면, 서비스 복제본들을 각각 하나씩 중단하고, 업그레이드하고, 다시 시동하면

된다. 이 경우 전역 부하 분산기(GLB )가 소통량을 작동 중인 복제본들에 분산한다. GLB에서

복제본들을 한 번에 하나씩 제거해서 배출하는(drain ) 과정을 대기 중인 모든 요청이 완료될

때까지 반복한다. 그런 다음에는 서비스에 영향을 주지 않고도 복제본을 종료할 수 있다.

구글 블로그 검색 업그레이드

톰이 구글의 ‘블로그 검색’ 서비스의 한 사이트 신뢰성 기술자였던 시절의 이야기이다. 톰은 네

개의 데이터센터에서 고객을 향한 스택을 복제해야 했다. 각 복제본은 서로 독립적이었다. 예비

수용량이 넉넉했기 때문에 한 스택을 중단해도 나머지 세 스택이 전체 소통량 부하를 처리할 수

있었다. 톰은 스택들을 한 번에 하나씩 GLB에서 빼서 배출하고, 업그레이드하고, 점검하고, 다

시 GLB에 추가했다.

한편, 블로그 검색 시스템에는 ‘파이프라인’이라는 부분이 있었다. 파이프라인은 새 블로그 글

들을 훑어서 수집하고, 새 말뭉치를 산출하고, 그 말뭉치를 앞에서 말한 네 개의 고객을 향한 스

택들에 분산했다. 이 파이프라인은 전체 서비스에 아주 중요한 요소였지만, 가동을 중단한다고

해도 고객들이 눈치채지는 못했다. 물론 파이프라인의 비가동시간이 길면 검색 결과의 신선함이

떨어진다. 결론적으로, 파이프라인의 가동시간이 중요하긴 하지만 필수적인 것은 아니며, 그래

서 파이프라인을 업그레이드할 때에는 파이프라인 전체를 중단했다.

구글의 다른 여러 서비스도 이와 비슷한 구조이며, 이와 비슷한 패턴으로 업그레이드된다.

11.2 순회식 업그레이드

순회식 업그레이드(rolling upgrade)는 개별 기계나 서버를 서비스에서 제거하고, 업그레이드

하고, 다시 서비스에 넣는 과정을 시스템의 모든 구성요소가 업그레이드될 때까지 반복하는 것이

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

30511.2 순회식 업그레이드

다. 즉, 공정은 모든 요소를 순회하면서(roll through) 시스템 전체의 업그레이드를 수행한다.

개별 요소의 중단을 지역 부하 분산기가 감추기 때문에, 서비스 자체는 고객들에게 계속

제공된다. 업그레이드 도중 어떤 고객들은 새 소프트웨어를 접하지만, 그 외의 고객들은 여전

히 기존 소프트웨어를 접한다. 일련의 요청들이 새 기계와 기존 기계로 전달됨에 따라, 새 기능

이 나타났다 사라지는 모습을 보는 고객도 생길 수 있다. 그러나 §4.2.3에서 말한 부하 분산기

의 접착성과 §2.1.9에서 말한 새 기능 배치 켜고 끄기 같은 기타 요인들 때문에, 이런 일이 일

어나는 경우는 드물다.

업그레이드 도중에 수용량이 일시적으로 감소할 수 있다. 서버가 10대일 때, 그중 하나의

서비스를 업그레이드하는 도중에는 수용량이 평소의 90%가 된다. 따라서 이 기법은 수용량이

충분한지 확인한 후에 적용해야 한다.

순회식 업그레이드 공정은 다음과 같이 진행된다. 우선 서버 또는 기계 하나를 배출한다.

좀 더 구체적으로 말하면, 부하 분산기가 그 기계에 요청을 보내지 않도록 재설정하거나, 복제

본이 §2.1.3에서 설명한 ‘레임덕 모드’로 들어가게 한다. 레임덕 모드에서 복제본은 부하 분산

기에게 자신의 건강이 좋지 않다는 ‘거짓’ 보고를 보낸다. 그러면 부하 분산기는 그 복제본에게

요청을 보내지 않는다. 잠시 시간이 지나면 그 복제본에는 아무런 요청도 전달되지 않으며, 기

존에 받은 요청들의 처리도 모두 끝난다. 그때가 되면 서비스를 중단해서 새 릴리스로 업그레

이드한 후 업그레이드가 잘 되었는지 점검하고, 앞의 배출 과정을 역으로 수행한다. 이상의 과

정을 다음 서버 또는 기계에 대해 반복한다.

졸릴 때에는 코드 투입을 피하라

코드 투입은 낮에 하는 것이 최선이다. 낮에는 정신이 말짱하며, 뭔가 잘못되었을 때 도와줄 동

료들도 주변에 많이 있다.

코드 투입을 아주 늦은 밤에 하는 조직들이 많다. 업그레이드를 새벽 세 시에 하는 데 대한 전형

적인 변명은, 업그레이드에는 위험이 따르므로 사용자 노출이 적은 밤에 하는 것이 좋다는 것이다.

그러나 졸린 상태에서 중요한 업그레이드를 수행하는 것이 훨씬 더 위험하다. 아마 이제는 독

자도 동의하겠지만, 이상적으로는 검사를 자동화하고 작은 크기의 일괄 단위들을 사용하는 것이

위험을 줄이는 데 가장 좋은 전략이다.

아니면 주된 서비스 장소에서 동쪽으로 여덟 시간만큼 떨어진 시간대에 있는 팀이 코드 투입

을 수행하게 할 수도 있다. 그러면 고객들은 아직 한밤중이지만 그 팀은 이미 해가 뜬 상태에서

배치를 수행하게 된다.

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

306 11장 활성 서비스의 업그레이드

11.3 카나리아 공정

카나리아 공정(canary process )은 순회식 업그레이드의 한 특별한 형태로, 많은 수의 요소

들을 업그레이드할 때 좀 더 적합하다. 수백, 수천 대의 서버나 기계를 순회식으로 업그레이드

하면 오랜 시간이 걸릴 수 있다. 서버 하나에 10분이 걸린다면 서버 1,000대에는 한 주가 걸린

다. 이는 감당할 수 없는 수준이다. 그렇다고 모든 서버를 동시에 업그레이드하는 것은 너무 위

험하다.

카나리아 공정에서는 일단 아주 적은 수의 복제본들을 업그레이드해서 두드러진 문제점이

발생하지 않는다면 점점 더 많은 수의 기계들을 업그레이드해 나간다. 예전에는 광부들이 카나

리아 새들을 새장에 넣어서 탄광에 들어갔다. 카나리아는 해로운 기체에 사람보다 훨씬 민감하

다. 카나리아가 이상하게 행동하거나 횃대에서 떨어진다면 유독한 기체에 중독될 위험이 있으

므로 빨리 탄광을 빠져나가야 한다.

그와 비슷하게, 카나리아 공정은 적은 수의 기계를 카나리아로 삼아서 업그레이드해 본다.

대체로 문제점은 업그레이드 후 5분에서 10분 사이에 발생한다. 만일 카나리아가 그보다 더 오

래 살아남는다면 더 많은 수의 기계들을 업그레이드해본다. 역시 일정 시간 기다리고 여러 가

지 검사를 수행해서, 결과가 성공적이면 더욱 많은 수의 기계들을 업그레이드한다.

흔히 쓰이는 방식은 다음과 같다: 서버 한 대를 업그레이드한 후, 분당 서버 한 대의 속도

로 서버 수를 늘려나간다. 업그레이드된 서버가 전체 서버의 1%에 도달하면 그때부터는 초당

한 대의 속도로 수를 늘린다. 각 그룹 사이에 지연 시간이 길어질 수도 있다. 그런 경우에는 업

그레이드된 모든 서버에 대해 검증 검사를 수행한다. 일반적으로 이 검사들은 아주 단순한 형

태이다. 보통은 그냥 코드가 충돌하지는 않았는지, 활성 질의들에 대한 응답이 제대로 반환되

는지만 확인한다.

만일 카나리아가 죽으면(즉, 문제점이 발견되면) 공정을 멈춘다. 그런 다음 업그레이드된

서버들을 다시 이전 버전으로 되돌리면 될 것이다. 혹은, 만일 수용량이 넉넉하다면, 문제점을

해결한 새 릴리스가 나올 때까지 서버들을 종료시켜 둘 수도 있다.

카나리아 공정은 검사 공정이 아니다. 카나리아 공정은 하나의 릴리스를 실무 환경에 배치

하되 잘못된 코드 투입을 일찍 검출해서 문제점이 사용자에게까지 드러나게 하지 않는 방법이

다. 검사 공정과 카나리아 공정의 주된 차이점은, 검사 공정에서는 실패가 허용된다는 점이다.

검사 공정이 실패했다는 것은 잘못된 릴리스가 활성 사용자들에게까지 도달하는 사고를 미리

방지했다는 것이다. 좀 더 현학적으로 말하자면, 검사 공정 실패는 결함 있는 릴리스의 검출 성

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

30711.3 카나리아 공정

공이며, 이는 좋은 일이다.

반면 카나리아 공정의 실패는 진짜 실패이며, 나쁜 일이다. 카나리아가 죽었다는 것은 검

사 공정에서 뭔가 놓친 것이 있다는 뜻이다. 카나리아 공정의 실패는 드문 일이어야 한다. 카나

리아가 실패하면 개발을 멈추고, 무엇이 잘못되었고 이후 같은 실패가 반복되지 않으려면 어떤

검사를 추가해야 하는지에 대해 개발 자원을 투여해야 하기 때문이다. 그런 노력이 완료된 후

에야 새로운 롤아웃을 시작할 수 있다. 카나리아 공정은 나쁜 릴리스를 검출하는 수단이 아니

라, 나쁜 릴리스가 실수로 실무 환경에 배치되는 사고를 대비한 보험이라 할 수 있다.

검사와 카나리아 공정을 섞어서 사용하는 경우가 많은데, 그러면 안 된다. 말은 카나리아

공정이지만 실제로는 활성 사용자들을 대상으로 새 릴리스를 검사하는 것인 경우도 있다. 검사

는 검사 환경에서 해야지, 실제 사용자들을 대상으로 하면 안 된다.

카나리아 공정은 시스템 검사를 대신하는 것이 아니다

우리 필자들은 카나리아 공정을 활성 사용자들에 대해 릴리스를 검사하는 목적으로 사용하는 상

황을 겪어보았다. 한 사례에서는 의도하지 않게 그런 일이 벌어졌다. 이후 큼직한 가동 중단 사

태가 벌어지고서야 그 사실을 깨달았다. 당시 SRE 기술자들은 상세히 검사된 패키지를 받아서,

카나리아 공정을 통해 자신의 실무 환경에 그 패키지를 배치했다. 검사 환경과 활성 환경이 아주

비슷했기 때문에 몇 년간 별문제가 없었다.

그러나 시간이 지나면서 SRE 기술자들이 개발한 여러 도구가 실무 환경에서 쓰이게 되었다.

그 도구들은 개발자의 검사 시스템에서 검사하지 않은 것들이었다. 개발자들은 그 도구들에 대

해 책임을 지지 않았으며, 도구 중 다수를 일시적이거나 임시방편적인 수단으로 간주했다.

공학에는 “임시적인 해결책만큼 영구적인 것도 없다”라는 오래된 격언이 있다. 얼마 지나지

않아 그런 도구들이 점점 늘어나서 하나의 복잡한 자동화 시스템을 형성했다. 그렇지만 그 도구

들이 개발자의 검사 시스템으로 검사하지 않는 것들이라는 사실에는 변함이 없었다. 주요 릴리

스가 나올 때마다 도구들과의 충돌이 일어나서 운영팀은 급히 도구들을 갱신해야 했다. 그러나

이런 문제들은 그다음에 발생한 일에 비하면 사소했다.

하루는 릴리스 하나를 실무 환경에 투입했는데, 투입이 다 끝난 후에야 문제점이 발견되었다.

특정 사용자들에 대한 서비스가 가동을 멈춘 것이었다.

당시 두 환경에 쓰이던 하드웨어들은 해당 커널 구동기(드라이버)와 가상화 기술의 버전들

이 다를 정도로 차이가 컸다. 이 때문에 특정 운영 체제에서 실행되던 가상 기계들이 작동을 멈

추었다.

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

308 11장 활성 서비스의 업그레이드

그 시점에 이르러서야 SRE 기술자들은 환경의 차이가 너무 벌어졌음을 깨달았다. 그들은 주

서비스 릴리스와 커널 버전, 가상화 프레임워크 버전, 그리고 실무 환경에 쓰이는 하드웨어의 특

정 조합을 검사할 수 있도록 시스템 검사 환경을 완전히 개편해야 했다. 또한, 매번 자신이 개발

한 도구들과의 호환성 문제를 고치느라 고생하지 않기 위해, 자신의 도구들을 저장소와 개발 공

정 및 검사 공정에 포함해야 했다.

이처럼 적절한 시스템 개발 환경을 만들고 검사 환경과 실무 환경의 동기화를 유지하는 메커

니즘을 도입하는 데는 수개월의 노력이 필요했다.

11.4 국면별 롤아웃

또 다른 전략은 사용자들을 여러 그룹으로 나누고 그 그룹들을 한 번에 하나씩 업그레이드하는

것이다. ‘국면(phase )’이라고도 부르는 그룹들은 위험에 대한 내구성을 기준으로 구분한다.

예를 들어 페이스북Facebook에는 자사 직원들을 위한 서비스를 제공하는 데에만 쓰이는 클

러스터들이 있다. 그 클러스터들은 가장 먼저 업그레이드되는데, 이는 자사 직원들이야말로 새

릴리스의 열성적인 검사자들이기 때문이다. 시스템 검사는 업무의 일부이다. 그다음에는 소수

의 외부 사용자들에 해당하는 클러스터들을 업그레이드하고, 마지막으로 나머지 클러스터들을

업그레이드한다.

Stack Exchange의 업그레이드 공정은 여러 국면으로 진행된다. Stack Exchange에는

110개 이상의 웹 공동체가 있으며, 여기에 더해 각 공동체에는 공동체 자체에 대한 논의를 위

한 메타 공동체가 있다. 그 모든 공동체는 동일한 소프트웨어를 사용하나, 웹 페이지를 구성하

는 색상과 디자인은 각자 다르다. 업그레이드 국면들은 순서대로 검사 환경, 메타 공동체들, 사

용자 수가 적은 공동체들, 마지막으로 가장 크고 활성화된 공동체들이다. 각 국면은 이전 국면

에서 일정 기간 문제가 발생하지 않으면 자동으로 업그레이드를 시작한다. 업그레이드가 마지

막 국면에 도달했다면, 해당 릴리스는 아주 믿을만한 것이다. 앞쪽 국면들일수록 여러 가지 이

유로 가동 중단에 대한 내구성이 높은데, 수익을 발생하는 단위가 아니라는 사실도 한 가지 이

유이다.

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

30911.6 청록 배치

11.5 비례식 차단

비례식 차단(proportional shedding )은 기존 서비스와 병렬적으로 새 서비스를 새 기계에

구축하는 배치 기법이다. 그런 다음에는 소통량의 작은 부분을 새 서비스에 보낸다. 그것이 성

공하면 더 큰 부분을 보낸다. 이러한 과정을 모든 소통량이 새 서비스로 갈 때까지 반복한다.

비례식 차단은 한 시스템의 소통량을 다른 시스템으로 보내는 데 사용할 수 있다. 전체 공

정이 완료될 때까지는 기존 클러스터를 종료하지 않는다. 만일 문제점이 발견되면 부하를 다시

기존 클러스터로 보낼 수 있다.

이 기법의 문제점은, 소통량 이전이 완료될 때까지는 두 배의 수용량이 필요하다는 것이

다. 만일 한 대의 기계에서 서비스를 실행한다면, 업그레이드 동안 두 대의 기계를 돌리는 것은

그리 큰 부담이 아니다.

그러나 기계가 1,000대이면 비례식 차단의 비용이 아주 커질 수 있다. 예산상의 문제로 업

그레이드를 위해 1,000대의 예비 기계를 마련하기가 불가능할 수 있다. 그런 경우 한 가지 방

법은, 소통량의 일정 비율이 새 클러스터로 간 후에는 기존 기계들을 새 클러스터에 포함해서

재활용하는 것이다.

11.6 청록 배치

청록 배치(blue-green deployment )는 비례식 차단과 비슷하되 두 배의 자원을 필요로 하지

않는다. 이 방법에서는 같은 기계에 ‘청색’ 환경과 ‘녹색’ 환경이라고 부르는 두 개의 환경을 둔다.

녹색이 현재 활성 환경이고 청색은 아직 쓰이지 않는 환경이다. 두 환경을 같은 기계에 두는 방

법은 다양한데, 가장 간단한 방법은 그냥 둘을 서로 다른 하위 디렉터리에 두고 각각을 같은 웹

서버의 서로 다른 가상 호스트로 사용하는 것이다. 청색 환경은 자원을 아주 조금만 소비한다.

업그레이드 방법은 간단하다. 새 릴리스를 청색 환경에 배치하고, 소통량을 청색 환경으로

돌리면 된다. 그런 다음에는 환경들의 이름을 맞바꾼다. 이 방법에서는 이전 환경으로 돌아가

는 것이 간단하다.

청록 배치는 가동 중단 없이 배치할 수 있도록 설계되지는 않은 응용 프로그램의 비가동시

간을 0으로 만드는 아주 간단한 방법이다. 물론 이 방법은 응용 프로그램을 같은 컴퓨터의 서

로 다른 장소들에 설치할 수 있는 경우에만 적용할 수 있다.

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

537A.1 정규 과제

부록

Part

III

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

538 부록 A 평가

APPENDIX A 평가

APPENDIX B 분산 컴퓨팅과 클라우드의 기원과 미래

APPENDIX C 규모 변화 관련 용어 및 개념

APPENDIX D 문서 양식과 예제 문서

APPENDIX E 읽을거리 추천

Part III

부록

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

539A.1 정규 과제

이 부록은 여러 운영 책무(operational responsibility )들에 대한 평가 질문들과 징표들을

제공한다. 제20장 “탁월한 운영”은 이 부록의 활용 매뉴얼에 해당한다. 특히 §20.7에 평가 체

계의 도입과 적용에 관한 조언이 있다.

평가 수준들

수준 1 초기/혼돈 임시방편적, 개인의 영웅적인 노력에 의존

수준 2 반복 가능 공정을 반복해서 같은 결과를 얻을 수 있음

수준 3 정의됨 임무들이 정의/확인됨

수준 4 관리됨 측정을 수치적으로 관리함

수준 5 최적화 의도적인 최적화/개선

핵심 운영 책무

페이지 운영 책무 관련 장

540 정규 과제 12, 14

543 비상 대응 6, 14, 15

545 감시와 측정 16, 17, 19

548 수용량 계획 수립 18

550 변경 관리

평가

APPENDIX A

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

540 부록 A 평가

552 신제품 도입 및 제거

554 서비스 배치 및 폐지

556 성능과 효율성

추가적인 운영 책무

페이지 운영 책무 관련 장

559 서비스 인도: 구축 국면 9

561 서비스 인도: 배치 국면 10, 11

563 고역 줄이기 12

565 재난 대비 15

A.1 정규 과제

정규 과제(regular task, RT ) 운영 책무는 비상이 아닌 보통의 임무들을 처리하는 방식, 즉

조직이 작업을 받아서 대기열에 등록하고, 분산하고, 처리하고, 검증하는 방식에 관한 것이다.

또한, 주기적인 과제들의 일정을 정하고 실행하는 과정도 여기에 포함된다. 모든 서비스에는

어떤 종류이든 보통의, 예정된 또는 예정되지 않은 작업이 존재한다. 대체로 웹 운영팀은 고객

지원 임무를 직접 수행하지 않지만, 팀 간 요청이나 이해관계자의 요청, 그리고 직접적인 고객

지원 팀이 위임한 요청들은 처리해야 한다. 이 주제들은 제12장과 제14장에서 다룬다.

평가를 위한 질문의 예

● 흔하고 주기적인 운영 과제들과 임무들은 무엇인가?

● 흔한 운영 임무들에 대한 각본(대응 매뉴얼)이 있는가?

● 정규 요청들에 대한 SLA는 무엇인가?

● 각본에 새 항목을 추가해야 할 필요성을 어떻게 식별하는가? 새 항목을 추가하거나 기존

항목을 수정하는 사람은 누구인가?

● 사용자의 요청을 어떻게 받고 어떻게 관리하는가?

● 사용자들이 흔히 제출하는 요청들에 대한 각본이 있는가?

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

541A.1 정규 과제

● 각본에 없는 사용자 요청이 얼마나 자주 들어오는가?

● 사용자들이 우리의 지원을 받는 방법은 무엇인가?

● 우리의 지원을 받는 방법을 사용자들이 어떻게 알게 되는가?

● 우리가 지원하는/하지 않는 사항들을 사용자들이 어떻게 알게 되는가?

● 지원하지 않는 사항에 대한 지원 요청을 어떻게 처리하는가?

● 정규 지원의 한계(업무 시간, 원격 또는 현장)는 무엇인가? 그러한 한계들을 사용자들이

어떻게 알게 되는가?

● 크기에 따른 범주들을 각자 다른 방식으로 처리하는가? 크기 범주들은 어떻게 결정하는가?

● 만일 이 운영 책무에 대한 기업 표준 관행이 있다면, 그것이 무엇이고 이 서비스가 그 관행

을 얼마나 잘 준수하는가?

수준 1: 초기

● 각본이 없거나 오래되고 쓰이지 않는다.

● 결과들에 일관성이 없다.

● 사람마다 과제를 다른 식으로 수행한다.

● 같은 것을 요청한 두 사용자가 서로 다른 결과를 얻는 경우가 많다.

● 공정들이 문서화되어 있지 않다.

● 팀은 자신이 수행하는 모든 공정을 나열하지 못한다(심지어 개략적으로도).

● 요청들이 유실되거나 무기한 지연된다.

● 조직이 흔한 과제들을 완료하는 데 걸리는 시간을 예측하지 못한다.

● 운영상의 문제가 보고되어도 관심을 받지 못한다.

수준 2: 반복 가능

● 팀이 지원하는 서비스들의 목록이 명확하게 정의되어 있다.

● 종단간(end-to-end ) 공정마다 공정의 모든 단계와 그 의존관계들이 명시되어 있다.

● 종단간 공정마다 각 단계의 처리 절차가 문서화되어 있다.

● 서로 다른 사람들이 같은 과제를 같은 방식으로 수행한다.

● 안타깝게도, 작업흐름에 노력의 중복이 어느 정도 존재한다.

● 안타깝게도, 여러 과제에 쓰이는 정보를 해당 단계들이 각자 다시 생성한다.

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

542 부록 A 평가

수준 3: 정의됨

● 대부분의 요청에 대해 SLA가 정의되어 있다. 다만, 팀이 그것을 항상 지키지는 않는다.

● 단계마다, 작업을 다음 단계로 넘기기 전에 반드시 만족해야 할 QA (품질보증) 점검목록

이 있다.

● 한 팀의 공정 변경들을 다른 팀들이 미리 알게 된다.

● 여러 단계에 필요한 정보를 한 번만 생성한다.

● 노력의 중복이 없거나 최소한이다.

● 새 수용량을 마련하는 공정이 반복 가능한 공정이다.

수준 4: 관리됨

● 정의된 SLA를 측정한다.

● 모든 단계에 피드백 메커니즘이 있다.

● 결함들과 재작업들을 주기적으로(매주?) 검토한다.

● 사후 분석 보고서를 모두가 볼 수 있도록 공개한다. 보고서 초안은 x시간 이내에 공개하고,

최종 보고서는 y일 이내에 완성한다.

● 경보들에 영향을 받은 팀들이 경보들을 주기적으로 검토한다. 여러 직무를 포괄하는 연합

팀이 경보들을 주기적으로 검토한다.

● 공정 변경을 요청하려면 문제 해결 정도를 측정할 수 있는 자료가 있어야 한다.

● 현황판이 자료를 사업상의 용어로 보고한다(전문 기술 용어가 아니라).

● 모든 ‘장애 조치 절차’에는 ‘마지막으로 적용된 날짜’ 현황판이 있다.

● 추가 수용량을 그에 대한 수요가 발생하기 전에 예측한다.

수준 5: 최적화

● 프로세스를 변경한 후에는 이전/이후 자료를 비교해서 성공 여부를 판정한다.

● 만일 이전/이후 자료로 보았을 때 개선된 것이 없다면, 변경된 공정을 이전으로 되돌린다.

● 수행된 공정 변경들의 출처가 다양하다.

● 최근에, 모든 단계에서 적어도 하나의 공정 변경이 있었다.

● 주기를 한 달로 둔 덕분에 공정의 개선이 원활하다.

● 실제 운영에서 추출한 자료로 만든 ‘가정(what if )’ 시나리오에 기초해서 결정을 내린다.

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

543A.2 비상 대응

A.2 비상 대응

비상 대응(emergency response, ER; 또는 긴급 대응) 운영 책무는 가동 중단과 재난을 처

리하는 방식에 관한 것이다. 여기에는 가동 중단 도중(대응)과 이후(개선)에 수행하는 기술적

공정 및 비기술적 공정들이 포함되며, 가동 중단을 방지하기 위한 시스템 탄력성 요소들도 포

함된다. 이 주제들은 제6, 14, 15장에서 다룬다.

평가를 위한 질문의 예

● 가동 중단을 어떻게 검출하는가? (자동 감시를 통해서? 사용자의 불평을 통해서?)

● 일반적인 장애 조치 시나리오들과 가동 중단 관련 임무들에 대한 각본이 존재하는가?

● 호출대기 일정표가 있는가?

● 호출대기 일정표를 어떻게 작성하는가?

● 시스템이 지역 수준의 장애(구성요소 고장)를 견디는가?

● 시스템이 전역(지리적) 수준의 장애를 견디는가(데이터센터 교체 등)?

● 팀원들이 지리적으로 분산되어 있는가? (즉, 한 지역이 일정 기간 이상 다른 지역의 업무

를 대신할 수 있는가?)

● 사후 분석 보고서를 작성하는가? 보고서 완성 마감 시간이 있는가?

● 사후 분석 보고서를 위한 표준 양식이 있는가?

● 사후 분석 보고서에 제시된 행동 항목들이 완료되었는지를 나중에 다시 검토하는가?

● 만일 이 운영 책무에 대한 기업 표준 관행이 있다면, 그것이 무엇이고 이 서비스가 그 관행

을 얼마나 잘 준수하는가?

수준 1: 초기

● 가동 중단을 감시 시스템이 아니라 사용자들이 보고한다.

● 호출대기자가 아예 없거나, 같은 사람이 항상 호출대기 중이거나, 모든 사람이 항상 호출대

기 중이다.

● 호출대기 일정을 미리 정해두지 않는다.

● 호출대기 일정을 일정표(calendar ) 형태로 만들어 두지 않는다.

● 다양한 경보에 대해 해야 할 일을 명시한 각본이 없다.

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

찾아보기626

INDEX

숫 자

1% 검사 312

1차 자원 472, 479

2단계 수신 확인 460

2의 거듭제곱 170

2차 자원 479

30일 활성 사용자 수(30-day actives, 30DA) 481

3층 웹 서비스 122

장점 128

4층 웹 서비스 129

앞단 130

응용 프로그램 서버 132

7일 활성 사용자 수(7-day actives, 7DA) 481

가동 중단 432

가상 기계 102

단점 105

모니터 104

설치 296

입출력 104

자원 공유 105

장점 103

가상 사무실 237

가상화 104

가시성 45

가시화 ☞ 시각화

가용성 57, 213

가정 분석 169

가중 라운드로빈 125

가치 스트림 247, 251

각본 88, 221

감독 서버 140

감독-일꾼 관계 59

감사 226

감시 85, 227, 333, 431

관점 433

대리자 455

대상 437

소비자 435

용도 434

프로토콜 454

감시 시스템

감시 441

구성 정보 468

구조 447

감시 자료

시각화 462

유지 439

감시견 타이머 193

감시와 측정(MM) 운영 책무 518, 545

감옥 107

감지 및 측정 시스템 448

개발운영 241

3대 방법 247

개선 255

관계 254, 260

국면 271

기술적 관행들 257

릴리스 공학 259

비기술적 관행 256

실험과 학습 249

역사 252

자동화 255

작업흐름 247

전환 260

접근방식 246

조직 구성 261

통합 254

피드백 개선 248

DevOps Days 콘퍼런스 252

개발자 호출대기 378

개선 수준 528

개시 224, 225

약한 214, 492

위원회 225

은밀한 313, 492

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

627찾아보기

자급식 228

점검 목록 226

책임자 227

개시 준비

검토 228

기술자 225

개요 366

개인 훈련 408

개인용 모래상자 273

개인정보 110

개정 번호 366

건강 점검 47, 290

검사

1% 312

단위 279, 355

릴리스 291

배치 국면 292

부하 292, 480

사용자 인수 101, 224, 293

성능 292

시스템 279, 292, 307

연기 266

장애 복구 414

재난 대비 411

재현성 318

진단 266

철자 62

카나리아 공정 306

포괄도 318

A-B 312

TDD (검사 주도적 개발) 355

게임 데이 257

실습 413

격리성 61

결과적 일관성 58

결재 라인 291

결합 인지 시스템 330

경보 233, 376, 383, 434

검토 398

규칙 456, 461

금지 461

로그 398

로그 꼬리표 398

메시지 458

문턱값 93

범람 460

비활성화 461

빈도 380

소음 460

수신 확인 459

심각도 398

원인 398

전달 과정 459

전달 수단 384

줄이기 399

처리 임무 388

키워드 398

현황판 385

경보 및 상부 보고 시스템 448, 458

경영진 지원 372

경향 434

변화 489

계산 결과 캐싱 165

계승 규모 변화 599

계정 관리 300

계측치 측정 451

계층 3 및 계층 4 부하 분산기 124

계층 7 부하 분산기 124

계통적 구획화 161

계획된 성장 473, 476

고객 234, 248

기능성별 구획화 161

티켓 시스템 351

고속 네트워크 카운터 451

고역 236, 326, 341

비상 341

고역 줄이기 341

평가 563

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

찾아보기628

INDEX

고장 44

구성요소 195

기계 198

네트워크 인터페이스 197

단일 고장 지점 200

데이터센터 202

랙 201

메모리 185

부품 195

선반 201

욕조 고장 곡선 198

전원 공급장치 196

컴퓨터 198

평균 무고장 시간 180

하드 디스크 196

RAM 195

고체 상태 드라이브(SSD) 65

공개키 기반구조 83

공격면 면적 131

공급망 관리 494

공급업체 92

감금 101

서드파티 92

지원 392

공급자 전문 지식 114

공동입주 112

공보관 424

공용 클라우드 109

공유 상태 부하 분산 126

공유 풀 204

공정

메타 223

사람 256

자동화 282

제거 223

종단간 255

최적화 251

카나리아 306

공지 238

공통 운영 책무 518

공통의 경우 221

공평한 대기열 적용 174

공황 191

과부하 장애 203

관계형 데이터베이스 60

관리됨 수준 520

관문 270, 278, 290, 293

관점 433

관행 39

교대근무 38, cf. 호출대기

교대 전 임무 386

마감 보고서 235, 392

준비 점검 목록 386

구글

기계 학습 서비스 100

데이터센터 179

문서 184

블로그 검색 업그레이드 304

스타일 지침 354

애드센스 586

앱스 우아한 강등 82

앱엔진 99

자급식 서비스 개시 228

장애 복구 검사 414

카나리아 요청 194

캘린더 서비스 382

ACL 84

Chubby 311, 412

DiRT 415

Ganeti 338

GFS 587

Omega 75

PageRank 599

PubSub2 141

SRE 모형 253

Thialfi 141

구글 오류 예산 ☞ 오류 예산

구글 지도 139

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

629찾아보기

지역 업체 목록 85

구내 설치/외부 운영 서비스 115

구독자 140

구름 95

구성 73, 289

감시 시스템 468

개발운영 조직 261

배치 국면 289

설계 문서 365

자동화 컴퓨터 334

저장소 448

전략 290

텍스트 파일 73

파일 버전 관리 352

패키지 299

N + 1 577

N + 2 577

구성 관리(CM) 290, 297, 346

데이터베이스 301

언어 346

구성요소

고장 195

재공학 153

구워진 이미지 297

구축 269

건강 상태 318

도구 333

수동 283

자동화 333

콘솔 281

구축 공정 버전 관리 265

구축 국면 269

개발 277

구축 279

단계들 277

등록 280

지속적 통합 282

커밋 278

패키지 280

평가 559

구획화 160

국면 269, 308

국면별 롤아웃 308

권한 부여 300

규모 598

증가 155

확장 155

규모 변화 151, 597

3층 웹 서비스 128

계승 599

닷컴 붕괴 시대 582

데이터베이스 79

로그 599

상수 598, 599

선형 598, 599

수작업 공정 220

수평 157

웹 이전 시대 572

전략 152

제1차 웹 시대 575

제2차 웹 시대 588

제곱 599

지수 598, 599

클라우드 컴퓨팅 시대 592

탄력성 199

AKF 입방체 156

규모가변성 151, 597

규모의 경제 569, 591

규제 333

극단적 경우 221

근무 시간 외 유지보수 386

근미래 분석 457

근본 원인 분석 396

기계 44, cf. 가상 기계

고장 198

단명, 박명 103

물리적 102

기계 학습 서비스(구글) 100

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

찾아보기630

INDEX

기능

기능별 분할 158

요청 90

켜고 끄기 81

기대 영향 90

기반구조 자동화 295

기본 방침 83

기술 채무 236

기업 비상 통신 계획 416

기여 조건 분석 396

기하이동평균 473

기호 링크 346

기회비용 114, 333

길버트, S. 60

깁슨, 윌리엄 516

깔대기 140

꼬리표 285, 288

끈적한 연결 126

내구성 61

내부 기간망 136

내성 45

내용 배포 서버 137

내용 전달망 ☞ CDN

네트워크

고속 카운터 451

소프트웨어로 정의되는 593

위상구조 141

인터페이스 고장 197

저장 영역 298

주소 변환 127

지연 64

넷플릭스 105

유인원 군대 412

Aminator 297

녹색 환경 309

느린 시작 알고리즘 48

느슨히 결합된 시스템 62

능동-수동 188

쌍 197

능력 성숙도 모형 ☞ CMM

능력 측정 450

능률화 222

닐슨, 제리 303

다대다 통신 139

다대일 통신 140

다수의 뒷단 49

다양성 435

다중 스레드

단점 173

장점 173

다중 입주 358

Puppet 359

다중 자료 저장소 128

다중 프로세스 174

단기 분석 457

단명 기계 103

단명 컴퓨팅 114

단방향 호출기 385

단순함 46

단위 검사 279, 355

단일 고장 지점 200

단일 기계 웹 서버 120

단일 스레드 단점 172

닷컴 거품 573

닷컴 붕괴 시대

가용성 요구사항 579

규모 변화 582

기술 579

높은 가용성 581

비용 584

시대 579

응용성 584

자료 규모 변화 583

당기기 453

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

631찾아보기

당직대기 378

대규모 시스템 가시성 45

대규모 운영 220

대기열 173

메시지 140

배출 76

서비스 140

작업 공급 173

대기열 적용 173

공평한 174

장점 174

대문자 O 표기법 598

한계 601

대응 매뉴얼 88

대화방 237

봇 385

데이터베이스

규모 변화 79

데이터베이스 주도적 동적 내용 120

동기화 142

뷰 314

데이터센터 고장 202

도구 구축 333

자동화 333

도구사슬 257

도둑맞은 시간 105

도어, 존 499

도입 제어 84

도킨스, 리처드 597

동적 내용 120

동적 롤백 312

두봉우리 패턴 466

뒷단 47

복제본 47

디버깅 계장 86

디스크 접근 64

딕슨 모형 435

따뜻한 캐시 165

땜질 266

또 다른 눈들 356

라운드로빈 47

가중 125

부하 분산 125

DNS 123

고장 201

국소성 201

다양성 201

랙 범위 복제본 202

레임덕 모드 76, 305

로그(기록) 45, 442

로그 규모 변화 599

로그선형 규모 변화 599

로이스, D. W. W. 245

롤백 320

롤포워드 320

루스벨트, 시어도어 403

루스벨트, 프랭클린 D. 363

리치, 에이미 95

리팩터링 153

린치, N. 60

릴리스 270, 291

검사 291

공학 259

승인 291

승인 절차 294

원자성 321

일자 조정 311

후보 270

링크 단축 사이트 142

마스터-슬레이브 188

막힌 수용량 102

막힌 자원 107

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

찾아보기632

INDEX

만리방화벽 177

말뭉치 52

맞춤형 운영 216

매클린, 맬컴 109

맥헨리 기법 314

맥헨리, 스티븐 314

맵리듀스 587

멈춤 192

메시지

대기열 140

문자 385

중개자 140

메시지 버스

구조 139

설계 141

신뢰성 141

메시지 수신

보장 141

순서 142

메타 감시 441

메타 공정 223

메타 작업 232

메타자료 433

모바일 앱 590

모형 개선 93

목표

대립 509

통합 510

무정전 전원 장치 75

문서 보관소 369

문서 양식 368, 605

사후 분석 보고서 608

설계 문서 368, 605

문서화 88, 227, cf. 설계 문서

과거 의사결정 365

변경과 그 논거 364

수리의 날 236

문자 메시지 385

문제점

명명 표준 350

추적 시스템 349

물리적 기계 102

클라우드 116

물리적 장애 194

미국 대통령 선거 419

미국 연방재난관리청 424

미달예약, 미달구독 97

미래 보장 357

밀기 453

밀집 51

바로소, L. A. 194, 197, 440, 585, 589

박명 기계 103

반복 가능 수준 520

반취약 404

발동 조건 456

발행 구독 미들웨어 140

발행-구독 서비스 140

발행자 140

방송 140

배출 76

도구 338

배치 269

빈도 276

배치 국면 269, 287

검사 292

구성 289

단계 288

설치 289

승격 288

운영 콘솔 294

평가 561

백분위수 463

백업 77

버그

격리 312

버그 보고 대 기능 요청 349

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

633찾아보기

소요시간 276

추적 시스템 232

추적기 349

버전

관리 시스템 351

충돌 107

버전 관리

구성 파일 352

구축 공정 265

DVCS 352

VCS 351

버퍼 대량 방출 122

번스타인, 레너드 611

법규 준수 110

베라, 요기 431

벤치마크 98

변경

구간 478

성공률 276

제한 84

변경 관리(CM) 운영 책무 519, 550

변칙 검출 457

변화-불안정성 주기 216

병목 153, 251, 342

보안 301

보유 자원 파악 474

보이드, 존 390

보조 자원 479

보충 원리 326

복구 77

구글 장애 복구 검사 414

도구 338

복구 지향적 컴퓨팅 581

실행 중 78

충돌 76

평균 서비스 복구 시간 276

복제된 데이터베이스 79

복제본 47, 186

갱신 55

그룹 128

IP 주소 135

봇넷 205

부산물 270

부선형 599

부정적 확인 459

부품 고장 195

부하

검사 292, 480

공유 188, 197

분산 방법 125

차단 204

부하 분산기 47, 198

계층 3 및 계층 4 124

계층 7 124

사용 목적 199

이중 128

전역 135

제1차 웹 시대 574

종류 123

탄력성 200

하드웨어 대 소프트웨어 200

분리

내구성 59

저항 57, 59

분리된 뇌 59

분산 버전 관리 시스템 352

분산 상태 54

분산 서비스 거부 공격 205

분산 컴퓨팅 8, 43

기원과 미래 569

분산 해시 테이블 170

분석 cf. 사후 분석

가정 169

근미래 457

근본 원인 396

기여 조건 396

단기 457

수용량 계획 수립 482

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

찾아보기634

INDEX

시스템 448

실시간 456

원인 396

자료 482

장기 457

전년 대비 440

분석 및 계산 시스템 456

불변식 290

불운의 바퀴 408

블랙리스트 83

블랙박스 107

측정 449

블레이드 서버 295

비가동시간 304

비기능적 요구사항 73

비난 395

비동기 설계 67

비례식 라운드 로빈 47

비례식 차단 309

비목표 366

비상 376

과제 224

사항 229

응급조치 321

통신 계획 416

비상 대응(ER) 운영 책무 518, 543

비용 효과적 캐시 164

비정상 검출 457

비차단 대역폭 202

빌드봇 337

빨간 깃발 563

뿌리 서버 52

삐삐 385

사고 대응 활동 계획서 426

사고지휘관, 사고현장 지휘관 423

사고지휘체계 423

사람 공정 256

사람의 실수 207

사설 클라우드 109

사업 목표 33

사용량별 구획화 161

사용자

가까운 위치 134

고유 자료에 근거한 전역 부하 분산 136

로그인·로그아웃 130

사용자이름 130

신원 127

인수 검사 101, 224, 293

제거 228

사이트 신뢰성 공학(SRE) 213, 253

관행 218

기술자 220

팀 215

핵심 관행 218

사일로 230, 242, 244

사전 점검 207

사후 분석 394

공유 396

목적 394

사후 분석 보고서 219, 233, 395, 459

양식 608

외부용 396

산개 51

산술 평균 463

상관

계수 473, 484

관계 483

상보성 원리 326

상부 보고 191, 390, 434

연쇄 458

상수 규모 변화 598, 599

상태

갱신 요청 55

분산 54

장애 조치 200

상향 위임 434

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

635찾아보기

상호접속 위치 137

새 기능 도입 311

새 기능 예산 217

새 서비스 개시 491

생존 가능 시스템 181

샤드, 샤딩 52, 54, 169, 170

서드파티

공급업체 92

상부 보고 391

의존물 391

서버 44

4층 웹 서비스 132

감독 140

내용 배포 137

다수의 뒷단 49

단일 기계 120

블레이드 295

뿌리 52

응용 프로그램 130

이미지 175

잎 52

자체 측정 455

주 56

트리 52, 132

서비스 44

3층 122

4층 129

거부 공격 205

구글 기계 학습 100

구글 캘린더 382

구내 설치/외부 운영 115

규모 변화 3층 웹 128

대기열 140

대체 304

발행-구독 140

서비스별 분할 158

설치 296

수명 주기 223

업그레이드 303

이미지 296

잠복지연 593

재난 대비 411

재시작 75

조직 내 공급자 115

중단 303

차별화 313

철자 검사 62

체계 도입 529

추상 수준 96

클라우드 규모 134

평균 복구 시간 276

폐지 224, 228

플랫폼 선택 전략 113

서비스 개시 ☞ 개시

서비스 배치 및 폐지(SDD) 운영 책무 519, 554

서비스 수준

목표(SLT) 434

지표(SLI) 434

협약서(SLA) 213, 376, 434

서비스 인도 269

전략 271

플랫폼 269, 271

흐름 270

서비스 인도 구축 국면 ☞ 구축 국면

서비스 인도 배치 국면 ☞ 배치 국면

서비스 지향 구조(SOA) 146

모범 관행 147

유연성 146

서비스 평가 517

기간 524

대상 식별 523

방법론 518

빈도 526

서비스로서의 기반구조( IaaS) 95

서비스로서의 소프트웨어(SaaS) 95, 100

서비스로서의 플랫폼(PaaS) 95, 99

선반 ☞ 랙

선순환 274

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

찾아보기636

INDEX

선언적 언어 346

선입선출 173

선적 컨테이너 108

선형 규모 변화 598, 599

섣부른 최적화 152

설계 문서 승인

승인자 370

작업흐름 370

절차 369

설계 문서, 설계서 363

검토 369

검토자 370

구성 365

양식 368, 605

저장소 369

표준 채용 372

설치 289

가상 기계 296

배치 국면 289

서비스 296

설치 전 스크립트 289

설치 후 스크립트 289

운영 체제 296

패키지 280

하드웨어 295

성능

검사 292

측정 154

회귀 224, 292

성능과 효율성(PE) 운영 책무 519, 556

성숙도 520

세션 ID 128

센지, 피터 213

셸 스크립팅 언어 343

소규모 컴퓨팅 시스템 591

소방 훈련 410

소스 저장소 277

소요시간 103

소음 460

소통 44

소프트웨어

기술자 273

멈춤 192

업그레이드 77

장애 190

재시작 191

충돌 190

탄력성 181

소프트웨어 개발 수명 주기(SDLC) 258

소프트웨어 패키지 280, cf. 패키지

작성 352

소프트웨어로 정의되는 네트워크(SDN) 593

소형 언어 344

속도 44, 64

제한 83

측정 450

쇼, 조지 버나드 497

수동 구축 283

수동 중지 318

수렴 편성 290

수리 요청 도구 339

수리 주간 236

수리의 날 236

수용량 226

넘침 115

단위 186

모형 481

예측 487

수용량 계획 수립(CP) 436, 471

운영 책무 519, 548

위임 490

자료 분석 482

수용량 한계 472, 480

파악 480

수작업 공정 219

규모 변화 220

수직 통합 111, 595

수집 시스템 448, 453

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

637찾아보기

수평 규모 변화 157

수평 중복 157

순번제 230

순회식 업그레이드 304

슐로스네이글, 테오 71, 243

스레드 적용 172

스마트폰 앱 385

스케일링 아웃 157

스크레이핑 공격 206

스크립팅 언어 344

스타일 지침 353

스택 랭킹 465

스폴스키 181, 336

슬로스, 벤자민 트레이너 218, 509

승격 288

승인 227

연쇄 291, 294

작업흐름 370

시각 433

시각화 434

감시 자료 462

시스템 448, 462

시간 근사치 65

시간표 473, 478

시계열 472

시스템 검사 279, 292, 307

시스템 로그 442

시스템 운영 수준 333

신뢰성 213

지역 98

신제품 도입 및 제거(NPI/NPR) 운영 책무 519, 552

신축성 592

신호선 교차 473

실무 환경 건강 318

실무 후보 294

실사용자 감시 433

실시간 분석 456

실패 34

실패 시 개방 83

실패 시 폐쇄 83

실행 실행 실행 죽음 문제 582

실행 중 복구 78

심박 요청 193

심층 방어 180

싱가포르 MAS 86

아마존

역방향 개발 364

EC2 (Amazon Elastic Compute Cloud) 594

Simple Queue Service (SQS) 140

Web Services (AWS) 105

아파치

웹 서버 Prefork 처리 모듈 174

Mesos 75

ZooKeeper 311, 468

안정성

우선 216

향상 217

알렉산더, 크리스토퍼 119

알림 376, 383, cf. 경보

암달의 법칙 178

암호 인증서 131

암호화 131

애봇, M 156, 158

애자일 262

기법 252

동맹 262

방법론 350

선언 262

앨런, 우디 375

야행성 432

약한 개시 214, 492

양방향 호출기 385

양식 ☞ 문서 양식

얼랭 316

얼리 어답터 372

업그레이드 224

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

찾아보기638

INDEX

구글 블로그 검색 304

서비스 303

소프트웨어 77

순회식 304

활성 서비스 303

업무 목표 33

에이전트 455

엣시 341

여유분 473, 476

역 프록시 133

역량 성숙도 모형 ☞ CMM

역추적 192

연기 검사 266

연습 39, 406

열 지도 524

영선 교차 473

영속적 자료 298

영역 국한 언어 326, 346

예비 수용량 186

예산 지출 시간표 478

예외 87

수집 87

예정된 중지 318

예측 487

예측적 전략 180

오델의 공리 151

오류 보정 부호 195

오류 예산 257

KPI 509

SLA 219

오스카 와일드 447

오작동 180

유발 406

오픈소스 프로젝트 580

올스포, J. 331, 395, 396, 417, 419

완벽하고 오작동 없는 세계 183

외부 공급업체 지원 392

외부용 사후 분석 보고서 396

욕조 고장 곡선 198

우아한 강등 82, 179

운영 213

건강(OH) 436

대규모 220

위생 227

콘솔 294

운영 작업

출처 229

항목 229

운영 조직

범주 516

사정 517

평가 517

운영 책무 518

감시와 측정 518, 545

공통 518

변경 관리(CM) 519, 550

비상 대응(ER) 518, 543

서비스 배치 및 폐지(SDD) 519, 554

성능과 효율성 519, 556

수용량 계획 수립 519, 548

수준 징표 522

신제품 도입 및 제거(NPI/NPR) 519, 552

정규 과제 518, 540

평가 539

평가 수준 520

운영 체제 설치 296

운영상의 기능에 대한 80/20 규칙 91

운영상의 요구사항 72

운영을 위한 문서화 88

운영을 위한 설계 71

구현 89

운영팀

조직화 전략 229

품질 측정 517

원격

감시국 456

손 233

프로시저 호출(RPC) 84

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

639찾아보기

원그래프 463

원인 분석 396

원자성 61

월간 활성 사용자 수(MAU) 472, 481

웹 이전 시대 570

가동 중단 571

가용성 요구사항 570

규모 변화 572

기술 571

높은 가용성 572

비용 573

웹 접속 로그 442

위성 137

위키 238, 369

위험 줄이기 406

윌리 웡카 269

유기적 성장 472

유럽 연합 개인정보 보호지침 86, 110

유지(감시 자료) 439

유지보수 460

유휴 수용량 204

육감 317

은밀한 개시 313, 492

음성 통화 385

응급조치 대 장기적 해결책 388

응용 서버 130

응용 프로그래밍 인터페이스 ☞ API

응용 프로그램

구조 119

디버깅 로그 442

로그 442

서버 130

의도적 지연 319

의사소통 메커니즘 237

의존성 226

지옥 107

이동평균 473, 484

수렴·발산 ☞ MACD

이름표 285

이메일 238

경보 메커니즘 384

이미지

생성 자동화 297

서버 175

이상적인 환경 33

이야기꾼 418

이정점 패턴 466

이중 부하 분산기 128

이해관계자 214

인수인계 393

인위적 장애 407

인적자원 자료 갱신 145

인증 300

인증서 관리 131

인지시스템공학 330

인터넷 존재 573

일관성 57, 61

일괄 단위 250

일꾼 스레드 173

일대다 통신 140

읽기 전용 복제본 79

임의 그룹 구획화 162

입출력 과부하 48

잎 서버 52

자급식 요청 222

자기 완결적 랙 201

자기 조사 45

자동화 44, 220, 325

개발운영 255

계정 생성 335

공정 282

교훈 332

기반구조 295

대상 342

도구 구축 333

목표 336

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

찾아보기640

INDEX

방법 342

보충 원리 329

상보성 원리 330

소프트웨어 공학 도구 348

숨은 비용 333

시스템 관리자 331

원형 343

이미지 생성 297

인간 요소 332

자동차 제조 334

자동화되지 않은 과제 221

잔여물 원리 327

컴퓨터 구성 334

자동화 작성 339

단계 342

언어 343

자료

구획화 방법 161

도입 제어 84

분석 482

증강 84

총체 52

파편화 169

자릿수 601

자원

1차 472, 479

2차 479

경합 105, 319

공유 109

막힌 107

보조 479

인도 시간 478

파악 474

폐기 229

풀 157

해제 229

회귀 490

자율 에이전트 412

작업 이전 284, 393

잔여물 원리 326

잠복지연 44, 98, 125, 216, 435, 464, 590

서비스 593

원숭이 413

코드 250

잠정적 교대근무 마감 보고서 393

잡일 340

장기 분석 457

장기적 해결책 393

장애 44, 180

과부하 203

구글 414

물리적 194

발생 확률 187

상태 있는 200

소프트웨어 190

영역 189

인위적 407

조건 458

조치 200

재고 데이터베이스 475

재공학 153

재난 403

재난 대비

무작위 검사 412

사고방식 404

서비스 개시 227

서비스 검사 411

평가 565

훈련 408

재난의 주인(MoD) 408

재설계 153

재적용 도구 339

저장 시스템 448, 467

저장 영역 네트워크 298

적응적 교체 캐시 166

전개 51

전년 대비 분석 440

전능 431

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

641찾아보기

전역 부하 분산기 135

POP 138

전원 공급장치 고장 196

전일종사 직원 608

전제 431

전지 431

전처리 작업 부담 600

전통적인 전사적 IT 부서 215

전환률 437

접근 제어 목록 83

접착성 126

정규 과제 운영 책무 518, 540

정규 충돌 191

정규 호출대기 임무 387

정상 과제 224

정상 성장 472, 476

정상 요청 230, 378

정연한 종료 76

정의됨 수준 520

정적 내용 120

정직원 608

제1차 웹 시대 573

가용성 요구사항 573

규모 변화 575

기술 574

높은 가용성 576

부하 분산기 574

비용 578

제2차 웹 시대 585

가용성 요구사항 586

규모 변화 588

기술 586

높은 가용성 586

비용 589

제곱 규모 변화 599

제네럴리스트 246

제약 155

제어판 142

제출 전 점검 278

제품 관리 437

제프 딘 66

조달 시간 494

조직

기억 225

부서별 구획화 161

서비스 공급자 115

평가 527

조합 패턴 46

조회 지향적 분할 160

좀비 421

종단간 공정 255

주 서버 56

주 스레드 173

주간 활성 사용자 수 481

주기 시간 270

주행성 432, 464

죽음의 질의 193

줄 머리 차단 172

중단 180

중복성 78, 186

중앙 수집기 456

중앙값 463

즉석 교체 80

가능 장치 81

즉석 대기 188

즉석 예비 188

즉석 장착 가능 장치 81

증강 파일 84

지리 위치 파악 135, 175

지리적 다양성 98

지속 가능 시스템 181

지속적 개선 220

지속적 배치 317

정지 318

지속적 인도(CD) 262, 263, 299

4대 관행 265

8대 원리 264

지속적 통합(CI) 282

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

찾아보기642

INDEX

지수 규모 변화 598, 599

지수이동평균 473, 487

지식 내장 249

지역 노동법 86

지역 시간대 444

지역별 수집기 456

지연 464

직무 만족도 276

직접 측정 450

직접 편성 290

진단 438

검사 266

질의 119

죽음의 193

집결 51

징표 522

차가운

저장소 99

캐시 165

차수 598

참여도 472, 482

측정 482

창고 규모 컴퓨팅 589

채널 140

채프먼, 브렌트 423

철자 검사 서비스 62

청록 배치 309

청색 환경 309

청취 140

체크아웃 351

체크인 351

초가상화 104

초과예약, 초과구독 97, 186

초기 수준 520

초당 질의 수 44, 83

초선형 599

총소유비용 111, 243, 593

총체 52

최근 미사용 알고리즘 166

최빈값 525

최소 감시 문제 439

최소 부하 125

느린 시작 125

방식 48

최소 사용 빈도 알고리즘 166

최적화 진행 수준 520

추상 62

수준 96

추세 434

변화 489

추적 333

충돌 190

복구 76

충돌 전용 소프트웨어 76

취합기 456

측정 432

감시 518

계측치 451

능력 450

블랙박스 449

빈도 433

서버 455

성능 154

속도 450

운영팀 품질 517

직접 450

참여도 482

카운터 451

합성 450

화이트박스 449

측정치 45, 433, 499

수집 453

MACD 487

카나리아 공정 306

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

643찾아보기

검사 공정 306

카운터 측정 451

캐시 적중 163

비율 163

실패 163, 602

캐시, 캐싱 162

교체 알고리즘 166

영속성 165

위치 164

적중률 163

크기 168

항목 무효화 167

효율성 163

컨테이너 106

단점 108

장점 107

프로세스 그룹 106

컴파일식 언어 345

컴퓨터 고장 198

코드

검토 시스템(CRS) 356

소요시간 276

잠복지연 250

포괄도 318

코드 승인 91

절차 92

코드 투입 303

실패 320

코드로서의 기반구조 258, 300

코로케이션 112, 175, 580

코어덤프 192

코틀러, 필립 471

쾌속 개발 311, 344

크레이버, 닉 547

클라우드 95

공용 109

기원과 미래 569

물리적 기계 116

사설 109

사용 비용 111

서비스 134

제어권 111

컴퓨팅 8

클라우드 컴퓨팅 시대 590

가용성 요구사항 590

규모 변화 높은 가용성 592

기술 593

비용 591

클로, 릭 499

클로스 네트워킹 202

타임스탬프 142, 433, 443

탄력성 179, 477

탈렙, 나심 니콜라스 404

테스트 주도 개발 355

테스트, 테스팅 ☞ 검사

텍스트

비교 도구 73

파일 73

텔리스, 마르세우 515

토르발스, 리누스 364

톰슨, 켄 327

통 466

통과 ISP 137

통신

다대다 139

다대일 140

비상 416

일대다 140

통지 383

통합 254

투입 충돌 319

투자수익 111

트리거 456

트웨인, 마크 325

트위터 161

티켓 234, 350

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

찾아보기644

INDEX

임무 230

임무일 232, 234

팀 훈련 410

팀원 업무일 232

파라수라만, R. 331

파이 그래프 463

파이썬 언어 100

파일 토막 56

파편 52, 54, 170

배출 172

파편화 54, 169

패리티 비트 195

패치 소요시간 276

패키지 352, cf. 소프트웨어 패키지

구성 299

구축 국면 280

등록 282

설치 280

작업 이전 인터페이스 284

저장소 277

패트릭 드부아 252

퍼포먼트 44

페이스북

은밀한 개시 313, 492

Chat 492

Gatekeeper 313

SocialRank 599

페이지 실패 602

편재 431

평가 539

기간 524

방법론 518

평균 463

무고장 시간 180

서비스 복구 시간 276

수리 시간 187

이동 ☞ 이동평균

전력사용지수 589

폐지 224, 228

포드 202

폭포수 방법론 244, 273

폭포식 126

폴러 455

표적화 333

표준 수용량 계획 수립 472

품질 보증(QA) 436

기술자 273

품질 확신 275

품질의 선순환 274

프로그래밍 가능한 VLAN 593

프로세스 감시기 191

프로젝트 작업 224, 230

프로젝트 집중일 232

프로펠러헤즈 569

플래그 뒤집기 81, 310

피드백 루프 92, 248, 251

피셔, M. 158

피츠 목록 329

핀 꽂기 288

하둡 ☞ Hadoop

하드 디스크

고장 196

신뢰성 미신 440

하드웨어

가상 기계 104

설치 295

탄력성 181

하드웨어 부하 분산기 대 소프트웨어 부하 분산기 200

하향 표본화 440

합성 측정 450

해밍 부호 195

해바라기 380

해상도 435

해석식 언어 344

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

645찾아보기

해시

접두사별 구획화 161

함수 169

핵심 동인 472, 481

핵심성과지표 ☞ KPI

핵심지표 감시 489

향후 수용량 계획 수립 93

혁신 214

현재 사용량 472, 474

형상 관리 290, 297, 346

호스트이름 139

호스팅 공급자 계약 시 질문 사항 112

호어, C. A. R. 43

호출기 385

폭풍 459

호출대기 214, 219, 227, 230, 375, cf. 교대근무

각본 390

개발자 378

도움 요청 389

마감 임무 392

매뉴얼 390

명단 377

빈도 383

설계 376

수행 386

일정 318, 379

일정표 382, 459

임무 386

정규 임무 387

준비 점검 목록 386

추가 수당 381

호출대기일 232, 233

호출대기자 376, 425

후속 작업 380, 389, 393

훈련 377

혼돈 고릴라 412

혼돈 수준 520

혼돈 원숭이 412

혼잡 51

화이트리스트 83

화이트박스 측정 449

확신 275, 410

확장/수축 기법 314

활성 백업 77

활성 사용자 수 472

활성 서비스 업그레이드 303

활성 스키마 변경 313

활성 코드 변경 316

활용 제한 125

회귀 319

분석 473, 483

성능 224, 292

자원 490

직선 484

회복력 179

후속 작업 호출대기 389

후행 평균 48

훈련

개인 408

소방 410

재난 대비 408

팀 410

호출대기 377

히스토그램 466

A

A-B 검사 312

Abbott, M. 156, 158

abstraction ☞ 추상

Abts, D. 202

access control list (ACL) 83

accounting 301

ACID 61

ACL (access control list) 83

Active Directory 301

active users 472

active-passive ☞ 능동-수동

adaptive replacement cache (ARC) 166

AdSense 586

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

찾아보기646

INDEX

Adya, A. 141

agent 455

aggregator 456

Agile ☞ 애자일

AKF 규모 변화 입방체 156

alarm, alert, alerting ☞ 경보

Alexander, Christopher 119

Allen, Woody 375

Allspaw, J. 331, 395, 396, 417, 419

Amazon ☞ 아마존

Amdahl’s law 178

analysis system 448

ancillary resource 479

Anderson, C. 254

announcement 238

anomaly detection 457

antifragile 404

Apache ☞ 아파치

API (Application Programming Interface) 44

로그 442

application ☞ 응용, 응용 프로그램

approval ☞ 승인

ARC (adaptive replacement cache) 166

artifact 270

assessment ☞ 평가

Atlassian Bamboo 281

atomicity 61, 321

attack surface area 132

auditing 226

augmentation 84

authentication 300

authorization 300

automation ☞ 자동화

autonomous agent 412

availability 57, 213

AWS (Amazon Web Services) 105

B

backend ☞ 뒷단

baked image 297

Barroso, L. A. 194, 197, 440, 585, 589

Baseboard Management Controller (BMC) 295

Basecamp 100

Basically Available Soft-state services with

Eventual consistency (BASE) 61

batch 250

bathtub failure curve 198

Beck, K. 262

Behr, K. 242

Bellovin, S. M. 131

Bernstein, Leonard 611

Berra, Yogi 431

best practice 147

Big O notation ☞ 대문자 O 표기법

Bigtable 60

bimodal 466

bin 466

BIOS 설정 295

bit.ly 142

blacklist 83

blade server 295

blue-green deployment 309

BMC (Baseboard Management Controller) 295

boss-worker 59

Bosun 455

botnet 205

bottleneck 153

Bourne Again Shell (bash) 344

Bourne Shell 344

Bowen, H. K. 242, 247

Boyd, John 390

Brandt, K. 390

broadcasting 140

BSD UNIX 580

BTFS 196

bucket 466

buffer thrashing 122

bug ☞ 버그

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

647찾아보기

build, building ☞ 구축

buildbot 337

business objective 33

C

c-SOX 86

cache ☞ 캐시

canary process ☞ 카나리아 공정

Candea, G. 76

CAP 원리 57, 164

삼각형 60

capability maturity model (CMM) ☞ CMM

capacity ☞ 수용량

capacity planning (CP) ☞ 수용량 계획 수립

cascade 126

Cassandra 60

causal analysis 396

CCA (contributing conditions analysis) 396

CD (continuous delivery) 262, 299

CDN (content delivery network) 175

URL 175

certificate management 131

CFEngine 290, 340, 346

Chalup, S. R. 280

change ☞ 변경

change management (CM) ☞ 변경 관리

change-instability cycle 216

channel 140

chaos monkey 412

Chapman, Brent 423

chat room ☞ 대화방

check-in 351

Chef 290

chek out 351

Cheswick, W. R. 131

chunk 56

CI (continuous integration) 282

Clidaras, J. 589

cloud ☞ 클라우드

CM (change management) 519, 550

CM (configuration management) 297, 346

CMDB ( configuration management

database) 301

CMM (capability maturity model) 520

다섯 수준 520

CNN.com 웹 사이트 49

code ☞ 코드

cognitive systems engineering (CSE) 330

cold ☞ 차가운

collection system 448

colocation 112, 175

compensatory 326

compiled language 345

complementarity 326

composition pattern 46

confidence 275

configuration ☞ 구성

configur ation management

database (CMDB) 301

configuration package 299

congestion 51

Consistency 57, 61

constant scaling 598

constraint 155

container ☞ 컨테이너

content delivery network (CDN) ☞ CDN

content distribution 137

contention 105

continuous delivery (CD) ☞ 지속적 인도

continuous deployment ☞ 지속적 배치

continuous integration (CI) 220, 282

contributing conditions analysis (CCA) 396

control panel 142

convergent orchestration 290

conversion rate 437

Cooper, G. 141

core driver 472, 481

coredump 192

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

찾아보기648

INDEX

corpus 52

correlation ☞ 상관

cost-effective 164

counter 451

CP (capacity planning) 436, 471, 519, 548

CPU 경합 105

crash ☞ 충돌

Craver, Nick 547

CRS (code review system) 356

crypto certificate 131

CSE (cognitive systems engineering) 330

customer ☞ 고객

cycle time 270

D

dark launch 492

database ☞ 데이터베이스

Dawkins, Richard 597

DDoS (distributed denial-of-service) 공격 205

Dean, Jeff 66, 194, 585

Debois, Patrick 252

declarative language 346

decomm, decommissioning 224, 228

defense in depth 180

delay 464

Deming, W. Edwards 242

denial-of-service (DoS) 공격 205

dependency ☞ 의존성

deployment ☞ 배치

design document ☞ 설계 문서

DevOps ☞ 개발운영

DHT 170

DHT (distributed hash table) 170

diagnostic ☞ 진단

Dickson model 435

diff 73

direct orchestration 290

DiRT 414

disaster 403

disaster preparedness ☞ 재난 대비

Disaster Recovery Testing (DiRT) 414

distributed computing ☞ 분산 컴퓨팅

distributed denial-of-service (DDoS) 공격 205

distributed hash table (DHT) 170

distributed VCS (DVCS) 352

diurnal 464

diversity 435

DNS (domain name service) 301

라운드로빈 123

Docker 108, 297

documentation ☞ 문서화

Doerr, John 499

domain-specific language (DSL) 326, 346

DoS (denial-of-service) 공격 205

down-sampling 440

downtime 304

draining ☞ 배출

DRBD 321

DSL (domain-specific language) 326, 346

Durability 61

DVCS (distributed VCS) 352

dynamic conten 120

Dynamo 60

E

early adopter 372

ECC (error-correcting code) 195

economies of scale 569

edge case 221

Edwards, Damon 243, 260, 262, 275

elasticity 592

Elements of Programming Style, The 46

EMA (exponential moving average) 473

email ☞ 이메일

emergency ☞ 비상

emergency response (ER) ☞ 비상 대응

EMI 424

encryption 131

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

649찾아보기

end-of-shift report 235, 392

end-to-end 255

engagement ☞ 참여도

ephemeral machine 103

ER (emergency response) 518, 543

Erlang 언어 316

Error Budgets ☞ 오류 예산

error-correcting code (ECC) 195

escalation ☞ 상부 보고

Etsy 341

EU Data Protection Directive 86

eventual consistency 58

exception ☞ 예외

executive summary 366

expand/contract 314

expected impact 90

expenditures timetable 478

exponential moving average (EMA) 473

exponential scaling 598

F

Facebook ☞ 페이스북

factorial scaling 599

fail closed 83

fail open 83

failover 200

failure ☞ 고장, 장애

fair queueing 174

fan in 51

fan out 51

Farley, D. 264

feature ☞ 기능

feedback loop 248

feeding from a queue 173

Felderman, B. 202

FEMA 424

재난관리교육원(EMI) 424

FIFO ( first in first out) 173

fire drill 410

Fisher, M. 156

Fitts’s list 329

Fix-It Day 236

Fix-It Week 236

FIXME 주석 354

flag fliping 81, 310

forecasting 487

Fox, A. 76

freemium 590

FTE ( fulltime employee) 608

Fulghum, P. 262, 292

funnel 140

future capacity planning 93

future-proofing 357

G

Game Day ☞ 게임 데이

Ganapathi, A. 207

Ganeti 321

gate 270

gauge 451

generalist 246

geolocation 135, 175

GFS (Google File System) 587

Gibson, William 516

Gilbert, S. 60

GLB (global load balancer) 135

Go Continuous Delivery 281

Google ☞ 구글

graceful degradation 82, 179

Great Firewall 177

Gruver, G. 262, 292

H

Hadoop 588

HDFS 196

Hamming code 195

handoff 284

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

찾아보기650

INDEX

hang 192

hardware ☞ 하드웨어

hash ☞ 해시

Hbase 60

head of line blocking 172

headroom 473

health check 47

heartbeat request 193

heat map 524

histogram 466

Hoare, C. A. R. 43

Hogan, C. 280

Hohpe, G. 142

horizontal duplication 157

horizontal scaling 157

hostname 139

hot spare 188

hot standby 188

hot swap ☞ 즉석 교체

hot-pluggable 81

hot-swappable 81

HP LaserJet 262

HTTP (Hyper-Text Transfer Protocol) 119

HTTP 요청 119

Hudson 281

Humble, J. 262, 264, 275

HVM 104

Hölzle, U. 585, 589

I

IaaS ( Infrastructure as a Service) 95

IAP ( incident action plan) 426

IC ( incident commander) 423

ICS ( incident command system) 423

절차 교육 427

infrastructure as code 258, 300

inhibit 461

innovation 214

installation ☞ 설치

instrumeutation 86

integration 254

Intel OKR 시스템 499

internal backbone 136

internet presence 573

introspection 45

invariant 290

inventory database 475

IP

다중전송 141

단일전송 141

주소 123

Isolation 61

issue ☞ 문제점

IT 고객지원 티켓 시스템 351

J

j-SOX 86

Jacob, Adam 243

jail 107

Java 카운터 452

JCS ( joint cognitive system) 330

Jenkins CI 281

job satisfaction 276

JSON 454

K

Kamp, P.-H. 601

Keevenm, T. 156

Kejariwal, A. 479

Kerberos 301

Kernighan, Brian 46

Kim, Gene 242, 247

Klau, Rick 499

Kotler, Philip 471

KPI (key performance indicator) 437, 497

가상 기계 할당 504

구글 오류 예산 509

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

651찾아보기

배치 503

선택 502

수정 502

이상 501

작성 500

평가 508

행동 501

SMART 498

Krishnan, Kripa 417, 419

KVM 321

L

L1 캐시 165

label 285

lame-duck mode 76

LAMP 581

Large I nstallation System

Administration (LISA) 252

latency ☞ 잠복지연

Launch Readiness Review (LRR) 228

launch, launching ☞ 개시

LDAP 301

lead time 103, 276

least frequently used (LFU) 166

least loaded ☞ 최소 부하

least recently used (LRU) 166

left-over 326

Letuchy, E. 493

Levy, Steven 419

Limoncelli, T. A. 280, 340, 417, 419

linear scaling 598

link-shortening site 142

Linux 580

LISA ( Large Installation System

Administration) 252

LL 125

load ☞ 부하

load balancer ☞ 부하 분산기

lock-in 101

log 45, 442

logarithmic scaling 599

loglinear scaling 599

look-for 522

lookup-oriented split 160

loosely coupled 62

LRR (Launch Readiness Review) 228

LRU ( least recently used) 166

Lynch, N. 60

M

MACD ( moving average convergence/

divergence) 473

신호 487

신호선 473

측정치 487

machine ☞ 기계

Madrigal 413, 419

main thread 173

maintenance 460

malfunction 180

manual labor 219

many-to-many 139

MapReduce 587

master 140

Master of Disaster (MoD) 408

master server 56

master-slave 59, 188

MAU (monthly active users) 472, 481

McHenry, Stephen 314

McKinley, D. 341

McLean, Malcom 109

MCollective 140

MD5 해시 170

mean time between failure (MTBF) 180, 182

mean time to repair (MTTR) 187

measurement ☞ 측정

median 463

Megiddo, N. 166

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

찾아보기652

INDEX

notification 383

NPI/NPR 519, 552

O

objectives and key results (OKR) 499

OH (operational health) 436

On-Premises, Externally Run 115

oncall ☞ 호출대기

onduty 378

OODA 루프 390

Open Directory 301

OpenStack 321

OpenTSDB 467

operation ☞ 운영

operational responsibility (OR) ☞ 운영 책무

Oppenheimer, D. L. 207, 242

order 598

order of magnitude 601

organic growth 472

organizational memory 225

outage 180

oversubscription 97, 186

O’Dell’s Axiom 151

P

PaaS (Platform as a Service) 95, 99

pager ☞ 호출기

Parasuraman, R. 331

paravirtualization 104

parity bit 195

partition ☞ 분리

Patterson, D. A. 207, 581

PCI DSS 86

PE (performance and efficiency) 519, 556

people process 256

percentage of code coverage 318

percentile 463

performance ☞ 성능

Memcached 127

message ☞ 메시지

meta-monitoring 441

meta-process 223

meta-work 232

metadata 433

metrics ☞ 측정치

mini-language 344

MM (monitoring and metrics) 518, 545

MoD 408

mode 525

Modha, D. S. 166

monitoring ☞ 감시

monthly active users (MAU) 472, 481

moving average ☞ 이동평균

MTBF (mean time between failure) 180, 182

MTTR (mean time to repair) 187

multicast 141

multitenancy ☞ 다중입주

Myers, D. 141

N

N + 1 구성 577

N + 2 구성 577

N + M 중복성 186

NAK (negative acknowledge) 459

NAT (network address translation) 127

Netflix ☞ 넷플릭스

network ☞ 네트워크

new product introduction and removal

(NPI/NPR) 519, 552

Nielsen, Jerri 303

non-blocking bandwidth 202

non-emergency request 378

non-goal 366

nonemergency task 224

normal growth 472

normal request 230

NoSQL 61

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

653찾아보기

performant 44

Perl 344

perspective 433

Pfeiffer, T. 245

phase 269, 308

physical machine ☞ 물리적 기계

Piatek, M. 141

Pinheiro, E. 197, 198, 440

pinning 288

PKI 83

planned growth 473

Platform as a Service (PaaS) 95, 99

Plauger, P. 46

playbook 88, 221

PM (product management) 437

pod 202

point of presence (POP) 137

poller 455

post-install script 289

postmortem ☞ 사후 분석

power supply 196

power usage effectiveness (PUE) 589

PowerShell 344

practice 39, 406

pre-check 207

pre-install script 289

pre-submit check 278

premature optimization 152

primary resource 472, 479

private cloud 109

private sand-box 273

process ☞ 공정

product management (PM) 437

production candidate 294

programmable VLAN 593

project work 230

project-focused day 232

promotion 288

Propellerheads 569

proportional round-robin 47

proportional shedding 309

prototype 343

provisional end-of-shift report 393

provisioning 494

public cloud 109

publisher 140

pubsub 140

PUE (power usage effectiveness) 589

pull 453

Puppet 290, 340, 346

Puppet 다중 입주 359

push 453

PV (paravirtualization) 104

Python 100, 344

Q

QPS (queries per second) 44, 83

quadratic scaling 599

quality assurance (QA) ☞ 품질 보증

query 119

query of death 193

queue, queing ☞ 대기열, 대기열 적용

R

RabbitMQ 140

Rachitsky, L. 397

rack ☞ 랙

RAID 183, 196

RAM

고장 195

캐시 166

rapid development 311

real user monitoring (RUM) 433

Recovery-Oriented Computing (ROC) 581

red flag 563

Redis 60, 127

redundancy 78, 186

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

찾아보기654

INDEX

reengineering 153

refactoring 153

regression ☞ 회귀

regular task (RT) 518, 540

regulating 333

release ☞ 릴리스

reliability ☞ 신뢰성

remote ☞ 원격

replica ☞ 복제본

resiliency 179

resolution 435

resource ☞ 자원

retention 439

return on investment (ROI) 111

reverse proxy 133

revision number 366

Riak 60

Rich, Amy 95

Richard, Dylan 419

Robbins, Jesse 417, 419

ROC (Recovery-Oriented Computing) 581

Rockwood, B 325

roll forward 320

rolling upgrade 304

Roosevelt, Franklin D. 363

Roosevelt, Theodore 403

root cause analysis 396

roster 377

rotation 230

round-robin ☞ 라운드로빈

Royce, D. W. W. 245

RPC (Remote Procedure Call) 84

RSS 피드 281

RT ( regular task) 518, 540

Rubin, A. D. 131

Ruby 344

RUM ( real user monitoring) 433

run run run dead 582

S

SaaS (Software as a Service) 95, 100

Salesforce.com 100

SAN (storage area network) 298

satellite 137

scalability 151, 597

scale ☞ 규모

scaling ☞ 규모 변화

Schlossnagle, Theo 71, 243

Schroeder, B. 198

scraping attack 206

SDD (service deploy and decommission) 519

SDD (service deployment and

decommissioning) 554

SDLC (software development life cycle) 258

SDN (software-defined network) 593

SeaLand 109

segmentation 160

Selenium WebDriver 292

Senge, Peter 213

sensing and measurement system 448

server ☞ 서버

ServerFault.com 160

service ☞ 서비스

service-oriented architecture (SOA)

☞ 서비스 지향 구조

shard, sharding ☞ 파편, 파편화

shared pool 204

Shaw, George Bernard 497

shell scripting language 343

Sheridan, T. B. 331

shift ☞ 교대근무

shipping container 108

short-lived machine 103

signal line crossover 473

silence 460

Simian Army 412

simple n etwork management

protocol (SNMP) 454

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

655찾아보기

single point of failure (SPOF) 200

Site Reliability Engineering/Engineer (SRE)

☞ 사이트 신뢰성 공학

SLA (service level agreement) 213, 376, 421, 434

SLI (service level indicator) 434

Sloss, Benjamin T. 218, 509

slow start 48

SLT (service level target) 434

SMART 기준 498

smoke test 266

SMS 385

SNMP (s imple network management

protocol) 454

SOA (service-oriented architecture)

☞ 서비스 지향 구조

soft launch 214, 492

software ☞ 소프트웨어

Software as a Service (SaaS) 95, 100

software development life cycle (SDLC) 258

software-defined network (SDN) 593

Solaris Zones 106

solid-state drive (SSD) 65, 593

source repository 277

SOX 86

Spafford, G. 242

spare capacity 186

Spear, S. 242, 247

speed ☞ 속도

split brain 59

SPOF (single point of failure) 200

Spolsky, J. 181, 336

SQS (Simple Queue Service) 140

SRE (Site Reliability Engineering)

☞ 사이트 신뢰성 공학

SSD (solid-state drive) 65, 593

Stack Exchange 166, 281, 293, 308, 547

stack ranking 465

stakeholder 214

state ☞ 상태

static content 120

steal time 105

stickiness 126

sticky connection 126

stolen time 105

storage area network (SAN) 298

storage system 448

story teller 418

stranded capacity 102

stranded resource 107

streamlining 222

style guide 353

sub-linear 599

subscriber 140

super-linear 599

survivable system 181

SWE 273

symbolic link 346

system test 279, 292, 307

T

tag 285

Taleb, Nassim Nicholas 404

targeting 333

TCO ( total cost of ownership) 111, 243, 593

TCP 세션 124

TDD ( test-driven development) 355

TeamCity 281

technical debt 236

Telles, Marcel 515

test, testing ☞ 검사

test-driven development (TDD) 355

third-party ☞ 서드파티

Thompson, Ken 327

Three Ways 247

three-tier 122

threshold 93

ticket ☞ 티켓

time series 472

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

찾아보기656

INDEX

Varnish HTTP 가속기 601

VCS (version control system) 351

version ☞ 버전

vertical integration 111, 595

virtual machine ☞ 가상 기계

virtuous cycle 274

visibility 45

visualization ☞ 시각화

VMM (virtual machine monitor) 104

W

warehouse-scale computing 589

watchdog timer 193

waterfall methodology 244

WAU (weekly active users) 481

Weber, W.-D. 197, 198, 440

weighted RR 125

what if analysis 169

Wheel of Misfortune 408

whitelist 83

Wickens, C. D. 331

wiki 369

Wilde, Oscar 447

Willis, John 260, 262, 275

Willy Wonka 269

Woolf, B. 142

worker thread 173

workflow 247

X Y Z

X-Forwarded-For 헤더 125

Xen 321

Yan, B. 479

Young, M. 262, 292

zero line crossover 473

ZFS 196

Zones, Solaris 106

time to live (TTL) 167

timestamp 142

timetable 473

TODO 주석 354

toggle 81

toil ☞ 고역

tool building ☞ 도구 구축

toolchain 257

topology 141

Torvolds, Linus 364

total cost of ownership (TCO) 111, 243, 593

traceback 192

tracking 333

traffic 44

trailing average 48

transit ISP 137

trend ☞ 경향, 추세

trigger 456

Tseitlin, A. 413, 419

TTL ( time to live) 167

Tufte, E. R. 466

Tumblr Invisible Touch 295

Turnbull, J. 254, 255

Twain, Mark 325

U V

UAT (user acceptance testing) 101, 224, 293

Ubuntu Upstart 75

undersubscription 97

unicast 141

unit of capacity 186

unit test 279, 355

UPS 75

user ☞ 사용자

user acceptance testing (UAT) 101, 224, 293

username 130

utilization limit 125

Vagrant 297

value stream 247

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

www.hanbi t .co.kr

이것이 프로그래밍이다!

이것이 안드로이드다

진정한 안드로이드 개발자로 이끌어줍니다.

SDK 5.0 롤리팝 호환!

책만 보고,

동영상 강좌로도 만족하지 못했다면 Daum

카페 '슈퍼드로이드'에서 만나요

cafe.daum.net/superdroid

박성근 저 | 1,164쪽 | 45,000원

이것이 C언어다

세상에 없던 새로운

C언어 입문서 탄생!

삼성, LG에서 펼쳐졌던

전설의 명강의를 풀타임 동영상 강좌로!

이보다 더 확실한 방법은 없다, 칠판강의

전체 동영상 강좌 유투브 전격 공개!

http://goo.gl/tJK3Tu

서현우 저 | 708쪽 | 25,000원

이것이 자바다

가장 중요한 프로그래밍 언어를 하나배워야 한다면, 결론은 자바다!

중급 개발자로 나아가기 위한 람다식,

JavaFX, NIO 수록

자바의 모든 것을 알려주는 인터넷 강의

궁금한 것은 카페에서!

cafe.naver.com/thisisjava

신용권 저 | 1,224쪽 | 30,000원

저자 직강 동영상 제공!

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

모던 웹을 위한

JavaScript + jQuery 입문

www.hanbi t .co.kr

지금은모던 웹 시대!

HTML5 분야 부동의 1위 도서

HTML5 표준안 확정에 맞춘 완전 개정판의 귀환!

HTML5 권고안과 최신 웹 브라우저 환경 대응

윤인성 저 | 624쪽 | 30,000원

모던 웹 디자인을 위한

HTML5 + CSS3 입문

자바스크립트에서 제이쿼리, 제이쿼리 모바일까지 한 권으로 끝낸다!

시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서

윤인성 저 | 980쪽 | 32,000원

페이스북, 월마트, 링크드인은 왜

Node.js를 선택했는가?

이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다.

윤인성 저 | 484쪽 | 25,000원

모던 웹을 위한

Node.js프로그래밍

필요한 것만 배워 바로 현장에서 쓰는 HTML5

순서대로 읽으며 실습할 수 있는 HTML5 자습서

김상형 저 | 700쪽 | 32,000원

HTML5 + CSS3 정복

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

Hanbit eBook Realtime

DRM free!어떤 디바이스에서도 자유롭게

eBook Oriented!전자책에 꼭 맞는 최적의 내용과 디자인

Hanbit eBook

Realtime 70

김세훈 지음

MFC프로그래밍주식분석 프로그램 만들기

이연복 지음

Hanbit eBook

Realtime 49Hanbit eBook

Realtime 89

자바 개발자를 위한

Vert.x애플리케이션 개발

Hanbit eBook

Realtime 49Hanbit eBook

Realtime 92

모바일/웹 메시징STOMP와 MQTT로 개발하는 IoT

모바일/웹 애플리케이션

제프 메스닐 지음 / 조건희 옮김

Mobile and Web Messaging

Hanbit eBook

Realtime 90

JavaScriptPromiseazu지음 /주우영옮김

www.hanbi t .co.kr /ebook

www.hanbi t .co.kr

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

전자부품 백과사전 vol.1찰스 플랫 지음 / 배지은 옮김 / 30,000원

취미공학에 필요한 핵심 전자부품을 사전식으로 정리한 안내서.

Zero to Maker: 누구나 메이커가 될 수 있다데이비드 랭 지음 / 장재웅 옮김 / 14,000원

일반인에서 메이커로. 날백수에서 무인 잠

수정 회사 CEO가 된 사나이, 데이비드 랭의 메이커 도전기.

처음 시작하는 센서키모 카르비넨,테로 카르비넨 지음임지순 옮김 / 13,000원

세상을 수치로 읽어내는 부품인 센서를 알려주는 책. 이 책을 통해 자신만의 프로젝트에 다양한 센서를 사용해보자.

프로젝트로 배우는 라즈베리 파이 도날드 노리스 지음 / 임지순 옮김

다양한 실전 프로젝트를 통해 라즈베리 파이를 쉽고 재미있게 배워본다.

Maker Pro 존 베이첼 지음 / 가격미정

메이커라면 반드시 읽어야 할 필수 계발서. 프로 메이커들과의 인터뷰 및 에세이 수록.

Make: 센서 키모 카르비넨, 테로 카르비넨, 빌 발토카리 지음 / 가격미정

필수 전자부품인 센서를 마이크로 컨트롤러 보드에 응용하는 방법을 담았다.

전자부품 백과사전 vol.2 찰스 플랫 지음 / 가격미정

<전자부품 백과사전> 시리즈의 두 번째 도서다.

즐거운 상상이 가득! 2015년 화제의 신간

전자부품 백과사전 vol.1찰스 플랫 지음 / 배지은 옮김 / 30,000원

취미공학에 필요한 핵심 전자부품을 사전식으로 정리한 안내서.

Zero to Maker: 누구나 메이커가 될 수 있다데이비드 랭 지음 / 장재웅 옮김 / 14,000원

일반인에서 메이커로. 날백수에서 무인 잠

수정 회사 CEO가 된 사나이, 데이비드 랭의 메이커 도전기.

처음 시작하는 센서키모 카르비넨,테로 카르비넨 지음임지순 옮김 / 13,000원

세상을 수치로 읽어내는 부품인 센서를 알려주는 책. 이 책을 통해 자신만의 프로젝트에 다양한 센서를 사용해보자.

프로젝트로 배우는 라즈베리 파이 도날드 노리스 지음 / 임지순 옮김

다양한 실전 프로젝트를 통해 라즈베리 파이를 쉽고 재미있게 배워본다.

Maker Pro 존 베이첼 지음 / 가격미정

메이커라면 반드시 읽어야 할 필수 계발서. 프로 메이커들과의 인터뷰 및 에세이 수록.

Make: 센서 키모 카르비넨, 테로 카르비넨, 빌 발토카리 지음 / 가격미정

필수 전자부품인 센서를 마이크로 컨트롤러 보드에 응용하는 방법을 담았다.

전자부품 백과사전 vol.2 찰스 플랫 지음 / 가격미정

<전자부품 백과사전> 시리즈의 두 번째 도서다.

즐거운 상상이 가득! 2015년 화제의 신간

www.hanbi t .co.kr

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