개발이나 운영에서 리눅스를 사용하며 더 깊이 파고들기 위한 체계적인 접근 방법이 필요하다면 이 책은 바로 여러분을 위한 것이다. 이 책의 저자인 마이클 하우센블라스는 오픈소스 운영체제 리눅스를 활용해 작업 흐름을 향상시키는 팁과 요령을 제공한다. 또한 개발부터 업무 관련 작업에 이르기까지, 개발자, 소프트웨어 아키텍트, 사이트 신뢰성 엔지니어 등 어느 누구에게든 여러분 각자의 일상적인 필요에 맞게 리눅스를 사용하는 방법을 집중해서 다룬다. 모던 리눅스 터미널과 셸을 직접 실습해보거나 작업 부하를 관리하는 방법도 설명한다. 또한 컨테이너, systemd, 모던 파일시스템, 그리고 플랫카나 보틀로켓 같은 변경 불가한 배포판을 사용해 리눅스 애플리케이션을 실행하는 방법도 살펴본다. 이 책의 추가 자료는 다음에서 확인할 수 있다.
- 관련 기사와 도구의 링크 모음: references
- 코드와 구성 파일: Code snippets and configuration files
모던 리눅스(Modern Linux)라는 용어의 ‘모던’이라는 단어가 대체 무엇을 의미하는지를 이해하고 지난 30여 년간 벌어진 중요한 사건과 발전 단계를 살펴본 후 리눅스의 배경을 개괄적으로 이야기한다. 또한 일반적으로 운영체제의 역할이 무엇이며 리눅스가 어떻게 이 역할을 수행하는지를 배운다. 또한 리눅스 배포판과 리소스 가시성(resource visibility)이 무엇을 의미하는지 간략하게 살펴볼 예정이다.
- 모던 환경이란 무엇인가
- (지금까지의) 리눅스 이야기
- 운영체제는 왜 필요한가
- 리눅스 배포판
- 리소스 가시성
리눅스 커널이 무엇인지, 커널 구성 요소뿐 아니라 전체로서 이를 어떻게 생각해야 하는지 등을 살펴본다. 전체 리눅스 아키텍처와 리눅스 커널이 수행하는 필수 역할에 대해 배운다. 또한 전반적인 리눅스 아키텍처와 리눅스 커널이 수행하는 필수 역할에 대해 알아본다. 이 장의 주요 내용 중 하나는 커널이 모든 핵심 기능을 제공하지만 커널이 그 자체로 운영체제는 아니며 그저 운영체제의 매우 중요한 부분에 불과하다는 점이다.
- 리눅스 아키텍쳐
- CPU 아키텍처
- 커널 구성요소
- 커널 확장
터미널, 즉 명령행 인터페이스(command-line interface)(이하 CLI)를 사용할 수 있는 셸을 이용해 리눅스와 상호작용하는 데 중점을 둔다. 그리고 피시 셸(Fish Shell)같이 현대적이고 인간 친화적인 셸을 살펴본 후 로컬이나 원격에서 여러 세션으로 작업할 수 있게 해주는 터미널 멀티플렉서(tmux)를 사용해 CLI에서 효과적으로 작업하는 방법에 대한 주제로 넘어간다. 마지막에서는 셸에서 스크립트를 사용해 작업을 자동화하는 데 집중한다.
- 인간 친화적인 셸
- 터미널 멀티플렉서
- 스크립팅
사용자와 함께 일반적으로 리소스, 특히 파일에 대한 접근 제어에 대해 살펴본다.
- 사용자
- 권한
- 고급 권한 관리
- 우수 사례
파일과 파일시스템에 집중해 “모든 것이 파일이다”라는 추상적 개념을 리눅스가 구현하는 방법을 살펴본다. 다음으로 커널이 프로세스나 장치에 대한 정보를 노출하는 데 사용하는 특수 목적 파일시스템을 알아본다. 또한 주로 문서 등과 연관되어 사용하는 일반 파일과 파일시스템을 살펴본 후 파일시스템의 옵션들을 비교하고 일반적인 작업들을 살펴본다.
- 가상 파일시스템 (VFS)
- 의사 파일시스템
- 일반 파일
리눅스의 애플리케이션을 알아본다. 또한 리눅스가 어떻게 시작되고 우리가 의존하는 모든 서비스를 제공하는지를 다룬다. 그런 다음 패키지 관리로 이동해 대략적인 애플리케이션 공급망에 대해 검토해보고 서로 다른 부분이 무엇인지 확인해본다. 이후에는 컨테이너가 무엇이고 어떻게 작동하는지에 초점을 맞춘다. 6장을 마무리하면서 특히 데스크톱 환경에서 리눅스 앱을 관리하는 현대적인 방법도 살펴볼 것이다.
- 리눅스 시작 프로세스
- 리눅스 애플리케이션 공급망
- 패키지와 패키지 관리자
- 컨테이너
- 최신 패키지 관리자
리눅스 네트워킹에 대해 자세히 설명한다. 현대 환경에서 리눅스가 제공하는 네트워크 스택은 필수 구성요소로서, 이게 없다면 할 수 있는 일이 별로 없다. 클라우드 공급자의 인스턴스에 접근하거나 웹을 검색하거나 새 앱을 설치하려 할 때도 말이다.
- TCP/IP 스택
- DNS
- 애플리케이션 계층 네트워킹
- 고급 네트워크
우리가 정보에 입각한 결정을 내릴 수 있도록 리눅스와 애플리케이션이 생성하는 다양한 시그널을 수집하고 사용하는 방법에 관한 내용을 다룬다. 예를 들면 프로세스가 소비하는 메모리 양을 파악하거나, 디스크 공간이 얼마나 빨리 소진되는지를 알아내거나, 보안상의 이유로 맞춤 이벤트에 대한 알림을 받는 등 말이다. 즉 우리는 커널에서부터 사용자를 대면하는 부분까지 스택 전체에서 어떤 일이 일어나는지에 대해 알 수 있어야 한다. 각 작업에 적합한 도구를 알고 사용할 수만 있어도 어느 정도는 해결되는 일이긴 하다.
- 로깅
- 모니터링
- 고급 관측가능성
이 마지막 장은 약간 번잡하다. 가상 머신부터 보안, 그리고 리눅스를 사용하는 새로운 방법에 이르기까지 다양한 주제를 다룰 것이다. 9장의 주제에 공통점이 있다면 대부분 특정 사용 사례를 염두에 두거나 전문적인 설정에서 필요한 경우에만 관련이 있다는 점뿐이다.
- 프로세스 간 통신 (IPC)
- 가상 머신
- 모던 리눅스 배포판
- 선별된 보안 항목
- 그 밖의 유망한 제품군
일반 작업에 활용 수 있는 레시피 목록을 모았다. 이는 내가 오랜 시간 동안 수집한 레시피의 일부로서 자주 실행하고 참고용으로 쓰려고 수집한 것들이다.
모던 리눅스 도구와 명령에 중점을 둔다. 일부 명령은 기존 명령의 드롭인 교체이고 그 밖의 명령들은 새로 생긴 것이다. 여기에 나열된 대부분의 도구는 사용이 간편하며 컬러 출력값 사용을 비롯한 사용자 경험(UX)을 개선한 것이다.