예제로 배우는 소프트웨어 디자인

예제로 배우는 소프트웨어 디자인

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

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

저자

그렉윌슨

저자:그렉윌슨
SoftwareCarpentry공동창립자,(前)전무이사
산업계와학계에서35년간활동해온전문가로,BeautifulCode,TheArchitectureofOpenSourceApplications,JavaScriptforDataScience,TeachingTechTogether,ResearchSoftwareEngineeringwithPython등여러책의저자,공동저자,또는편집자로참여했습니다.또한2020년ACMSIGSOFT의영향력있는교육자상을수상했습니다.

역자:김성원
대학원에서정보보안을전공하고소프트웨어프로그래머로서20년넘게정보보안부터다양한기업업무분야에이르기까지폭넓은경험을쌓아온애플리케이션개발자입니다.최근에는특정업무영역에특화된자연어처리(NLP)와WebRTC관련소프트웨어개발에주력하여이러한경험을통해복잡한문제를해결하고,최신기술을활용한혁신적인솔루션을탐구하고있습니다.또한기술서번역을즐겨이를통해지속적으로학습하고새로운기술과트렌드를접하고있으며,이런작업을통해복잡한기술적개념을독자들이쉽게이해하고활용할수있도록돕고있습니다.

목차

서문

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

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

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

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

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

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

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

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

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

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

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

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

CHAPTER13모듈로더
13.1네임스페이스는어떻게구현할까요?
13.2모듈은어떻게로드하나요?
13.3순환종속성을처리해야하나요?
13.4모듈이다른모듈을어떻게로드할까요?
13.5연습

CHAPTER14스타일체커
14.1자바스크립트를파싱해서AST를만들려면어떻게해야하나요?
14.2AST에서무언가를찾으려면어떻게해야하나요?
14.3어떻게검사를적용할수있을까요?
14.4AST워커는어떻게작동할까요?
14.5AST워커가작동하는다른방식은무엇일까요?
14.6할수있는다른종류의분석은무엇일까요?
14.7연습

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

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

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

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

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

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

CHAPTER21결론

부록A
부록B

출판사 서평

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

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

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

*주요내용

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*추천사

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

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