웹 개발자를 위한 API 디자인 패턴 : 사용자 친화적이고 유지보수 가능한 웹 API 만들기

웹 개발자를 위한 API 디자인 패턴 : 사용자 친화적이고 유지보수 가능한 웹 API 만들기

$42.00
저자

JJ지웍스

저자:JJ지웍스(JJGEEWAX)
구글에서소프트웨어엔지니어로일했으며,실시간결제시스템,클라우드인프라스트럭처,API디자인을주업무로삼고있다.『실습으로완성하는구글클라우드플랫폼인액션』(제이펍,2019)의저자이며,구글에서시작해업계전체에걸친API디자인표준협업체인API.dev를공동으로창설했다.싱가포르에서아내인카엘(Ka-el),아들루카(Luca)와함께살고있다.

역자:전성빈
기계공학과에서광공학과이미지처리를세부전공으로박사학위를받았다.지식의시각화와구조화에꾸준한관심을기울이고있다.에이콘출판사에서출간한『파이썬네트워킹마스터2/e』(2019),『HLSL프로그래밍』(2016)등을번역했다.

목차

추천의글
지은이소개
지은이의말
감사의말
옮긴이소개
옮긴이의말
들어가며

1부.서론

1장API소개
1.1웹API
1.2API의중요성
1.3리소스지향API
1.4‘좋은’API
1.4.1운영성
1.4.2표현성
1.4.3단순함
1.4.4예측가능성
요약

2장API디자인패턴소개
2.1API디자인패턴
2.2왜API디자인패턴이중요한가?
2.3API디자인패턴분석
2.3.1이름과시놉시스
2.3.2동기
2.3.3개요
2.3.4구현
2.3.5트레이드오프
2.4사례연구:Twapi,트위터모사API
2.4.1개요
2.4.2메시지목록
2.4.3데이터내보내기
요약

2부디자인원칙

3장이름붙이기
3.1왜이름이중요한가?
3.2‘좋은’이름이란무엇인가?
3.2.1표현성
3.2.2단순성
3.2.3예측가능성
3.3언어,문법,구문
3.3.1언어
3.3.2문법
3.3.3구문
3.4맥락
3.5데이터타입과단위
3.6사례연구:나쁜이름을붙이면어떤일이일어나는가?
3.7연습문제
요약

4장리소스범위와계층
4.1리소스레이아웃이란?
4.1.1관계타입
4.1.2개체관계다이어그램
4.2올바른관계선택
4.2.1관계를세워야하는가?
4.2.2참조와인라인데이터
4.2.3계층관계
4.3안티패턴
4.3.1모든것의리소스화
4.3.2깊은계층관계
4.3.3모든것의인라인화
4.4연습문제
요약

5장데이터타입과기본값
5.1데이터타입개괄
5.1.1누락vsnull
5.2불리언
5.3숫자
5.3.1상하한
5.3.2기본값
5.3.3직렬화
5.4문자열
5.4.1상하한
5.4.2기본값
5.4.3직렬화
5.5열거형
5.6리스트
5.6.1원자성
5.6.2상하한
5.6.3기본값
5.7맵
5.7.1상하한
5.7.2기본값
5.8연습문제
요약

3부기초패턴

6장리소스식별
6.1식별자의뜻
6.2좋은식별자란?
6.2.1용이성
6.2.2고유성
6.2.3영속성
6.2.4신속성과생성의용이함
6.2.5예측불가능성
6.2.6가독성,공유성,검증성
6.2.7정보밀도
6.3좋은식별자의형태
6.3.1데이터타입
6.3.2문자세트
6.3.3식별자포맷
6.3.4체크섬
6.3.5리소스타입
6.3.6계층과고유범위
6.4식별자구현
6.4.1크기
6.4.2식별자생성
6.4.3묘석화
6.4.4체크섬
6.4.5데이터베이스스토리지
6.5UUID
6.6연습문제
요약

7장표준메서드
7.1서론
7.2개괄
7.3구현
7.3.1어떤메서드를지원해야하는가?
7.3.2멱등성과부수효과
7.3.3get
7.3.4list
7.3.5create
7.3.6update
7.3.7delete
7.3.8replace
7.3.9최종API정의
7.4트레이드오프
7.5연습문제
요약

8장부분업데이트와부분취득
8.1서론
8.1.1부분취득
8.1.2부분업데이트
8.2개괄
8.3구현
8.3.1전달
8.3.2맵과중첩인터페이스
8.3.3반복적필드
8.3.4기본값
8.3.5묵시적필드마스크
8.3.6동적데이터구조업데이트
8.3.7유효하지않은필드
8.3.8최종API정의
8.4트레이드오프
8.4.1보편지원
8.4.2기타구현
8.5연습문제
요약

9장사용자메서드
9.1서론
9.1.1표준메서드를쓰면안될까?
9.2개요
9.3구현
9.3.1부수효과
9.3.2리소스vs컬렉션
9.3.3무상태사용자메서드
9.3.4최종API정의
9.4트레이드오프
9.5연습문제
요약

10장장기실행작업
10.1서론
10.2개요
10.3구현
10.3.1LRO의형태
10.3.2리소스계층
10.3.3이행
10.3.4에러처리
10.3.5진행사항모니터링
10.3.6작업취소
10.3.7작업일시정지및재개
10.3.8작업탐색
10.3.9영속성
10.3.10최종API정의
10.4트레이드오프
10.5연습문제
요약

11장재수행가능작업
11.1서론
11.2개괄
11.3구현
11.3.1잡리소스
11.3.2run사용자메서드
11.3.3잡실행리소스
11.3.4최종API정의
11.4트레이드오프
11.5연습문제
요약

4부리소스관계

12장싱글톤서브리소스
12.1서론
12.1.1왜싱글톤서브리소스를사용해야하는가?
12.2개괄
12.3구현
12.3.1표준메서드
12.3.2재설정
12.3.3계층구조
12.3.4최종API정의
12.4트레이드오프
12.4.1원자성
12.4.2단일서브리소스조건
12.5연습문제
요약

13장교차참조
13.1서론
13.2개괄
13.3구현
13.3.1참조필드이름
13.3.2데이터무결성
13.3.3값대참조
13.3.4최종API정의
13.4트레이드오프
13.5연습문제
요약

14장연관리소스
14.1서론
14.2개괄
14.2.1연관성별칭메서드
14.3구현
14.3.1연관리소스이름붙이기
14.3.2표준메서드동작
14.3.3고유성
14.3.4읽기전용필드
14.3.5연관별칭메서드
14.3.6참조무결성
14.3.7최종API정의
14.4트레이드오프
14.4.1복잡성
14.4.2연관성분리
14.5연습문제
요약

15장add및remove사용자메서드
15.1서론
15.2개괄
15.3구현
15.3.1연관리소스나열
15.3.2데이터무결성
15.3.3최종API정의
15.4트레이드오프
15.4.1비상호관계
15.4.2관계메타데이터
15.5연습문제
요약

16장다형성
16.1서론
16.2개괄
16.3구현
16.3.1다형성리소스사용여부결정
16.3.2다형성구조
16.3.3다형성동작
16.3.4왜다형성메서드를사용하지않는가?
16.3.5최종API정의
16.4트레이드오프
16.5연습문제
요약

5부선택적작업

17장복사와이동
17.1서론
17.2개괄
17.3구현
17.3.1식별자
17.3.2자식리소스
17.3.3관련리소스
17.3.4외부데이터
17.3.5상속메타데이터
17.3.6원자성
17.3.7최종API정의
17.4트레이드오프
17.5연습문제
요약

18장배치작업
18.1서론
18.2개괄
18.3구현
18.3.1원자성
18.3.2컬렉션작업
18.3.3결과정렬
18.3.4공통필드
18.3.5부모간작업
18.3.6배치get
18.3.7배치delete
18.3.8배치create
18.3.9배치update
18.3.10최종API정의
18.4트레이드오프
18.5연습문제
요약

19장기준기반삭제
19.1서론
19.2개괄
19.3구현
19.3.1결과필터링
19.3.2기본검증제한
19.3.3결과개수
19.3.4결과샘플세트
19.3.5일관성
19.3.6최종API정의
19.4트레이드오프
19.5연습문제
요약

20장익명기록
20.1서론
20.2개괄
20.3구현
20.3.1일관성
20.3.2최종API정의
20.4트레이드오프
20.5연습문제
요약

21장페이징
21.1서론
21.2개괄
21.3구현
21.3.1페이지크기
21.3.2페이지토큰
21.3.3총개수
21.3.4리소스내부페이징
21.3.5최종API정의
21.4트레이드오프
21.4.1양방향페이징
21.4.2임의윈도우
21.5안티패턴:오프셋과한도
21.6연습문제
요약

22장필터링
22.1서론
22.2개괄
22.3구현
22.3.1구조
22.3.2필터문법및동작
22.3.3최종API정의
22.4트레이드오프
22.5연습문제
요약

23장가져오기와내보내기
23.1서론
23.2개괄
23.3구현
23.3.1import및export메서드
23.3.2스토리지시스템상호작용
23.3.3리소스-바이트변환
23.3.4일관성
23.3.5식별자와충돌
23.3.6관련리소스
23.3.7실패와재시도
23.3.8필터링및필터마스크
23.3.9최종API정의
23.4트레이드오프
23.5연습문제
요약

6부안전과보안

24장버전작성과호환성
24.1서론
24.2개괄
24.2.1호환성이란
24.2.2하위호환성정의
24.3구현
24.3.1영구적안정성
24.3.2애자일불안정성
24.3.3시맨틱버전작성
24.4트레이드오프
24.4.1세세함vs단순함
24.4.2안정성vs새기능
24.4.3만족도vs범용성
24.5연습문제
요약

25장논리삭제
25.1서론
25.2개괄
25.3구현
25.3.1삭제지시
25.3.2표준메서드수정
25

출판사 서평

1."일관성"을확보하라?API설계혼돈에서벗어나는핵심

API설계에서가장큰문제는일관성의부재다.같은팀,같은회사에서만든API조차서로다른명명규칙,다른에러처리방식,다른데이터구조를사용하며개발자들을혼란에빠뜨린다.『웹개발자를위한API디자인패턴』은이름붙이기부터리소스계층구조,데이터타입과기본값까지API설계의모든요소에일관된원칙을제시한다.RESTfulAPI든RPC든,소규모서비스든대규모플랫폼이든반드시일관성있는설계패턴을따라야만한다.이책은임시방편적인API설계를넘어서실제확장가능한'API설계'전쟁이어떻게가능한지안내해줄것이다.

2.실전에강해져라?패턴을"실제코드"로바꾸는방법

이책은단순한설계원칙을넘어,API개발과정에서마주하는모든실무적문제를구체적인패턴으로해결하는방법과노하우를제공한다.또한TypeScript중심의명확한코드예제,체계적인검증절차,리소스관계와보안구현에대한단계별접근법으로실질적인문제해결실력까지갖추게해준다.API를제대로설계하고싶다면,단순히기능만구현하는차원을넘어확장가능하고유지보수가능한구조를만드는방법을이책에서배울수있다.게다가구글의실제사례와폭넓은패턴예제를추가해,책을읽는누구나'내프로젝트에바로적용할수있다'는자신감을안겨줄것이다.

3.설계가전략이되는전쟁?임시방편을넘어'확장가능한아키텍처'에집중하라

이책은'API설계를전략으로,그리고실질적인비즈니스가치로연결해주는것'에진심을다한다.또한설계결과를실제서비스확장·팀협업·장기유지보수정책에녹여낼수있는실전적접근법을제시한다.이책은단순기능구현을뛰어넘어,전략적으로리소스모델링,버전관리,보안정책까지실제로적용하는방법을알려주며,이에더해장기실행작업과배치처리,그리고복잡한데이터관계를현명하게다루는노하우까지제공한다.API가곧비즈니스성공의핵심인프라임을아는이들에게강력추천하고싶은실전형무기다.

API설계라는피할수없는난제를체계적인패턴과실전전략으로돌파하고싶은개발자라면,지금이책을선택하길바란다.

웹API,특히대중에공개할API를만들고있거나만들예정인모든독자를대상으로하는책이다.직렬화포맷(예:JSON,구글프로토콜버퍼,ApacheThrift)이나일반적인스토리지패러다임(예:관계형데이터베이스스키마)에익숙하다면도움이되겠지만,필수적인것은아니다.또한HTTP및관련한여러메서드(예:GET,POST)는이책전반에걸쳐예제내의전송방식으로자주등장하기때문에알고있는것이이해에더유리하다.API를디자인하면서문제를마주하고“어딘가이문제를해결하는방법이있을텐데”라고생각해본적이있다면이책은당신을위한것이다.

◈이책의구성◈

이책은6개의부로구성돼있다.처음2개의부는API디자인에관한좀더일반적인주제를,나머지4개의부는각디자인패턴에대한세부를다룬다.

1부,서론에서는책의나머지부분에관한개괄과,웹API와나중에웹API에적용할디자인패턴의정의및평가프레임워크를살펴본다.

●1장,API소개에서는API가무엇을뜻하는지와왜API가중요한지를다룬다.아울러API가얼마나좋은지를평가할수있는프레임워크를제시한다.
●2장,API디자인패턴소개에서는1장에서더나아가,API에디자인패턴을적용하는방법과왜디자인패턴이유용한지를다룬다.이를위해API디자인패턴의내부구조를분석하고,디자인패턴을사용해API를개선하는간단한예를보여준다.

2부,디자인원칙에서는1부의내용을기반으로해서API를제작할때고려해야할몇가지일반적인디자인원칙을다룬다.

●3장,이름붙이기에서는API에서이름을붙여야하는여러가지구성요소를살펴보고,이름을선택할때무엇을고려해야할지다룬다.아울러이름붙이기가단순히피상적인차원을떠나높은중요성을갖는이유를설명한다.
●4장,리소스범위와계층에서는여러리소스가서로관계를갖는,좀더규모가큰API를다룬다.리소스와그관계를어떻게결정해야할지에관한몇가지질문을던진후이과정에서피해야할점들을예를통해살펴본다.
●5장,데이터타입과기본값에서는API내의다양한데이터타입과그기본값을사용하는방법을다룬다.가장흔히쓰이는문자열이나숫자값뿐만아니라,맵이나리스트등의복잡한타입도함께살펴본다.

3부,기초패턴부터는본격적으로디자인패턴을살펴본다.우선대부분의API에적용해야하는기초패턴부터시작한다.

●6장,리소스식별에서는API사용자가리소스를식별하는방법을알아본다.묘석화(tombstoning),문자열세트,인코딩등로우레벨세부사항까지모두살펴보며,체크섬을통해ID가누락된것인지유효하지않은지구분하는방법도다룬다.
●7장,표준메서드에서는웹API의여러표준메서드(get,list,create,update,delete)가작동하는방법을알아본다.또한각표준메서드가모든리소스에대해동일한방식으로작동해야하며,각리소스마다그특성에따라차이를보이면안되는이유를설명한다.
●8장,부분업데이트와부분취득에서는표준메서드중2가지(get,update)를확장해서사용자가리소스중일부에대해서만상호작용하는방법을알아본다.
아울러이방법이(사용자와API양측에)왜필요하고유용한지,그리고기존시스템에대한개입을최소화하면서이기능을구현하려면어떻게해야하는지알아본다.
●9장,사용자메서드에서는기존표준메서드대신API내에서원하는기능을사용자메서드로구현하는방법을알아본다.특히사용자메서드가가능한(혹은가능하지않은)상황이언제인지와,API내에서가능여부를어떻게결정해야하는지살펴본다.
●10장,장기실행작업에서는API메서드가즉각적으로동작하면안되는특수한상황과,이상황을편리하게다룰수있는장기실행작업(LRO,Long-RunningOperation)을알아본다.LRO가어떻게작동하는지,LRO가지원하는메서드(일시정지,재개,취소)가어떻게이뤄지는지도살펴본다.
●11장,재수행가능작업에서는어떤작업을반복해서실행하는,마치웹API상에서cron작업을수행하는개념을다룬다.익스큐션(Execution)리소스를사용하는방법과,이를스케줄에따라또는원하는시점에실행하는방법을알아본다.

4부,리소스관계에서는리소스와리소스간의관계에집중한다.4장의내용을좀더상세히설명하는셈이다.

●12장,싱글톤서브리소스에서는작은크기의,관계를이루면서격리된데이터를싱글톤서브리소스로분리하는방법을설명한다.특히이방식을적용하는것이적절하거나적절하지않은경우가언제인지살펴본다.
●13장,교차참조에서는웹API에서리소스가다른리소스의참조를참조포인터나인라인값으로저장하는방법을개괄한다.아울러캐스케이드삭제나시간에따라변경된데이터를업데이트하는등의특수한상황에대응하는방법도살펴본다.
●14장,연관리소스에서는리소스간의일대일관계를확장해서연관리소스를통해다대다관계를나타내는방법을설명한다.또한이들관계를메타데이터로어떻게저장할수있을지다룬다.
●15장,add및remove사용자메서드에서는다대다관계를다룸에있어연관리소스대신add및remove등의메서드로간편하게수행하는방법을다룬다.아울러이들메서드의트레이드오프와,왜이방식이항상잘들어맞는것은아닌지살펴본다.
●16장,다형성에서는다형성,즉변수가다양한타입에대응할수있게하는개념을살펴본다.API리소스내의다형성필드를다루는방법과,다형성메서드사용을피해야하는이유를설명한다.

5부,선택적작업에서는단일API리소스의상호작용을넘어서전체리소스컬렉션에서의상호작용에대한디자인패턴을살펴본다.

●17장,복사와이동에서는API내에서리소스를복사하거나이동하는방법을설명한다.외부데이터를다루거나,서로다른부모리소스에서메타데이터를상속하거나,자식리소스를다루는방법등다소복잡한문제를해결한다.
●18장,배치작업에서는표준메서드(get,create,update,delete)를단일리소스가아닌컬렉션에동시에작업하는방법을알아본다.또한그작업결과를반환받는방법이나부분적실패를다루는방법등까다로운문제도살펴본다.
●19장,기준기반삭제에서는18장의배치delete메서드를확장해서특정리소스가아닌필터조건에맞는모든리소스를제거하는방법을다룬다.또한일관성문제를해결하는방법과,의도치않은데이터파괴를피하는규범을살펴본다.
●20장,익명기록에서는직접적으로지시할수없는비리소스데이터를입력하는방법을자세히들여다본다.익명으로데이터를작성하는방식과,이러한익명데이터입력의일관성과API에적합한지를판단하는트레이드오프를살펴본다.
●21장,페이징에서는페이징을통해큰규모의데이터세트를,불투명토큰을사용해오고가는식으로브라우징하는방법을설명한다.아울러커다란단일리소스내에서도페이징을구현하는방법을살펴본다.
●22장,필터링에서는필터기준을적용해리소스목록을나타내는방법과,API에서필터를가장잘표현하는방법을다룬다.이내용은19장에서다룬주제와직접적으로연관된다.
●23장,가져오기와내보내기에서는리소스를API안팎으로가져오고내보내는방법을다룬다.아울러이들동작이백업및복원과어떤맥락의차이를보이는지도살펴본다.

6부,안전과보안에서는다소지루할수도있는주제인,API의안전성과보안에관해살펴본다.API를공격자로부터안전할수있게하는방법과더불어,사용자자신의실수로부터보호하는API메서드를제시한다.

●24장,버전작성과호환성에서는버전작성과다른버전간의호환성이갖는의미를다룬다.호환성을일종의스펙트럼개념으로접근해서API전체에걸쳐일관적으로호환성정책을정의하는것의중요성을알아본다.
●25장,논리삭제에서는사용자자신의실수를보호할수있는패턴(논리삭제)을제시한다.즉,리소스를보이지않게제거하되,완전히시스템에서는삭제되지않게한다.
●26장,요청중복방지에서는요청식별자를사용해시스템에서의중복동작방지를시도한다.이과정에서요청ID를사용하는것의어려움과,큰스케일의시스템에서ID가제대로다뤄지는지확인하는알고리듬을살펴본다.
●27장,요청검증에서는요청을검증해사용자가실제작업을실행하지않고도동작결과를미리보기할수있는방법을다룬다.아울러실제요청과검증요청각각의부수효과등좀더복잡한문제를살펴본다.
●28장,리소스리비전에서는시간에따른변화를추적하는리소스리비전을소개한다.이전리비전을복원하는등의기본적인작업과,계층내의자식리소스에리비전을적용하는등의고급주제를살펴본다.
●29장,요청재시도에서는사용자에게API요청재시도가필요함을알리는패턴을소개한다.아울러여러종류의HTTP응답코드및각각이재시도에안전한지의여부를제시한다.
●30장,요청인증에서는각요청의인증과API가사용자를인증할때고려해야할여러보안기준을살펴본다.API요청을디지털서명함으로써근원과무결성을입증가능하게하며,이후부인될가능성을방지하는방식을소개한다.

◈지은이의말◈

학교에서배우는컴퓨터과학은마치물리법칙을배우는것과같은방식으로이뤄진다.빅O표기법을사용해런타임과공간복잡성을분석하고,여러정렬알고리듬이어떻게작동하는지배우고,바이너리트리를순회하는다양한방법을익힌다.

나는앞으로도이런식으로과학적이고수학적으로일하게될것이라여겼다.그러나전혀그렇지않은현실을마주하고엄청나게놀랐다.

내업무는수학