디자인을 배우는 가장 좋은 방법은 예제에 있고, 소프트웨어 디자인의 가장 좋은 예는 프로그래머가 직접 사용하는 도구에 있다!
소프트웨어 디자인을 배우는 가장 좋은 방법은 다양한 예제를 연구하는 것입니다. 그리고 프로그래머들이 일상적으로 사용하는 도구들에서 뛰어난 디자인 예제를 찾을 수 있습니다. 이 책에서는 프로그래머들이 사용하는 도구들의 소규모 버전을 만들어 이들을 명확히 이해하고 경험 많은 프로그래머들이 어떻게 사고하는지에 대한 통찰을 제공합니다. 파일 백업 시스템, 테스트 프레임워크, 정규 표현식 매처, 브라우저 레이아웃 엔진, 아주 작은 컴파일러 등 다양한 사례를 통해 공통 설계 패턴을 탐구하고, 코드의 테스트 용이성이 재사용 용이성으로 이어짐을 보여주며, 디버거, 프로파일러, 패키지 매니저, 버전 관리 시스템이 어떻게 작동하는지 이해하여 이를 더 효과적으로 활용할 수 있도록 돕습니다.
또한 이 도서는 저자가 소프트웨어 디자인을 교육하기 위한 교재로서 처음 집필된 도서로, 소프트웨어 관련 학부 수업 교재로 적합합니다. 예시가 과도하게 추상적이지 않아 이해가 쉬우며, 연습 문제의 난이도가 마냥 낮지 않아 수업 후 과제로 사용하기 좋습니다.
* 주요 내용
CHAPTER 1 소개
이 책의 독자 대상, 사용 기술, 도서 구성, 책의 집필 동기 등을 소개하는 챕터입니다.
CHAPTER 2 시스템 프로그래밍
자바스크립트의 핵심 요소인 비동기 실행과 깊은 관련이 있는 콜백 함수를 배우고, 익명 함수 및 파일의 선택, 복사를 배우는 챕터입니다.
CHAPTER 3 비동기 프로그래밍
콜백 함수를 개선하여 비동기 프로그래밍을 더 쉽게 만들어 주는 기능인 프로미스와 해당 기능의 작동 방식을 설명하고, 프로미스와 동일한 핵심 기능을 제공하는 클래스를 직접 만들어 프로미스의 상세한 사용 방법을 배우는 챕터입니다.
CHAPTER 4 유닛 테스트
소프트웨어의 정상 작동을 확인하는 유닛 테스트를 작성하고 실행하는 도구의 사용법을 배웁니다. 유닛 테스트의 구성, 등록, 실행, 보고 및 인터페이스를 구현하는 방법까지 전반적으로 다루는 챕터입니다.
CHAPTER 5 파일 백업
해시를 이용한 파일 식별 방법과 백업 방법, 백업 파일 추적 및 테스트 방법을 소개하는 챕터입니다.
CHAPTER 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 가상 머신
자바스크립트가 변환되어 실행되는 과정을 이애할 수 있도록 프로세서를 시뮬레이션하여 실습하는 챕터입니다. 가상머신 하에서의 프로그램 실행과 데이터 저장, 어셈블러 프로그램의 구조 등을 배웁니다.
CHAPTER 20 디버거
디버거의 작동 원리를 이해하기 위해, 간단한 디버거를 만들어 프로그램들을 테스트해 보는 챕터입니다.
CHAPTER 21 결론
모든 내용을 마무리하는 챕터입니다.
* 추천사
소프트웨어 디자인을 배우는 가장 좋은 방법은 다양한 예제를 연구하는 것입니다. 그리고 프로그래머들이 일상적으로 사용하는 도구들에서 뛰어난 디자인 예제를 찾을 수 있습니다. 이 도서는 프로그래머들이 사용하는 도구들의 소규모 버전을 만들어 이들을 명확히 이해하고 경험 많은 프로그래머들이 어떻게 사고하는지에 대한 통찰을 제공합니다. 파일 백업 시스템, 테스트 프레임워크, 정규 표현식 매처, 브라우저 레이아웃 엔진, 아주 작은 컴파일러 등 다양한 사례를 통해 공통 설계 패턴을 탐구하고, 코드의 테스트 용이성이 재사용 용이성으로 이어짐을 보여주며, 디버거, 프로파일러, 패키지 매니저, 버전 관리 시스템이 어떻게 작동하는지 이해하여 이를 더 효과적으로 활용할 수 있도록 돕습니다.
이 책의 자료는 자기 주도 학습, 소프트웨어 설계에 관한 학부 과정 또는 현업에서 일하는 프로그래머를 위한 집중 주간 워크숍의 핵심 자료로 사용할 수 있습니다. 각 장에는 크기와 난이도가 다양한 연습 문제가 포함되어 있으며, 현대 자바스크립트의 기본 지식이 요구되지만, 언어의 고급 기능은 도서에서 소개하면서 설명하고 있습니다.