본문 바로가기

book

Release의 모든 것

매우 유명한 책입니다. 지금 소개드리는 책은 [2판] 입니다.

부제 : 대규모 웹 분산 시스템을 위한 운영 고려 설계

 

첫버전은 2007년에 나온 아래 "Release It 릴리스 잇 성공적인 출시를 위한 소프트웨어 설계와 배치" 아래 책입니다.

왼쪽에 출간된 책이 초판, 오른쪽이 이번에 출간된 2판의 표지입니다.

정말 오랜만에 다음 개정판이 나온것 같습니다. 

 

번역을 담당하신 분은 "박성철"님으로 여러 활동들을 통해서 다양한 SW개발에 긍정적인 선한 영향력을 제공해주시는 분이십니다.

세미나를 통해서 들었는지, 어떤 글에서 본것인지는 잘 기억이 나지 않지만, "이책이 너무 좋은 책이라서 바쁘신 와중에 시간을 쪼개어서 번역을 진행하셨다고 들었습니다." 그만큼 애정이 가고, 좋은 책이라는 애정이 느껴졌습니다.

 

 

 

■ 추천사만 보아도 느낌이 다른책

· 서비스를 3년이상 운영해봤다면, 이책의 내용에 공감을 할수 있습니다.

· 번역을 누구나 하고 싶었던 책

· 모든말을 제처두고, 반드시 이책을 읽어야 합니다.

· 필요할때 마다 다시 꺼내서 한번 더 읽으세요

· 소프트웨어 출시 전 검점목록 같은책

· 시니어 개발자로 도약하기 위해 반드시 알아야할 내용

· 현실에서 잘 동작하는 프로그램을 만드는 방법

· 해결할 문제가 무엇이고, 어떻게 그 문제를 해결할수 있는지

 

■ 책의 구성

· 책은 총 4부로 구성됩니다.

· 1부 : 안정성 구축

 - 시스템이 작동을 유지하면서, 멈추지 않게 할 방법

· 2부 : 운영 고려 설계

 - 1부 안정성 다음에 지속적으로 운영하기 위한 방법

· 3부 : 시스템 전달

 - 배치(deployment)를 뜻하는 의미로 1판과 동일하게 배포가 아닌 배치로 변역하셨습니다.

    고객에 피해를 주지 않고, 배치를 하는 것을 하는 방법

· 4부 : 쳬계적 문제 해결

 - 시간이 지남에 따라 성장하고 유연하게 적응하는 시스템을 만드는 방법

 

· 운영환경의 현실

내용중에 우리는 QA부서의 테스트를 통화하는 것을 목표로 삼는다.

이 글이 주는 울림이 많이 있었습니다.  실제 QA를 통해서 기능적인 결함을 잘 찾고, 품질을 높이는 것은 분명한 사실입니다.

하지만, 우리가 만드는 서비스에 대해서 목표에 대해서 다시한번 생각해보고, 어떠한 주안점을 가지는 방향이 맞는지 알게 됩니다.

 

· 4장에서는 "안정성 안티패턴"에 대해서 설명하고 이어서 5장에서는 안티를 제거한 "안정성 패턴"을 설명합니다.

시스템들이 통합의 구성으로 연결되는 구조에서는 데이터의 input의 출처가 다양화 될수 밖에 없다. 이러한 시점에 우리는 장애시 발생될수 있는 연쇄반응에 대해서 고려해야 한다.

사용자가 늘어난다는 것은 트래픽이 늘어난다는 것이고, 이것은 기존에 구성된 시스템의 처리능력이 해당 요청을 처리할수 있는지 명확히 판단할수 있어야 한다. 시간단 처리 최대량에 대해서 알고 있어야 한다는 점이다. 

자연스럽게 물리적인 내부 메모리를 이용하는 방식에서 외부 메모리 시스템(멤캐시드, 레디스)와 같은 데이터 구조 서버를 고려하게 되며

이것은 지나친 서비스 비용이 발생하는 부분은 아닌지 고려해야 되는 부분이다.

· 불쾌한 사용자, 해로운 사용자에 대한 부분은 우리가 어떠한 부분을 고려해야 하는지 안내되어 집니다.

글의 중간중간 현업에서 고민되거나 맹목적으로 좋다고 사용하는 것에 대해서 고려해야 하는 글들이 있습니다.

 

라이브러리, 자기부정 공격, 공유자원, 처리능력 불균형, 도그 파일, 응답지연등에 대해서 우리가 구성한 시스템에서 나타날수 있는 다양한 현상을 설명합니다.

· 5장에서는 " 안정성 패턴"으로 우리가 시스템, 서비스를 개발할때 주의 깊게 보아야 하는 부분입니다.

시간제한(응답시간에 대한 제한을 적용하라), 회로 차단기(문제가 있으면 호출을 멈추어라), 격벽(유용한 분할 수준을 선정해서, 서비스의 일부분이라도 유지될수 있는 구조를 만들어라), 정상 상태에 대한 데이터, 로그, 캐시에 대한 처리 기준, 빠른 실패(느린 응답에 대한 빠른 노티)

파손방지, 핸드셰이킹, 테스트 하네스, 결하분리 미들웨어 등등 서비스를 운영할때 모두 다를 고려할 필요는 없지만, 서비스 구성에 대한 정의를 내릴수 있고 필요한 부분은 부분적으로 도입을 하는 올바른 방향을 제시합니다.

 

 

■ 소스 코드, 실제 분석 내용을 통한 reference

· 실제 필자분의 경험하신 사례를 통해서, 발생한 이슈 및 그에 대한 대응책, 해결방안의 내용을 보면서 실제 사이트 담당자의 입장에서 관련 이슈를 같이 분석해보는 생각이 듭니다. 발생된 사이트 및 관련 이슈는 단순한 범위가 아니고 실제 많은 사용자들이 사용하는 서비스의 이슈에 대해서 설명되어 집니다.

· 코드적으로 분석이 필요한 부분은 코드를 예시로 구성됩니다.

 

 

· 이론적인 부분에 대한 설명도 예시를 들어 구성되어 있습니다.

 

 

· 개념, 구조가 필요한 부분에 대한 서비스흐름형태가 설명되어 집니다.

 

 

 

■ 운영 고려 설계

· 이 단어가 모두 좋은것 같습니다. 2부의 제목인데 우리는 실제적으로 운영환경에서 장애를 발생안하고, 안정적인 요구사항을 서비스 하기 위해서 고민하고, 개발을 합니다. 단순한 개발이 아니라, "운영을 고려한 설계"는 궁극적으로 우리가 나아가는 방향과 일치하는것 같습니다.

 

· 실제 일어난 사례를 통해서, 우리도 저자분과 함께 해당 사이트에서 일어나는 일을 경험해보고 우리는 어떠한 fact를 고려하고, 파악할수 있는지 상세하게 느낄수 있습니다.

 

· 운영고려설계의 개념은 "운영문제를 최우선고려사항"으로 생각한다는 뜻이다.

개발환경과 매우 다른 운영네트워크가 포함되고, 로그, 모니터링, 운영제어, 보안도 포함된다., 운영담당자의 입장의 설계도 포함된다.

7장 "기반" chapter에서는 우리가 아는 데이타센터 IDC와 클라우드도 포함되어서 설명됩니다. 1판에서는 클라우드에 대한 부분이 없었지만 2반에서는 클라우드 환경에서 대해서도 추가되어서 많이 사용하고 있는 AWS등의 서비스를 이용할때의 고려점도 언급되어 있습니다.

- 네트워크 인터페이스와 이름, 다중네트워크 프로그래밍, 물리 호스트, 가상머신, 컨테이너, 클라우드 내 가상머신, 클라우드 내 컨테이너에 대한 부분이 있는데, 우리 소속이 인프라를 담당하는 부서가 아니라고 한다고 해도, 장애의 최초 보고는 사용자 화면을 이용하는 접점인 개발부서로 처음 오기 때문에 대한 부분도 다른 부서의 영역이 아닌, 원인을 찾는 모든 부서의 영역이 된다고 생각합니다.

8장 "프로세스" 부분은 개발 인스턴스 입장에서 초첨을 맞추는데, 이러한 개발젹인 개발의 효과를 높이고, 구성을 어떻게 하고 로그 기록에 대한 위치, 수준에 대해서 고민하게 됩니다.

9장 "상호연결"을 통해서 인스턴스 들이 함께 연결되어 하나의 시시템이 되어야 하는데, 이러한 방법에 대한 해법을 살펴볼수 있습니다. 

DNS를 활용한 연결, 서버 부하 분산, 가용성등 다양한 관점으로 평소 잘 신경쓰지 않았던 부분을 볼수 있었습니다.

사용자가 많아지만 고민하게 되는 부하분산에 대해서, 소프트웨어, 하드웨어 방식으로 부하를 분산할때 사용되는 프록시 서버, 알고리즘등에 대해서, 하드웨어는 상용장비의 예시를 통해서 처리하는 방법등 생각의 폭을 넓혀줍니다.

10장에서는 "제어 평면" 이라고 되어 있어서 어색했는데, 각종 기능 및 서비스들을 올바른 위치에 놓고, 어느정도 일관된 젠체로 엮는 부분을 말합니다. 책에서 언급하는 점검 목록은 아래와 같은 사항입니다.

 

· 11장 보안 부분에서는 OWASP에서 나온 상위 10개의 개념에 대해서 설명합니다. 보안취약점 검사를 통해서 나온 결과에 대해서 의도를 파악하지 못하고 수정을 하지 말고, 실제 중요한 취약점 공격의 원리를 설명해주고 있어서, 이해가 쉽게 설명되어집니다. AWS클라우드 사용시에 활용하는 방법도 함께 포함되어 있습니다.

 

■ 시스템 전달

· 3부에서는 우리가 운영환경에서 필수적이 요소들로 구성되어 있습니다. 배치(배포), 버전관리에 대해서 다룹니다.

배치는 서비스를 운영환경에 올리는 과정이기 때문에 고려해야 할 사항이 매우 많고, 그 순서와 구성도 고려할게 많습니다

배치를 하면서 기존 캐시의 전략은?, 장애 발생시 롤백에 대한 계획은? 테이블 스키마가 기존에 있는경우, 없는 경우등에 대해서 고려 하다보면 그 난이도는 매우 높아집니다. 또한 이러한 부분은 언어적인 제약이 있는 부분도 있기 때문에 책을 통해서 좋은 방향성 및 지금 배포시스템에 도입이 필요하거나, 주의해서 추가해야 하는 부분을 파악해볼수 있습니다.

버전관리에 대해서는 git, svn같은 형상관리의 버전을 의미하는 것이 아닌, API의 버전과 같은 버전에 대해서 설명합니다.

 

■ 체계적 문제 해결

· 4부에서는 평소 업무에 한번은 경험해보았을만한 다양한 사례연구 및 Agent가 제시됩니다. 

최정점검과 출시, QA지향, 부하테스트, 테스트 간극 등등 저도 평소에 고민하던 부분이라서 현실감있게 다가왔습니다.

· 절차와 조직, 팀의 규모, 서비스의 종료, 시스템 아키텍처에 대한 진화적구성, 마이크로서비스에 대한 조언등 선택과 갈등에 대한 부분은 결국 서비스를 잘 릴리즈 하고, 자원은 안정적으로 효율적으로 사용하기 위한 하나의 큰 소프트웨어 라이프사이클에 대해서 느끼게 해주고

카오스 공학적인 내용을 통해서, 앞으로 새로운 분야도 소개됩니다.

 

 

좋은 책이라는 의미가 많이 와닿은 책이였습니다.

이 책을 보고 느끼는 바가 모두 다를거 같습니다.

아는 만큼 보이고 한줄의 문장이 더 많은 고민을 하게 된다면

조금 더 나은 Release를 하고 있는 개발자, 엔지니어 분들이라고 생각되어 집니다.

스터디를 해도 좋고, 우선 필요한 부분에 대해서 부분 학습을 해도 좋은 책이라고 생각되어 집니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."