자바가 최고의 프로그래밍 언어로 인정받는 데는 이유가 있다. 자바 SE에 익숙한 프로그래머라면 엔터프라이즈 애플리케이션을 개발할 때 처음부터 시작할 필요 없이 안전하고, 안정적이며, 확장성이 우수한 자바 EE를 활용해 손쉽게 기술을 업그레이드할 수 있다. 《자바 웹 개발 완벽 가이드》는 이러한 목표를 달성할 수 있게끔 구성한 책이다.

이 책은 자바 SE와 SQL에 대해 잘 알고 기본적인 HTML을 이해할 수 있는 능력을 갖춘 프로그래머가 기존의 자바 웹 개발 기술을 한 단계 끌어올리도록 돕는다. 처음부터 차례로 읽으면서 배우거나 자바 프로그래밍에 대한 구체적인 질문이 있을 때 찾아보는 참고서로도 활용할 수 있다.

이 책에서는 자바 EE 플랫폼 버전 7과 이에 포함된 다양한 기술과 더불어 스프링 프레임워크, 게시/구독, AMQP(고급 메시지 대기열 프로토콜), O/RM(객체-관계형 매퍼), 하이버네이트 ORM, 스프링 데이터, 전체 텍스트 검색, 아파치 루씬(Lucene), 하이버네이트 서치, 스프링 시큐리티, OAuth 등의 내용을 다룬다.

자바 웹 개발 기술을 한 차원 끌어올리는 완벽한 방법

《자바 웹 개발 완벽 가이드》는 자바 언어와 자바 플랫폼 스탠더드 에디션(자바 SE)에 대한 경험과 지식이 풍부한 소프트웨어 개발자와 엔지니어를 대상으로 한다. 이 책은 기존의 자바 개발자가 애플릿, 콘솔 또는 데스크톱 애플리케이션을 개발하면서 얻은 자바에 대한 지식과 경험을 바탕으로 엔터프라이즈 자바 웹 애플리케이션을 개발하는 방법을 배우기 위한 자습서다.

이 책은 자바 플랫폼 엔터프라이즈 에디션(자바 EE)에 대한 경험이 있는 개발자가 기억을 되살리거나 최신 자바 EE 버전의 새로운 기능을 배우는 데 유용하다. 또, 다양한 웹 소프트웨어 개발 개념과 패턴을 비롯해 구체적인 툴과 플랫폼 컴포넌트를 다루고 있으므로 소프트웨어 설계자에게도 유용하다. 설계자가 새로운 아이디어를 팀의 프로젝트와 프로세스에 적용하게끔 도와줄 것이다.

또한 이 책은 소프트웨어 개발 팀의 관리자에게도 유용하다. 관리자가 자신의 팀에 속한 개발자와 엔지니어들과 효과적으로 의사소통하려면 지식 기반을 넓힐 필요가 있으며 개발자가 사용하는 툴을 이해하면 특정 문제를 해결하기 위한 제안도 할 수 있다. 이 책을 읽고 나면 팀원들이 프로젝트에 적용되는 기술과 개념을 익힐 수 있게 책을 몇 권 더 구매해서 나눠줄 수도 있을 것이다.

마지막으로 이 책은 교사와 학생을 위한 교육 환경에서 사용할 수 있다. 이 책을 대학교 3~4학년용 강의 교재로 사용하면 졸업 이후 업무 현장에서 즉시 활용 가능한 수준 높은 기술을 쌓을 수 있다.

★ 이 책에서 다루는 내용 ★

  • 엔터프라이즈 웹 애플리케이션 개발을 위한 자바 코드 작성법
  • 웹 애플리케이션 설계자가 새로운 개념을 프로젝트와 프로세스에 적용하는 법
  • 자바 EE 플랫폼 버전 7과 이에 포함된 다양한 기술
  • 서블릿, JSP, 웹소켓, 스프링 프레임워크, AMQP, JPA O/RM, 스프링 데이터, 전체 텍스트 검색, 아파치 루씬, 하이버네이트 서치, 스프링 시큐리티, OAuth
  • 자바 SE 8에 새로 추가된 람다 식과 JSR 310 날짜 및 시간 API의 다양한 활용법

니콜라스 S. 윌리엄스 (Nicholas S. Williams)

니콜라스 S. 윌리엄스는 자바와 관련 기술에 대한 인정받는 전문가다. 2010년에는 중부 테네시의 올해의 소프트웨어 엔지니어로 선출되기도 했다. 아파치 Log4J, 아파치 톰캣, 잭슨 매퍼, 스프링 프레임워크, 스프링 시큐리티 등의 다양한 오픈소스 프로젝트에서 버그 수정, 새 기능 제안, 설명서 작성 등의 역할에 적극 참여하고 있다.

최민석

번역회사에서 언어전문가로 일하다 뜻하는 바를 이루기 위해 프리랜서로 독립해서 현재는 전문 번역가로 일하고 있다. 주로 IT 관련 소프트웨어의 현지화와 개발자 웹 사이트 관련 프로젝트를 진행하고 있으며 앞으로 개발자 서적 분야에서 작은 변화를 일으키고 싶다는 소박한 소망을 하고 있다. 번역가의 고민은 독자의 고민과 반비례한다는 믿음으로 오늘도 기꺼이 고민할 준비가 돼 있다.

  • [1부] 엔터프라이즈 애플리케이션 개발
    •  
    • ▣ 01장: 자바 플랫폼 엔터프라이즈 에디션 소개
      • 자바 플랫폼 연대표
        • 초창기
        • 엔터프라이즈 자바의 탄생
        • 자바 SE와 자바 EE의 동반 발전
        • 최신 플랫폼 기능
        • 계속된 발전
      • 기본적인 웹 애플리케이션의 구조 이해
        • 서블릿, 필터, 리스너 및 JSP
        • 디렉터리 구조와 WAR 파일
        • 배포 설명자
        • 클래스 로더 아키텍처
        • 엔터프라이즈 아카이브(EAR)
      • 정리
      •  
    • ▣ 02장: 웹 컨테이너 이용하기
      • 웹 컨테이너 선택
        • 아파치 톰캣
        • 글래스피시
        • 제이보스 및 와일드플라이
        • 기타 컨테이너와 애플리케이션 서버
        • 이 책에서 톰캣을 사용하는 이유
      • 톰캣 설치
        • 윈도우 서비스로 설치
        • 명령줄 애플리케이션으로 설치
      • 커스텀 JSP 컴파일러 구성
      • 톰캣에 애플리케이션 배포 및 배포 취소
        • 수동 배포 및 배포 취소
        • 톰캣 관리자 사용
      • IDE에서 톰캣 디버깅하기
        • 인텔리J IDEA 사용
        • 이클립스 사용
      • 정리
      •  
    • ▣ 03장: 첫 번째 서블릿 작성
      • 서블릿 클래스 작성
        • 서블릿이 확장하는 대상
        • 이니셜라이저와 디스트로이어
      • 배포를 위한 서블릿 구성
        • 설명자에 서블릿 추가
        • 서블릿과 URL 매핑
        • 서블릿 실행 및 디버깅
      • doGet(), doPost() 및 다른 메서드
        • 서비스 메서드 실행 중 수행해야 하는 작업
        • HttpServletRequest 사용
        • HttpServletResponse 사용
      • 초기화 매개변수를 이용한 애플리케이션 구성
        • 컨텍스트 초기화 매개변수 사용
        • 서블릿 초기화 매개변수 사용
      • 폼을 통한 파일 업로드
        • 고객 지원 프로젝트 소개
        • 파일 업로드를 위한 서블릿 구성
        • 파일 업로드 수신
      • 다중 스레드로부터 애플리케이션을 보호하는 방법
        • 요청과 스레드, 메서드 실행
        • 공유 자원 보호
      • 정리
      •  
    • ▣ 04장: JSP로 콘텐츠 표시하기
      • output.println("<br />")보다는 <br />가 사용하기 쉽다
      • JSP의 장점
        • 런타임에 JSP에서 일어나는 일
      • 첫 번째 JSP 작성
        • 파일 구조
        • 지시문, 선언, 스크립트릿, 식
        • 코드 주석 지정
        • JSP 임포트 추가
        • 지시문 사용
        • jsp 태그 사용
      • JSP에서 자바 사용하기(그리고 이를 피해야 하는 이유)
        • JSP에서 암시적 변수 사용
        • JSP에서 자바를 사용하지 말아야 하는 이유
      • 서블릿과 JSP의 결합
        • 배포 설명자에서 JSP 프로퍼티 구성
        • 서블릿에서 JSP로 요청 전달
      • JSP 문서(JSPX)에 대한 간단한 소개
      • 정리
      •  
    • ▣ 05장: 세션을 이용한 상태 유지
      • 세션이 필요한 이유
        • 상태 유지
        • 사용자 기억하기
        • 애플리케이션 워크플로 지원
      • 세션 쿠키 및 URL 다시 쓰기
        • 세션 쿠키
      • URL을 통한 세션 ID 전달
        • 세션 취약점
      • 세션에 데이터 저장하기
        • 배포 설명자에서 세션 구성
        • 데이터 저장 및 검색
        • 데이터 제거
        • 세션에 더 복잡한 데이터 저장하기
      • 세션의 유용한 적용
        • 고객 지원 애플리케이션에 로그인 추가
        • 리스너를 이용한 세션 변경 감지
        • 활성 세션의 목록 유지
      • 세션을 사용하는 애플리케이션의 클러스터링
        • 클러스터 내의 세션 ID 사용
        • 세션 복제 및 장애 조치에 대한 이해
      • 정리
      •  
    • ▣ 06장: JSP에서 식 언어 사용
      • 식 언어
        • 식 언어의 목적
      • 기본 구문 이해
        • EL 식 배치
      • EL 구문 작성하기
        • 예약된 키워드
        • 연산자 우선순위
        • 객체 프로퍼티 및 메서드
        • EL 함수
        • 정적 필드 및 메서드 접근
        • 열거형
        • 람다 식
        • 컬렉션
      • EL 식에서 범위가 있는 변수 사용하기
        • 암시적 EL 범위 사용
        • 암시적 EL 변수 사용
      • 스트림 API를 이용한 컬렉션 접근
        • 중간 연산
        • 최종 연산 사용
        • 스트림 API의 실제 사용
        • 식 언어로 자바 코드 대체
      • 정리
      •  
    • ▣ 07장: 자바 표준 태그 라이브러리 사용
      • JSP 태그 및 JSTL 소개
        • 태그 사용하기
      • 코어 태그 라이브러리(c 네임스페이스) 사용하기
        • c:out 태그
        • c:url 태그
        • c:if 태그
        • c:choose, c:when, c:otherwise 태그
        • c:foreach 태그
        • c:forTokens 태그
        • c:redirect 태그
        • c:import 태그
        • c:set, c:remove 태그
      • 코어 라이브러리 태그 사용하기
        • 국제화 및 서식 지정 태그 라이브러리(fmt 네임스페이스) 사용하기
        • 국제화 및 지역화 컴포넌트
        • fmt:message 태그
        • fmt:setlocale 태그
        • fmt:bundle, fmt:setbundle 태그
        • fmt:requestencoding 태그
        • fmt:timezone, fmt:setTimezone 태그
        • fmt:formatdate, fmt:parsedate 태그
        • fmt:formatnumber, fmt:parsenumber 태그
        • i18n 및 서식 지정 라이브러리 태그 실제로 사용하기
        • 데이터베이스 접근 태그 라이브러리(sql 네임스페이스) 사용하기
      • XML 프로세싱 태그 라이브러리(x 네임스페이스)
      • JSP 태그로 자바 코드 대체하기
      • 정리
    • ▣ 08장: 커스텀 태그 및 함수 라이브러리 작성
      • TLD, 태그 파일 및 태그 핸들러
        • 자바 표준 태그 라이브러리 TLD 읽기
        • JSP 지시문과 태그 파일 지시문의 비교
      • HTML 템플릿으로 사용할 첫 번째 태그 파일 작성
      • 날짜 서식 지정 태그 핸들러 작성
      • EL 함수를 이용한 문자열 단축
      • 커스텀 JSP 태그로 자바 코드 대체하기
      • 정리
      •  
    • ▣ 09장: 필터를 이용한 애플리케이션 개선
      • 필터의 용도
        • 로깅 필터
        • 인증 필터
        • 압축 및 암호화 필터
        • 오류 처리 필터
      • 필터 작성과 선언, 매핑
        • 필터 체인
        • URI 패턴과 서블릿 이름 매핑하기
        • 여러 요청 디스패처 형식에 매핑하기
        • 배포 설명자 사용하기
        • 어노테이션 사용하기
        • 프로그래밍 방식의 구성 사용하기
      • 필터의 올바른 순서 지정
        • URL 패턴 매핑과 서블릿 이름 매핑 비교
        • 간단한 예제로 필터 순서 이해하기
        • 비동기 요청 처리에 필터 사용하기
      • 필터의 실용적인 사용법
        • 간단한 로깅 필터 추가
        • 필터를 사용한 응답 콘텐츠 압축
      • 필터를 이용한 인증 간소화
      • 정리
      •  
    • ▣ 10장: 웹소켓을 이용한 대화식 애플리케이션 개발
      • 진화: AJAX에서 웹소켓으로
        • 문제: 서버에서 브라우저로 새 데이터 얻기
        • 해결책 1: 잦은 폴링
        • 해결책 2: 긴 폴링
        • 해결책 3: 청크 인코딩
        • 해결책 4: 애플릿과 어도비 플래시
        • 웹소켓: 아무도 몰랐던 해결책의 재발견
      • 웹소켓 API
        • HTML 5(자바스크립트) 클라이언트 API
        • 자바 웹소켓 API
      • 웹소켓을 이용한 멀티플레이어 게임 개발
        • 기본적인 틱-택-토 알고리즘 구현
        • 서버 엔드포인트 만들기
        • 자바스크립트 게임 콘솔 작성
        • 웹소켓 틱-택-토 테스트
      • 클러스터에서 웹소켓을 이용한 통신
        • 서블릿 인스턴스 두 개로 간단한 클러스터 시뮬레이션
        • 이진 메시지 주고받기
        • 시뮬레이트된 클러스터 애플리케이션 테스트
      • 고객 지원 애플리케이션에 "담당자와 채팅" 기능 추가하기
        • 인코더와 디코더를 이용한 메시지 변환
        • 채팅 서버 엔드포인트 만들기
        • 자바스크립트 채팅 애플리케이션 작성하기
      • 정리
      •  
    • ▣ 11장: 로깅을 활용한 애플리케이션 모니터링
      • 로깅의 개념 이해
        • 로그를 사용해야 하는 이유
        • 로그에 추가할 수 있는 콘텐츠
        • 로그를 기록하는 방법
      • 로깅 레벨 및 범주 사용
        • 다양한 로깅 레벨을 사용하는 이유
        • 정의된 로깅 레벨
        • 로깅 범주가 작동하는 방법
        • 로그 여과가 작동하는 방법
      • 로깅 프레임워크 선택
        • API와 구현 비교
        • 성능
        • 아파치 커먼즈 로깅 및 SLF4J 소개
        • log4j 2 소개
      • 애플리케이션에 로깅 통합하기
        • log4j 2 구성 파일 만들기
      • 웹 필터로 피시 태깅 활용하기
        • 자바 코드를 이용한 로깅 문 작성
        • JSP에서 로그 태그 라이브러리 사용하기
        • 고객 지원 애플리케이션에서 로깅하기
      • 정리
      •  
  • [2부] 스프링 프레임워크와의 통합
    •  
    • ▣ 12. 스프링 프레임워크 소개
      • 제어 반전과 의존성 주입
      • 관점 지향 프로그래밍
      • 데이터 접근과 트랜잭션 관리
      • 애플리케이션 메시징
      • 웹 애플리케이션을 위한 모델-뷰-컨트롤러 패턴
      • 스프링 프레임워크의 장점
        • 논리적 코드 그룹화
        • 하나의 코드 기반을 활용하는 여러 사용자 인터페이스
      • 애플리케이션 컨텍스트
      • 스프링 프레임워크 시동
        • 배포 설명자를 이용한 스프링 시동
        • 이니셜라이저에서 프로그래밍 방식으로 스프링 시동
      • 스프링 프레임워크 구성
        • XML 구성 만들기
      • 하이브리드 구성 만들기
      • @Configuration을 이용한 자바 기반 스프링 구성
      • 빈 정의 프로필의 활용
        • 프로필이 작동하는 방법
        • 안티패턴과 보안에 대한 고려
      • 정리
      •  
    • ▣ 13장: 컨트롤러로 서블릿 대체하기
      • @RequestMapping
        • @RequestMapping 속성을 이용해 요청의 일치 범위 줄이기
        • 컨트롤러 메서드 매개변수 지정
        • 컨트롤러 메서드에 유효한 반환형 선택
      • 스프링 프레임워크의 모델과 뷰 패턴 사용
        • 명시적 뷰와 뷰 이름 사용
        • 암시적 뷰와 모델 속성 사용
        • 응답 엔터티 반환
      • 폼 객체 활용
        • 모델에 폼 객체 추가
        • 스프링 프레임워크의 form 태그 사용
        • 제출된 폼 데이터 획득
      • 고객 지원 애플리케이션 업데이트
        • 다중 파트 지원 활성화
        • 서블릿을 스프링 MVC 컨트롤러로 변환
        • 커스텀 다운로딩 뷰 작성
      • 정리
      •  
    • ▣ 14장: 서비스와 리포지토리로 컨트롤러 지원하기
      • 모델-뷰-컨트롤러와 컨트롤러-서비스-리포지토리
        • 프로그램 로직의 다양한 유형
        • 리포지토리 - 지속성 로직
        • 서비스 - 비즈니스 로직
        • 컨트롤러 - 사용자 인터페이스 로직
      • 웹 애플리케이션 컨텍스트 대신 루트 애플리케이션 컨텍스트 사용
        • 여러 사용자 인터페이스에서 루트 애플리케이션 재사용
        • 컨트롤러에서 서비스로 비즈니스 로직 옮기기
        • 리포지토리를 데이터 저장소로 사용
      • 비동기 및 예약 실행으로 서비스 기능 향상
        • 실행자와 스케줄러
        • 스케줄러와 비동기식 지원 구성
        • @Async 메서드 작성 및 사용
        • @Scheduled 메서드 작성 및 사용
      • 웹소켓에 로직 계층 분리 적용
        • 스프링 애플리케이션 컨텍스트로 컨테이너가 관리하는 객체 추가
        • 스프링 웹소켓 구성자 사용
        • 웹소켓은 비즈니스 로직을 위한 인터페이스일 뿐이다
      • 정리
      •  
    • ▣ 15장: 스프링 프레임워크 i18n을 이용한 애플리케이션 국제화
      • 스프링 프레임워크 i18n이 필요한 이유
        • 쉬운 국제화 방법
        • 직접 오류 메시지 지역화하기
      • 기본 국제화 및 지역화 API 사용
        • 리소스 번들과 메시지 형식
        • 메시지 원본 사용
        • 메시지 원본을 활용한 JSP 국제화
      • 스프링 프레임워크에서 국제화 구성
        • 메시지 원본 만들기
        • 로캘 확인자
        • 핸들러 인터셉터를 이용한 로캘 변경
        • 사용자 프로필 로캘 설정 제공하기
        • 표준 시간대 지원
        • 테마를 통해 국제화를 개선하는 방법
      • 코드 국제화
        • spring:message 태그 활용
        • 깔끔한 애플리케이션 오류 처리
      • 고객 지원 애플리케이션 업데이트
        • 메시지 원본 직접 사용
      • 정리
      •  
    • ▣ 16장: JSR 349, 스프링 프레임워크 및 하이버네이트 유효성 검사기를 활용한 빈 유효성 검사
      • 빈 유효성 검사의 기본 개념
        • 하이버네이트 유효성 검사기의 장점
        • 어노테이션 메타데이터 모델
        • 스프링 프레임워크를 이용한 빈 유효성 검사
      • 스프링 프레임워크 컨테이너에서 유효성 검사 구성
        • 스프링 유효성 검사기 빈 구성
        • 오류 코드 지역화 설정
        • 메서드 유효성 확인 빈 후처리기 사용
        • 동일한 유효성 검사 빈을 사용하도록 스프링 MVC 구성
      • 빈에 제약조건 유효성 검사 어노테이션 추가
        • 기본 제공 제약조건 어노테이션
        • 공통적인 제약조건 속성
        • 제약조건의 실제 사용
        • @Valid를 이용한 재귀적인 유효성 검사
        • 유효성 검사 그룹 사용
        • 컴파일 시 제약조건의 적합성 확인
      • 메서드 유효성 검사를 위한 스프링 빈 구성
        • 구현이 아닌 인터페이스에 어노테이션 지정
        • 메서드 매개변수에서 제약조건과 재귀적인 유효성 검사 사용
        • 메서드 반환값의 유효성 검사
        • 메서드 유효성을 검사할 클래스 지정
        • 스프링 MVC 컨트롤러에서 매개변수 유효성 검사 사용
        • 사용자에게 유효성 검사 오류 표시
      • 유효성 검사 제약조건 작성
        • 커스텀 제약조건에서 다른 제약조건 상속
        • 제약조건 유효성 검사기 만들기
        • 제약조건 유효성 검사기의 수명주기 이해
      • 고객 지원 애플리케이션에 유효성 검사 통합
      • 정리
      •  
    • ▣ 17장: RESTful과 SOAP 웹 서비스
      • 웹 서비스
        • 초창기의 웹 서비스 SOAP
        • 간단한 해결책을 제시하는 RESTful 웹 서비스
      • 스프링 MVC를 이용한 RESTful 웹 서비스 구성
        • 스테레오타입 어노테이션을 이용한 컨트롤러 구분
        • 별도의 웹과 REST 애플리케이션 컨텍스트 만들기
        • RESTful 웹 서비스에서 오류 상황 처리
        • RESTful 응답과 컨트롤러 메서드 매핑
        • 인덱스 엔드포인트를 이용한 검색 개선
      • 웹 서비스 엔드포인트 테스트
        • 테스트 툴 선택
        • 웹 서비스에 요청 수행
      • SOAP를 위한 스프링 웹 서비스 사용
        • 계약 우선 XSD와 WSDL 작성
        • SOAP 디스패처 서블릿 구성 추가
        • SOAP 엔드포인트 만들기
      • 정리
      •  
    • ▣ 18장: 메시징과 클러스터링 활용을 통한 유연성과 안정성 향상
      • 메시징과 클러스터링이 필요한 시점 알기
        • 애플리케이션 메시징
        • 클러스터링 소개
        • 메시징과 클러스터링이 함께 작동하는 방법
      • 애플리케이션에 메시징 지원을 추가하는 방법
        • 애플리케이션 이벤트 만들기
        • 애플리케이션 이벤트 구독
        • 애플리케이션 이벤트 게시
        • 클러스터에서 메시지를 배포하는 방법
        • 배포를 지원하기 위한 이벤트 업데이트
        • 커스텀 이벤트 멀티 캐스터 생성 및 구성
        • 웹소켓을 이용한 이벤트 전송 및 수신
        • 멀티캐스트 패킷으로 노드 검색
        • 다중 배포를 통한 클러스터 시뮬레이션
      • AMQP를 이용한 메시지 배포
        • AMQP 브로커 구성
        • AMQP 멀티캐스터 만들기
        • AMQP 지원 애플리케이션 실행
      • 정리
      •  
  • [3부] JPA와 하이버네이트 ORM을 이용한 애플리케이션 개발
    •  
    • ▣ 19장: 자바 지속성 API와 하이버네이트 ORM 소개
      • 데이터 지속성
        • 플랫 파일 엔터티 저장소
        • 구조화된 파일 저장소
        • 관계형 데이터베이스 시스템
        • 객체 지향 데이터베이스
        • 스키마리스 데이터베이스 시스템
      • 객체-관계형 매퍼 소개
        • 엔터티 저장의 문제 이해
        • 편리한 엔터티 지속성을 구현하는 O/RM
        • 표준 O/RM API를 제공하는 JPA
        • 하이버네이트 ORM의 장점
      • 하이버네이트 ORM에 대한 간단한 소개
        • 하이버네이트 매핑 파일 사용
        • 세션 API
        • SessionFactory에서 세션 얻기
        • 스프링 프레임워크로 SessionFactory 만들기
      • 관계형 데이터베이스 준비
        • MySQL과 MySQL 워크벤치 설치
        • MySQL JDBC 드라이버 설치
        • 톰캣에서 연결 리소스 만들기
      • 메이븐 의존성에 대한 참고 사항
      • 정리
      •  
    • ▣ 20장: JPA 어노테이션을 이용한 엔터티와 테이블 매핑
      • 간단한 엔터티로 시작하기
        • 엔터티 표시하기와 테이블로 매핑하기
        • JPA가 엔터티 필드를 사용하는 방법 지정
        • 대체 키 매핑
        • 기본 데이터 형식 사용
        • 열 이름과 다른 세부 정보 지정
      • 지속성 유닛 만들기와 사용
        • 데이터베이스 테이블 설계
        • 지속성 유닛의 범위 이해
        • 지속성 구성 만들기
        • 지속성 API 사용
      • 복합 데이터 형식 매핑
        • 열거형을 엔터티 프로퍼티로 사용
        • JPA가 날짜와 시간을 처리하는 방법 이해
        • 큰 프로퍼티를 CLOB과 BLOB으로 매핑
      • 정리
      •  
    • ▣ 21장: 스프링 프레임워크 리포지토리에서 JPA 이용
      • 스프링 리포지토리와 트랜잭션 사용
        • 트랜잭션의 범위 이해
        • 트랜잭션과 엔터티 관리자를 위한 스레드 사용
        • 예외 변환 활용
      • 스프링 프레임워크에서 지속성 구성
        • DataSource 조회
        • 코드에서 지속성 만들기
        • 트랜잭션 관리 설정
      • JPA 리포지토리 생성 및 사용
        • 지속성 유닛 주입
        • 표준 CRUD 작업 구현
        • 모든 엔터티를 위한 기본 리포지토리 만들기
        • 서비스에서 트랜잭션 경계 표시
        • 트랜잭션 서비스 메서드 사용
      • DTO와 엔터티를 통한 데이터 변환
        • 고객 지원 애플리케이션을 위한 엔터티 만들기
        • BCrypt를 이용한 사용자 비밀번호 보호
        • 서비스에서 엔터티로 데이터 전송
      • 정리
      •  
    • ▣ 22장: 스프링 데이터 JPA를 이용한 보일러플레이트 리포지토리 제거
      • 스프링 데이터의 통합 데이터 접근
        • 코드 중복 피하기
        • 스톡 리포지토리 인터페이스 사용
        • 엔터티를 검색하는 쿼리 메서드 작성
        • 커스텀 메서드 구현 제공
      • 스프링 데이터 JPA 리포지토리 구성 및 생성
        • 리포지토리 자동 생성 활성화
        • 스프링 데이터 JPA 인터페이스 작성 및 사용
      • 고객 지원 애플리케이션 리팩터링
        • 기존 리포지토리 변환
        • 지원 티켓에 설명 추가
      • 정리
      •  
    • ▣ 23장: JPA와 하이버네이트 서치를 이용한 데이터 검색
      • 검색 소개
        • 인덱스의 중요성 이해
        • 세 가지 다른 접근법
      • 고급 기준을 사용한 객체 검색
        • 복잡한 조건 쿼리 만들기
        • 쿼리에서 OR 사용
        • 성능 향상을 위한 유용한 인덱스 생성
      • JPA를 통한 전체 텍스트 인덱스 활용
        • MySQL 테이블에 전체 텍스트 인덱스 생성
        • 검색 가능 리포지토리 생성 및 사용
        • 전체 텍스트 검색의 이식성
      • 아파치 루씬과 하이버네이트 서치를 이용한 데이터 인덱싱
        • 루씬 전체 텍스트 인덱싱
        • 엔터티에 어노테이션을 지정해 메타데이터 인덱싱하기
        • JPA를 통한 하이버네이트 서치 사용
      • 정리
      •  
    • ▣ 24장: 고급 매핑과 커스텀 데이터 형식 만들기
      • 더 알아볼 내용
      • 비표준 데이터 형식 변환
        • 속성 변환기
        • 변환 어노테이션
        • 속성 변환기 작성 및 사용
      • 엔터티에 POJO 포함하기
        • 포함 가능 형식 지정
        • 프로퍼티에 포함 표시
        • 포함된 열 이름 재정의
      • 엔터티 간 관계 정의
        • 일대일 관계 이해
        • 일대다 및 다대일 관계 사용
        • 다대다 관계 만들기
      • 다른 일반적인 상황 해결
        • 수정 버전과 타임스탬프를 이용한 엔터티 버전 지정
      • 공통 프로퍼티를 가진 추상 엔터티 정의
        • 기본 및 포함된 컬렉션 매핑
        • 키-값 쌍의 Map 저장
        • 여러 테이블에 엔터티 저장
      • 프로그래밍 방식 트리거 만들기
        • CRUD 작업 전후에 동작 수행
        • 엔터티 리스너 사용
      • 고객 지원 애플리케이션 개선
      • Attachment의 컬렉션 매핑
        • 로드 타임 위빙을 이용한 단순 프로퍼티의 지연 로딩
      • 정리
      •  
  • [4부] 스프링 시큐리티를 이용한 애플리케이션 보호
    •  
    • ▣ 25장: 스프링 시큐리티 소개
      • 인증이란?
        • 인증 통합
        • 권한 부여
      • 스프링 시큐리티 소개
        • 스프링 시큐리티의 기반 이해
        • 스프링 시큐리티의 권한 부여 서비스
        • 스프링 시큐리티 구성
      • 정리
      •  
    • ▣ 26장: 스프링 시큐리티를 이용한 사용자 인증
      • 인증 공급자 선택 및 구성
        • 사용자 세부 정보 공급자 구성
        • LDAP와 액티브 디렉터리 공급자 사용
        • OpenID를 사용한 인증
        • 사용자 기억하기
        • 그밖의 인증 공급자 소개
      • 커스텀 인증 공급자 작성
        • 올바른 시동 순서
        • 공급자 생성 및 구성
        • 교차 사이트 요청 위조 공격 예방
      • 정리
      •  
    • ▣ 27장: 권한 부여 태그 및 어노테이션 활용
      • 선언을 통한 권한 부여
        • 메서드 코드에서 사용 권한 검사
        • URL 보안 적용
        • 어노테이션을 이용한 사용 권한 선언
        • 메서드 포인트컷 규칙 정의
      • 권한 부여 결정
        • 접근 결정 보터
        • 접근 결정 관리자 사용
      • 접근 제어 목록을 통한 객체 보안
        • 스프링 시큐리티 ACL
        • 접근 제어 목록 구성
        • ACL을 엔터티로 채우기
      • 고객 지원 애플리케이션에 권한 부여 추가
        • 커스텀 사용자 세부 정보로 전환
        • 서비스 메서드의 보안
        • 스프링 시큐리티의 태그 라이브러리 사용
      • 정리
      •  
    • ▣ 28장: OAuth를 이용한 RESTful 웹 서비스 보호
      • 웹 서비스 보안
        • 웹 GUI와 웹 서비스 보안 비교
        • 인증 메커니즘 선택
      • OAuth 소개
        • 핵심 요소
        • 시작: OAuth 1.0
        • 표준: OAuth 1.0a
      • 혁신: OAuth 2.0
      • 스프링 시큐리티 OAuth
        • OAuth 2.0 공급자
        • OAuth 2.0 클라이언트 만들기
      • 고객 지원 애플리케이션 완성
        • 요청 임시값과 시그니처 생성
        • 클라이언트 서비스 구현
        • 임시값 서비스 구현
        • 토큰 서비스 구현
        • 리소스 서버 필터 커스터마이즈
        • 스프링 시큐리티 다시 구성
      • OAuth 클라이언트 애플리케이션 만들기
        • REST 템플릿 커스터마이즈
        • 스프링 시큐리티 OAuth 클라이언트 구성
        • REST 템플릿 사용
        • 공급자와 클라이언트 함께 테스트
      • 정리
  • 118쪽, 본문 예제

    case "download":
        this.downloadAttachment(request, response);
        break;
    case "download":
    

    ==>

    case "download":
        this.downloadAttachment(request, response);
        break;
    
  • 138쪽, pageEncoding 항목

    다음 문장을

    JSP에서 사용할 문자 인코딩을 지정하며 HttpServletResponse의 setCharacterEncoding과 기능이 같다.

    다음과 같이 변경

    JSP에서 사용할 문자 인코딩을 지정하며 HttpServletResponse의 setCharacterEncoding에 대응된다.

  • 139쪽, 밑에서 5번째 줄

    발생한 경우 요청을 전달한 JSP를 ==> 발생한 경우 요청을 전달할 JSP를

예제코드 관련 깃허브 페이지

관련 글