책 소개
요약
이 책은 스프링 입문서로, 스프링의 핵심 개념이라고 할 수 있는 제어역전(IoC)과 관점지향 프로그래밍(AOP), MVC 모델은 물론이고 ORM 기반의 데이터베이스 연동, 테스트, 메일 서버 연동 등 애플리케이션 개발에 필수적인 내용을 담고 있다. 특히 스프링 4.x의 새로운 기능을 소개해 스프링에 이미 익숙한 개발자에게도 유용한 정보를 제공한다.
이 책에서 다루는 내용
■ 스프링 프레임워크 아키텍처와 스프링 애플리케이션 개발 환경의 구성요소 설정
■ 스프링 컨테이너 설정 및 XML과 애노테이션을 이용한 스프링 빈 관리
■ 애스펙트와 어드바이스, 포인트컷, 인트로덕션을 비롯한 스프링 AOP의 개념
■ 스프링 프레임워크와 하이버네이트를 이용한 JDBC와 ORM 지원
■ 스프링 웹 컨트롤러와 폼 태그 라이브러리를 이용한 효율적인 스프링 MVC 애플리케이션 개발
■ 스프링 시큐리티를 이용해 불법적인 침입자로부터 애플리케이션을 보호하는 방법
■ 스프링 메일 애플리케이션 프로그래밍 인터페이스를 바탕으로 한 이메일 송수신
이 책의 대상 독자
이 책은 스프링 프레임워크를 배우고자 하는 사람들을 대상으로 하며, 자바 프로그래밍과 웹 애플리케이션에 대한 사전지식이 필요하다. 개발자든, 아키텍트든, 관리자든 팀에서의 역할에 상관없이, 이 책은 적용 가능한 스프링 기술을 학습할 수 있도록 가장 효과적이고 적절한 방법을 제공할 것이다. XML에 익숙하면 좋겠지만 XML 초보자도 큰 어려움 없이 이 책의 내용을 이해할 수 있다. 또한 엔터프라이즈 개발 지식이 있으면 좋겠지만 필수는 아니다. 이 책은 코어 층, 데이터 접근 계층, 웹 계층에 기반한다. 개발 예제 코드를 통해 단계적으로 접근해 초보자도 쉽게 애플리케이션 개발을 이해할 수 있다.
이 책의 구성
1장, ‘스프링 프레임워크 소개’에서는 스프링 프레임워크 구조에 대한 이해와 스프링 애플리케이션 개발 환경의 주요 컴포넌트 설정을 살펴본다. 이 책의 나머지 부분에 대한 로드맵 역할을 한다.
2장, ‘제어역전’에서는 스프링 컨테이너 구성과 XML을 통한 스프링 빈 관리에 대해 알아본다. 제어역전(IoC, Inversion of Control)과 의존성 주입(DI, Dependency Injection)의 개념을 살펴본다.
3장, ‘스프링에서의 DAO와 JDBC’에서는 DAO 디자인 패턴과 스프링을 이용해 데이터에 대한 접근 권한을 부여한다. 스프링 프레임워크에 JDBC 지원과 ORM 지원을 구현한다. 스프링이 데이터 자원을 관리하는 방법과 애플리케이션에서 사용 가능한 데이터 자원은 무엇인지 살펴본다.
4장, ‘스프링과 하이버네이트 연동’에서는 스프링에서 폭넓게 지원되는 ORM 라이브러리 중 하나인 하이버네이트(Hibernate)를 살펴본다. 매핑 설정과 영속 클래스의 매핑을 살펴보고 스프링 애플리케이션에서 어떻게 하이버네이트가 작동하도록 구성하는지 알아본다.
5장, ‘스프링 웹 MVC 프레임워크’에서는 스프링 웹 컨트롤러와 스프링 폼 태그 라이브러리를 활용해 스프링 MVC 애플리케이션을 생성한다. 스프링 MVC를 소개하고 스프링 MVC가 제공하는 강력한 기능을 통해 어떻게 고성능 웹 애플리케이션을 개발하는지 설명한다.
6장, ‘스프링 시큐리티를 이용한 보안’에서는 스프링 시큐리티를 통해 애플리케이션을 악의적인 침입자로부터 보호할 수 있다. Acegi Security System을 소개하고 서블릿 필터를 통한 웹 애플리케이션 보안을 살펴본다.
7장, ‘스프링을 이용한 테스트’에서는 Junit과 TestNG를 사용해 실제 테스트 전략을 구현한다. Junit 프레임워크에 집중해 단위 테스트 실행 방법을 설명한다.
8장, ‘JavaMail과 JMS의 스프링 연동’에서는 이메일 송수신을 위한 스프링 메일 애플리케이션 프로그래밍 인터페이스를 구현한다. 비동기 처리를 위한 JMS(Java Messaging Service)를 소개한다.
9장, ‘애노테이션을 이용한 스프링 제어역전’에서는 애노테이션을 통해 스프링 빈과 의존성 주입을 구성한다. 애노테이션 기반의 의존성 주입과 애노테이션 생명주기를 살펴본다. SpEL(Spring Expression Language)을 이용한 빈 참조와 메소드 호출, SpEL의 연산자를 살펴본다. 또한 스프링이 제공하는 텍스트 메시지와 국제화를 살펴보고, 애플리케이션 구현을 통해 학습한다.
10장, ‘스프링의 관점지향 프로그래밍’에서는 관점지향 프로그래밍(AOP)을 소개한다. 스프링의 강력한 포인트컷 메커니즘을 이용해 애플리케이션에 애스펙트(aspect)를 어디에 어떻게 적용하는지 살펴보고 스프링 AOP의 프록시를 살펴본다.
부록 A, ‘연습문제 해답’에서는 이 책의 모든 연습문제 해답을 제공한다.
부록 B, ‘아파치 더비를 이용한 애플리케이션 데이터베이스 구성’에서는 아파치 더비(Derby) 애플리케이션 데이터베이스 설정 방법을 알려준다.
부록 C, ‘스프링 폼 태그 라이브러리’에서는 스프링 웹 MVC 프레임워크가 제공하는 스프링 폼 태그 라이브러리를 살펴본다. 스프링 폼 태그 라이브러리는 폼 태그 라이브러리 내부의 태그 집합으로, 뷰(웹 페이지)를 구축하는 데 사용된다.
목차
목차
- 1장. 스프링 프레임워크 소개
- 스프링 소개
- 스프링의 주요 특징
- 스프링의 그 밖의 특징
- 스프링 프레임워크의 발전
- 스프링 프레임워크 구조
- 스프링 코어 컨테이너
- AOP 모듈
- 데이터 접근/통합
- 웹 모듈
- 테스트 모듈
- 스프링 프레임워크 사용의 장점
- 스프링에서 애플리케이션 생성
- 스프링 JAR 파일 획득
- 스프링 패키지의 이해
- STS
- 스프링 애플리케이션
- 스프링 프로젝트 생성
- 라이브러리 추가
- 소스 파일 생성
- 스프링 빈 설정 파일 생성
- 프로그램 실행
- 연습문제
- 요약
- 스프링 소개
- 2장. 제어역전
- 제어역전의 이해
- 컨테이너의 의미
- 스프링 컨테이너
- 빈
- BeanFactory
- ApplicationContext
- 의존성 주입
- 스프링에서의 의존성 주입
- Has-A 관계
- 생성자 기반의 의존성 주입
- 세터 기반 의존성 주입
- 내부 빈 주입
- 스프링에서의 널과 빈 문자열 값 주입
- 사례 1 - 빈 문자열 주입
- 사례 2 - 널 값 주입
- 스프링에서의 의존성 주입
- 빈 정의 상속
- 추상화 상속
- 스프링의 오토와이어링
- 오토와이어링 모드
- 옵션 없는 오토와이어링 사용
- byName 옵션을 사용하는 오토와이어링
- byType 옵션을 사용하는 오토와이어링
- 생성자를 사용하는 오토와이어링
- 오토와이어링 모드
- 빈의 스코프
- 싱글톤
- 프로토타입
- 리퀘스트
- 세션
- 글로벌 세션
- 스프링 빈의 생명주기
- 초기화
- 활성화
- 제거
- 초기화 콜백
- org.springframework.beans.factory.InitializingBean 인터페이스 구현
- XML 설정에서의 init-method 사용
- 제거 콜백
- org.springframework.beans.factory.DisposableBean 인터페이스 구현
- XML 설정에서의 destroy-method 사용
- 연습문제
- 요약
- 제어역전의 이해
- 3장. 스프링에서의 DAO와 JDBC
- 데이터베이스 개요
- DAO 디자인 패턴
- DAO 계층
- 스프링을 사용하지 않는 JDBC
- 샘플 코드
- 프로젝트에 특정 데이터베이스 드라이버 추가
- 애플리케이션의 디렉토리 구조
- 샘플 코드
- 스프링 JDBC 패키지
- 스프링에서의 JDBC
- DataSource
- DAO 클래스의 DataSource
- 애플리케이션의 디렉토리 구조
- JdbcTemplate의 의미
- 스프링 빈과 같은 JdbcTemplate 객체 구성
- Spring.xml 파일
- JdbcTemplate 클래스가 제공하는 기능
- 조회
- 수정
- 그 밖의 JdbcTemplate 연산자
- 애플리케이션의 디렉토리 구조
- Employee.java 파일
- EmployeeDao.java 파일
- EmployeeDaoImpl.java 파일
- 스프링 빈과 같은 JdbcTemplate 객체 구성
- 스프링 JDBC 일괄작업 작업
- 애플리케이션의 디렉토리 구조
- EmployeeDaoImpl.java 파일
- HrPayrollBatchUpdate.java 파일
- 애플리케이션의 디렉토리 구조
- 저장 프로시저 호출
- SimpleJdbcCall 클래스의 사용
- 저장 프로시저 호출
- SimpleJdbcCall 클래스의 사용
- 연습문제
- 요약
- 4장. 스프링과 하이버네이트 연동
- 객체/관계 매핑을 사용하는 이유
- ORM과 O/RM, O/R 매핑 소개
- 하이버네이트 소개
- 하이버네이트 아키텍처
- 설정
- 세션 팩토리
- 세션
- 트랜잭션
- 질의
- 기준
- 영속성 객체
- 하이버네이트 아키텍처
- 하이버네이트와 스프링 프레임워크 통합
- 예제 코드에서 사용할 샘플 데이터
- 하이버네이트 통합
- 스프링-하이버네이트 프로젝트에 필요한 JAR
- 스프링에서 하이버네이트 SessionFactory 설정
- 하이버네이트용 XML 스프링 설정
- 애노테이션이 추가된 도메인 모델 클래스
- 하이버네이트 세션
- Session 인터페이스 메소드
- 영속성 계층 - DAO 구현
- EmployeeDao 인터페이스
- EmployeeDaoImpl 클래스
- 서비스 계층 - 서비스 구현
- EmployeeService 인터페이스
- EmployeeServiceImpl 클래스
- 애플리케이션의 디렉토리 구조
- 애플리케이션 실행
- DBUtils 클래스
- SpringHibernateMain 클래스
- 콘솔 출력
- 직원 정보 테이블에 삽입된 데이터
- 하이버네이트 질의 언어
- 질의 인터페이스
- HQL을 이용한 데이터베이스 연산
- FROM 절
- AS 절
- SELECT 절
- WHERE 절
- ORDER BY 절
- GROUP BY 절
- 명명된 매개변수 사용
- UPDATE 절
- DELETE 절
- 질의를 이용한 페이지화
- 하이버네이트 기준 질의 언어
- 기준 인터페이스
- 기준을 이용한 제약
- 기준 인터페이스
- 연습문제
- 요약
- 5장. 스프링 웹 MVC 프레임워크
- MVC 아키텍처와 관심사의 분리
- 프론트 컨트롤러 디자인 패턴
- 스프링 MVC에 대한 이해
- 스프링 MVC 프레임워크의 특징
- 스프링 MVC의 요청 처리 흐름
- 간단한 스프링 MVC 애플리케이션 개발
- 새로운 메이븐 프로젝트 생성
- pom.xml에 스프링 MVC 의존관계 추가
- 애플리케이션 설정
- /WEB-INF/web.xml 파일
- /WEB-INF/SpringDispatcher-servlet.xml 파일
- 컨트롤러 생성 - EmployeeController
- 뷰 생성 - hello.jsp
- 애플리케이션 실행
- 스프링 MVC의 DispatcherServlet
- 배포 서술자 web.xml에서의 DispatcherServlet
- 스프링 MVC 설정 파일 위치 등록
- 스프링 설정 - SpringDispatcher-servlet.xml
- 스프링 MVC 컨트롤러
- 컨트롤러 정의를 위한 @Controller
- 요청 매핑을 위한 @RequestMapping 애노테이션
- 클래스 레벨의 매핑 요청
- 메소드 레벨의 매핑 요청
- @RequestMapping의 속성 정보
- @RequestMapping의 메소드 매개변수
- @RequestMapping 애노테이션 메소드의 값 반환
- 스프링 MVC의 ViewResolver
- 뷰 기술 JSP를 위한 ViewResolver 구성
- 스프링 MVC의 모델
- 스프링 MVC와 하이버네이트 통합
- 애플리케이션 구조
- 샘플 코드와 샘플 데이터 모델
- 프로젝트 구조
- pom.xml 파일
- hibernate.properties 파일
- SpringDispatcher-servlet.xml 파일
- 하이버네이트 모델 클래스 - 엔티티 클래스
- DAO 계층
- EmployeeDao 인터페이스
- EmployeeDao 구현
- 서비스 계층
- EmployeeService 인터페이스
- EmployeeService 구현
- 스프링 MVC 컨트롤러 클래스
- 뷰 페이지
- hello.jsp 페이지
- employee.jsp 페이지
- index.jsp 페이지
- 애플리케이션 실행
- @ControllerAdvice 예외 처리
- GenericException 클래스
- SpringException 클래스
- EmployeeController 클래스
- hello.jsp 페이지
- exception.jsp 페이지
- 애플리케이션 실행
- Spring MVC 국제화(i18n)
- 프로퍼티 파일
- Spring 설정
- ReloadableResourceBundleMessageSource
- LocaleChangeInterceptor
- SessionLocaleResolver
- hello.jsp 페이지
- 애플리케이션 실행
- 컨트롤러를 통한 폼 핸들링
- 스프링 MVC의 ModelAndView
- 스프링 MVC 컨트롤러 클래스
- 컨트롤러 클래스의 @ModelAttribute
- 컨트롤러 클래스의 ModelMap
- 뷰 페이지
- 스프링 MVC 폼
- 애플리케이션 실행
- 연습문제
- 요약
- 6장. 스프링 시큐리티를 이용한 보안
- 스프링 시큐리티의 의미
- 주요 연산
- 서블릿 필터 다시보기
- 보안 유스케이스
- 스프링 시큐리티 설정
- 스프링 시큐리티 구성
- 클래스패스에 JAR 추가
- 스프링 시큐리티 의존성 - pom.xml
- 네임스페이스 설정
- 스프링 시큐리티 구성
- 웹 애플리케이션의 URL 접근 보호
- 첫 번째 단계 - web.xml
- 보안 설정 분리
- 웹 애플리케이션에 로그인
- HTTP 기본 인증
- 폼 기반 로그인 서비스
- 로그아웃 서비스
- 익명 로그인
- 로그인 정보 기억
- 사용자 인증
- 메모리상의 정의를 이용한 사용자 인증
- 데이터베이스를 이용한 사용자 인증
- 패스워드 암호화
- 메소드 레벨 보안
- 본격적인 작업 시작
- 프로젝트 구조
- web.xml에 필터 추가
- 뷰 결정
- 맞춤형 로그인 추가
- 로그인 요청 매핑
- 직원 목록 조회
- 계정정보 입력
- 로그아웃
- 애플리케이션 실행
- 연습문제
- 요약
- 스프링 시큐리티의 의미
- 7장. 스프링을 이용한 테스트
- JUnit 4를 이용한 테스트
- JUnit 4 애노테이션
- 어서트 메소드
- JUnit 4 예제
- TestNG를 이용한 테스트
- TestNG 애노테이션
- TestNG 예제
- 애자일 소프트웨어 테스트
- 단위 테스트
- 고립 클래스의 단위 테스트
- 모의 객체를 이용한 의존 클래스의 단위 테스트
- Mockito 프레임워크
- 통합 테스트
- 단위 테스트
- 스프링 MVC 컨트롤러의 단위 테스트 생성
- 스프링 MVC 테스트 프레임워크
- 필요한 의존성
- 스프링 테스트의 애노테이션
- @ContextConfiguration 애노테이션
- @WebAppConfiguration 애노테이션
- MockMvc
- 어서션
- @RunWith(SpringJUnit4ClassRunner.class)
- 연습문제
- 요약
- JUnit 4를 이용한 테스트
- 8장. JavaMail과 JMS의 스프링 연동
- 스프링의 이메일 지원
- JavaMail API 소개
- JavaMail API 사용
- JavaMail을 위한 스프링 API
- 스프링 메일 애플리케이션 개발
- 설정 파일 - Spring.xml
- 스프링의 이메일 발신 클래스
- MailerTest 클래스
- 스프링 자바 메시징 서비스
- 메시지와 메시징의 의미
- JMS의 의미
- JMS 애플리케이션
- JMS 구성요소
- MOM 서비스 제공자
- ActiveMQ 설정 - 메시지 큐
- 스프링 빈 설정(Spring.xml)
- MessageSender.java - 스프링 JMS 템플릿
- App.java
- ActiveMQ 시작
- 출력
- 중계자 모니터링
- App.java 실행 시 예외
- 연습문제
- 요약
- 스프링의 이메일 지원
- 9장. 애노테이션을 이용한 스프링 제어역전
- 애노테이션을 이용한 컨테이너 설정
- XML 대 애노테이션
- 빈 관리
- 스테레오 타입 애노테이션
- @Component
- @Repository
- @Service
- @Controller
- 감지된 구성요소의 명명 규칙
- 구성요소 이름 직접 지정
- 클래스 자동 감지와 빈 정의 등록
- 필터를 이용한 검색 방식 조정
- 스코프 정의 - @Scope
- @Required 애노테이션을 이용한 의존관계 검사
- 애노테이션 기반 의존관계 주입
- @Autowired
- 프로퍼티에 @Autowired 적용
- @Qualifier
- @Resource
- 생명 주기 애노테이션
- 스프링의 자바 기반 설정
- @Configuration 애노테이션
- @Bean 애노테이션
- 빈 선언
- 빈 이름 지정
- 의존관계 주입
- @Import 애노테이션
- 생명주기 콜백
- @Scope 애노테이션
- 스프링의 이벤트 처리
- 스프링의 표준 이벤트
- 스프링의 표준 이벤트 리스닝
- 리스너 생성
- 스프링의 이벤트 발생
- 사용자정의 이벤트 생성
- 이벤트 발생
- 사용자정의 이벤트 처리
- 스프링 이벤트의 이점
- 스프링 표현 언어
- SpEL을 이용한 빈 참조
- XML 기반 설정
- 애노테이션 기반 설정
- SpEL을 이용한 메소드 호출
- XML 기반 설정
- 애노테이션 기반 설정
- SpEL의 연산자
- XML 기반 설정
- 애노테이션 기반 설정
- SpEL의 컬렉션
- XML 기반 설정
- 애노테이션 기반 설정
- SpEL의 정규표현식
- XML 기반 설정
- 애노테이션 기반 설정
- SpEL을 이용한 빈 참조
- 텍스트 메시지와 국제화
- 스프링에서의 국제화(i18n)
- 연습문제
- 요약
- 애노테이션을 이용한 컨테이너 설정
- 10장. 스프링의 관점지향 프로그래밍
- 애플리케이션 개발에서 OOP의 문제점
- AOP 소개
- AOP 용어
- 조인포인트
- 어드바이스
- 포인트컷
- 애스펙트
- 소개
- 타깃
- 프록시
- 위빙
- 위버
- AOP 구현
- 스프링의 AOP 지원
- AspectJ 애노테이션 스타일
- 스프링에서의 AspectJ 애노테이션 설정
- 애스펙트 선언 - @AspectJ
- 포인트컷 선언
- 어드바이스 선언
- 어드바이스 이전
- 어드바이스 이후
- 어드바이스 반환 후
- 어드바이스 던진 후
- 어드바이스 주변
- 프록시
- @AspectJ 애노테이션을 사용해 스프링 애플리케이션 개발
- 애플리케이션의 디렉토리 구조
- 자바 파일 생성
- Employee.java
- EmployeeService.java
- LoggingAspect.java
- PayrollsSystem.java
- 스프링 설정 파일 생성
- 애플리케이션 실행
- XML 스키마 기반 설정
- 애스펙트 선언
- 포인트컷 선언
- 어드바이스 선언
- 어드바이스 이전
- 어드바이스 이후
- 어드바이스 반환 후
- 어드바이스 던진 후
- 어드바이스 주변
- XML 스키마 기반 설정을 이용한 스프링 애플리케이션 개발
- 자바 파일 생성
- Employee.java
- EmployeeService.java
- LoggingAspect.java
- PayrollsSystem.java
- 스프링 설정 파일 생성
- 애플리케이션 실행
- 자바 파일 생성
- 연습문제
- 요약
- 부록 A. 연습문제 해답
- 부록 B. 아파치 더비를 이용한 애플리케이션 데이터베이스 구성
- 부록 C. 스프링 폼 태그 라이브러리