이 서평은 제이펍의 <IT 전문서 리뷰어 3기> 활동의 일환으로 출판사로부터 책을 제공받아 작성되었습니다.
IT에 입문하면 처음으로 프론트엔드, 백엔드와 같은 개발 분야를 먼저 접하게 된다.
하지만 조금만 깊이 공부해보면 이런 프론트엔드와 백엔드 시스템 모두 인프라 위에서 작동하는 것을 알게 된다.
인프라에 대한 이해 없이는 시스템이 어떻게 작동하는지, 백그라운드에서 어떤 과정이 일어나는지 전체적인 그림이 그려지지 않아 많은 부분들이 이해되지 않을 수 있다.
따라서 인프라에 대한 이해는 개발자가 시스템을 효과적으로 파악하는데 꼭 알아두어야 하는 지식들이다.
이 책은 그런 기본적인 지식들을 알기 위해 만들어져서 대학생들도 부담없이 쉽게 접근하고 읽을 수 있도록 구성되어 있다.
들어가기에 앞서, 책의 가장 앞부분에서는 3계층형 시스템의 데이터 흐름과 각 인프라 기술에 대해 간략하게 소개하고 있다.
전체적인 그림을 한 눈으로 파악할 수 있으며, 그림들을 참고하면서 책을 읽어나가는 것이 흐름을 이해하는데 큰 도움이 될 것이다.
1장 인프라 아키텍처를 살펴보자
1장에서 IT 인프라의 기본 구조와 다양한 아키텍처 모델이 소개된다.
인프라는 IT 시스템의 기반이 되는 중요한 요소로 기술적인 요소뿐만 아니라 비즈니스 요구를 충족시키기 위한 설계 방법이 설명된다.
각 장 내부에는 아래사진과 같이 Column 코너가 있어 책을 읽다 보면 궁금할 점들, 또는 부연 설명할 내용들이 적혀있다.
특히 '궁극의 아키텍처와 최적의 아키텍처'라는 칼럼에서는 이상적인 아키텍처에 대한 개념을 깊이 있게 탐구하고 있었다. 칼럼은 독자에게 "어떤 시스템이든지 요건은 거의 비슷하다. 그러면 하나의 만능 아키텍처를 가지고 모든 프로젝트에 적용할 수는 없을까?", "최적의 아키텍처 하나만 있다면 굳이 설계를 하지 않아도 되지 않을까?"라는 의문을 던진다.
이러한 질문들에 칼럼은 명확한 'NO'로 대답한다. 모든 아키텍처와 설계 요소에는 반드시 장점과 단점이 공존하기 때문에 가장 적절한 선택을 하는 것이 중요하다고 말한다.
가장 큰 제약 중 하나로 시스템 도입 비용을 꼽는다. 예를 들어 100만 명이 사용하는 대규모 웹 서비스와 사내에서 10명이 사용하는 시스템의 예산은 큰 차이가 있다고 설명한다.
그러나 사용자의 관점에서 두 시스템은 모두 중요하다. 많은 현장에서 비용 문제가 대두되는 가운데 시스템의 가장 중요한 장점을 살리고 단점을 최소화하는 방향으로 결정을 내려야 한다고 강조한다.
이어서 집약형과 분할형 아키텍처의 특성과 적용 가능한 환경이 비교되어 설명된다.
집약형 아키텍처는 관리의 단순성과 고성능을 제공하지만 확장성에는 한계가 있고 분할형 아키텍처는 확장성과 유연성은 뛰어나나 관리가 복잡해질 수 있다는 점이 제시된다.
수직 분할형 아키텍처는 클라이언트-서버 모델과 3계층 아키텍처를 포함하며 각 아키텍처의 구성과 장점이 설명된다.
수평 분할형 아키텍처에서는 시스템을 같은 기능을 하는 여러 단위로 나누어 효율적인 리소스 분산과 시스템 안정성 향상 방법이 소개된다.
마지막으로 지리 분할형 아키텍처에서는 스탠바이형 아키텍처와 재해 대책형 아키텍처가 조직의 비즈니스 연속성을 보장하는 중요한 요소로 다루어진다.
이 섹션에서는 이러한 구조의 설계와 장점, 구현 과정에 대한 설명을 통해 실제 재해 상황에서 시스템이 어떻게 반응해야 하는지에 대한 이해를 돕는다.
1장은 전반적으로 IT 인프라 아키텍처의 기본을 세우는 부분으로 느껴진다. 다양한 아키텍처를 이해하고 그 지식을 바탕으로 시스템을 효율적으로 설계하고 최적화하는 능력을 기를 수 있도록 구성되어 있다.
2장 서버를 열어보자
2장은 물리 서버의 세계를 펼쳐 보여준다. 이 장에서는 서버의 외관과 설치 장소를 시작으로 내부 구성 요소의 역할과 중요성을 설명한다.
서버가 데이터 센터 내에서 어떻게 배치되는지 실제 작업 환경에서는 어떤 모습인지를 보여준다.
CPU 섹션에서는 컴퓨팅의 핵심이자 서버 성능에 결정적인 영향을 미치는 부품에 대해 논한다.
메모리 섹션에서는 서버의 데이터 임시 저장소로서의 중요한 기능들을 상세하게 다룬다. 메모리 관리가 시스템 성능에 미치는 영향과 메모리의 신속한 데이터 접근, 처리 능력이 서버 성능을 어떻게 좌우하는지 분석한다.
추가적으로 메모리 인터리빙, 메모리 컨트롤러, 채널이 각각 어떤 역할을 하는지에 대해 설명함으로써 메모리의 다단계 접근 방식이 CPU 처리 속도를 최적화하는 방식을 보여준다.
I/O 장치 섹션은 서버 내 데이터의 흐름과 처리를 책임지는 요소들인 하드 디스크 드라이브, 네트워크 인터페이스, I/O 제어 시스템에 대해 이야기한다.
서버의 데이터 처리 방식에 대한 설명에서는 하드디스크 드라이브가 데이터를 직접 교환하는 대신 캐시를 통해 이루어지는 과정을 강조한다.
이 방법은 데이터 교환의 효율성을 높이고 전체적인 시스템 성능을 개선하는 중요한 메커니즘이다.
버스 섹션은 데이터의 서버 내 데이터 전송의 경로로서의 역할을 하는 버스와 대역폭에 초점을 맞춘다.
대역폭이란 (전송 가능한 데이터의 폭) X (전송 빈도)로 정의되며, 서버의 데이터 통신 속도와 연관된다.
이 흐름에서 중요한 것은 CPU와 주변 장치 간 데이터 전송에 병목 현상이 발생하지 않도록 하는 것이다. 시스템의 전반적인 효율성을 유지하기 위해 필수적인 요소이다.
특히 마지막 부분에서 저자는 “하드웨어가 어떤 식으로 동작하는지 이해한 후 이것을 바탕으로 새로운 구조나 시스템을 만드는 것이 진정한 IT 엔지니어라고 생각한다.” 라고 말한다.
인프라에 대한 본격적인 설명을 하기에 앞서 왜 하드웨어의 기본적인 부분들을 먼저 다루는지 이해가 되는 대목이다.
3장 3계층형 시스템을 살펴보자
3장에서는 3계층형 시스템의 논리 구성, 커널, 서버 구조에 대해 설명하고 있다. 특히 커널 부분에서는 운영체제 수업에서 배운 시스템 콜들이 어떻게 활용되는지, 그 이전에는 프로세스와 스레드에 대한 개념이 소개된다.
시스템의 각 계층이 어떻게 상호작용하는지 이해하고 커널을 통한 자원 관리와 프로세스 스케줄링의 중요성을 강조한다.
웹 데이터 흐름도 섹션에서 웹 서버에서 요청을 받아 AP 서버에 질의하는 과정까지의 흐름을 전체적으로 살펴볼 수 있다.
AP 서버와 DB 관련 용어들이 나오며 어떻게 웹 데이터가 처리되고 흘러가는지 대략적으로 파악할 수 있다.
4장 인프라를 지탱하는 기본 이론
4장은 운영체제, 자료구조와 같은 기본적인 이론을 바탕으로 데이터베이스가 어떻게 구동되는지를 소개하고 있다.
학교에서 배운 이론이 실제 개발 현장에서 어떻게 적용되는지 이해할 수 있어, 특히 취업을 준비중인 백엔드 개발자라면 정말 도움이 될 것 같다.
프론트엔드와는 직접적인 연관이 적을 수 있지만 기초 지식을 프론트엔드 기술과 연결지어 공부하게 된다면 분명 큰 도움이 될 것이다.
첫 번째에서는 직렬과 병렬 처리에 대해 논의하고 있다. 직렬 처리에서는 속도 향상의 한계가 있기 때문에 해결책으로 병렬 처리가 도입되었다.
하지만 병렬 처리 역시 무작정 실행한다고 해서 항상 효율이 향상되는 것은 아니다.
병렬 처리 과정에서 합류점, 직렬화 구간, 분기점으로 인해 병목 지점이 생길 수 있으므로 주의 깊게 관리해야 한다고 강조한다.
또한 오버헤드를 감안하더라도 효과적인 경우에만 병렬화를 시행해야 한다고 보충 설명하고 있다.
두 번째에서는 동기와 비동기 작업의 차이점에 대해 설명하고 특히 DBMS에서 사용되는 비동기 I/O에 대해 자세히 다룬다.
비동기 I/O는 요청을 병렬로 처리해 시스템의 반응 시간과 효율성을 향상시킬 수 있다.
DBMS의 성능은 운영체제의 라이브러리나 시스템 콜을 어떻게 사용하느냐에 따라 달라질 수 있다.
I/O 작업의 병렬 처리를 가능하게 하는 수단으로 비동기 I/O 사용을 설명한다.
그 다음 부분에서는 자료구조의 큐가 디스크 I/O에서 어떻게 활용되는지를 다룬다.
큐를 사용함으로써 요청들을 효율적으로 순서대로 처리할 수 있으며 행렬이 생길 때 요청의 처리를 최적화하기 위해 큐를 활용하는 방법들이 설명된다.
I/O 작업의 관리를 더욱 효과적으로 만들어 성능 병목을 방지하고 전체 시스템의 처리량을 향상시킬 수 있다.
다음으로는 운영체제에서 수업에서 배우는 배타적 제어에 기법에 대해 설명하고 있다.
배타적 제어는 동시에 여러 작업을 처리할 때 데이터의 일관성을 유지하기 위해 사용되며 DBMS, OS 커널, 클러스터 데이터베이스 등에서 활용된다.
DBMS에서는 스핀 락, 슬립 락, 어댑티브 락과 같은 다양한 매커니즘이 사용되며, OS 에서는 빅 커널락이라고 불리는 하나의 스핀락을 통해 시스템 전체를 제어한다.
다음으로는 상태 저장과 상태 비저장에 대해 설명하고 있다.
컴퓨터 내부 구조 및 네트워크 통신 구조에 적용되어 서로 다른 방식으로 시스템의 동작을 결정한다.
특히 네트워크 통신 구조에서 HTTP는 기본적으로 상태 비저장 프로토콜이지만 세션 개념을 사용해서 상태 정보를 유지하고 관리할 수 있게 되어 상태 저장으로 작동할 수 있다고 설명한다.
그 다음으로는 가변 길이, 고정 길이가 소개된다. 실제 사용 예로 디스크에서 파일이 고정 길이 영역에 저장되는 방식, TCP/IP에서 데이터를 가변 길이 패킷 처리 방식이 설명된다.
데이터 저장과 관련된 효율성을 높이기 위한 선택지이고 각각의 방식이 시스템 성능에 어떤 영향을 미치는지 이해할 수 있다.
고정 길이 저장은 데이터 관리를 단순화하고 접근 속도를 빠르게 하지만 공간 활용 면에서는 비효율적일 수 있다.
가변 길이는 공관 활용에는 유리하지만 관리 복잡성이 증가할 수 있다는 점 또한 짚고 넘어갈 점이다.
서버에서 데이터 관리는 필수적이며 자료구조에 대한 이해도 중요하다.
배열과 연결 리스트의 차이점이 소개되는데 배열은 인덱스를 통한 빠른 접근이 가능하고, 연결 리스트는 요소의 추가 및 삭제가 용이하다는 장점이 있다.
실제로 사용할 때는 해시테이블을 사용해서 배열과 연결 리스트 장점을 모두 활용하는 것을 볼 수 있다.
마지막으로 탐색 알고리즘에 관해 설명하면서 특히 해시와 트리 구조에 초점을 맞춘다.
데이터베이스에서 인덱스를 사용한다고 해서 항상 유리한 것은 아니며 상황에 따라 인덱스의 사용 여부를 결정해야 한다고 강조한다.
인덱스가 없는 경우 데이터는 풀 스캔을 통해 전체를 조사하게 된다. 모두 읽어서 조사한다.
반면에 인덱스를 사용하는 경우 일반적으로 B-트리 인덱스가 사용된다.
그 중에서도 DBMS와 인메모리 DB는 사용하는 기법이 살짝 다른데, 인메모리 DB에서는 T-트리 인덱스라는 이진 트리의 한 형태를 사용하기도 한다.
한편 해시 테이블은 등호 검색에 큰 강점을 보여 데이터 양이 많아져도 검색 속도가 유지되는 장점이 있다.
5장 인프라를 지탱하는 응용 이론
5장에서는 인프라를 지탱하는 다양한 응용 이론들을 소개한다. 캐시, 인터럽트, 폴링, I/O 크기, 저널링, 복제 등 이 장에서도 운영체제 기본 원리들이 대체로 소개되고 있다.
캐시는 자주 접근하는 데이터를 빠르게 재사용할 수 있도록 해준다. 다양한 예시가 있지만 웹 서버의 부하를 줄일 수 있도록 CDN과 같은 캐시 서버를 웹 서버와 클라이언트 사이에 배치해 웹 콘텐츠를 캐시하는 구조가 널리 사용된다.
인터럽트는 외부 이벤트에 대응해 처리 성능을 최적화한다. 예시로 입출력 장치가 CPU에 신호를 보내는 것을 ‘하드웨어 인터럽트’라고 부른다.
특히 네트워크 통신에서 데이터가 도착하면 인터럽트가 발생해 데이터를 처리한다.
압축과 오류 검출 같은 이론도 소개해 데이터 전송과 저장 과정에서 조금 더 효율적인 방법을 제공한다.
압축에는 가역 압축과 비가역 압축 두 가지 유형이 있는데, 각각의 특성을 비교하면서 어떤 상황에서 어떤 유형을 사용해야 하는지에 대해 설명한다.
가역 압축은 원본데이터를 정확하게 복원할 수 있어 중요 데이터 처리에 적합하고, 비가역 압축은 데이터 크기를 더욱 줄여야 하는 경우에 유리하지만 원본 데이터의 일부를 잃을 수 있다.
추가적으로 오류 검출 같은 경우에도 데이터 전송 중 오류를 식별하기 위해 CRC$_{Cyclic \space Redundancy \space Check}$ 오류 검출 구조를 사용하는 방법도 도입되고 있음을 소개한다.
6장 시스템을 연결하는 네트워크 구조
네트워크 계층 구조에 관한 내용을 다루고 있어 네트워크 관련 수업을 들었다면 기존 지식들을 리마인드 하는 느낌으로 보면 될 것 같다.
TCP/IP 모델을 기준으로 레이어 7, 4, 3, 2의 각 계층을 소개하는데 물리 계층인 Layer 1을 제외하고 네트워크의 모든 주요 부분들에 대해 설명하고 있다.
각 계층별로 어떻게 데이터가 처리되고 전송되는지 대략적인 설명을 제공해 전체적인 흐름을 이해할 수 있게 구성되어 있다.
7장 무정지를 위한 인프라 구조
7장에서는 이중화 관리에 대한 내용들을 다루고 있어 학교에서 배운 이론 내용보다 훨씬 깊이있는 내용들을 제공한다.
이제 막 개발자가 된지 얼마 안 되었다면 처음 접하게 될 내용일 수 있어 이해하기 어려울 수도 있지만 다양한 이중화 기법과 발전 과정들을 살펴보는 것만으로도 인상적이었다.
특히 장애 발생 시 시스템의 연속성을 보장하는 전략을 설명하면서 높은 가용성을 유지할 수 있는 방법들을 자세히 다룬다.
실제 업무 환경에서 장애 대응에 필수적인 지식들을 제공해 이해하는데 도움이 된다.
8장 성능 향상을 위한 인프라 구조
마지막 장은 성능 향상에 초점을 맞추고 있다. 처음에는 시스템의 응답과 처리량에서 개선점을 어디서 찾을 수 있고 성능 지연의 원인이 되는 병목 현상 발생 지점에 대해 짚어보고 있다.
그 다음에는 병목 현상에 대해 용어적 설명을 통해 상기시키며 병목 현상을 어떻게 해결할 수 있는지 방법을 찾아본다.
병목 현상은 피할 수 없는 요소로 시스템 전체의 관점에서 목표를 설정해 지속적인 성능 개선을 위한 접근을 하는 것이 중요하다고 강조한다.
그 다음으로 3계층형 시스템의 그림을 통해 병목 현상을 시작적으로 보여준다. CPU, 메모리, 디스크 I/O, 네트워크 I/O, 애플리케이션 각 영역에서 발생하는 병목 현상이 어떻게 나타나는지 그림으로 상세히 설명한다.
총평
이 책은 IT 인프라 구조를 이해하기 쉬운 그림들과 함께 제공되어 현업 개발자부터 전공을 공부 중인 대학생들까지 모두 유익하게 볼 수 있는 책이라고 생각된다.
각 장에서는 전공 기초 지식을 실제 시나리오와 연결해 설명하고 있어, 이론과 실제 사용되고 있는 것들의 연결 부분을 잘 이해할 수 있도록 하고 있다.
특히 복잡한 시스템들을 시각적으로 잘 표현한게 이 책의 강점이라고 느껴질 정도로 그림을 통해 설명된 내용이 인상적이었다.
개발자가 되기 위해 필요한 실질적인 지식과 기술을 쌓고자 하는 대학생들에게 학문적 배경과 실무적 접근을 동시에 제공함으로써 전문성을 기르는 데 매우 효과적이다.
나 자신도 전공 지식들을 학교 수업을 통해 쌓을 수 있었지만 이 책을 통해 그 지식이 인프라에 얼마나 깊숙이 영향을 미치며 실제로 어떻게 돌아가는지 이해할 수 있는 계기가 되어 더욱 뜻깊게 느껴졌다.
'Life > 독서 기록' 카테고리의 다른 글
[서평] 트러블슈팅 개론서 - 자바 잘 읽는 법 (0) | 2024.05.12 |
---|---|
[서평] 리액트의 대항마 - 실전 스벨트 & 스벨트킷 입문 (0) | 2024.05.08 |
[서평] 팀플부터 협업까지 - 일 잘하는 팀장 (0) | 2024.04.15 |
[서평] 객체지향 입문서 - C++ 완전 정복 (2) | 2024.04.10 |
[서평] 개념부터 활용 전략과 미래 전망까지 - 멀티모달 생성 AI 인사이드 (2) | 2024.03.24 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!