[책] 그림으로 공부하는 IT 인프라 구조

책을 읽게된 배경
이직을 결심
10년 다니던 회사를 뒤로하고 이직을 결심하게 되었다. 나름 그동안 다양한 경험을 했다고 생각한다. 특히 주식,장사 등 IT업무 외적인 면에서 말이다. 그런데 이것 저것 하다보니 결국에 내가 잘 할 수 있는 분야는 IT라고 판단했다. 그리고 나서 시작한 것이 현재 블로그였다. 한동안 블로그는 방치했지만 그래도 회사에서는 본업에 충실했다. 하지만 10년가까이 일을하다 보니 매너리즘에 빠지는것도 사실이었다. 그러다 우연히 이직 기회를 얻게되었다. 임직원들이 열정이 많고 스스로 일을 찾아 한다고 알려진 회사다. 나처럼 게으른 사람에게는 환경을 바꿔서 새로운 공부를 하는것이 딱이라 생각했다.
IT 전반적인 공부를 하자
“IT 모든분야에 대한 공부를 하자”. 애초에 블로그를 만들때 생각했던 부분이다. 새로 이직한 회사에서 하게될 일도 IT인프라에 대한 보안업무이다. IT전반에 대한 깊은 이해가 필요하다고 생각했다. 입사까지는 아직 시간이 조금 남아있고 몸 풀자는(?)마음으로 책을 구매했다. 예전에 회사 시험때문에 구입했던 “그림으로 공부하는 오라클 구조”와 같은 출판사이다. 그 당시 본질에대해 알기쉽게 설명한다는 느낌을 받았었다. 아는 내용이지만 마음을 다잡는다는 가벼운 느낌으로 책을 읽었다.
책 내용
전반적인 흐름
전문지식이 없더라도 책을 따라가다보면 자연히 구조파악과 왜 이러한 기술이 있는지를 알게된다. 맨 처음장에서 개략적인 설명으로 구조를 말한다. 그 다음 깊숙히 들어가서 물리적 서버구조를 설명하고 각각의 서버의 역할, 인프라의 기본/응용이론, 네트워크 구조 등 점차 확장하며 설명한다. 각 챕터마다 앞선 챕터에서 사용하던 그림을 그대로 사용하고 살을 붙여 쉽게 파악하고 복습할 수 있도록 되어있다. 제목 그대로 그림만 보더라도 쉽게 IT 인프라 구조를 파악할 수 있는 것이 인상적이다.
1. 인프라 아키텍처를 살펴보자
IT 인프라구조를 크게 3가지 관점에서 정리한다. 첫번째는 집약형vs분할형 아키텍처. 말그대로 하나의 집중된 서버에서 일을 처리하느냐 분산에서 처리하느냐이다. 집약형은 구조가 단순하고 관리가 편하며 안정성이 높지만 유지비용이 높고 확장성이 떨어진다. 최근들어 대부분의 서비스는 분할형으로 제공된다. 많은 노하우가 쌓이면서 적은 비용으로도 안정성 높은 서비스를 제공하기 때문이다. (은행 메인프레임 vs x86계열 서버) 두번째는 수직분할형vs수평분할형 아키텍처. 수직분할은 하나의 서버에서 하던일을 역할을 분담해서 여러서버가 하는것이다. 대표적인 구조가 3계층(프레젠테이션,애플리케이션,데이터) 구조이다. 상용 서버에 대입하면 WEB서버,AP서버,DB서버가 되겠다. 수평분할은 똑같은일을 하는 서버를 여러개로 늘려 처리하는 부하분산을 말한다. 전문용어로 sharding(샤딩)이라고 한다. 마지막은 지리분할형 아키텍처. 장애가 발생했을때 서비스 복구 및 연속성을 가능하게 하는 구조이다. 고가용성(High Availability)를 높이는 액티브-스탠바이 구성, 특정 데이터센터에 재난,재해가 발생했을때를 대비한 DR(Disaster Recovoery)구성, 물리적 구성을 생각하지 않고 서비스만 고려하는 클라우드 구성 등이 있다.
2. 서버를 열어보자
서버와 서버실의 실물 구성을 그림을 통해 설명한다. 그리고 메모리,CPU,HDD,네트워크 인터페이스 등 서버를 구성하는 요소들을 실물 사진과 동작방식에 대한 그림으로 알기쉽게 설명한다. 또한 각각의 구성들끼리의 연결 통로인 버스(BUS)에 대해서도 심도있게 알려준다.
3. 3계층형 시스템을 살펴보자
앞서 1장에서 설명한 수직분할형 구조의 대표예인 3계층형 시스템을 설명한다. 시스템 설명에 앞서 프로세스vs쓰레드의 차이점과 OS커널에 대해 설명한다. 이 개념에 덧 붙여 3계층 서버의 데이터 흐름을 쭈욱 나열한다. 클라이언트PC -> WEB서버 -> AP서버 -> DB서버 -> AP서버 -> WEB서버 -> 클라이언트PC. 이 처럼 하나의 웹 서비스 데이터 흐름을 그림과 함께 보여준다.
4. 인프라를 지탱하는 기본 이론 / 5. 인프라를 지탱하는 응용 이론
인프라를 이해하는데 필요한 이론들을 설명한다. 그리고 각각의 기술들이 실제 3계층 시스템의 어느 부분에서 사용되고 있는지 예시를 들어 설명한다. 각 이론에 대해서 다음과 같은 구조로 설명한다. “ㅇㅇ이란? -> 어디에서 사용되나? -> 정리”. IT업무를 하는 사람이라면 누구나 들어봤을 익숙한 개념과 단어들이지만, 좀 더 또렷하게 해당 개념이 왜 사용되는지 어디에 사용하는지 정리해주니 좋았다. 개인적으로 가장 재미있게 읽었던 파트이다. 복습할때는 그림과 정리부분의 장점,단점만 읽어도 좋다.
6. 시스템을 연결하는 네트워크 구조
앞서 설명한 3계층 시스템 구조에서 각각의 시스템끼리 연결하는 네트워크에 대한 설명이다. 처음부터 끝까지 계층구조를 설명한다. TCP/IP, OSI7계층을 중심으로 각각의 계층별로 어떠한 역할을 하는지 어떠한 프로토콜로 통신을 하게되는지 설명한다.
7. 무정지를 위한 인프라 구조
인프라의 핵심, 꽃이라 말할 수 있는 무정지에 대한 이야기다. 서버 내 이중화(네트워크,전원 등), 저장소 이중화, 서버 이중화(WEB,AP,DB), 네트워크 이중화(레이어 별), 사이트 이중화 등 상세히 설명한다. 이중화시 발생할 수 있는 Trade off에대해서도 운용자 관점에서 말한다. 그 후 감시, 백업에 대해서도 언급하고 있다.
8. 성능 향상을 위한 인프라 구조
성능향상 보다는 인프라 운용팀이 항상 고민하는 부분을 다양한 각도로 설명하는 듯 하다. 핵심 단어는 병목이다. 책 내용 중 “병목 지점은 반드시 존재한다”라는 말인 인상적이다. 이론상 병목이 없다는 것은 불가능하다. 최대한 그 Gap을 줄이는 것이 바로 인프라 운용자의 숙명인 듯 하다. 각각의 병목에 대한 예시는 이해는 가지만 실제 업무에 적용하는데는 익숙함이 필요해 보인다.
3. 책을 읽고 추가로 궁금한 부분
- AJAX 동기/비동기, DBMS 동기/비동기
- vmstat 큐
- 데이터구조 배열/링크드리스크 : RDBMS, KVS 구조
- TCP 흐름제어, 폭주제어 (윈도우사이즈)
- RAID구조