Spring 2.5, 3.0(Annotation) 두 버전을 조금씩 보기로 한다.
이번주와 다음주는 2.5, 남은 3주는 3.0으로 진행한다.
Ibatis는 Mybatis로 이름이 변경되었으나 편의상 Ibatis로 부른다.
백문이 불여 일타!
실습 위주로 진행한다.
1. 환경설정
- Oracle Database 10g Express Edition 설치
- Apache Tomcat 6.0 설치
- Eclipse Helios 설치
- Spring Container 다운로드
http://www.springsource.org/download
spring-framework-2.5.6.SEC01-with-dependencies.zip 을 다운
2. Eclipse 셋팅
- Tomcat 연결
Windows > Preperences > Server > Runtime Env
Add -> Tomcat 6.0 선택, 파일 위치선택후 완료.
- Workbanch 하단 탭에서 Server 선택 후 빈 화면에 우측버튼 New>Server>Tomcat6 선택후 완료.
- Help > install new software > add
http://springide.org/updatesite 주소 입력후 Core / Spring IDE , Extensions / Spring IDE 설치. (설치 후 재시작 필수)
- 프로젝트에 Spring 연결
프로젝트 우클릭 > Build Path> Configure Build... 클릭 -> Lib 탭에서 다운로드해서 압축을 풀어둔 Spring 2.5 폴더 아래 dist/spring.jar 파일 선택
3. Spring 패턴들
- DI
- AOP
- MVC
- DB : JDBC Template, ORM(ibatis)
(Tiles, Velocity, Bean)
- Validation
- Transaction
- Jason
- DWR
4. Dependency Injection, DI (의존성 주입)
- 모든 객체를 Spring Container(조립기, XML)에 등록하고 Spring Container를 통해서 객체를 받도록 한다. 따라서 객체의 변경이 있는경우 Spring Container만 변경하면 되기때문에 적용 소스를 일일이 수정할 필요가 없어진다.
처음 설명을 들을때는 어댑터 패턴과 비슷하다고 생각했는데 어댑터로만 이루어졌다고 보기는 어렵고 어댑터 패턴의 기능을 생각하면 이해가 좀 빨리 되긴 한다.
- 생성자 방식과 프로퍼티 방식이 있으며 이클립스의 자동화 기능덕에 주로 프로퍼티 방식을 더 선호하는 편이다. ㅋㅋㅋ
- <ref> : 객체를 받을때, <value> : 문자, 숫자 등을 받을때 사용.
- 프로퍼티 방식의 경우 <property> 태그안에 작성하는 name은 set받을 프로퍼티 명과 일치해야 한다.
- 객체, 문자, 숫자 뿐만 아니라 배열, List, Map, Set 등 다양한 타입이 가능하다.
* Framework 와 Lib의 차이점은???
- Lib는 개발자가 주도하는 개발의 방향에서 필요한 부분만 가져다가 쓰게 된다.
- Framework는 Framework가 이미 정의해둔 구조에서 필요한 부분을 개발자가 작성하는 형태로 Framework가 주도하게된다.
5. AOP (Aspect Oriented Programming)
- Aspect Oriented Programming은 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 손쉽게 적용할 수 있게 해준다.
- Spring 에서의 AOP
- POJO 클래스를 이용한 구현
- 스프링 API를 이용한 구현
- Annotation을 이용한 구현
- XML 최상위 태그에 xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation 에 http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 추가
- Aspect 설정
<bean id=“writelog” class=“org.kosta.spring.LogAspect”/>
-> Aspect로 사용할 클래스(일반 java클래스이다.)
<aop:config>
<aop:pointcut id=“포이트컷ID” expression=“execution(적용대상 필터)”/>
<aop:aspect id=“어스펙트ID” ref=“writelog”>
-> 클래스를 ref로 받아서 어스펙트로 설정해준다.
<aop:around pointcut-ref=“포이트컷ID” method=“실행할 메소드”/>
-> 어스펙트에서 실행할 메쏘드
</aop:aspect>
</aop:config>
6. MVC
MVC는 회사에서 cakePHP를 공부할때 한번 본적이 있어서인지 아주 익숙한것이 아닌데도 왠지 친근하다 ㅋㅋ
Spring의 MVC는 cake처럼 간단하게 M,V,C만으로 이루어지진 않는다. 일반적으로 urlMapping방식을 사용하는데 반해서 Spring에서는 다양한 맵핑방식을 지원하고 View도 하나의 언어로 한정되는것이 아니라 class도 될 수 있고, Tiles나 Jsp등 다양한 녀석들을 사용할 수 있도록 되어 있다.
오늘은 HandlerMapping에서 UrlHandlerMapping을 사용하고, view로는 JSP파일을 사용했다. JSP의 경우 view를 지정해주는 viewResolver를 사용하지 않아도 기본적으로 지원해주지만 명시적으로 지정하는 방법을 사용했다.
Spring MVC 패턴에서는 컨트롤러가 비즈니스 로직을 모두 처리한 후 디스패쳐에게 ModelAndView 타입을 통해 데이터와 사용할 view를 넘겨주는 방식이다.
오늘의 실습은 요기까지~~ ^^*