자바 개발자라면 디자인 패턴은 반드시 알아야 한다. 자바 EE 7에는 싱글톤, 팩토리, 장식자, 옵저버, 퍼사드 같은 GoF의 클래식 패턴은 물론 모델-뷰-컨트롤러(MVC), 의존성 주입, 데이터 접근 객체(DAO), 데이터 전송 객체(DTO) 같은 다양한 패턴이 포함되어 있다. 옛 버전 자바 EE와 스프링을 거쳐 현대적으로 다듬어진 자바 EE 7에 포함된 다양한 패턴을 학습하면서 실무에 적용된 디자인 패턴의 모습을 엿볼 수 있다.
이 책의 목적은 유명한 GoF 패턴 책에 나온 고전 디자인 패턴을 설명하고 이들을 최신 자바 EE 6, 7에 맞게 업데이트하는 것이다. 각 장마다 한 패턴씩 옛 방식으로 구현한 다음 자바 EE로 구현하는 방법을 설명한다. 두 가지 방법으로 구현한 예제 코드를 모두 수록했고 저자의 체험담을 통해 패턴을 이용(또는 오용)하는 실제 사례를 들려준다. 각 장 패턴마다 찬성/반대 의견과 용례를 살펴보고 패턴 이해도를 점검하는 연습 문제로 마무리 할 수 있다.
목차
1장 디자인 패턴이란? __1.1 디자인 패턴이란? ____1.1.1 패턴의 유래와 필요성 ____1.1.2 패턴의 실제 __1.2 디자인 패턴 입문 __1.3 엔터프라이즈 패턴 ____1.3.1 자바에서 엔터프라이즈 자바로 ____1.3.2 엔터프라이즈 자바 패턴의 출현 ____1.3.3 디자인 패턴과 엔터프라이즈 패턴의 차이점 ____1.3.4 평범한 옛 디자인 패턴이 자바 EE를 만나다 ____1.3.5 안티패턴이 되다 __1.4 정리하기
2장 자바 EE 기초 __2.1 다중 티어 아키텍처 __2.2 클라이언트 티어 __2.3 미들 티어 ____2.3.1 웹 레이어 ____2.3.2 비즈니스 레이어 __2.4 EIS 티어 __2.5 자바 EE 서버 __2.6 자바 EE 웹 프로파일 __2.7 자바 EE 핵심 원리 __2.8 설정보다 관례 __2.9 컨텍스트와 의존체 주입 __2.11 정리하기
2부 자바 EE 디자인 패턴 구현
3장 퍼사드 패턴 __3.1 퍼사드란? ____3.1.1 퍼사드 클래스 다이어그램 __3.2 일반 자바 코드로 퍼사드 패턴을 구현 __3.3 자바 EE로 퍼사드 패턴을 구현 ____3.3.1 무상태성 빈을 지닌 퍼사드 ____3.3.2 상태성 빈을 지닌 퍼사드 __3.4 언제, 어디에 사용하나? __3.5 정리하기
4장 싱글톤 패턴 __4.1 싱글톤이란? ____4.1.1 싱글톤 클래스 다이어그램 ____4.1.2 일반 자바 코드로 싱글톤 패턴을 구현 __4.2 자바 EE로 싱글톤 패턴을 구현 ____4.2.1 싱글톤 빈 ____4.2.2 시동 시 싱글톤을 사용 ____4.2.3 시동 순서를 결정 ____4.2.4 동시성 관리 __4.3 언제, 어디에 사용하나? __4.4 정리하기
5장 의존체 주입과 CDI __5.1 의존체 주입이란? __5.2 일반 자바 코드로 DI를 구현 __5.3 자바 EE로 DI를 구현 ____5.3.1 @Named 애너테이션 ____5.3.2 컨텍스트/의존체 주입(CDI) ____5.3.3 CDI 대 EJB ____5.3.4 CDI 빈 ____5.3.5 @Inject 애너테이션 ____5.3.6 컨텍스트와 스코프 ____5.3.7 명명법과 EL ____5.3.8 CDI 빈은 JSF의 기반 빈 ____5.3.9 한정자 ____5.3.10 대안자 ____5.3.11 스테레오타입 ____5.3.12 CDI로 움직이는 패턴들 __5.4 정리하기
6장 팩토리 패턴 __6.1 팩토리란? __6.2 팩토리 메서드 ____6.2.1 일반 자바 코드로 팩토리 메서드를 구현 __6.3 추상 팩토리 ____6.3.1 일반 자바 코드로 추상 팩토리를 구현 __6.4 자바 EE로 팩토리 패턴을 구현 ____6.4.1 CDI의 진면목 __6.5 언제, 어디에 사용하나? __6.6 정리하기
7장 장식자 패턴 __7.1 장식자란? ____7.1.1 장식자 클래스 다이어그램 __7.2 일반 자바 코드로 장식자 패턴을 구현 __7.3 자바 EE로 장식자 패턴을 구현 ____7.3.1 XML 설정 없는 장식자 __7.4 언제, 어디에 사용하나? __7.5 정리하기
8장 애스팩트지향 프로그래밍(인터셉터) __8.1 애스팩트 지향 프로그래밍이란? __8.2 일반 자바 코드로 AOP를 구현 __8.3 자바 EE의 애스팩트, 인터셉터 ____8.3.1 인터셉터의 생애 주기 ____8.3.2 기본-레벨 인터셉터 ____8.3.3 인터셉터 순서 ____8.3.4 CDI 인터셉터 __8.4 언제, 어디에 사용하나? __8.5 정리하기
9장 비동기 __9.1 비동기 프로그래밍이란? ____9.1.1 비동기 패턴 __9.2 일반 자바 코드로 비동기 패턴을 구현 __9.3 자바 EE로 비동기 프로그래밍을 구현 ____9.3.1 비동기 빈 ____9.3.2 비동기 서블릿 __9.4 언제, 어디에 사용하나? __9.5 정리하기
10장 타이머 서비스 __10.1 타이머 서비스란? __10.2 자바 EE로 타이머를 구현 ____10.2.1 자동 타이머 ____10.2.2 프로그램 타이머 ____10.2.3 타이머 표현식 ____10.2.4 트랜잭션 __10.3 정리하기
11장 옵저버 패턴 __11.1 옵저버란? ____11.1.1 옵저버 패턴 ____11.1.2 옵저버 클래스 다이어그램 __11.2 일반 자바 코드로 옵저버 패턴을 구현 __11.3 자바 EE로 옵저버 패턴을 구현 __11.4 언제, 어디에 사용하나? __11.5 정리하기
12장 데이터 접근 패턴 __12.1 데이터 접근 패턴이란? ____12.1.1 데이터 접근 클래스 다이어그램 __12.2 데이터 접근 패턴 개요 ____12.2.1 데이터 전송 객체 패턴 ____12.2.2 자바 퍼시스턴스 아키텍처 API와 객체 관계 매핑 __12.3 자바 EE로 데이터 접근 패턴을 구현 ____12.3.1 타입-안전한 DAO 구현체 __12.4 언제, 어디에 사용하나? __12.5 정리하기
13장 REST형 웹 서비스 __13.1 REST란? __13.2 REST의 6대 제약 ____13.2.1 클라이언트-서버 ____13.2.2 일관된 인터페이스 ____13.2.3 무상태 ____13.2.4 캐시 가능 ____13.2.5 계층화 시스템 ____13.2.6 코드 온 디맨드 __13.3 REST API의 리처드슨 성숙도 ____13.3.1 레벨 0: POX(Plain Old XML, 옛날 흔했던 XML) 범벅 ____13.3.2 레벨 1: 리소스 ____13.3.3 레벨 2: HTTP 동사 ____13.3.4 레벨 3: 하이퍼미디어 제어 __13.4 REST형 API 디자인 ____13.4.1 리소스 명명 ____13.4.2 동사가 아닌 명사로 ____13.4.3 자기 서술형으로 ____13.4.4 단수 아닌 복수형으로 ____13.4.5 HTTP 메서드 ____13.4.6 GET ____13.4.7 POST ____13.4.8 PUT ____13.4.9 DELETE __13.5 실전 REST ____13.5.1 명사 users ____13.5.2 명사 topics와 posts __13.6 자바 EE로 REST를 구현 __13.7 HATEOAS __13.8 언제, 어디에 사용하나? __13.9 정리하기
14장 MVC 패턴 __14.1 MVC 패턴이란? ____14.1.1 MVC 타입 __14.2 일반 자바 코드로 MVC 패턴을 구현 __14.3 자바 EE로 MVC 패턴을 구현 __14.4 페이스 서블릿 __14.5 FACESSERVLET을 응용한 MVC __14.5 언제, 어디에 사용하나? __14.6 정리하기
15장 나머지 자바 EE 패턴 __15.1 웹소켓이란? __15.2 메시지 중심 미들웨어란? __15.3 마이크로서비스 아키텍처란? ____15.3.1 모놀리식 아키텍처 ____15.3.2 확장성 ____15.3.3 여러 서비스로 해체 ____15.3.4 마이크로서비스의 좋은 점 ____15.3.5 인생에 쉬운 게 있나요 ____15.3.6 결론 __15.4 안티패턴 ____15.4.1 우버 클래스 ____15.4.2 라자냐 아키텍처 ____15.4.3 콜롬버스 ____15.4.4 진짜 도움되는 친구 ____15.4.5 첨단이 최고야 ____15.4.6 유틸리티맨
3부 총정리
16장 디자인 패턴의 좋은 점, 나쁜 점, 고약한 점 __16.1 좋은 점: 성공을 향한 패턴 __16.2 나쁜 점: 패턴의 과용 및 오용 __16.3 …그리고 고약한 점 __16.4 정리하기
인텔(Intel)사 뉴 디바이스 그룹(New Devices)팀에서 안드로이드 개발자로 일하는 코드광이자 오픈 소스 커미터(committer)입니다. 자바, 웹 프레임워크, 자바 EE, OSGi 애플리케이션 분야의 풍부한 개발 경험을 바탕으로 강의와 멘토링도 합니다.
ㆍ지은이
알렉스시돔
소개
이-스케이프(E-scape) 그룹의 계열사인 인디고 코드 컬렉티브(indigocodecollective.com)의 자바 개발 팀장으로 마이크로서비스 기반 아키텍처 설계/개발 및 커스텀 복권, 즉석 당첨 게임 플랫폼 개발의 메인 개발자로 활동했습니다.
ㆍ옮긴이
이일웅
소개
현재 국내 통신사의 차세대 프로젝트에서 카프카 담당 소프트웨어 아키텍트로 일한다. 2~3년 전부터 이벤트 기반의 마이크로서비스 아키텍처 설계에 많은 관심을 갖게 되었으며, 카프카 기술에도 관심이 많아 콘플루언트 인증 아파치 카프카 개발자/관리자(CCDAK, CCAAK) 자격을 취득했다. 십수 년간 다양한 엔터프라이즈 프로젝트 현장을 누벼왔고 이제는 어느덧 중년 아재가 되었지만, 아직도 코드와 씨름하며 열정적인 기술자로서 활동 중인 두 딸의 아빠다.
모든 자료는 저작권법의 보호를 받는 저작물로, 허락 없이 편집하거나 다른 매체에 옮겨 실을 수 없습니다. 인공지능(AI) 기술 또는 시스템을 훈련하기 위해 자료의 전체 내용은 물론 일부도 사용하는 것을 금지합니다.
All materials are protected by copyright law and may not be edited or reproduced in other media without permission.
It is prohibited to use all or part of the materials, including for training artificial intelligence (AI) technologies or systems, without authorization.
연관 프로그램
아래 프로그램은 길벗출판사가 제공하는 것이 아닙니다.
무료로 사용할 수 있는 정보를 안내해 드리니, 지원이 필요하면 해당 프로그렘 제작사로 문의해 주세요.
독자의견 남기기