예제로 배우는 소프트웨어 디자인 (자바스크립트를 활용한 도구 기반 설명)

예제로 배우는 소프트웨어 디자인 (자바스크립트를 활용한 도구 기반 설명)

$35.07
Description
디자인을 배우는 가장 좋은 방법은 예제에 있고, 소프트웨어 디자인의 가장 좋은 예는 프로그래머가 직접 사용하는 도구에 있다!
소프트웨어 디자인을 배우는 가장 좋은 방법은 다양한 예제를 연구하는 것입니다. 그리고 프로그래머들이 일상적으로 사용하는 도구들에서 뛰어난 디자인 예제를 찾을 수 있습니다. 이 책에서는 프로그래머들이 사용하는 도구들의 소규모 버전을 만들어 이들을 명확히 이해하고 경험 많은 프로그래머들이 어떻게 사고하는지에 대한 통찰을 제공합니다. 파일 백업 시스템, 테스트 프레임워크, 정규 표현식 매처, 브라우저 레이아웃 엔진, 아주 작은 컴파일러 등 다양한 사례를 통해 공통 설계 패턴을 탐구하고, 코드의 테스트 용이성이 재사용 용이성으로 이어짐을 보여주며, 디버거, 프로파일러, 패키지 매니저, 버전 관리 시스템이 어떻게 작동하는지 이해하여 이를 더 효과적으로 활용할 수 있도록 돕습니다.

또한 이 도서는 저자가 소프트웨어 디자인을 교육하기 위한 교재로서 처음 집필된 도서로, 소프트웨어 관련 학부 수업 교재로 적합합니다. 예시가 과도하게 추상적이지 않아 이해가 쉬우며, 연습 문제의 난이도가 마냥 낮지 않아 수업 후 과제로 사용하기 좋습니다.
저자

그렉 윌슨

Software Carpentry 공동 창립자, (前)전무 이사
산업계와 학계에서 35년간 활동해온 전문가로, Beautiful Code, The Architecture of Open Source Applications, JavaScript for Data Science, Teaching Tech Together, Research Software Engineering with Python 등 여러 책의 저자, 공동 저자, 또는 편집자로 참여했습니다. 또한 2020년 ACM SIGSOFT의 영향력 있는 교육자 상을 수상했습니다.

목차

서문

CHAPTER 1 소개
1.1 누구를 위한 책인가요?
1.2 어떤 도구와 아이디어를 다루나요?
1.3 이 책은 어떻게 구성되어 있나요?
1.4 이 책을 만들게 된 이유는 무엇인가요?
1.5 사람들이 이 자료를 어떻게 사용하고, 기여할 수 있나요?
1.6 도움을 준 사람들

CHAPTER 2 시스템 프로그래밍
2.1 디렉터리를 나열하려면 어떻게 해야 할까요?
2.2 콜백 함수란 무엇인가요?
2.3 익명 함수란 무엇인가요?
2.4 원하는 파일들을 어떻게 선택할 수 있을까요?
2.5 선택한 파일들은 어떻게 복사할 수 있을까요?
2.6 연습

CHAPTER 3 비동기 프로그래밍
3.1 비동기 실행은 어떻게 관리할까요?
3.2 프로미스는 어떻게 작동하나요?
3.3 작업들은 어떻게 연결할 수 있을까요?
3.4 실제 프로미스는 어떻게 다를까요?
3.5 어떻게 프로미스를 사용해서 도구를 만들까요?
3.6 더 읽기 쉽게 만들 수 없을까요?
3.7 비동기 코드에서 에러를 어떻게 처리할 수 있을까요?
3.8 연습

CHAPTER 4 유닛 테스트
4.1 유닛 테스트는 어떻게 구성해야 하나요?
4.2 테스트 등록, 실행, 보고를 어떻게 분리할 수 있을까요?
4.3 테스트 등록은 어떻게 구성해야 하나요?
4.4 어떻게 테스트 커맨드라인 인터페이스를 구현할 수 있을까요?
4.5 연습

CHAPTER 5 파일 백업
5.1 파일을 어떻게 고유하게 식별할 수 있을까요?
5.2 파일을 어떻게 백업할 수 있을까요?
5.3 이미 백업된 파일을 추적하려면 어떻게 해야 하나요?
5.4 파일을 수정하는 코드는 어떻게 테스트할까요?
5.5 연습

CHAPTER 6 데이터 테이블
6.1 데이터 테이블은 어떻게 구현할 수 있을까요?
6.2 구현 성능을 어떻게 테스트할까요?
6.3 테이블을 저장하는 가장 효율적인 방법은 무엇일까요?
6.4 이진 저장이 성능을 향상시키나요?
6.5 연습

CHAPTER 7 패턴 매치
7.1 쿼리 셀렉터를 어떻게 매치시킬 수 있을까요?
7.2 간단한 정규 표현식 매처를 어떻게 구현할 수 있을까요?
7.3 확장 가능한 매처는 어떻게 구현할 수 있을까요?
7.4 연습

CHAPTER 8 표현식 해석하기
8.1 텍스트를 어떻게 토큰으로 나눌 수 있을까요?
8.2 토큰 목록을 어떻게 트리로 변환할까요?
8.3 연습

CHAPTER 9 페이지 템플릿
9.1 우리의 템플릿 시스템에서 코드는 어떻게 보일까요?
9.2 값을 어떻게 추적할 수 있을까요?
9.3 노드를 어떻게 처리할 수 있을까요?
9.4 노드 핸들러는 어떻게 구현할까요?
9.5 제어 흐름은 어떻게 구현하나요?
9.6 이 모든 것을 어떻게 할 수 있었나요?
9.7 연습

CHAPTER 10 빌드 매니저
10.1 빌드 매니저에는 어떤 내용이 있나요?
10.2 어디서부터 시작할까요?
10.3 오래된 파일은 어떻게 찾나요?
10.4 오래된 파일을 어떻게 업데이트하나요?
10.5 제네릭 빌드 규칙은 어떻게 추가할까요?
10.6 다음으로 무엇을 해야 하나요?
10.7 연습

CHAPTER 11 레이아웃 엔진
11.1 행과 열의 크기는 어떻게 조정할까요?
11.2 행과 열의 위치는 어떻게 배치할까요?
11.3 엘리먼트는 어떻게 렌더링하나요?
11.4 엘리먼트를 맞추기 위한 줄 바꿈은 어떻게 할까요?
11.5 어떤 CSS들을 지원할까요?
11.6 연습

CHAPTER 12 파일 보간기
12.1 자바스크립트를 어떻게 동적으로 평가할까요?
12.2 파일들은 어떻게 관리할까요?
12.3 파일은 어떻게 찾나요?
12.4 코드 조각은 어떻게 삽입할까요?
12.5 삽입 외의 방법은 없을까요?
12.6 연습

CHAPTER 13 모듈 로더
13.1 네임스페이스는 어떻게 구현할까요?
13.2 모듈은 어떻게 로드하나요?
13.3 순환 종속성을 처리해야 하나요?
13.4 모듈이 다른 모듈을 어떻게 로드할까요?
13.5 연습
CHAPTER 14 스타일 체커
14.1 자바스크립트를 파싱해서 AST를 만들려면 어떻게 해야 하나요?
14.2 AST에서 무언가를 찾으려면 어떻게 해야 하나요?
14.3 어떻게 검사를 적용할 수 있을까요?
14.4 AST 워커는 어떻게 작동할까요?
14.5 AST 워커가 작동하는 다른 방식은 무엇일까요?
14.6 할 수 있는 다른 종류의 분석은 무엇일까요?
14.7 연습

CHAPTER 15 코드 제너레이터
15.1 어떻게 함수를 다른 함수로 교체할 수 있을까요?
15.2 자바스크립트 코드를 어떻게 생성할 수 있을까요?
15.3 함수가 실행되는 빈도는 어떻게 측정할까요?
15.4 함수 실행 시간을 어떻게 측정할 수 있을까요?
15.5 연습

CHAPTER 16 문서 생성기
16.1 문서 주석을 추출하려면 어떻게 해야 할까요?
16.2 우리가 다룰 입력은 무엇인가요?
16.3 이름 중복을 피하려면 어떻게 해야 할까요?
16.4 코드는 데이터다
16.5 연습

CHAPTER 17 모듈 번들러
17.1 어떤 테스트 케이스를 사용하나요?
17.2 어떻게 종속성을 찾을 수 있을까요?
17.3 어떻게 여러 파일을 안전하게 하나로 결합할까요?
17.4 파일은 어떻게 서로 액세스할 수 있나요?
17.5 연습

CHAPTER 18 패키지 매니저
18.1 시맨틱 버전 관리란 무엇인가요?
18.2 어떻게 일관된 패키지 집합을 찾을 수 있을까요?
18.3 어떻게 제약 조건을 만족시킬 수 있을까요?
18.4 어떻게 작업을 줄일 수 있을까요?
18.5 연습

CHAPTER 19 가상 머신
19.1 가상 머신의 아키텍처는 무엇인가요?
19.2 이 명령을 어떻게 실행할까요?
19.3 어셈블러 프로그램은 어떻게 생겼나요?
19.4 어떻게 데이터를 저장할 수 있을까요?
19.5 연습

CHAPTER 20 디버거
20.1 어디서부터 시작할까요?
20.2 트레이싱 디버거는 어떻게 만들 수 있을까요?
20.3 어떻게 디버거를 대화형으로 만들까요?
20.4 대화형 애플리케이션을 어떻게 테스트할 수 있을까요?
20.5 연습

CHAPTER 21 결론

부록 A
부록 B
 

출판사 서평

디자인을배우는가장좋은방법은예제에있고,소프트웨어디자인의가장좋은예는프로그래머가직접사용하는도구에있다!

소프트웨어디자인을배우는가장좋은방법은다양한예제를연구하는것입니다.그리고프로그래머들이일상적으로사용하는도구들에서뛰어난디자인예제를찾을수있습니다.이책에서는프로그래머들이사용하는도구들의소규모버전을만들어이들을명확히이해하고경험많은프로그래머들이어떻게사고하는지에대한통찰을제공합니다.파일백업시스템,테스트프레임워크,정규표현식매처,브라우저레이아웃엔진,아주작은컴파일러등다양한사례를통해공통설계패턴을탐구하고,코드의테스트용이성이재사용용이성으로이어짐을보여주며,디버거,프로파일러,패키지매니저,버전관리시스템이어떻게작동하는지이해하여이를더효과적으로활용할수있도록돕습니다.

또한이도서는저자가소프트웨어디자인을교육하기위한교재로서처음집필된도서로,소프트웨어관련학부수업교재로적합합니다.예시가과도하게추상적이지않아이해가쉬우며,연습문제의난이도가마냥낮지않아수업후과제로사용하기좋습니다.

*주요내용

CHAPTER1소개
이책의독자대상,사용기술,도서구성,책의집필동기등을소개하는챕터입니다.

CHAPTER2시스템프로그래밍
자바스크립트의핵심요소인비동기실행과깊은관련이있는콜백함수를배우고,익명함수및파일의선택,복사를배우는챕터입니다.

CHAPTER3비동기프로그래밍
콜백함수를개선하여비동기프로그래밍을더쉽게만들어주는기능인프로미스와해당기능의작동방식을설명하고,프로미스와동일한핵심기능을제공하는클래스를직접만들어프로미스의상세한사용방법을배우는챕터입니다.

CHAPTER4유닛테스트
소프트웨어의정상작동을확인하는유닛테스트를작성하고실행하는도구의사용법을배웁니다.유닛테스트의구성,등록,실행,보고및인터페이스를구현하는방법까지전반적으로다루는챕터입니다.

CHAPTER5파일백업
해시를이용한파일식별방법과백업방법,백업파일추적및테스트방법을소개하는챕터입니다.

CHAPTER6데이터테이블
데이터테이블의구현방식과연산방법을배우고,구현한데이터테이블의성능을테스트해봅니다.또한테이블을저장하는효율적인방법을알려주고,이진형태로저장하는것이실제로성능향상에도움이되는지도설명하는챕터입니다.

CHAPTER7패턴매치
정규표현식을만들어보며,동작방식을살펴보고쿼리셀렉터의매치방법,정규표현식매처구현,이렇게만든매처의확장등을배우는챕터입니다.

CHAPTER8표현식해석하기
앞장에서만든정규표현식을해석하는코드를만드는챕터입니다.

CHAPTER9페이지템플릿
정적사이트생성기구현에필요한페이지템플릿시스템을만듭니다.결과물로일종의프로그래밍언어를만들게되고,초보자와숙련자의이해도차이를실감하게됩니다.

CHAPTER10빌드매니저
자바스크립트와같은인터프리터언어에서도유용하게사용할수있는빌드매니저를만들어봅니다.빌드매니저를만들어오래된파일의관리방법을배우고,빌드규칙의추가법을익히는챕터입니다.

CHAPTER11레이아웃엔진
작은레이아웃엔진을직접만들어브라우저가어디에무슨내용을배치할지결정하는방식을배우는챕터입니다.행과열의크기조정,배치,엘리먼트의렌더링등을자세히배우게됩니다.

CHAPTER12파일보간기
파일보간기를만들어파일을관리,평가하여코드조각삽입하는작업을해보는챕터입니다.
CHAPTER13모듈로더
코드를실수로덮어쓰지않도록,로드하는내용을캡슐화하는모듈로더를만들어봅니다.네임스페이스의구현방법,모듈의로드방식,순환종속성의처리여부,모듈간의로드등을다룹니다.

CHAPTER14스타일체커
간단한린터를만들어소스코드를파싱하여데이터구조를만들고,해당구조하에규칙을적용하는방법을소개하는챕터입니다.데이터구조로는추상구문트리를사용합니다.

CHAPTER15코드제너레이터
만든코드의모든부분이동작하는지확인제너레이터를만드는챕터입니다.해당도구를통해코드각라인을적어도한번은테스트할수있도록하여버그의가능성을줄여줍니다.

CHAPTER16문서생성기
코드내주석등을분석하여문서로변환하는도구를만드는챕터입니다.해당챕터에서코드는데이터라는이도서에서가장핵심적인주제를다시한번언급해줍니다.

CHAPTER17모듈번들러
애플리케이션이의존하는모든파일을찾아서이를하나의로드가능한파일로결합하는모듈번들러를구현해보는챕터입니다.네트워크요청을한번으로줄여훨씬효율적인동작을가능케하고,의존성이해결되는지테스트되므로실행가능성을확보해줍니다.

CHAPTER18패키지매니저
애플리케이션설치에필요한각요소를체크하고설정을만들기위해설치해야할각패키지의버전을확인하는패키지매니저를만들어보는챕터입니다.

CHAPTER19가상머신
자바스크립트가변환되어실행되는과정을이애할수있도록프로세서를시뮬레이션하여실습하는챕터입니다.가상머신하에서의프로그램실행과데이터저장,어셈블러프로그램의구조등을배웁니다.

CHAPTER20디버거
디버거의작동원리를이해하기위해,간단한디버거를만들어프로그램들을테스트해보는챕터입니다.

CHAPTER21결론
모든내용을마무리하는챕터입니다.

*추천사

소프트웨어디자인을배우는가장좋은방법은다양한예제를연구하는것입니다.그리고프로그래머들이일상적으로사용하는도구들에서뛰어난디자인예제를찾을수있습니다.이도서는프로그래머들이사용하는도구들의소규모버전을만들어이들을명확히이해하고경험많은프로그래머들이어떻게사고하는지에대한통찰을제공합니다.파일백업시스템,테스트프레임워크,정규표현식매처,브라우저레이아웃엔진,아주작은컴파일러등다양한사례를통해공통설계패턴을탐구하고,코드의테스트용이성이재사용용이성으로이어짐을보여주며,디버거,프로파일러,패키지매니저,버전관리시스템이어떻게작동하는지이해하여이를더효과적으로활용할수있도록돕습니다.

이책의자료는자기주도학습,소프트웨어설계에관한학부과정또는현업에서일하는프로그래머를위한집중주간워크숍의핵심자료로사용할수있습니다.각장에는크기와난이도가다양한연습문제가포함되어있으며,현대자바스크립트의기본지식이요구되지만,언어의고급기능은도서에서소개하면서설명하고있습니다.