자바 개발자라면 디자인 패턴은 반드시 알아야 한다. 자바 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) 자격을 취득했다. 십수 년간 다양한 엔터프라이즈 프로젝트 현장을 누벼왔고 이제는 어느덧 중년 아재가 되었지만, 아직도 코드와 씨름하며 열정적인 기술자로서 활동 중인 두 딸의 아빠다.
독자의견 남기기