이미 소장하고 있다면 판매해 보세요.
|
1장 객체에서 웹 서비스로
___웹 서비스란 무엇인가? ___지역 객체부터 분산 객체까지 ___왜 웹 서비스를 사용하는가? ___웹 서비스 고려사항과 대안 ___서비스와 느슨한 결합도의 약속 ___SOA는 어떠한가? ___정리 2장 웹 서비스 API 스타일 ___서론 ___웹 서비스 API의 디자인 고려사항 ___RPC API ______고려사항 ___메시지 API ______고려사항 ___리소스 API ______고려사항 3장 클라이언트와 서비스의 상호작용 ___서론 ___요청/응답 ______고려사항 ___요청/확인 ______고려사항 ___미디어 타입 협상 ______고려사항 ___링크된 서비스 ______고려사항 4장 요청과 응답의 관리 ___서론 ___서비스 컨트롤러 ______고려사항 ___데이터 전송 객체 ______데이터 바인딩 고려사항 ______일반적인 고려사항 ___요청 매퍼 ______고려사항 ___응답 매퍼 ______고려사항 5장 웹 서비스 구현 스타일 ___서론 ___웹 서비스 구현을 위한 디자인 고려사항 ___트랜잭션 스크립트 ______고려사항 ___데이터소스 어댑터 ______고려사항 ___오퍼레이션 스크립트 ______고려사항 ___커맨드 호출자 ______고려사항 ___워크플로우 커넥터 ______고려사항 6장 웹 서비스 인프라 ___서론 ___서비스 커넥터 ______고려사항 ___서비스 설명자 ______고려사항 ___비동기식 응답 핸들러 ______고려사항 ___서비스 인터셉터 ___멱등 재시도 ______고려사항 ___SOA 인프라 패턴의 간략한 리뷰 ______서비스 레지스트리 ______엔터프라이즈 서비스 버스 ______오케스트레이션 엔진 7장 웹 서비스의 진화 ___서론 ___무엇이 파괴적 변경을 초래하는가? ______미디어 타입이나 메시지의 구조적 변경 ______서비스 설명자의 변경 ___공통 버전 관리 전략 ___단일 메시지 인수 ___데이터 집합 수정 ______고려사항 ___톨러런트 리더 ______고려사항 ___컨슈머 중심 계약 ______고려사항 ___패턴은 어떻게 서비스의 진화를 촉진하거나 방해하는가? 부록: 외부 패턴 찾아보기 용어집 참고문헌 |
|
저자 서문
이 책의 작업을 시작했을 때만 해도 나는 SOA와 REST가 무엇인지 완전히 확신하지 못했다. 이런 식으로 느끼는 이가 나뿐만이 아니라는 사실을 알고 있었다. SOA와 REST에 관한 대부분의 논의에서는 모호성과 과장법, 잘못된 정보, 이성이 아닌 감성에 호소하는 주장이 만연했다. 하지만 난 분산 객체 기술로 골머리를 앓고 있는 개발자로서 웹 서비스에 매료됐고, 시스템을 통합하고 공통된 비즈니스 로직을 재사용하는 실용적인 방법으로서 웹 서비스를 바라보게 되었다. 그 후로부터 REST는 굉장한 탄력을 받았고, WS* 서비스는 굳건한 기반을 마련했으며, SOA는 사망 선고를 받게 됐다[Manes]. 이 모든 과정에서 웹 서비스를 향한 나의 열정은 조금도 줄어들지 않았다. 모바일과 클라우드, 서비스형 소프트웨어(SaaS, Software-as-a-Service) 플랫폼은 소프트웨어가 점차 분산되는 원인이 되었고, 이에 따라 웹 서비스의 중요성은 점차 커져만 갈 것이다. 우린 정말 흥분되는 시점에 서있다. 옮긴이의 말 우리는 소프트웨어 패턴의 홍수 속에 살아가고 있다. ‘갱 오브 포(gang of four)’의 디자인 패턴이 일으킨 이 물결은 순식간에 ‘패턴’이라는 제목의 수많은 논문과 책을 쏟아내는 데 기여했고, 프로그래머들은 패턴의 유용함과 중요성을 심도 깊게 논의하는 단계에 이르렀다. 하지만 이렇게 범람하는 패턴의 물결이 프로그래머를 패턴에 의존적인 사고방식에만 얽매이게 하는 문제점도 있다. 구조적으로 동일하지만 이름이 여러 가지인 패턴을 두고 어떤 이름이 더 올바른 선택인지 무의미한 고민을 하는 데 시간을 쏟거나, 정확한 의미는 알지 못한 채 단순히 암기한 패턴을 과용하기도 한다. 패턴은 소프트웨어의 구조적인 성공과 실패의 경험이 쌓여서 만들어진 요체다. 이러한 패턴의 속성을 통해 프로그래머는 패턴을 학습하면서 자신이 아직 경험하지 못한 상황을 간접적으로 경험하거나 제대로 해결하지 못한 문제의 해결에 적용할 수 있다. 그런데 이 과정에서 놓치지 말아야 할 중요한 점은, 패턴의 일반적인 해결책 뒤에 숨어 있는 소프트웨어 공학의 근본적인 원칙이 어떤 형태로 패턴에서 표현되는지 파악하려는 노력이 필요하다는 것이다. 패턴은 반복적으로 나타나는 다양한 문제에 대처하기 위해 일반적인 해결책을 보여주므로 프로그래밍의 근본적 원칙의 골자가 표면에 드러난다. 즉 추상화나 모듈화, 결합도, 캡슐화, 복잡도 같은 소프트웨어 공학적 원칙에 관한 고민이 패턴의 구조에 그대로 표현된다. 패턴을 학습하는 프로그래머나 아키텍트에게는 이러한 원칙적인 시각에서의 접근이 반드시 필요하고, 이에 대한 충분한 고민 없이는 패턴을 제대로 이해하고 활용하기 어렵다. 패턴의 명칭을 구분하고 속성을 분류하는 지엽적인 부분에 얽매여 중심을 보지 못하는 이에게는 이러한 시각을 갖고자 하는 노력이 중요한 전환점이 될 것이다. 이 책 『서비스 디자인 패턴 Service Design Patterns』은 웹 서비스 디자인에 필요한 원칙을 명쾌하게 정리했다는 점에서 의미가 있다. ‘갱 오브 포’에서부터 마틴 파울러에 이르는 여러 패턴과 소프트웨어 공학적 원칙을 기반으로, 웹 서비스라는 도메인에서 발생하는 디자인 문제의 효과적이고 근본적인 해결책을 제시한다. 독자는 이 책을 통해 웹 서비스의 디자인에 필요한 실질적인 경험과 지식을 쌓을 수 있을 뿐만 아니라, 그 바탕이 되는 근본적인 원칙을 함께 이해해 깊이 있는 안목과 실제 디자인에 적용 가능한 유연성을 기를 수 있다. 윤창석, 조성배 ---본문 중에서 |
|
이 책은 웹 서비스를 사용하면서 반복적으로 직면하게 되는 문제의 해결책을 제시한다. 이를 위해 REST 아키텍처 스타일을 따르거나 SOAP/WSDL를 활용한 디자인 방안을 제시하며, 풍부한 예제 코드로 독자의 이해를 돕는다. 여러 문제를 핵심 주제별로 분류해서 근본적 디자인 구성요소를 바탕으로 설명하고 있기 때문에, 패턴의 동작 원리를 쉽고 분명하게 이해하고 효과적으로 적용할 수 있게 해준다. 서비스 개발자나 솔루션 아키텍트, 엔터프라이즈 아키텍트 모두에게 가치 있는 내용을 전달할 것이다.
이 책에서 다루는 내용 ■ 어떻게 웹 서비스 API를 만들며, 어떤 공통 API 스타일이 있고, 특정 스타일을 사용해야 하는 시점은 언제인가? ■ 어떻게 클라이언트와 웹 서비스가 통신할 수 있고, 여러 관계자가 오랜 시간에 걸쳐 서로 데이터를 교환할 수 있도록 복잡한 대화를 생성하는 기반은 무엇인가? ■ 웹 서비스 로직을 구현하는 옵션에는 무엇이 있으며, 특정 접근법을 사용해야 할 때는 언제인가? ■ 서비스가 사용하는 하위 시스템과 클라이언트가 더 낮은 결합도를 갖게 하는 방법은 무엇인가? ■ 웹 서비스에 관한 정보는 어떻게 찾을 수 있는가? ■ 클라이언트나 서비스에서 인증과 유효성 검증, 캐싱, 로깅 같은 범용 함수를 지원하는 방법은 무엇인가? ■ 클라이언트의 중단을 가져오는 서비스의 변경은 무엇인가? ■ 서비스에 버전을 부여하는 일반적인 방법은 무엇인가? 클라이언트를 즉시 갱신할 필요 없이, 웹 서비스가 비즈니스 로직의 지속적인 변화를 지원할 수 있도록 디자인하는 방법은 무엇인가? 이 책의 대상 독자 이 책은 전문적인 엔터프라이즈 아키텍트와 솔루션 아키텍트, 웹 서비스를 사용 중이거나 사용할 생각이 있는 개발자를 대상으로 한다. 이 전문가들은 크게 두 집단으로 나눌 수 있다. 첫 번째는 소프트웨어 제품(예: 상용 애플리케이션, 오픈소스 SaaS 애플리케이션)을 생산하는 집단이다. 두 번째는 IT 부서와 협력해 엔터프라이즈 애플리케이션을 개발하는 집단이다. 비록 이 카탈로그는 소프트웨어 업계의 종사자를 대상으로 하지만 학계에도 마찬가지로 적용할 수 있다. 이 책의 구성 1장, 객체에서 웹 서비스로 1장에서는 일반적인 소개를 설명한다. 1장 내용에 이어, 이 카탈로그에 수록된 패턴은 다음과 같은 6개의 장으로 나눠 알아본다. 2장. 웹 서비스 API 스타일 2장은 웹 서비스에서 사용하는 주요 API 스타일을 알아본다. 일단 스타일을 선택하고 나면 방향을 변경하기가 무척 어려워서, 올바른 스타일을 선택하는 일에 따른 결과는 결코 간과할 수 없다. 3장. 클라이언트와 서비스의 상호작용 3장에서는 모든 클라이언트/서버 통신의 기반을 서술한다. 여기서 알아볼 패턴은 어떤 서비스 디자인 스타일과도 함께 사용할 수 있다. 여러분은 이 패턴에 대한 이해를 바탕으로 여러 주체가 특정 주제로 데이터를 교환하는 복잡한 대화를 만들 수 있다. 4장. 요청과 응답의 관리 소프트웨어 애플리케이션은 논리적으로 연관된 엔터티를 포함하는 여러 계층으로 구성되기 마련이다. 4장에서는 웹 요청과 응답에 사용하는 일반적 서비스 계층[POEAA] 엔터티를 알아본다. 여기서 소개하는 패턴의 의도는 서비스가 사용하는 하위 시스템으로부터 클라이언트를 분리(decouple)하는 것이다. 5장. 웹 서비스 구현 스타일 서비스는 다양한 방법으로 구현할 수 있다. 서비스는 데이터베이스 테이블 같은 자원의 지식과 밀접히 연관됐을 수 있고, 객체 관계형 매퍼(ORM, Object Relational Mapper)의 활동이나 레거시 API의 직접 호출 등을 조율할 수 있으며, 외부 엔터티로 작업을 전달할 수 있다. 5장에서는 각 접근에 따른 결과를 살펴본다. 6장. 웹 서비스 인프라 어떤 작업은 너무 일반적이어서 끊임없이 다시 사용되곤 한다. 6장은 가장 일반적이며 기본적인, 클라이언트와 서비스 개발자에게 유용한 인프라 고려사항을 논의한다. 기업 SOA 인프라에 일반적으로 적용되는 여러 패턴도 함께 살펴본다. 7장. 웹 서비스의 진화 개발자는 각기 다른 속도로 변화하는 여러 클라이언트와 지속해서 함께 동작하는 서비스를 만들고자 노력한다. 하지만 이러한 목표는 달성하기가 상당히 힘들다. 7장에선 클라이언트 파괴적 변경(breaking change)을 유발하는 요소와 두 가지 일반적인 버전 관리 전략을 확인한다. 결국, 여러분은 어떻게 소프트웨어 메이저 릴리스를 피하며 클라이언트 요구사항을 만족하도록 서비스를 확장할 수 있는지 보게 된다. 또한 부록과 참고문헌, 용어집을 통해 추가 정보가 제공된다. |