React 18 디자인 패턴과 베스트 프랙티스 4/e - 에이콘 웹 프로페셔널
Description
React는 컴포넌트라 불리는 조각들을 사용해 사용자 인터페이스를 자유롭게 만들 수 있는 라이브러리이다. 이 책을 읽고 나면 React 최신 버전인 React 18을 사용해 보다 나은 사용자 인터페이스를 만드는 다양한 사고 방식과 기법을 익힐 수 있을 것이다.

저자

카를로스산타나롤단

저자:카를로스산타나롤단(CarlosSantanaRoldan)
16년이상의경력을가진소프트웨어엔지니어이다.『리액트디자인패턴과모범사례』(에이콘,2017)의2,3,4판을썼다.라틴아메리카에서가장잘알려진개발자커뮤니티중하나인시리즈프론트엔드(SeriesFrontend)를창설했으며,이커뮤니티에서개인을대상으로다양한웹기술을교육하고있다(유튜브:https://www.youtube.com/@SeriesFrontend).

역자:김모세
소프트웨어엔지니어,소프트웨어품질엔지니어,애자일코치등다양한부문에서소프트웨어개발에참여했다.재미있는일,나와조직이성장하고성과를내도록돕는일에보람을느껴2019년부터번역을시작했다.지은책으로<코드품질시각화의정석>(지앤선,2015)이있고,옮긴책으로는<블렌더로애니그림체캐릭터를만들어보자모델링편>,<고도엔진간단입문>,<파이토치와구글코랩으로배우는BERT입문>(AK커뮤니케이션즈,2024),<추천시스템입문>(한빛미디어,2023),<그림과작동원리로쉽게이해하는웹의기초/서버의기초>(위키북스,2023),<아트오브셸원라이너160제>(제이펍,2023),<애자일소프트웨어아키텍트의길>(에이콘출판,2022)등이있다.

목차


1장.React처음사용하기
__기술요구사항
__선언적프로그래밍과명령적프로그래밍의차이
__React엘리먼트가동작하는방법
__모든것버리기
__자바스크립트피로감이해하기
____React에관한오해
____피로감없이React시작하기
____자바스크립트생태계가주는이점
____Create-React-App은이제그만,Vite만나기!
__정리
2장.타입스크립트소개
__기술요구사항
__타입스크립트의기능
__자바스크립트코드를타입스크립트로변환하기
__타입
__인터페이스
__인터페이스와타입확장하기
__인터페이스와타입구현하기
__인터페이스병합하기
__열거형
__이름공간
__템플릿리터럴
__타입스크립트구성파일
__정리
3장.코드정리하기
__기술요구사항
__JSX사용하기
____바벨
____첫번째엘리먼트만들기
____DOM엘리먼트와React컴포넌트
____Props
____자녀
____HTML과의차이점
____전개속성
____템플릿리터럴
____일반적인(공통)패턴
__코드스타일링하기
____EditorConfig
____Prettier
____ESLint
__함수형프로그래밍
____1급함수
____순수성
____불변성
____커링
____합성
__정리
4장.인기있는합성패턴살펴보기
__기술요구사항
__컴포넌트간통신하기
____childrenprop사용하기
__컨테이너패턴및프레젠테이셔널패턴
__고차컴포넌트이해하기
__FunctionAsChild이해하기
__정리
5장.브라우저를위한코드작성하기
__기술요구사항
__폼이해및구현하기
____통제되지않은컴포넌트
____통제된컴포넌트
__이벤트다루기
__refs살펴보기
____forwardRef이해하기
__애니메이션구현하기
__SVG살펴보기
__정리
6장.컴포넌트를아름답게보이게만들기
__기술요구사항
__자바스크립트에서의CSS
__인라인스타일이해하기와구현하기
__CSS모듈사용하기
____Webpack5
__프로젝트설정하기
__로컬범위CSS
____아토믹CSS모듈
__styled-components구현하기
__정리
7장.피해야할안티패턴
__기술요구사항
__속성을이용해상태초기화하기
__인덱스를key로사용하기
__DOM엘리먼트에속성전파하기
__정리
8장.React훅
__기술요구사항
__React훅소개
____기존의틀을깨는변화는없다
____State훅사용하기
__훅규칙
____규칙1:톱레벨에서만훅을호출한다
____규칙2:React함수에서만훅을호출한다
__클래스컴포넌트를React훅으로마이그레이션하기
__React이펙트이해하기
____useEffect이해하기
____조건부로이펙트실행하기
____useCallback,useMemo,memo이해하기
__useReducer훅이해하기
__정리
9장.React라우터
__기술요구사항
__React라우터설치및구성하기
__섹션생성하기
__라우트에매개변수추가하기
__React라우터v6.4
____React라우터로더
__정리
10장.React18의새로운기능들
__동시모드
__자동배치
__트랜지션
__서버에서의Suspense
__신규API
____createRoot
____hydrateRoot
____renderToPipeableStream
__신규훅
____useId
____useTransition
____useDeferredValue
____useInsertionEffect
__엄격한모드
__Node.js의최신기능들
____실험적인FetchAPI
____실험적인testrunner모듈
____실험적인nodewatch
____Node18은이제장기지원버전이다(LTS)
__정리
11장.데이터관리하기
__기술요구사항
__ReactContextAPI소개
____첫번째컴포넌트생성하기
____프로바이더로컴포넌트감싸기
__useContext를사용해컨텍스트소비하기
__SWR을사용한React대기도입하기
____SWR도입하기
____Pokedex만들기
__리덕스툴킷:리덕스에대한현대적인접근방식
____핵심기능
____시작하기
____스토어생성하기
____슬라이스생성하기
____리듀서조합하기
____컴포넌트를스토어와연결하기
____스토어를React애플리케이션과통합하기
__정리
12장.서버사이드렌더링
__기술요구사항
__유니버설애플리케이션이해하기
__SSR을구현해야하는이유
____SEO구현하기
____공통코드베이스
____더나은성능
____SSR의복잡성과소평가하지말기
__기본적인SSR예제만들기
____웹팩을사용해프로젝트처음부터구성하기
____애플리케이션생성하기
__데이터가져오기구현하기
__Next.js를사용해React애플리케이션생성하기
__정리
13장.실제프로젝트를통해GraphQL이해하기
__기술요구사항
__PostgreSQL,Apollo서버,GraphQL,Sequelize,
__JSON웹토큰을사용해백엔드로그인시스템구축하기
__Postgres설치하기
____PostgreSQL데이터베이스관리를위한최고의도구들
__백엔드프로젝트생성하기
____.env파일구성하기
____기본config파일생성하기
__Apollo서버구성하기
__GraphQL유형,쿼리,뮤테이션정의하기
____스칼라타입
____쿼리
____뮤테이션
____타입정의병합하기
__리졸버생성하기
____getUsers쿼리생성하기
____getUser쿼리생성하기
____뮤테이션생성하기
____리졸버병합하기
__SequelizeORM사용하기
____Sequelize에서사용자모델생성하기
____Sequelize를PostgreSQL데이터베이스에연결하기
__인증함수
____JWT함수생성하기
____인증함수생성하기
____타입과인터페이스정의하기
__처음으로프로젝트실행하기
____GraphQL쿼리와뮤테이션테스팅하기
____모델검증테스트하기와사용자질의하기
____로그인수행하기
__Apollo클라이언트를사용해프런트엔드로그인시스템구현하기
____웹팩5구성하기
____타입스크립트구성하기
____Express서버구성하기
____프런트엔드구성생성하기
____사용자미들웨어생성하기
____JWT함수생성하기
____GraphQL쿼리와뮤테이션생성하기
____로그인및연결된사용자를처리하기위한사용자컨텍스트생성하기
____Apollo클라이언트구성하기
____애플리케이션라우트생성하기
____페이지생성하기
____로그인컴포넌트생성하기
____dashboard컴포넌트생성하기
____로그인시스템테스트하기
__정리
14장.단일저장소아키텍처
__기술요구사항
__단일저장소의장점과단일저장소가해결하는문제들
__NPMWorkspaces를사용해단일저장소생성하기
__단일저장소에서타입스크립트구현하기
__웹팩을사용해패키지를컴파일하기위한devtools패키지생성하기
____다양한색상의로그생성하기
____웹팩공통구성
____웹팩개발구성
____웹팩프로덕션구성
__utils패키지생성하기
__API패키지생성하기
____사용자공유모델생성하기
____사용자공유GraphQL타입및리졸버
____커스텀서비스생성하기
____서비스구성빌드하기
____커스텀모델생성하기
____모델시드생성하기
____커스텀GraphQL타입과리졸버생성하기
____모델동기화하기와Apollo서버시작하기
____CRM서비스테스트하기
__프런트엔드패키지생성하기
____Sites시스템생성하기
____페이지스위처생성하기
____Login시스템생성하기
____Sites구성생성하기
____모든것을합치기
____데모시간
__정리
15장.애플리케이션성능개선하기
__기술요구사항
__조정이동작하는방법
__키사용하기
__최적화기법
__도구와라이브러리
____불변성
____바벨플러그인
__정리
16장.테스팅과디버깅
__기술요구사항
__테스팅의이점이해하기
__Jest를사용한고통없는자바스크립트테스팅
____이벤트테스트하기
__Vitest도입하기
____Vitest설치및구성하기
____globals활성화하기
____인소스테스팅
__ReactDevTools사용하기
____리덕스DevTools사용하기
__정리
17장.프로덕션으로배포하기
__기술요구사항
__첫번째DigitalOceanDroplet생성하기
____DigitalOcean에가입하기
____첫번째Droplet생성하기
____Node.js설치하기
____깃,깃허브구성하기
____Droplet종료하기
__nginx,PM2및도메인구성하기
____nginx설치및구성하기
____역프록시서버설정하기
____Droplet에도메인추가하기
__지속적인통합을위한CircleCI구현하기
____CircleCI에SSH키추가하기
____CircleCI구성하기
____CircleCI에서환경변수생성하기
__정리

출판사 서평

이책에서다루는내용

React18및노드19의기능과친숙해진다.
타입스크립트의기본/고급기능들에관해살펴본다.
다양한패턴과기법들을적용해컴포넌트사이에통신을수행한다.
단일저장소아키텍처에관해살펴본다.
서버사이드렌더링을사용해애플리케이션을빠르게로드한다.
종합적인테스트셋을작성해강건하고유지보수할수있는코드를생성한다.
React컴포넌트를스타일링하고최적화함으로써고성능의애플리케이션을빌드한다.

이책의대상독자

React를더욱잘이해하고이를실세계의애플리케이션개발에적용하고자하는웹개발자를위해썼다.React및자바스크립트에대한중간수준의경험을가졌다고가정한다.

이책의구성

1장,‘React처음사용하기’에서는React를이해하기위한여정을시작한다.여기에서는선언적코드(declarativecode)를작성하고컴포넌트와React의엘리먼트(element)를구분해본다.로직과React의템플릿을조합한이유에관해논의한다.다소논란의여지가있을수있지만궁극적으로는이익이되는결정이다.매우빠르게진화하는자바스크립트의세계에서압도되는느낌을받을수있는가능성을알고있으므로작고관리가능한단계를택함으로써피로를피한다.새로운create-vite도구를소개하고React를사용해직접코딩할수있는경험을준비하면서1장을마무리한다.

2장,‘타입스크립트소개’에서는타입스크립트의기본을배운다.간단한타입과인터페이스생성하기,열거형과이름공간및템플릿리터럴사용하기를포함한다.그리고첫번째타입스크립트구성파일(tsconfig.json)을설정하고이를두부분(공통부분과특정부분-단일저장소(MonoRepo)를사용해작업할때특히편리하다)으로나누는방법에관해살펴본다

3장,‘코드정리하기’에서는JSX파일을작성하는방법과그기능을알아본다.아울러Prettier와ESLint를사용해서코드를깔끔하게유지하고실수를방지하는방법에관해알아본다.또한함수형프로그래밍에관해학습한다.함수형프로그래밍을사용하면코드를쉽게관리하고테스트할수있다.

4장,‘인기있는합성패턴살펴보기’에서는props를사용해재사용할수있는컴포넌트들이함께더잘동작하도록만드는방법을익힌다.props를사용하면컴포넌트들을분리하고잘정의된상태로유지할수있다.컴포넌트를조직화하는두가지일반적인방법인컨테이너패턴(containerpattern)과프레젠테이셔널패턴(presentationalpattern)에관해살펴본다.이러한방법을사용해컴포넌트분리의규칙과형태를유지한다.또한고차컴포넌트(HOC,HigerOrderComponent)를사용해서컴포넌트사이의의존성을너무높이지않으면서컨텍스트를다루는방법,FunctionasChildren패턴을사용해실시간으로컴포넌트를생성하는방법을배운다.

5장,‘브라우저를위한코드작성하기’에서는웹브라우저에서React를사용해폼을생성하고,이벤트를처리하고,SVG를움직이는방법을관찰한다.DOM노드에쉽게접근할수있는useRef훅에관해학습한다.React는간단하고직관적인접근방식을제공해복잡한웹앱을좀더쉽게관리하게해준다.또한React에서는필요한경우DOM노드에직접접근할수있으므로React를다른라이브러리와간단하게사용할수있다.

6장,‘컴포넌트를아름답게보이게만들기’에서는React에서의스타일링에관해살펴본다.메타(Meta)에서의경험을예로,큰프로젝트에서CSS를작성하는작업의문제점에관해살펴본다.이후React컴포넌트에스타일을직접작성하는방법을알아본다.이를활용하면코드를깨끗하고읽기쉽게유지할수있다.동시에이방법의제한점에관해살펴보고그와동시에CSS모듈이라부르는다른스타일링방법에관해살펴본다.이방법을사용하면CSS를별도의파일에작성하면서도개별컴포넌트에대한스타일적용범위를유지할수있다.마지막으로React스타일링에관한인기있는라이브러리인styled-components에관해살펴본다.6장을마치면React앱을멋지게보이도록만들수있는많은도구를갖게될것이다.

7장,‘피해야할안티패턴’에서는웹앱의속도를낮추고엉망으로만들수있는네가지컴포넌트사용방법에관해논의한다.각방법마다예시를통해무엇이잘못될수있으며어떻게수정할수있는지살펴본다.상태를설정하기위해속성을사용하는것이해당상태와해당속성사이에문제를일으키는이유를학습한다.또한잘못된key속성을사용함으로써React가컴포넌트를업데이트하는방법을망칠수있음에관해살펴본다.마지막으로DOM엘리먼트에비표준속성을퍼뜨리는것이나쁜아이디어인이유를살펴본다.이문제를이해함으로써React를좀더효과적으로활용하면서도공통적인실수들을피할수있다.

8장,‘React훅’에서는새로운React훅에관해학습하며즐거운시간을보낼것이다.React훅이동작하는방법,데이터를가져오는방법,클래스컴포넌트를훅으로변환하는방법에관해학습한다.또한effects,memo,useMemo,useCallback의차이점에관해서도익힌다.마지막으로useReducer훅이작동하는방법과react-redux와의차이점에관해서도알아본다.이모든것으로인해우리가만드는React컴포넌트는더빠르고나아질것이다.

9장,‘React라우터’에서는React라우터에관해학습한다.React라우터를React와함께사용해싱글페이지애플리케이션안에서페이지간이동을관리할수있다.React자체적으로는이를수행하지않기때문에React라우터를사용한다.React라우터를사용해앱이어떻게다른URL에대해응답하고탐색을관리하는지살펴본다.9장을마치고나면React라우터가작동하는방법과프로젝트에서의사용방법에관해알게될것이다.또한react-router,react-router-dom,react-router-native패키지들의차이점과React라우터설정방법,〈Routes〉컴포넌트추가방법,라우트에매개변수를추가하는방법에관한차이점도배울것이다.

10장,‘React18의새로운기능들’에서는새롭게개선된React18에관해살펴본다.React18은멋진대화형앱을더욱쉽게구축할수있도록다양한기능을제공한다.자동상태업데이트그룹화,동시렌더링,데이터취득을위한대기,더나은오류처리및새로운컴포넌트유형을사용해매력적이고빠른앱을만들수있다.React를사용한다면React18로업그레이드를고려하는것이좋다.또한웹프로젝트를더욱개선할수있는노드18과19의주요한새로운기능에관해서도살펴본다.

11장,‘데이터관리하기’에서는ReactContextAPI에관해배우고ReactSuspense와SWR을함께사용하는방법을살펴본다.ContextAPI의기본개념을학습하며,여기에는컨텍스트생성및사용방법과useContext훅을사용해이를더욱간편하게만드는방법이포함된다.또한ReactSuspense에관해살펴보고,더부드러운사용자경험을위해로딩상태를잘처리하는데어떻게도움이되는지확인한다.더불어ReactSuspense와함께사용해서데이터를더쉽게가져오고캐시하는데도움이되는SWR에관해서도학습한다.마지막으로새로운리덕스툴킷(ReduxToolkit)의사용방법을익힌다.이들을활용하면더욱빠르고사용자친화적인React앱을구축할수있다.

12장,‘서버사이드렌더링’에서는React를사용한서버사이드렌더링(SSR,Server-SideRendering)에관해살펴보면서여정을마무리한다.이제여러분은SSR을사용해앱을만드는방법과이것이검색엔진최적화(SEO,SearchEngineOptimization),소셜공유및성능향상과같은목적을위해유용한이유에관해알게될것이다.서버에서데이터를로드하고HTML템플릿에서넣음으로써클라이언트사이드앱이브라우저에서시작되는시점에이미준비되도록하는방법을배운다.마지막으로Next.js와같은도구를사용해어떻게SSR설정을더쉽게하고,추가코드양을줄이며,어려운부분을감출수있는지알게될것이다.

13장,‘실제프로젝트를통해GraphQL이해하기’에서는GraphQL에관해학습한다.GraphQL은일반적인RESTAPI와달리정확히필요한내용만요청할수있는멋진도구로,API및데이터를효율적으로다룰수있게도와준다.GraphQL을사용해서실제프로젝트를위한간단한로그인및사용자등록시스템을만들것이다.PostgreSQL설치,.env파일을사용한환경변수설정,Apollo서버설정,GraphQL쿼리와뮤테이션생성,리졸버resolver조작,Sequelize모델생성,JWT사용,GraphQLPlayground사용및인증방법에관해학습한다.13장을마치면자신의프로젝트에서GraphQL을사용하는방법을알게될것이다.
14장,‘단일저장소아키텍처’에서는단일저장소(MonoRepo),Mono-Repository에관해설명한다.일반적으로앱을구축할때하나의앱,하나의깃저장소및하나의빌드결과물을갖는다.하지만많은조직은단일저장소를사용해서모든앱,컴포넌트및라이브러리를쉽게개발한다.이것이바로단일저장소이며작은여러바구니가아니라큰하나의바구니에모든코드를모아두는것처럼생각할수있다.이를활용하면모든것을더쉽게업데이트할수있으며시간을절약할수있다.단일저장소를사용해새버전을매번출시하지않고도코드리팩터링을더쉽게만들고,팀워크를개선하며,패키지종속성을업데이트하는데도움이되는방법에관해서논의할것이다.

15장,‘애플리케이션성능개선하기’에서는여러분의앱을좀더부드럽고빠르게동작시켜더나은사용자경험을만드는기법을탐색한다.React가앱화면을업데이트하는방법과키를사용해서효율성을개선하는데도움을얻는방법에관해자세히살펴본다.앱성능을향상시키기위해잘구조화된작업중심컴포넌트의중요성을발견하게될것이다.또한불변성(immutability)의개념과불변성이React.memo및shallowCompare가효과적으로작동하는데얼마나중요한지알아볼것이다.마지막으로애플리케이션을더욱빠르게만드는다양한도구와라이브러리를소개한다.15장에서는앱의속도와성능을향상시키기위한가치있는지식을제공하는것을목적으로한다.

16장,‘테스팅과디버깅’에서는테스팅에관해배운다.테스트가중요한이유,React컴포넌트가제대로작동하는지확인하는데사용하는다양한도구와기술을탐험한다.React테스팅라이브러리(ReactTestingLibrary)와Jest같은라이브러리를사용해테스트를작성하고실행하는방법에관해학습하고,고차컴포넌트나다양한필드가있는템플릿과같은애플리케이션의복잡한부분의테스트방법에관해서도살펴본다.또ReactDevTools,리덕스DevTools같은도구를사용해더나은앱을개발하는데도움을받는방법도익힐것이다.16장을마치면효과적인테스트를통해앱을원활하게유지하는방법을견고하게이해하게될것이다.

17장,‘프로덕션으로배포하기’에서는여러분이구축한React앱을세상에공개한다!이를위해DigitalOcean이라는클라우드서비스를사용할것이다.Node.js와nginx를사용해서버에서앱을실행하는방법을학습하고,이를위해DigitalOcean의Ubuntu서버를활용할것이다.DigitalOceanDroplet의설정및구성,도메인에대한연결방법을안내할것이다.또한변경사항의양에관계없이항상사용자에게준비된상태로앱을유지할수있도록