Top

[Servlet 3.0과 JSP 2.2 핵심을 꼭꼭 짚은]
서블릿 & JSP 자바 웹 프로그래밍 완성

  • 원서명Servlet & JSP: A Tutorial (ISBN 9780980839623)
  • 지은이부디 커니아완
  • 옮긴이안세원
  • ISBN : 9788960773660
  • 30,000원
  • 2012년 11월 27일 펴냄
  • 페이퍼백 | 504쪽 | 188*250mm
  • 시리즈 : 웹 프로페셔널

책 소개

이 책은 자바 웹 애플리케이션의 기반 기술인 서블릿과 JSP을 설명하며, 서블릿을 처음 접하거나 서블릿의 최신 기능을 익히고자 하는 개발자를 대상으로 한다. 최신 버전인 서블릿 3.0과 JSP 2.2를 기반으로 필터, 리스너, 서블릿, JSP, 커스텀 태그 등의 주요 요소와 함께 보안, 비동기 처리, 파일 업로드와 다운로드 등 웹 애플리케이션 개발에 꼭 필요한 주요 기능을 상세한 예제와 함께 자세히 설명한다.


[ 소개 ]

서블릿과 JSP는 자바 웹 애플리케이션의 기반 기술이다. 따라서 JSF, 스트럿츠 2, 스프링 MVC 등의 프레임워크를 효과적으로 이용하기 위해서는 반드시 익혀둬야 한다.

이 책은 서블릿 3.0과 JSP 2.2를 기준으로 자바로 웹 개발을 할 때 숙지해야 할 주요 프로그래밍 개념, 설계 모델, 관련 기술을 소개한다. 최신 버전의 서블릿과 JSP에 추가된 새로운 기능도 설명한다. 또한 다양한 예제와 폭넓은 주제를 수록했으므로 프로젝트 진행에 실전적인 도움을 주는 가이드가 될 것이다.

명쾌하고 쉬운 설명을 원한다면 이 책이 탁월한 선택이 될 것이다.


[ 이 책에서 다루는 내용 ]

■ 서블릿 API
■ JSP 문법과 스크립팅 요소
■ 세션 관리
■ 표현식 언어
■ JSTL
■ 커스텀 태그와 태그 파일
■ 필터와 리스너
■ 애플리케이션 설계
■ 커넥션 풀링
■ 의존성 주입
■ 파일 업로드와 파일 다운로드
■ 비동기 처리
■ 보안
■ 배포와 배포 기술서
■ 동적 등록
■ 서블릿 컨테이너 초기자


[ 이 책의 구성 ]

1장 ‘서블릿’은 서블릿 API를 소개하며, 몇 가지 간단한 서블릿도 함께 살펴본다. 서블릿 API는 4개의 자바 패키지로 구성되는데, 1장에서는 javax.servlet과 javax.servlet.http 패키지를 살펴본다.

2장 ‘세션 관리’는 세션 추적, 세션 관리를 다룬다. HTTP는 상태를 갖지 않기 때문에 웹 개발을 할 때 세션 관리는 매우 중요하다. 2장에서는 세션을 다시 찾아내는 방법인 URL 리라이팅(URL rewriting), 숨김 필드(hidden field), 쿠키(cookies), HTTPSession 객체를 소개한다.

3장 ‘JSP’에서는 JSP 문법의 구성 요소인 지시어, 스크립팅 요소, 액션을 다룬다. JSP(JavaServer Pages)는 서블릿을 보완하는 기술이다.

4장 ‘표현식 언어’에서는 JSP 2.0에 추가된 가장 중요한 기능인 표현식 언어(EL, expression language)를 설명한다. EL은 JSP에서 스크립트를 없앨 목적으로 만들어졌다. EL을 이용하면 JSP를 좀 더 효율적으로 작성할 수 있으며, JSP의 길이도 줄일 수 있다. 4장에서는 EL을 이용해 자바빈(JavaBeans)과 유효 범위 객체(scoped objects)에 접근하는 방법을 알아본다.

5장 ‘JSTL’은 JSTL(JavaServer Pages Standard Tag Library)의 주요 라이브러리를 설명한다. JSTL은 커스텀 태그 라이브러리의 모음으로, 맵이나 컬렉션의 반복, 조건부 실행, XML 처리, 데이터베이스 접근과 데이터 조작 등의 일반적인 문제를 해결하는 태그를 제공한다.

6장 ‘커스텀 태그’에서는 커스텀 태그 작성법을 알아본다. JSTL를 이용하면 유효 범위 객체에 접근하는 등 JSP에서 수행하는 대부분의 작업을 처리할 수 있다. 하지만 JSTL이 해결해 주지 못하는 작업을 처리하려면 커스텀 태그(custom tag)를 만들어 사용해야 한다.

7장 ‘태그 파일’에서는 간단하게 커스텀 액션을 작성할 수 있게 JSP 2.0에 추가된 기능인 태그 파일(tag file)을 다룬다. 7장에서는 태그 파일로 커스텀 태그를 작성하는 방법과 유의점을 알아본다.

8장 ‘리스너’는 서블릿에 이벤트 주도 프로그래밍 기법을 적용하는 방법을 다룬다. 서블릿 API에 포함된 이벤트 클래스와 리스너 인터페이스를 알아보고, 리스너를 작성하는 방법과 서블릿/JSP 애플리케이션에 적용하는 방법을 알아본다.

9장 ‘필터’는 필터를 다룬다. 필터는 요청을 가로채 처리하는 웹 객체다. Filter, FilterConfig, FilterChain 등의 필터 API를 살펴보고, Filter 인터페이스를 구현해 필터를 작성하는 방법을 알아본다.

10장 ‘애플리케이션 설계’에서는 모델 2 아키텍처를 설명한다. 아주 간단한 애플리케이션을 뺀 거의 모든 자바 웹 애플리케이션에는 모델 2 아키텍처가 권장된다. 예제를 통해 모델 2 애플리케이션을 구성하는 컴포넌트를 알아본다.

11장 ‘파일 업로드’에서는 서블릿 3의 파일 업로드 기능을 사용하는 방법을 알아보고, 더 나은 사용자 경험을 제공할 수 있는 클라이언트 측 구현 방법을 알아본다.

12장 ‘파일 다운로드’는 프로그램적으로 브라우저에 리소스를 전달하는 방법을 설명한다.

13장 ‘요청과 응답 데코레이팅’에서는 데코레이터 패턴(Decorator pattern)을 적용해 서블릿 요청과 응답 객체의 행위를 변경하는 방법을 알아본다. 서블릿 API는 서블릿 요청과 응답을 래핑하는 클래스를 제공한다.

14장 ‘비동기 처리’는 서블릿 3.0에 추가된 비동기 처리 기능을 다룬다. 서블릿/JSP 애플리케이션에 처리 시간이 오래 걸리는 요청이 있다면 비동기 처리가 유용한 해결책이 될 수 있다. 비동기 처리 기능은 요청 처리 스레드가 다른 요청을 처리할 수 있게 작업을 새로운 스레드에 할당한 후 요청 처리 스레드를 스레드 풀에 반환한다.

15장 ‘보안’은 선언적 방법과 프로그램적 방법을 이용해 자바 웹 애플리케이션에 보안을 적용하는 방법을 다룬다. 15장에서는 보안과 관련된 주요 주제인 사용자 인증(authentication), 권한 검증(authorization), 기밀성(confidentiality), 데이터 일관성(data integrity)과 관련된 내용을 알아본다.

16장 ‘배포’에서는 서블릿/JSP 애플리케이션의 배포 절차와 배포 기술서(deployment descriptor의 구성 요소를 알아본다.

17장 ‘동적 등록과 서블릿 컨테이너 초기자’는 서블릿 3에 추가된 기능 중 두 가지를 다룬다. 동적 등록(dynamic registration) 기술을 이용하면 애플리케이션을 재시작하지 않고도 웹 객체를 동적으로 등록할 수 있다. 또 다른 기능인 서블릿 컨테이너 초기자는 프레임워크 개발자에게는 매우 반가운 기능이다.

18장 ‘스트럿츠 2 소개’에서는 MVC 프레임워크인 스트럿츠 2(Struts 2)를 소개한다. 스트럿츠 2의 기본 컴포넌트, 설정 방법을 알아보고, 간단한 애플리케이션을 만들어본다.

부록 A ‘톰캣’에서는 운영체제별 톰캣(Tomcat) 설치 방법과 설정 방법을 알아본다.

부록 B ‘웹 애노테이션’은 서블릿, 리스너, 필터 등 웹 객체를 설정하는 애노테이션의 전체 목록을 제공한다. 이 애노테이션들은 서블릿 3에 새로 추가됐으며, 애노테이션을 활용하면 배포 기술서 없이도 웹 애플리케이션을 만들 수 있다.

부록 C ‘SSL 인증서’에서는 KeyTool 프로그램을 이용해 개인/공개키 쌍을 만드는 방법과 인증기관을 통해 공개키를 디지털 인증서로 서명하는 방법을 알아본다.

저자/역자 소개

[ 저자 서문 ]

이 책은 서블릿 3.0과 JSP 2.2를 다룬다.

흔히 서블릿이라 부르는 자바 서블릿(java servlet)은 자바로 웹 애플리케이션을 만드는 데 필요한 기반 기술이다. 서블릿은 썬 마이크로시스템즈(Sun Microsystems) 사가 1996년에 발표했으며, 당시 웹용 동적 컨텐트를 만들 때 사용한 표준 기술인 CGI(Common Gateway Interface)에 대항할 목적으로 만들어졌다. CGI는 HTTP 요청을 받을 때마다 프로세스를 만드는데, 프로세스 생성에는 상당한 CPU 자원이 필요하기 때문에 CGI로는 대규모 서비스를 구축하기가 쉽지 않다. 반면 서블릿은 첫 요청이 들어왔을 때 메모리에 한 번 적재되기만 하면 후속 요청을 계속 처리할 수 있기 때문에 CGI보다 무척 빠르게 요청을 처리할 수 있다.

서블릿이 발표된 이후 여러 자바 기반 웹 프레임워크가 개발됐다. 프레임워크를 쓰면 반복해서 만들어야 하는 코드를 작성하는 수고를 덜고 업무 로직에 집중할 수 있으므로 웹 애플리케이션을 빠르게 개발할 수 있다. 그러나 어떤 웹 개발 프레임워크를 사용한다고 해도 기본 기술인 서블릿과 JSP(JavaServer Pages)를 제대로 이해하고 있어야 한다. JSP는 서블릿을 간편하게 작성할 수 있게 추가된 기술이다. 이미 스트럿츠 2, 스프링 MVC, JSF(JavaServer Faces) 같은 훌륭한 프레임워크를 사용 중이더라도 서블릿과 JSP를 제대로 이해하지 않은 상태에서는 효율적이고 효과적으로 코드를 작성할 수 없다. 서블릿은 서블릿 컨테이너에서 동작하는 자바 클래스다. 서블릿 컨테이너(servlet container)나 서블릿 엔진(servlet engine)은 웹 서버와 유사해보이지만, 정적 리소스만 제공할 수 있는 웹 서버와 달리 동적 컨텐트도 생성할 수 있다.

최신 버전인 서블릿 3.0은 JSR(Java Specification Request) 315에 정의돼 있다(http://jcp.org/cn/jsr/dctail?id=315). 서블릿 3.0이 동작하려면 자바 SE 6 이후 버전이 필요하다. JSP 2.2는 JSR 245에 정의돼 있다(http://jcp.org/en/jsr/detail?id=245). 이 책은 여러분이 자바와 객체 지향 프로그래밍을 알고 있다고 전제한다. 자바에 익숙하지 않다면 내가 쓴 다른 책인 『Java 7: A Beginner’s Tutorial (Third Edition)』(ISBN 978-0980839616)을 추천한다.


[ 저자 소개 ]

부디 커니아완(Budi Kurniawan)
핵심을 짚는 명쾌한 글쓰기 스타일로 잘 알려진 저술가이자 브레이니 소프트웨어 사(Brainy Software Inc.)의 컨설턴트로, 포춘 100대 기업을 비롯한 세계의 여러 기업이 사용하는 대형 애플리케이션을 설계하고 개발했다. 또한 명망 높은 매체들에 100건이 넘는 글을 기고했으며, 『톰캣 최종분석』(에이콘출판, 2005), 『Java for the Web with Servlets, JSP, and EJB』를 집필했다.


[ 옮긴이의 말 ]

PHP, 파이썬, 루비 등 많은 언어의 도전이 계속되고 있지만, 여전히 우리나라의 웹 개발 환경은 자바가 대세입니다. 예전에도 자바를 많이 써 왔지만, 최근에는 전자정부 표준 프레임워크를 필두로 한 스프링 MVC의 인기가 대단하기 때문에 자바는 국내 웹 개발 환경에서 대단한 위세를 떨치고 있습니다.

스프링 MVC, 스트럿츠 2와 같이 훌륭한 프레임워크들이 널리 사용되는 21세기에 서블릿과 JSP 이야기를 꺼내자니 고루하다는 생각이 듭니다. 하지만 저자인 부디 커니아완이 이야기하듯 이런 멋진 프레임워크를 더 잘 쓰려면 역시 기반이 되는 기술을 잘 알고 있어야 합니다. 서블릿은 옛날에 이미 다 공부하셨다고요? 하지만 서블릿과 JSP도 계속 발전을 하고 있습니다. 예전의 서블릿이 아니랍니다. 계속 공부하셔야 하지요. (한숨 소리가 들리네요.)

이 책은 최신 표준인 서블릿 3.0과 JSP 2.2를 다룹니다. 실전에서 사용할 만한 비동기 처리, 파일 업로드와 다운로드, 보안 등의 주요 측면을 실전적인 예제로 소개하므로 서블릿을 처음 접하는 분과 최신 서블릿의 특징을 빠르게 익히고자 하는 분 모두를 만족시킬 수 있으리라 생각합니다.

저 또한 번역을 계기로 최신 서블릿의 기능을 익힐 수 있어 좋았습니다. 이 책에서 서블릿 전반을 다루다 보니 아무래도 많은 용어가 등장하는데, 업무 현장에서 쓰이면서도 원래의 뜻을 잘 전달할 수 있는 단어를 선정하려고 노력했습니다. 큰 도움을 준 미투데이, 페이스북의 많은 개발자 동지들에게 이 자리를 빌려 고맙다는 말씀을 드립니다. 독자 여러분에게 쉽고 정확한 정보를 전달할 수 있도록 열심히 번역했습니다. 미흡한 부분이 있다면 너그러이 용서해주세요. 고맙습니다.


[ 옮긴이 소개 ]

안세원
서버 개발자, 소프트웨어 공학 컨설턴트를 거쳐 지금은 조그마한 스타트업에서 열심히 안드로이드와 씨름 중이다. 요즘은 스칼라와 사랑에 빠져보려 노력하고 있다. 번역서로 『알짜만 골라 배우는 자바 구글앱엔진』(에이콘출판, 2010)이 있다.

목차

목차
  • 1장 서블릿
  • 2장 세션 관리
  • 3장 JSP
  • 4장 표현식 언어
  • 5장 JSTL
  • 6장 커스텀 태그
  • 7장 태그 파일
  • 8장 리스너
  • 9장 필터
  • 10장 애플리케이션 설계
  • 11장 파일 업로드
  • 12장 파일 다운로드
  • 13장 요청과 응답
  • 14장 비동기 처리
  • 15장 보안
  • 16장 배포
  • 17장 동적 등록과 서블리 컨테이너 초기자
  • 18장 스트럿츠 2 소개
  • 부록 A 톰캣
  • 부록 B 웹 애노테이션

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

1쇄 수정 사항(2015.06.11 기준)

[ p48 11행 ]
writer.println("</head>");삭제

[ p89 아래에서 3행 ]
writer.println("<tr>" + "<tr>"writer.println("<tr>"

[ p140 16행 ]
page 지시어의 isELIgnored 요소의 값을 →page 지시어의 isELIgnored 속성의 값을

[ 전 장 용어 수정 ]
초기 매개변수 → 초기화 매개변수

[ p235 아래에서 5행 ]
이때 세선 속성의 → 이때 세션 속성의

[ p.284 아래에서 8행부터 p.285 위에서 5행까지]
(코드를 얇은 글씨에서 굵은 글씨로 표시 변경)

// ProductForm 확인 ProductValidator productValidator =
new ProductValidator();
List errors =
productValidator.validate(productForm);
if (errors.isEmpty()) {
// 모델 생성
Product product = new Product();
product.setName(productForm.getName());
product.setDescription(productForm
.getDescription());
product.setPrice(Float.parseFloat(
productForm.getPrice()));

[ p286 1행 ]
이 객체는 HTLM → 이 객체는 HTML

[ p323 아래에서 4행 ]
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();

request.setCharacterEncoding("utf-8");

에서 마지막 줄인 request.setCharacterEncoding("utf-8");를 가독성을 위해 위치 변경.

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();

[ p.340 아래에서 2행]
try-with-reousrces → try-with-resources

[ p.359 7행 ]
(소문자 c에서 대문자 C로 변경) autocorrect → autoCorrect

[ p438 아래에서 3행 ]
상황 변화에 따라 따른 결과를 → 상황 변화에 따라 다른 결과를