본문 바로가기

출간 도서 소개

3. 코드로 배우는 스프링 웹 프로젝트

 

 

 

 

 

-제목-
코드로 배우는 스프링 웹 프로젝트

-부제-
현업 개발을 위한 단계별 실습서

저자: 구멍가게 코딩단
출판사: 남가람북스
발행일: 2015-08-16
ISBN: 979-11-954845-2-2
가격: 32,000원
페이지: 744
판형: 182*232*356
바코드: 9 791195 484522 93000

-저자 소개-
지은이: 구멍가게 코딩단
프로그래밍을 좋아하지만, 남들 앞에 나설 용기 없는 10년 차 이상 개발자, 현업 관리자, 강사들의 비공개 모임. 유일한 공통점은 집필 담당인 강요천의 지인이라는 점.
어린 시절 구멍가게 앞 아저씨들이 인생의 진리를 가볍게 던졌던 것처럼 프로그래밍의 오의(奧義)를 가볍게 던지고 싶은 사람들의 모임.
http://zerockcode.blogspot.kr를 통해서 세상과 소통을 시작하고 있고, 조만간 동영상 강의, 오프라인 교육 등의 계획을 발표할 예정임.


-책소개-
이 책의 주제는 Spring Framework(이하 스프링)를 이용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책입니다. 웹 프로젝트라고 거창하게 표현을 하지만 좀 더 구체적으로는 스프링으로 웹 프로젝트에서 사용되는 게시물 관리를 만들어 보는 것이 주된 목적입니다.

모든 웹 프로젝트는 그 성격에 따라 구성과 구조가 다르긴 하지만 결과적으로는 게시물 관리 모듈의 집합체라고 볼 수 있습니다. 이 책에서는 웹 프로젝트에 사용되는 게시물을 다음과 같은 예제들로 작성합니다.
* 단순한 등록, 수정, 삭제, 조회, 페이징 처리가 필요한 게시물 관리
* Ajax를 이용해서 동작할 필요가 있는 게시물 관리
* 자료실과 같이 첨부파일 기능이 필요한 게시물 관리
* 모바일에서 사용할 수 있는 REST 기반의 게시물 관리
* 보안처리가 필요한 게시물 관리

-출판사 리뷰-
현재까지 출간된 스프링관련 많은 서적들은 주로 스프링의 내부 구조나 원리 등 이론적인 배경에 초점을 두었지만, 이 책은 그보다는 개발 현장에서 사용하는 도구로서 스프링을 취급합니다.

<이 책의 대상 독자>
이 책은 웹 프로젝트를 진행하는 과정에서 스프링을 사용하기 때문에 다음과 같은 선수지식이 필요합니다.
* Java 언어에 대한 기본 지식
* Servlet/JSP의 실습 경험 및 기본 지식
* HTML/JavaScript/CSS에 대한 기본 지식

이 책은 다음과 같은 개발자를 대상으로 합니다.
* 프레임워크를 사용해서 개발 경험을 쌓으려는 개발자
* 웹 개발 지식과 경험은 있지만, 스프링을 사용해 본 적이 없는 개발자
* 최근에 변화된 스프링을 이용해서 개발하고 싶은 개발자
* 웹 프로젝트를 진행하면서 어떤 개발 단계를 거쳐야 하는지 알려는 개발자

<이 책의 구성과 활용방법>

이 책의 구성은 크게 다음과 같습니다.
#. Part 1: 프로젝트의 기본 구조 구성
     스프링의 몇 가지 특징
 스프링 MVC, MyBatis 개발 환경 설정
 개발에 사용하는 MySQL 데이터베이스의 설정과 테스트

#. Part 2: 기본적인 기능의 게시물 관리
 단순한 등록, 수정, 삭제, 조회와 리스트 기능의 게시판 만들기
 페이징 처리와 검색기능

#. Part 3: Ajax 댓글 처리
 REST 방식의 개발과 @RestController
 jQuery와 Ajax를 이용하는 서버 호출
 Ajax와 REST 방식을 이용하는 게시물에 대한 댓글 처리

#. Part 4: AOP와 트랜잭션 처리
 AOP의 개념과 설정
 트랜잭션 관리의 설정과 테스트 

#. Part 5: 게시물의 첨부파일 기능 
 <form>을 이용하는 파일 업로드
 Ajax를 이용하는 파일 업로드
 썸네일 이미지 처리와 다운로드

#. Part 6: 인터셉터를 활용하는 로그인 처리
 인터셉터와 필터
 로그인 처리와 로그인 체크
 세션 방식으로 로그인 처리
 자동로그인 처리


-목차-

들어가며

PART 1 프로젝트의 기본 구조 구성

1. 개발 환경의 설정
1.1 STS의 설치와 개발환경
1.2 스프링 프로젝트를 시작하는 두 가지 방법
1.3 Spring Project를 이용한 프로젝트 생성
1.4 라이브러리의 초기화
1.4.1 프로젝트의 실행 점검
1.4.2 JDK 버전의 처리
1.4.3 스프링 MVC 프로젝트 템플릿의 구조
1.4.4 Spring 프레임워크의 버전 변경
1.4.5 Tomcat 8 설치 및 사용
1.4.6 설치 작업 정리

2. 스프링에 대한 간단 소개
2.1 스프링 프레임워크가 개발의 대세가 된 이유
2.2 스프링의 주요 특징
2.2.1 POJO 기반의 구성
2.2.2 의존성 주입(DI)을 통한 객체 간의 관계 구성
2.2.3 AOP의 지원
2.2.4 트랜잭션의 지원

3. 예제를 위한 MySQL의 설정과 스프링 테스트
3.1 MySQL의 설치
3.2 MySQL Workbench의 활용
3.2.1 계정 연결
3.2.2 MySQL의 새로운 스키마 추가
3.2.3 사용자의 기본 스키마 설정
3.2.4 DB 테스트
3.3 MySQL 연결 테스트와 jUnit
3.3.1 MySQL 테스트 관련 라이브러리
3.3.2 JDK 1.7이상의 JDBC 코딩
3.4 작업 내역의 정리
 
4. 스프링 + MyBatis + MySQL의 설정
4.1 일반적인 스프링 웹 프로젝트의 구성
4.1.1 이 책의 프로젝트 구성
4.2 MyBatis와의 구성
4.3 MyBatis 연동을 위한 준비
4.3.1 spring-jdbc, spring-test, MyBatis, mybatis-spring 추가
4.3.2 Spring Project에서 root-context.xml 파일의 수정
4.4 MySQL과의 연결을 담당하는 DataSource 설정하기
4.4.1 DataSource의 테스트 진행
4.5 MyBatis 연결
4.5.1 SqlSessionFactory 객체 설정
4.5.2 mybatis-config.xml 파일의 추가
4.5.3 MyBatis의 연결 테스트
4.6 작업 내역의 정리

5. 모델 2 방식과 스프링 MVC
5.1 모델 2 패턴의 이해
5.1.1 모델 2에서 Front Controller 패턴으로
5.1.2 스프링 MVC의 구조
5.2 스프링 MVC의 컨트롤러
5.2.1 Spring Project의 servlet-context.xml 파일
5.2.2 스프링 MVC에서 주로 사용하는 애노테이션의 종류
5.2.3 기초적인 컨트롤러 생성 실습
5.3 WAS없이 컨트롤러를 테스트하기

6. 스프링 + MyBatis
6.1 테이블 생성 및 개발 준비
6.1.1 데이터베이스의 테이블 생성
6.1.2 도메인 객체를 위한 클래스의 설계
6.2 DAO 인터페이스의 작성
6.3 XML Mapper의 작성
6.3.1 Mapper 파일의 저장 경로
6.3.2 XML Mapper의 작성
6.3.3 myBatis-Spring에서 XML Mapper 인식
6.4 DAO 인터페이스의 구현
6.4.1 SqlSessionTemplate의 설정
6.4.2 구현 클래스 작성하기
6.5 스프링에 빈으로 등록하기
6.6 테스트 코드의 작성
6.7 MyBatis의 로그 log4jdbc-log4j2
6.8 Mybatis의 #{ } 문법
6.9 정리

PART 2 기본적인 기능의 게시물 관리

1. 등록, 수정, 삭제, 조회 기능의 구현
1.1 개발 목표 인식
1.2 각 영역에 따른 개발의 준비
1.3 프로젝트의 생성
1.4 개발 전 준비 - 데이터베이스 관련
1.4.1 DataSource의 등록
1.4.2 DataSource의 테스트
1.4.3 개발 패키지 구성
1.4.4 테이블의 생성 작업
1.4.5 테스트를 위한 SQL 준비
1.5 스프링의 UTF-8 처리 필터 등록
1.6 CSS, JavaScript 준비
1.6.1 프로젝트의 템플릿 적용
1.7 작업 내역 정리

2. 영속(persistence) 계층, 비즈니스 계층
2.1 BoardVO의 작성
2.2 DAO의 생성과 XML Mapper 작업
2.2.1 XML 네임스페이스의 추가
2.2.2 SessionFactory, SqlSessionTemplate의 추가
2.2.3 BoardDAO의 생성
2.2.4 XML Mapper에서의 SQL 처리
2.2.5 BoardDAO의 구현 클래스 BoardDAOImpl
2.2.6 BoardDAO의 테스트
2.2.7 <typeAliases>의 적용
2.3 계층별 구현 - 비즈니스 계층
2.3.1 비즈니스 계층의 구현
2.3.2 비즈니스 계층의 테스트

3. 등록 구현 - 컨트롤러와 프레젠테이션 계층
3.1 컨트롤러의 구현
3.1.1 컨트롤러 관련 고민들
3.1.2 컨트롤러의 선언
3.2 컨트롤러의 동작 확인과 루트 경로 지정
3.3 뷰(view)의 구현 - 등록
3.3.1 컨트롤러에서의 데이터 전달
3.3.2 결과 페이지의 문제점 - 새로 고침
3.3.3 리다이렉트(redirect)와 결과 데이터
3.3.4 RedirectAttributes를 이용한 숨김 데이터의 전송

4. 전체 목록 구현
4.1 컨트롤러의 완성 및 JSP의 완성
4.1.1 각 목록에 링크 처리하기
4.2 목록에 추가로 구현해야 하는 사항들

5. 조회 구현
5.1 BoardController의 기능 추가와 뷰 처리
5.1.1 조회용 페이지 작성
5.2 수정, 삭제로의 링크 처리

6. 삭제/수정 처리
6.1 삭제 처리
6.2 수정 처리

7. 예외 처리
7.1 예외 처리에 대한 팁
7.1.1 Exception을 화면으로 전달하기

8. 페이징 처리 - 영속(persistence) 계층, 비즈니스 계층
8.1 페이징 처리 방식
8.1.1 페이징 처리의 원칙
8.2 페이징 처리 개발에 필요한 지식
8.2.1 MySQL의 limit를 이용한 페이지 출력 SQL
8.3 MyBatis의 BoardDAO 처리
8.3.1 BoardDAO, XML Mapper, BoardDAOImpl의 처리
8.3.2 페이징 처리의 SQL 테스트
8.4 DAO 처리를 도와줄 Criteria 클래스 만들기
8.4.1 BoardDAO 인터페이스의 수정
8.4.2 XML Mapper의 수정
8.4.3 BoardDAOImpl의 수정
8.4.4 BoardDAOTest에서의 테스트 작업
8.5 BoardService 수정하기

9. 페이징 처리 -컨트롤러와 프레젠테이션 계층
9.1 1차 화면 테스트
9.2 화면 하단의 페이징 처리
9.2.1 endPage 구하기
9.2.2 startPage 구하기
9.2.3 totalCount와 endPage의 재계산
9.2.4 prev와 next의 계산
9.3 페이징 처리용 클래스 설계하기
9.4 BoardController와 뷰 처리
9.4.1 listPage.jsp의 처리
9.5 페이징을 위한 SQL 문의 처리
9.5.1 BoardDAO의 수정
9.5.2 XML Mapper의 수정
9.5.3 BoardDAOImpl의 수정
9.5.4 BoardService/BoardServiceImpl의 수정
9.5.5 BoardController의 수정
9.6 페이징 처리의 개선을 위한 Tip
9.6.1 스프링 MVC의 UriComponentsBuilder를 이용하는 방식
9.6.2 JavaScript를 이용하는 링크의 처리
9.7 목록 페이지와 정보 유지하기
9.7.1 BoardController의 수정
9.7.2 readPage.jsp의 작성
9.7.3 수정 페이지와 삭제 페이지의 처리

10. 검색 처리와 동적 SQL
10.1 검색에 필요한 데이터와 SearchCriteria
10.2 SearchBoardController의 작성
10.2.1 JSP 페이지의 준비
10.3 검색에 필요한 JSP 수정
10.3.1 searchType과 keyword 링크 처리
10.3.2 검색 버튼의 동작 처리
10.4 MyBatis 동적 SQL
10.4.1 BoardDAO의 수정
10.4.2 XML Mapper 수정
10.4.3 BoardDAOImpl의 수정
10.4.4 BoardDAO의 테스트
10.4.5 동적 SQL 문의 추가
10.5 BoardService와 SearchBoardController의 수정
10.6 조회, 수정, 삭제 페이지의 처리
10.6.1 게시물의 조회 처리
10.6.2 게시물의 삭제 처리
10.6.3 게시물의 수정 처리
10.7 등록 페이지 처리
10.8 최종적인 결과 확인
10.9 정리

PART 3 Ajax 댓글 처리

1. RestController와 Ajax
1.1 @RestController의 소개
1.2 예제 프로젝트의 생성
1.3 테스트용 컨트롤러 생성하기
1.3.1 @RestController의 용도
1.3.2 단순 문자열의 경우
1.3.3 루트 컨텍스트로 실행하기
1.3.4 객체를 JSON으로 반환하는 경우
1.3.5 컬렉션 타입의 객체를 반환하는 경우
1.3.6 ResponseEntity 타입

2. 댓글 처리와 REST
2.1 Advanced REST Client를 이용한 테스트
2.2 REST와 Ajax
2.3 댓글 처리를 위한 준비
2.3.1 전달 방식과 처리 방식의 결정
2.3.2 데이터 전송 방식의 결정
2.3.3 댓글을 위한 테이블 설정
2.3.4 댓글을 위한 도메인 객체 설계
2.3.5 ReplyDAO
2.3.6 ReplyService/ReplyServiceImpl 작성
 
3. REST 방식의 ReplyController 작성
3.1 등록 처리
3.2 특정 게시물의 전체 댓글 목록의 처리
3.3 수정 처리
3.3.1 HiddenMethod의 활용
3.4 삭제 처리
3.5 페이징 처리
3.5.1 ReplyDAO 처리
3.5.2 XML Mapper 처리
3.5.3 ReplyDAOImpl 처리
3.5.4 ReplyService 페이징 처리
3.5.5 ReplyController에서의 페이징 처리

4. 화면에서의 Ajax 호출
4.1 개발의 순서 결정
4.1.1 테스트를 위한 컨트롤러와 JSP
4.2 전체 댓글 목록의 테스트
4.2.1 전체 댓글 목록 출력
4.2.2 전체 목록에 대한 함수 처리
4.3 댓글 등록 화면 및 테스트
4.3.1 jQuery의 $.post( )를 사용하지 않는 이유
4.3.2 댓글 등록 후 전체 댓글 목록의 갱신
4.4 댓글 조회 및 수정/삭제
4.4.1 수정과 삭제를 위한 <div>
4.4.2 <div>에 댓글 보이기
4.4.3 삭제 호출하기
4.4.4 수정 작업 처리하기
4.5 댓글의 페이징 처리
4.5.1 댓글 페이지를 위한 <ul> 처리
4.5.2 페이지 번호 이벤트 처리
 
5. 게시물 관리의 댓글 적용
5.1 조회 화면의 수정
5.2 handlebars를 이용한 템플릿
5.2.1 handlebars 사용 연습
5.3 댓글 목록 처리
5.3.1 댓글 목록의 이벤트 처리
5.3.2 댓글 페이징의 이벤트 처리
5.4 새로운 댓글의 등록
5.4.1 댓글 등록의 이벤트 처리
5.5 수정과 삭제를 위한 Modal창
5.5.1 각 댓글의 버튼 이벤트 처리
5.6 수정과 삭제의 처리
5.7 정리

PART 4 AOP와 트랜잭션 처리

1. Spring의 AOP와 트랜잭션 관리
1.1 AOP라는 용어와 의미
1.1.1 AOP와 관련된 용어
1.1.2 Advice의 종류

2. 샘플 프로젝트의 생성과 AOP의 적용 준비
2.1 추가해야 하는 라이브러리와 설정
2.1.1 root-context.xml의 설정
2.2 샘플용 테이블 설계
2.3 샘플용 도메인 객체, DAO, XML Mapper, 서비스
2.3.1 도메인 객체 MessageVO
2.3.2 DAO 설정
2.4 서비스 객체 설정

3. AOP 연습하기
3.1 Advice 생성하기
3.1.1 SampleAdvice의 작성
3.2 컨트롤러의 작성과 테스트하기
3.3 실행 시에 전달되는 파라미터 파악하기
3.4 가장 강력한 Around

4. Spring의 트랜잭션 처리
4.1 트랜잭션에 대한 기본 설명
4.1.1 트랜잭션의 기본 원칙
4.1.2 트랜잭션을 처리하는 상황 이해하기
4.2 @Transactional 애노테이션
4.3 트랜잭션 매니저의 설정
4.3.1 root-context.xml의 처리
4.4 트랜잭션 적용 테스트
4.4.1 정상적인 경우의 테스트
4.4.2 트랜잭션이 처리되지 않은 비정상적인 경우의 테스트
4.4.3 MessageService의 트랜잭션 처리 후 테스트
4.4.4 트랜잭션에 따른 로그 변화
4.5 @Transactional의 적용 순서

5. 게시물의 댓글에 따른 트랜잭션 처리
5.1 댓글 카운트의 처리
5.1.1 BoardVO의 변경
5.1.2 boardMapper.xml의 SQL 문 변경
5.1.3 BoardDAO, ReplyDAO 변경
5.1.4 ReplyServiceImpl의 수정
5.1.5 조회 화면의 댓글 수 출력
5.1.6 조회 화면에서 댓글의 숫자 출력
5.2 조회 숫자의 처리
5.2.1 BoardDAO, XML Mapper, BoardDAOImpl의 처리
5.2.2 BoardService의 처리
5.3 정리

PART 5 게시물의 첨부파일 기능

1. 스프링 MVC의 파일 업로드
1.1 파일 업로드의 활용
1.2 예제 프로젝트의 생성
1.2.1 실습을 위한 라이브러리 추가
1.2.2 파일 업로드 관련 <bean> 설정
1.3 일반적인 파일 업로드 이해하기
1.3.1 POST 방식의 파일 업로드 처리
1.3.2 업로드 파일의 저장
1.3.3 <iframe>을 이용한 파일 업로드의 결과 처리
1.4 Ajax 방식의 파일 업로드
1.4.1 Ajax 업로드용 컨트롤러와 JSP작성하기
1.4.2 이벤트 처리하기
1.4.3 FormData를 이용한 서버 호출

2. 전송된 파일의 저장
2.1 파일 업로드용 클래스 설계하기
2.1.1 업로드 기능의 설계
2.1.2 업로드 폴더의 생성 처리
2.1.3 썸네일 생성하기
2.1.4 최종적인 파일 업로드 순서
3. UploadController의 재구성

4. 전송된 파일을 화면에 표시하기
4.1 파일 데이터 전송하기
4.1.1 UploadController의 파일 전송 기능 구현
4.1.2 일반 파일인 경우의 다운로드 테스트
4.1.3 이미지 타입의 파일인 경우의 테스트
4.2 JSP에서 파일 출력하기
4.2.1 파일 링크 처리

5. 첨부파일의 삭제
5.1 UploadController의 삭제 처리
5.2 JSP에서의 첨부파일 삭제 처리
5.2.1 파일 삭제 후 화면에서의 제거

6. 게시물 등록의 파일 업로드
6.1 개발 목표의 정리
6.2 게시물 등록 준비
6.2.1 데이터베이스에 테이블 추가
6.2.2 도메인 객체의 변화
6.2.3 BoardDAO의 변화
6.2.4 BoardService의 변경과 트랜잭션의 처리
6.3 게시물 등록을 위한 화면 처리
6.3.1 파일 업로드를 위한 register.jsp 페이지 수정하기
6.3.2 업로드 된 파일 이름의 처리를 위한 JavaScript
6.3.3 <form> 태그의 submit 처리

7. 조회 페이지와 파일 업로드
7.1 BoardVO 객체의 조회
7.1.1 BoardDAO의 처리
7.1.2 BoardService의 처리
7.1.3 컨트롤러의 수정
7.2 조회 화면에서의 처리
7.2.1 원본 이미지의 조회와 다운로드 처리

8. 게시물 수정, 삭제 작업의 파일 업로드
8.1 수정 작업 시의 BoardDAO
8.1.1 수정 작업에 대한 서비스의 트랜잭션 관리
8.1.2 수정 화면의 처리
8.1.3 삭제 처리
8.1.4 삭제 화면의 처리
8.2 정리

PART 6 인터셉터(Interceptor)를 활용하는 로그인 처리

1. Spring MVC의 인터셉터(Interceptor)
1.1 Filter와 인터셉터의 공통점과 차이점
1.2 Spring AOP 기능과 HandlerInterceptor의 차이
1.2.1 HandlerInterceptorAdapter 클래스
1.3 예제를 위한 프로젝트의 생성
1.3.1 패키지의 생성과 SampleInterceptor
1.3.2 servlet-context.xml의 인터셉터 설정
1.3.3 HomeController의 수정
1.3.4 SampleInterceptor의 처리
1.3.5 실행 및 결과
1.4 인터셉터의 request, response 활용하기
1.4.1 preHandle( )의 Object 파라미터
1.4.2 postHandle( )을 이용해서 추가적인 작업하기

2. HttpSession을 이용하는 로그인 처리
2.1 준비 작업
2.1.1 테이블 생성 및 객체 처리
2.1.2 UserDAO의 생성 및 SQL 처리
2.1.3 UserService와 UserServiceImpl 처리
2.2 컨트롤러의 처리
2.2.1 UserController의 작성
2.3 LoginInterceptor의 작성 및 설정
2.3.1 LoginInterceptor의 설정
2.3.2 로그인의 화면 처리
2.4 AuthInterceptor의 작성
2.4.1 AuthInterceptor의 설정
2.4.2 자동 페이지의 이동 처리

3. 게시물의 세부 기능 적용
3.1 인터셉터 URI mapping
3.1.1 servlet-context.xml의 설정
3.2 각 JSP 별 로그인 처리
3.2.1 게시물의 등록 페이지
3.2.2 게시물의 조회 페이지

4. 자동 로그인과 쿠키
4.1 쿠키를 이용하는 자동 로그인 방식
4.1.1 LoginInterceptor에서의 쿠키 생성하기
4.1.2 브라우저 종료 후 다시 접속하기
4.1.3 자동 로그인 구상하기
4.2 자동 로그인의 구현
4.2.1 데이터베이스의 변경
4.2.2 코드의 변경
4.2.3 UserController의 변경
4.2.4 AuthInterceptor의 변경
4.2.5 자동 로그인 테스트
4.3 로그아웃 처리
4.4 보완이 필요한 부분
4.5 정리

부록

1. MyBatis의 Mapper 인터페이스 활용
1.1 예제 프로젝트의 생성
1.1.1 XML 네임스페이스 지정
1.1.2 DataSource, SqlSessionFactory의 설정
1.2 Mapper 인터페이스의 작성
1.3 인터페이스 Mapper의 인식
1.3.1 자동으로 매퍼 인식하기
1.4 Mapper의 테스트
1.5 @Param을 이용한 다중 파라미터 처리
1.6 Mapper 인터페이스와 XML을 같이 활용하기
1.6.1 root-context.xml 파일의 수정
1.7 Dynamic SQL과 @SelectProvider
1.7.1 #{id}와 ${id}, @SelectProvider

2. 스프링 부트를 이용한 프로젝트 생성
2.1 STS 상에서 스프링 부트 프로젝트 생성하기
2.1.1 프로젝트의 실행
2.2 Controller 작성
2.3 스프링 부트에서의 데이터베이스 설정
2.3.1 application.properties 파일 설정
2.3.2 DataSource의 설정과 테스트
2.3.3 DataSource의 테스트
2.4 스프링 부트에서의 MyBatis 설정
2.4.1 SqlSessionFactory의 설정
2.5 Mapper 인터페이스의 작성과 설정 실습
2.5.1 도메인 클래스의 설계
2.5.2 Mapper 인터페이스의 작성
2.5.3 Mapper의 인식
2.5.4 Mapper 인터페이스의 테스트
2.5.5 XML 매퍼를 이용해야 하는 상황
2.6 스프링 부트의 뷰(View) 처리
2.6.1 JSP를 위한 설정 변경
2.6.2 컨트롤러의 작성 및 테스트
2.6.3 한글 테스트와 필터 처리
2.6.4 인터셉터의 설정
2.7 Thymeleaf의 설정

찾아보기