RESTful Web API 패턴과 모범 사례 [안정적이고 효율적인 API 인터페이스 구축]
- 원서명RESTful Web API Patterns and Practices Cookbook: Connecting and Orchestrating Microservices and Distributed Data (ISBN 9781098106744)
- 지은이마이크 애먼슨(Mike Amundsen)
- 옮긴이김성준
- ISBN : 9791161758404
- 40,000원
- 2024년 04월 30일 펴냄
- 페이퍼백 | 564쪽 | 188*235mm
- 시리즈 : 웹 프로페셔널
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/restful-cookbook
요약
소프트웨어 설계자, 아키텍트, 개발자를 대상으로 웹의 강점을 활용해 안정적이고 비용 효율적인 서비스 인터페이스를 구축하는 방법을 다루는 책이다. 저자가 수십 년 간의 경험을 통해 개발한 70여 가지의 레시피와 패턴을 제공하며, 이러한 레시피는 다양한 기술 플랫폼에 적용 가능하다.
추천의 글
우리는 얼마나 얽히고설킨 웹의 세상을 만들었던가.
나는 월드와이드웹(WWW)이 비즈니스 분야에서 처음 사용되기 시작했을 때 기술 분야에서 경력을 쌓기 시작했다. 웹의 유용성을 엔터프라이즈 아키텍처와 디지털 비즈니스 전략, 특히 모든 것의 중심에 있는 것처럼 보이는 웹 API에 적용하는 것이 내 경력의 대부분이었다.
2012년에 마이크 애먼슨과 같이 일하게 돼 기뻤다. 우리는 API를 주제로 많은 노력을 하면서 파트너 관계를 맺었으며, 나는 그에게서 많은 것을 배웠다. 웹의 기본 원리를 비롯한 많은 것을 가르쳐 준 사람이 바로 마이크였다. 지금 생각해보면 너무나 당연해 보이는, 내가 간과했던 인사이트를 마이크가 어떻게 찾아낼 수 있었는지 항상 놀라울 따름이다. 이 책은 이러한 많은 원칙과 인사이트를 매우 실용적인 하나의 패키지에 담은 것이다.
1990년대 초 인터넷이 처음 주류가 됐을 때, 작은 대학의 학부에서 수학 학위를 받고 있었다. 웹의 학문적 뿌리를 생각하면 당연한 일이겠지만, 처음에는 교수님들이 인터넷에 가장 흥분했다. 다른 사람들의 영화 리뷰를 인터넷으로 읽다가 대수학 수업에 집중하기 위해 억지로 웹 브라우저를 끄곤 했다. 퀴퀴하고 책이 가득한 캠퍼스 사무실에서 월드와이드웹이 내 일생, 아니 역사상 가장 혁신적인 인류의 발명품이 될 것이라고는 아무도 예상하지 못했다.
개인적 관심사가 담긴 픽셀화된 게시판에서 비즈니스 거래의 70%가 디지털 방식으로 이뤄지는 세상(https://www.zdnet.com/article/70-percent-of-customer-interactions-are-now-digital-and-most-companies-are-not-ready/)으로 어떻게 발전할 수 있었을까? 웹이 클라이언트, 서버, 네트워크, 개방형 프로토콜, API라는 간단한 요소들로 만들어졌다는 사실에 많은 공로를 돌릴 수 있다. 웹이 아무리 복잡하고 보편화돼도 이런 요소들은 웹의 핵심으로 남아 있다.
하이퍼링크(Hyperlink), 더 포괄적인 용어로 하이퍼미디어(Hypermedia)는 기술에 특히 큰 영향을 미쳤다. 원래 학술적 인용(다시 말해서 교수들)을 모델로 삼은 하이퍼링크는 웹에 네트워크 효과를 가져온 요소일 뿐만 아니라 이후 모든 기술에 대한 사용자의 기대치를 형성했다. 웹에는 사용 설명서가 없었고 단지 파란색 밑줄이 그어진 텍스트만 있었기 때문에 나이든 사용자들은 직관에 의존할 수밖에 없었다. ‘직감을 따르라’는 원칙은 마이크가 항상 강조한 것으로 API와 하이퍼미디어의 역할을 고려할 때 중요한 관점을 제공한다.
따라서 웹에는 사용자 매뉴얼이 없어도 되지만, 개발자 가이드는 반드시 필요하다. 이 주제와 관련해 저자는 이미 『RESTful Web API』(인사이트, 2015), 『Restful Web Clients: Enabling Reuse Through Hypermedia』(O'Reilly, 2017), 『Microservice Architecture: Aligning Principles』(O'Reilly, 2016), 『Continuous API Management: Making the Right Decisions in an Evolving Landscape』(O'Reilly, 2021)와 같은 필수 서적을 저술하거나 공동 집필했다. 이 책도 웹의 기술이 현재 컴퓨팅의 기초가 되는 방법뿐만 아니라 웹이 작동하는 방식이 현재 소프트웨어에 생태계에서 확장 가능한 아키텍처의 기본이 되는 방법을 알려준다. 저자는 웹의 원리를 API 설계와 비교해 이런 원리가 어떻게 성공적으로 적용될 수 있는지 설명한다. 무엇보다도 변화에 탄력적으로 대응하고 오래 지속되는 시스템을 설계하고 구축하는 방법을 이 책을 통해 배울 수 있다.
모든 조직은 지속적으로 소프트웨어 환경의 복잡성을 가중시키고 있으며, 디지털 에코 시스템에서 파트너 및 공급업체와 점점 더 많은 연결이 만들어지고 있다. 현실에서 성공할 수 있는 레시피를 원한다면, 이 책이 바로 여러분을 위한 쿡북이다.
─매트 맥라티(Matt McLarty),
세일즈포스 밴쿠버 뮬소프트(Mulesoft)의 글로벌 분야 CTO
이 책에서 다루는 내용
◆ 오픈 웹에서 성공적으로 상호 작용할 수 있는 개별 서비스 인터페이스 설계 및 구축
◆ 공동의 이해를 공유하는 API 디자인을 통한 상호운용성 증가
◆ 진화하는 서비스에 적응할 수 있는 클라이언트 애플리케이션 구축
◆ 웹에서 동료 간 상호작용을 지원하는 안정적이고 신뢰할 수 있는 API 생성
◆ 실시간 외부 의존성 관리를 지원하는 웹 기반 API 레지스트리 사용
◆ 복잡한 다중 서비스 작업을 일관적으로 수행하기 위한 안정적인 워크플로 구현
이 책의 대상 독자
이 책의 주요 독자는 HTTP를 통해 실행되는 서비스 인터페이스를 계획, 설계, 구현하는 업무를 담당하는 사람들이다. 이 업무는 사내 서비스 생산과 소비를 만드는 것과 오픈 웹에서 전 세계 소비자를 위해 확장 가능하고 안정적인 방식으로 실행될 수 있는 서비스를 구축하는 것을 의미하기도 한다. 프로그래머의 입장에서는 당면한 문제를 해결할 수 있는 유용한 애플리케이션 프로그래밍 인터페이스를 만드는 것을 뜻하기도 한다.
자체 서버로 로컬에서 솔루션을 호스팅하든 클라우드에서 실행할 소프트웨어를 만들든, 이 책의 레시피는 문제를 이해하는 데 도움이 되며 문제를 예측하고 예상치 못한 상황이 발생했을 때 이를 처리할 수 있는 일련의 복구 기술을 제공할 것이다.
목차
목차
- 1장. RESTful Web API의 소개
- RESTful Web API
- 웹에서 확장 가능한 서비스를 위한 공유 원칙
- 2장. 하이퍼미디어식 사고와 설계
- 하이퍼미디어 설계로 기반 구축하기
- 하이퍼미디어와 선험적 설계
- 하이퍼미디어 클라이언트를 통한 회복탄력성 향상
- 하이퍼미디어 서비스를 통한 안정성과 변경 용이성의 증진
- 하이퍼미디어는 어떻게 도움이 되는가?
- 분산 데이터의 지원
- 하이퍼미디어 워크플로를 통한 확장성 강화
- 코레오그래피, 오케스트레이션, 하이퍼미디어 워크플로
- 요약
- 3장. 하이퍼미디어 설계
- 3.1 기존 미디어 타입과의 상호운용성 만들기
- 3.2 정형 미디어 타입과의 향후 호환성 보장
- 3.3 게시된 어휘를 통해 도메인 세부 정보 공유하기
- 3.4 의미 프로필로 문제 공간 기술
- 3.5 임베디드 하이퍼미디어를 통한 런타임에서의 액션 표현
- 3.6 멱등성을 통한 일관성 있는 데이터 작성 설계
- 3.7 서비스 간 상태 전송으로 상호운용성 활성화
- 3.8 반복 가능한 액션을 위한 설계
- 3.9 가역 액션을 위한 설계
- 3.10 확장 가능한 메시지 설계
- 3.11 수정 가능한 인터페이스 설계
- 4장. 하이퍼미디어 클라이언트
- 4.1 하드코딩 URL 사용의 제한
- 4.2 HTTP를 인식하도록 클라이언트 코딩하기
- 4.3 메시지 중심 수행의 탄력적인 클라이언트 만들기
- 4.4 어휘 프로필을 이해하기 위한 효율적인 클라이언트 만들기
- 4.5 런타임 시 프로필 지원을 위한 상호확인
- 4.6 런타임 시 표현 포맷 관리
- 4.7 메시지 메타데이터 소스로써의 스키마 도큐먼트 사용
- 4.8 응답의 모든 중요 요소에는 식별자가 필요하다
- 4.9 응답에서 하이퍼미디어 컨트롤에의 의존
- 4.10 비하이퍼미디어 서비스를 위한 링크와 폼의 지원
- 4.11 런타임에서 데이터 속성 검증
- 4.12 전송 메시지의 검증을 위한 도큐먼트 스키마의 사용
- 4.13 수신 메시지 검증을 위한 도큐먼트 쿼리의 사용
- 4.14 수신 데이터의 검증
- 4.15 자체 상태 관리 유지
- 4.16 목표 설정
- 5장. 하이퍼미디어 서비스
- 5.1 최소 하나 이상의 고정 URL 게시
- 5.2 내부 모델 노출 방지
- 5.3 내부 모델을 외부 메시지로 변환하기
- 5.4 내부 기능을 외부 액션처럼 표현하기
- 5.5 클라이언트 응답 설정에 대한 게시 지원
- 5.6 HTTP의 콘텐츠 상호확인 지원
- 5.7 클라이언트 프로그램을 위한 전체 어휘 게시
- 5.8 표준 포맷에 맞는 공유 어휘 지원
- 5.9 서비스 정의 도큐먼트의 발행
- 5.10 API 메타데이터의 발행
- 5.11 서비스 상태 모니터링 지원
- 5.12 오류 리포트의 표준화
- 5.13 런타임 서비스 레지스트리를 통한 서비스의 회복성 개선
- 5.14 클라이언트 지원 식별자를 통한 처리량 증가
- 5.15 멱등성 생성을 통한 신뢰성 향상
- 5.16 종속 서비스에 대한 런타임 대체 제공
- 5.17 의미적 프록시를 사용한 비규격 서비스로의 액세스
- 6장. 분산 데이터
- 6.1 내부 데이터 스토리지 은닉
- 6.2 모든 변경에 멱등성 부여
- 6.3 외부 액션에 대한 데이터 연관관계 감추기
- 6.4 HTTP URL을 활용한 Contains 및 AND 쿼리
- 6.5 쿼리 응답을 위한 메타데이터 반환
- 6.6 데이터 중심 쿼리를 위한 HTTP 200 VS HTTP 400
- 6.7 데이터 쿼리를 위한 미디어 타입 사용
- 6.8 알 수 없는 데이터 필드 무시하기
- 6.9 캐싱 지시문으로 성능 개선하기
- 6.10 프로덕션에서의 데이터 모델 수정
- 6.11 원격 데이터 저장소 확장
- 6.12 대규모 응답의 제한
- 6.13 데이터 통신을 위한 패스 스루의 사용
- 7장. 하이퍼미디어 워크플로
- 7.1 워크플로 호환 서비스 설계
- 7.2 워크플로를 위한 공유 상태 지원
- 7.3 코드로 워크플로 기술하기
- 7.4 도메인 특화 언어로 워크플로 기술하기
- 7.5 도큐먼트로 워크플로 기술하기
- 7.6 RESTful 작업 제어 언어 지원
- 7.7 워크플로에 대한 진행 상태 리소스의 공개
- 7.8 관련된 모든 액션의 반환
- 7.9 가장 최근에 사용된 리소스의 반환
- 7.10 ‘워크 인 프로그레스’ 상태 유지 작업 지원
- 7.11 표준 목록 탐색 사용
- 7.12 부분 양식 제출 지원
- 7.13 상태 감시를 사용한 클라이언트 중심 워크플로 활성화
- 7.14 쿼리의 저장 기능으로 쿼리 최적화 수행
- 7.15 ‘202 Accepted’를 사용한 미완료 작업에 대한 동기식 회신
- 7.16 자동 재시도를 통한 빠른 오류 대응
- 7.17 로컬 실행 취소 및 롤백의 지원
- 7.18 지원 요청
- 7.19 쿼리와 클러스터로 워크플로 확장하기
- 7.20 워크플로 프록시로 비규격 서비스 등록하기
- 8장. 마무리
- 레시피의 적용
- 기존 서비스의 전환
- 참조할 수 있는 관련 자료
- 다음 단계는?
- 부록 A. RESTful Web API의 가이드 원칙
- 부록 B. 추가 읽을거리
- 부록 C. 관련 표준
- RESTful Web API를 위한 실행 가능한 등록된 미디어 타입
- API 정의 포맷
- 의미 프로필 도큐먼트 포맷
- 하이퍼미디어 지원 타입
- 부록 D. HyperCLI 사용하기
- Hello Hyper!
- 다른 정보
- HyperCLI 명령어