SlideShare a Scribd company logo
1 of 23
Download to read offline
1
SPRING 3 스터디
2010-10-04
발표자 : 김연수
2
Contents Table
Ⅰ. 스프링이란?
1. 스프링 개요
2. 스프링 아키텍처
3. 스프링 성공요인
4. 스프링의 목적
5. 스프링의 핵심(IoC, DI, AOP,
POJO)
6. 스프링 3의 새기능
7. 스프링의 모듈 및 모듈간 의존관계
3
Ⅰ. 스프링이란?
1. 스프링 개요
2. 스프링의 아키텍처
3. 스프링의 성공요인
4. 스프링의 목적
5. 스프링의 핵심기술(IoC, DI, AOP)
6. 스프링3의 새 기능
7. 스프링 모듈 및 모듈간 의존관계
4
스프링 개요 I. 스프링이란?
스프링 개요
분류 및 성숙도 평가 설명
라이선스 Apache 2.0
기능성 ★★★★(중대형 규모의 기업의 기능적인 요구사항을 충족시킴)
커뮤니티 ★★★(개발, 오류 보고, 수정 등의 활발할 커뮤니티 활동이 있음)
성숙도 ★★★★(강력하며 높은 품질의 안정적이며 우수한 성능을 충족함)
적용성 ★★★(프레임워크가 성숙하여 기업 환경에 즉시 반영 가능함)
트렌트 ↗(전반적으로 발전하고 있으며, 중요도가 커지고 있음)
Spring Framework는 JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈소스 어플리케이션 프레임워
크로, 간단한 자바 객체(POJO : Plain Old Java Object) 를 Spring의 경량(Lightweight) 컨테이너를 통해
생성 및 관리하는 빈(Bean)으로 처리해준다.
* Open Source Catalogue 2007, Optaros (Spring 2.0 기준)
5
스프링 아키텍처 I. 스프링이란?
Spring Framework는 어플리케이션을 구성하는 Bean 객체의 생명주기를 관장하는 Core를 기반으로
DAO, ORM, AOP, JEE Web으로 구성됨
스프링 아키텍처
구분 설명
Core Core패키지는 프레임워크의 가장 기본적인 부분
이고 IoC와 의존성 삽입(Dependency Injection-
DI)기능을 제공한다.
DAO DAO 패키지는 JDBC 코딩과 특정 데이터베이스
업체의 에러코드 파싱 등과 같은 작업의 필요성
을 제거한 JDBC 추상화 계층을 제공한다. 또한
프로그램적인 트랜잭션 관리 뿐 아니라 선언적인
트랜잭션 관리 기능을 제공한다.
ORM ORM 패키지는 JAP, JDO, Hibernate, iBatis 등
과 같은 객체-관계 맵핑(Object-Relational
Mapping)을 위한 통합 계층을 제공한다.
AOP AOP 패키지는 AOP Alliance에서 정의한
Aspect-지향 프로그래밍 방식을 지원한다.
Web Web 패키지는 멀티파트 파일 업로드기능, 서블
릿 리스너를 사용한 IoC컨테이너의 초기화, 웹-
기반 애플리케이션 컨텍스트 등과 같은 기본적인
웹-기반 통합 기능들을 제공한다.
JEE Spring 환경에서 다양한 Java EE 기술을 사용할
수 있도록 지원한다.
6
스프링의 성공요인 I. 스프링이란?
스프링은 단지 최첨단의 화려한 기능을 제공해주기만 하는게 아니라, 오히려 견고하고 건전한 자바와 엔터프라이즈 개
발의 핵심 가치에 충실했기 때문에, 스프링을 사용하는 개발자들은 자연스럽게 자바와 엔터프라이즈 개발의 기본에 충
실한 베스트 프랙티스를 적용할 수 있고, 이상적인 개발 철학과 프로그래밍 모델을 이해하게 되고, 좋은 개발 습관을 채
득하게 된다.
스프링의 성공요인
단순함
• EJB의 불필요하게 복잡한 기술을 단순하고 명쾌하게 접근
• 시간이 지나면서 기술이 복잡해져 잃어버렸던 객체지향 언어의 장점을 다시 살려줌(단순한
POJO 프로그래밍)
유연성
• 뛰어난 유연성과 확장성
• 많은 서드파티 프레임워크의 지원
• 확장을 권장하며, 개발자가 직접 확장해서 사용해도 버전 호환성 문제가 거의 없음
7
스프링의 목적 I. 스프링이란?
스프링의 목적은 경량급 프레임워크인 스프링을 활용해서 엔터프라이즈 애플리케이션 개발을 편하게 하는 것이다.
스프링의 목적
엔터프라이즈 개발의 복잡함
• 기술적인 제약 조건과 늘어나는 요구사항
• 엔터프라이즈 애플리케이션이 구현해야
할 핵심기능인 비즈니스 로직의 복잡함
증가
비 침투 적인 방식을 통한 효과적인 해결책:
스프링
• EJB의 문제점인 어떤 기술을 적용했을 때
그 기술과 관련된 코드나 규약 등을 코드
에 등장시키는 침투적인 기술을 스프링은
DI, AOP 등으로 비침투적으로 해결
• 일관성 없는 기술과 서버 환경의 변화에
대응하기 위한 서비스 추상화(기능을 인
터페이스에 정의하고 그를 상속받아 구현
하는 형태, 스프링의 기본적인 클래스도
확장하기 쉽게 인터페이스로 많이 구성됨)
8
I. 스프링이란?
스프링의 핵심(IoC)
IoC(Inversion of Control) Container는 객체의 생성 시, 객체가 참조하고 있는 타 객체에 대한 의존성을 소스 코드 내부
에서 하드 코딩 하는 것이 아닌, 소스 코드 외부에서 설정하게 함으로써, 유연성 및 확장성을 향상시킨다.
스프링의 핵심(IoC, DI, AOP, POJO)
9
I. 스프링이란?
스프링의 핵심(IoC, DI)
IoC의 주요 기능
Dependency Injection : 객체 생성시 의존성을 주입시켜준다.
Bean Lifecycle Management : 객체 생성 및 파괴 등의 생명주기를 관리한다.
스프링의 핵심(IoC, DI, AOP, POJO)
10
I. 스프링이란?
스프링의 핵심(IoC, DI)
Scope 설명
singleton 하나의 Bean 정의에 대해서 Spring IoC Container 내에 단 하나의 객체만 존재한다.
prototype 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다.
request 하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다. 즉, 각각의
HTTP request는 자신만의 객체를 가진다.
session 하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명 주기 안에 단 하나의 객체만 존재한다.
global session 하나의 Bean 정의에 대해서 하나의 global HTTP Session의 생명주기 안에 단 하나의 객체마 존재한다. 일반
적으로 portlet context 안에서 유효하다.
IoC Container에서 설정할 수 있는 Bean Scope(객체가 유효한 범위)
다음과 같이 BeanScope를 설정하면 IocContainer가 설정된 BeanScope를 참조하여 Bean의 LifeCycle을 관리하여 준다.
스프링의 핵심(IoC, DI, AOP, POJO)
11
I. 스프링이란?
스프링의 핵심(AOP)
객체지향 프로그래밍을 보완하는 개념으로 어플리케이션을 객체지향적으로 모듈화 하여 작성하더라도 다수의 객체들
에 분산되어 중복적으로 존재하는 공통 관심사가 여전히 존재한다. AOP는 이를 횡단관심으로 분리하여 핵심관심과 엮
어서 처리할 수 있는 방법을 제공한다.
Pointcut : 어떤 클래스의 어느 JoinPoint를
사용할 것인지를 결정하는 선택 기능
JoinPoint : Advice가 삽입될 위치
Advice : 관점의 실제 구현체로 결합점에 삽
입되어 동작할 수 있는 코드
스프링의 핵심(IoC, DI, AOP, POJO)
12
I. 스프링이란?
스프링의 핵심(AOP)
- 중복 코드의 제거
• 횡단 관심을 여러 모듈에 반복적으로 기술되는 현상을 방지
- 비즈니스 로직의 가독성 향상
• 핵심 기능 코드로부터 횡단 관심 코드를 분리함으로써 비즈니스 로직의 가독성 향상
- 생산성 향상
• 비즈니스 로직의 독립으로 인한 개발의 집중력을 높임
- 재사용성 향상
• 횡단 관심 코드는 여러 모듈에서 재사용될 수 있음
- 변경 용이성 증대
• 횡단 관심 코드가 하나의 모듈로 관리되기 때문에 이에 대한 변경 발생시 용이하게
수행할 수 있음
스프링의 핵심(IoC, DI, AOP, POJO)
13
프로젝트 적용 사례 I. 스프링이란?
프로젝트 적용 사례
가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다.
쿠폰 관리 DB 처리
시퀀스관리 DB 처리
메일 발송 처리
파일 업로드 처리
HTTP 파일 전송
Service 클래스의 B/L에서의 트랜잭션을 관리 한다(메소드에서 Exception이 발생하는 경우 rollback)
14
프로젝트 적용 사례 I. 스프링이란?
프로젝트 적용 사례
가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다.
CouponService
MailSender UploadManager
CouponDAO
SequenceDAO
HttpFileSender
메일발송HTTP 파일 전송 파일 업로드 처리
쿠폰관리 DB 처리
시퀀스관리 DB 처리
쿠폰 등록
종료
시퀀스를 가져온다
업로드 파일
처리(디스크에 저장)
업로드 파일을 HTTP로
다른 WAS에 전송
쿠폰 정보 DB에 등록
15
스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란?
스프링의 핵심(POJO)
POJO
PSA 설계정보
▶ 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정
의해놓은 설계정보로 구분된다. DI의 기본 아이디어는 유연하게 확장 가능한 오브젝트를 만들어 두고 그 관계는 외부
에서 다이내믹하게 설정해준다는 것이다.
▶ 스프링의 주요 기술인 IoC/DI, AOP와 PSA(Portable Service Abstraction)는 애플리케이션을 POJO로 개발할 수 있게
해주는 가능 기술이라고 부른다.
16
스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란?
스프링의 핵심(POJO)
• 특정 규약에 종속되지 않는다.
• 특정 환경에 종속되지 않는다.POJO의 조건
• 특정한 기술과 환경에 종속되지 않는 깔끔한 코드
• 환경의 제약이 없으므로 자동화된 테스트에 매우 유리(예를
들어 EJB 2는 테스트하려면 서버의 구동 및 빌드와 배치 과정
이 필요하여 복잡하고 번거롭다)
• 객체지향적인 설계를 자유롭게 적용(다형성, 디자인 패턴 등)
POJO의 장점
17
스프링3의 새기능 I. 스프링이란?
스프링3의 새기능
Spring3
Java5와
JavaEE6
JSR-330
OXM
@MVC와
REST
내장형 DB
지원
Converter,
Conversio
nService,
Formatter
SpEL
구분 설명
Java5와 JavaEE6 스프링 3.0은 자바 5 언어의 특징을 본격적으
로 적용해서 만들어진 최초의 스프링 버전이
다. 스프링 3.0은 J2EE 1.4와 JavaEE5와 완벽하
게 호환되며 JavaEE6의 일부 스펙을 지원한다.
JSR-330 자바 코드를 이용한 빈 메타정보 생성과 DI 설
정 기능이 추가됐다. 자바 클래스와 메소드에
@Configuration과 @Bean 등의 애노테이션을
부여해서 DI 설정정보로 이용할 수 있다.
SpEL SpEL은 3.0에서 새롭게 도입된 강력한 기능
을 가진 스프링의 공식 표현식 언어다. 또,
SpEL API를 애플리케이션에서 직접 활용할 수
도 있다.
OXM OXM은 오브젝트-XML 매핑의 약자다. 오브젝
트와 XML 문서의 상호변환을 지원하는 자바
기술에 대한 서비스 추상화 모듈인 OXM이 새
롭게 추가 됐다.
@MVC와 REST @MVC는 애노테이션을 적극적으로 활용해서
웹 프레젠테이션 계층을 편리하게 개발할 수
있도록 만들어진 스프링의 최신 웹 기술이다.
스프링 3.0은 RestTemplate과 메시지 컨버터
를 이용해 REST 개발을 완벽하게 지원해 주기
도 한다.
내장형 DB 지원 Derby, HSQL, H2에 대한 내장형 유 지원 기능
이 추가됐다.
Converter,
ConversionService,
Formatter
기존에 사용되던 PropertyEditor를 대신할 수
있는 Converter와 ConversionService 타입 변
환 API가 추가 됐다. 웹환경에 특화돼서 만들
어진 Formatter도 제공된다.
18
스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?
Aspects ASM Core
Instrument
Instrument.Tomcat
Test
JMS
Transaction
JDBC
ORM
Bean
AOP
Context
Context.Support
Web.Servlet
Expression
OXM
Web
Web.Struts
Web.Portlet
스프링의 아키텍처를 좀더 자세하게 모듈 별로 나누게 되면 아래와 같은 모듈 목록이 나오게 되고, 화살표가 그어진 모
듈들은 필수 의존관계를 나타냅니다.
19
스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?
구분 주요 기능 설명
ASM 모듈 ASM 재패키징 ASM 모듈은 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈이다.
Core 모듈 공통 기능 Core 모듈은 대부분의 스프링의 모듈에서 필요로 하는 공통 기능을 갖고 있는 핵심 모듈
이다. 스프링이 사용하는 주요 타입, 애노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제
공한다.
Beans 모듈 빈 팩토리 Beans는 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈이다. 빈 메타 정
보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있다.
AOP 모듈 AOP AOP는 스프링의 프록시 AOP 기능을 제공하는 모듈이다. 프록시 기반 AOP를 만들 때 필
요한 어드바이스, 포인트컷, 프록시 팩토리빈, 자동 프록시 생성기 등을 제공한다.
Expression 모듈 SpEL Expression은 스프링 표현식 언어 기능을 지원하는 모듈이다.
Context 모듈 애플리케이션 컨텍스
트
Context는 애플리케이션 컨텍스트 기능을 제공하는 모듈이다. 애플리케이션 컨텍스트를
만드는 데 필요한 대부분의 기능을 포함해서 빈 스캐너, 자바코드에 의한 설정 기능, EJB
지원 기능, 포매터, 로드타임 위빙, 표현식, JMX, JNDI, 리모팅, 스케줄링, 스크립트 언어
지원, 검증기 등의 애플리케이션 컨테이너로서의 주요한 기능을 담고 있다.
Context.Support 모
듈
컨텍스트 부가 기능 컨텍스트에서 필요로 하는 부가기능을 담은 모듈이다. EhCache, 메일 추상화 서비스,
CommonJ와 Quartz 스케줄링 그리고 FreeMarker, JasperReports, Velocity 팩토리 기능을
제공한다.
Transaction 모듈 트랜잭션 Transaction은 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있는 모듈이다.
DataAccessException 예외 계층구조와 트랜잭션 추상화 기능, 트랜잭션 동기화 저장소 그
리고 JCA 지원 기능을 포함하고 있다.
JDBC 모듈 JDBC JDBC는 JDBC 템플릿을 포함한 JDBC 지원 기능을 가진 모듈이다.
ORM 모듈 ORM(Hibernate, JPA,
iBats 등)
ORM은 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 갖고
있는 모듈이다.
각 모듈 설명
20
스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?
각 모듈 설명(계속)
구분 주요 기능 설명
Web 모듈 웹 공통 Web은 스프링 웹 기술의 공통적인 기능을 정의한 모듈이다. 스프링 MVC 외에도 스프링
이 직접 지원하는 스트럿츠, JSF 등을 적용할 때도 필요하다. 또한 Caucho, HttpInvoker,
JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있다. 기본적인 바인딩, 컨텍스트 로더,
필터, 멀티파트, 메시지 컨버터 기능도 제공한다.
Web.Servlet 모듈 서블릿 Web.Servlet은 스프링 MVC 기능을 제공하는 모듈이다. 전통적인 스프링 MVC와 최신
@MVC 기능이 모두 포함되어 있다.
Web.Portlet 모듈 포틀릿 Web.Portlet은 Portlet 개발에 사용하는 스프링 모듈이다.
Web.Struts 모듈 스트럿츠 1 지원 Web.Struts는 스트럿츠 1.x를 지원하는 모듈이다. 스트럿츠 1.x를 스프링의 웹 프레젠테이
션 계층으로 사용할 때 유용한 기능을 제공한다.
JMS 모듈 JMS JMS는 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈이다.
Aspects 모듈 AspectJ 지원 Aspects는 스프링이 제공하는 AspectJ AOP 기능을 사용할 때 필요한 모듈이다. AspectJ
로 만든 기능은 @Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변한기,
AspectJ 방식의 트랜잭션 기능 등이 있다.
Instrument 모듈 스프링 Java Agent Instrument는 스프링의 로드타임 위버 기능을 적용할 때 필요한 모듈이다. JVM의 –
javaagent 옵션을 사용해 자바에이전트로도 사용된다.
Instrument.Tomcat
모듈
톰캣 클래스 로더 Instrument.Tomcat은 애플리케이션이 아니라 톰캣 서버의 클래스 로더로 사용하는 모듈
이다.
Test 모듈 테스트 Test는 스프링의 테스트 지원 기능을 가진 모듈이다. 테스트 컨텍스트 프레임워크나 목
오브젝트 등을 이용해 테스트를 만들 때 사용한다.
21
스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?
모듈별 의존 라이브러리(요약)
스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지
결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스
프링 의존 라이브러리는 필수가 아니다.(모듈별 의존 라이브러리 중 개인적으로 흥미로운 것들만 요약하였습니다.)
구분 사용분야 설명
Jamon API 모니터링 애플리케이션 모니터 API이며, AOP를 이용한 간단한 성능측정/모니터링 기능이 필요한 경우에 사
용
BeanShell 스크립트 언어 BeanShell 스크립트를 실행하거나 빈으로 등록해서 사용할 수 있는 기능을 제공
Groovy 스크립트 언어 Groovy를 이용해서 빈을 만들어서 사용하거나 Groovy 코드를 실행시켜야 할때 필요하다.
JRuby 스크립트 언어 Jruby 스크립팅 언어 지원 기능에 사용한다. Jruby를 이용해 만든 빈을 사용할 경우에 필요하다.
JSR-303
Bean
Validation
빈 검증 JSR-303의 빈 검증기를 이용한 검증 기능을 적용할 때 필요하다. JSR-303은 웹 환경의 모델 검증에
도 사용되지만 독자적으로 검증기를 만들어 적용할 수 도 있다.
Joda Time 시간 및 날짜 Java Date and Time API를 이용한 포매터에 사용된다.
FreeMarker 템플릿 FreeMarker 템플릿 지원 기능에 필요하다. FreeMarker는 스프링 MVC의 뷰로도 사용하지만 독립적
인 템플릿 엔진으로 활용할 수 도 있다.
Java Mail 메일 JavaMail을 이용한 메일 메시지 추상화에 필요하다.
Ehcache 캐싱 EhCache 빈을 생성할 경우에 필요하다.
JasperRepor
ts
문서화(보고서
형식)
JasperReports를 이용할 때 활용할 수 있는 편리한 기능을 제공해주는 JasperReportsUtils를 사용할
때 필요하다.(PDF, HTML, XLS, CSV 파일 등으로 출력하는 리포팅 툴)
iText 문서화(PDF) PDF 뷰를 만들때 필요
22
스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?
모듈별 의존 라이브러리(요약)
스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지
결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스
프링 의존 라이브러리는 필수가 아니다.
구분 사용분야 설명
Quartz 스케쥴링 Quartz를 이용한 스케줄링 기능을 사용할때 필요하다.
JAX-RPC,
JAX-WS,
XML SOAP
RPC 리모팅 기능을 만들때 사용한다.
Axis Web Service 웹 서비스를 구현할 때 필요하다. 하지만 Axis 보다는 JAX-WS를 사용하도록 권장한다. Axis 지원 기
능은 앞으로 제거될 예정이다.
Jackson
Mapper
JSON Converter JSON 메시지 컨버터에 사용된다.
Syndication RSS RSS/Atom 피드 뷰를 만들 때 필요
JExcelApi 엑셀 제어 엑셀 뷰를 만들 때 필요
POI 엑셀 제어 엑셀 뷰를 만들 때 필요
23
감사합니다.

More Related Content

What's hot

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLIDRyan Park
 
클로저
클로저클로저
클로저dagri82
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.Ryan Park
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지YoungSu Son
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈Seo YoungHoon
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 

What's hot (20)

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
클로저
클로저클로저
클로저
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
TEST?
TEST?TEST?
TEST?
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 

Viewers also liked

OAF Developer Guide 13.1.3
OAF Developer Guide 13.1.3OAF Developer Guide 13.1.3
OAF Developer Guide 13.1.3crwanare
 
Spring@mvc웹호스팅
Spring@mvc웹호스팅Spring@mvc웹호스팅
Spring@mvc웹호스팅J.H Ahn
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
Spring framework 4.x
Spring framework 4.xSpring framework 4.x
Spring framework 4.xArawn Park
 
Spring MVC
Spring MVCSpring MVC
Spring MVCymtech
 
스프링공부1
스프링공부1스프링공부1
스프링공부1NaKaNaRa
 
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용Sungchul Park
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 Sungchul Park
 
Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기jiseob kim
 
변경에 강한 애플리케이션, 유기적 애플리케이션
변경에 강한 애플리케이션, 유기적 애플리케이션변경에 강한 애플리케이션, 유기적 애플리케이션
변경에 강한 애플리케이션, 유기적 애플리케이션Sungchul Park
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC Ji-Woong Choi
 
SpringCamp2013 Spring MVC TEST
SpringCamp2013 Spring MVC TEST SpringCamp2013 Spring MVC TEST
SpringCamp2013 Spring MVC TEST YongEun Choi
 

Viewers also liked (16)

OAF Developer Guide 13.1.3
OAF Developer Guide 13.1.3OAF Developer Guide 13.1.3
OAF Developer Guide 13.1.3
 
Spring@mvc웹호스팅
Spring@mvc웹호스팅Spring@mvc웹호스팅
Spring@mvc웹호스팅
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Oracle application framework (oaf) online training
Oracle application framework (oaf) online trainingOracle application framework (oaf) online training
Oracle application framework (oaf) online training
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
Spring framework 4.x
Spring framework 4.xSpring framework 4.x
Spring framework 4.x
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
스프링공부1
스프링공부1스프링공부1
스프링공부1
 
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
 
Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기
 
변경에 강한 애플리케이션, 유기적 애플리케이션
변경에 강한 애플리케이션, 유기적 애플리케이션변경에 강한 애플리케이션, 유기적 애플리케이션
변경에 강한 애플리케이션, 유기적 애플리케이션
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
 
SpringCamp2013 Spring MVC TEST
SpringCamp2013 Spring MVC TEST SpringCamp2013 Spring MVC TEST
SpringCamp2013 Spring MVC TEST
 

Similar to Spring3 발표자료 - 김연수

Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리경식 최
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for AppspressoKTH, 케이티하이텔
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계chcbaram
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님NAVER D2
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 

Similar to Spring3 발표자료 - 김연수 (20)

ecdevday4
ecdevday4ecdevday4
ecdevday4
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
 
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso[H3 2012] Bridge over troubled water : make plug-in for Appspresso
[H3 2012] Bridge over troubled water : make plug-in for Appspresso
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
1.스프링프레임워크 개요
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 

More from Yeon Soo Kim

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit TestingYeon Soo Kim
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법Yeon Soo Kim
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수Yeon Soo Kim
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수Yeon Soo Kim
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수Yeon Soo Kim
 
Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Yeon Soo Kim
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수Yeon Soo Kim
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Yeon Soo Kim
 

More from Yeon Soo Kim (8)

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Open API 발표자료 - 김연수
Open API 발표자료 - 김연수
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
 

Spring3 발표자료 - 김연수

  • 2. 2 Contents Table Ⅰ. 스프링이란? 1. 스프링 개요 2. 스프링 아키텍처 3. 스프링 성공요인 4. 스프링의 목적 5. 스프링의 핵심(IoC, DI, AOP, POJO) 6. 스프링 3의 새기능 7. 스프링의 모듈 및 모듈간 의존관계
  • 3. 3 Ⅰ. 스프링이란? 1. 스프링 개요 2. 스프링의 아키텍처 3. 스프링의 성공요인 4. 스프링의 목적 5. 스프링의 핵심기술(IoC, DI, AOP) 6. 스프링3의 새 기능 7. 스프링 모듈 및 모듈간 의존관계
  • 4. 4 스프링 개요 I. 스프링이란? 스프링 개요 분류 및 성숙도 평가 설명 라이선스 Apache 2.0 기능성 ★★★★(중대형 규모의 기업의 기능적인 요구사항을 충족시킴) 커뮤니티 ★★★(개발, 오류 보고, 수정 등의 활발할 커뮤니티 활동이 있음) 성숙도 ★★★★(강력하며 높은 품질의 안정적이며 우수한 성능을 충족함) 적용성 ★★★(프레임워크가 성숙하여 기업 환경에 즉시 반영 가능함) 트렌트 ↗(전반적으로 발전하고 있으며, 중요도가 커지고 있음) Spring Framework는 JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈소스 어플리케이션 프레임워 크로, 간단한 자바 객체(POJO : Plain Old Java Object) 를 Spring의 경량(Lightweight) 컨테이너를 통해 생성 및 관리하는 빈(Bean)으로 처리해준다. * Open Source Catalogue 2007, Optaros (Spring 2.0 기준)
  • 5. 5 스프링 아키텍처 I. 스프링이란? Spring Framework는 어플리케이션을 구성하는 Bean 객체의 생명주기를 관장하는 Core를 기반으로 DAO, ORM, AOP, JEE Web으로 구성됨 스프링 아키텍처 구분 설명 Core Core패키지는 프레임워크의 가장 기본적인 부분 이고 IoC와 의존성 삽입(Dependency Injection- DI)기능을 제공한다. DAO DAO 패키지는 JDBC 코딩과 특정 데이터베이스 업체의 에러코드 파싱 등과 같은 작업의 필요성 을 제거한 JDBC 추상화 계층을 제공한다. 또한 프로그램적인 트랜잭션 관리 뿐 아니라 선언적인 트랜잭션 관리 기능을 제공한다. ORM ORM 패키지는 JAP, JDO, Hibernate, iBatis 등 과 같은 객체-관계 맵핑(Object-Relational Mapping)을 위한 통합 계층을 제공한다. AOP AOP 패키지는 AOP Alliance에서 정의한 Aspect-지향 프로그래밍 방식을 지원한다. Web Web 패키지는 멀티파트 파일 업로드기능, 서블 릿 리스너를 사용한 IoC컨테이너의 초기화, 웹- 기반 애플리케이션 컨텍스트 등과 같은 기본적인 웹-기반 통합 기능들을 제공한다. JEE Spring 환경에서 다양한 Java EE 기술을 사용할 수 있도록 지원한다.
  • 6. 6 스프링의 성공요인 I. 스프링이란? 스프링은 단지 최첨단의 화려한 기능을 제공해주기만 하는게 아니라, 오히려 견고하고 건전한 자바와 엔터프라이즈 개 발의 핵심 가치에 충실했기 때문에, 스프링을 사용하는 개발자들은 자연스럽게 자바와 엔터프라이즈 개발의 기본에 충 실한 베스트 프랙티스를 적용할 수 있고, 이상적인 개발 철학과 프로그래밍 모델을 이해하게 되고, 좋은 개발 습관을 채 득하게 된다. 스프링의 성공요인 단순함 • EJB의 불필요하게 복잡한 기술을 단순하고 명쾌하게 접근 • 시간이 지나면서 기술이 복잡해져 잃어버렸던 객체지향 언어의 장점을 다시 살려줌(단순한 POJO 프로그래밍) 유연성 • 뛰어난 유연성과 확장성 • 많은 서드파티 프레임워크의 지원 • 확장을 권장하며, 개발자가 직접 확장해서 사용해도 버전 호환성 문제가 거의 없음
  • 7. 7 스프링의 목적 I. 스프링이란? 스프링의 목적은 경량급 프레임워크인 스프링을 활용해서 엔터프라이즈 애플리케이션 개발을 편하게 하는 것이다. 스프링의 목적 엔터프라이즈 개발의 복잡함 • 기술적인 제약 조건과 늘어나는 요구사항 • 엔터프라이즈 애플리케이션이 구현해야 할 핵심기능인 비즈니스 로직의 복잡함 증가 비 침투 적인 방식을 통한 효과적인 해결책: 스프링 • EJB의 문제점인 어떤 기술을 적용했을 때 그 기술과 관련된 코드나 규약 등을 코드 에 등장시키는 침투적인 기술을 스프링은 DI, AOP 등으로 비침투적으로 해결 • 일관성 없는 기술과 서버 환경의 변화에 대응하기 위한 서비스 추상화(기능을 인 터페이스에 정의하고 그를 상속받아 구현 하는 형태, 스프링의 기본적인 클래스도 확장하기 쉽게 인터페이스로 많이 구성됨)
  • 8. 8 I. 스프링이란? 스프링의 핵심(IoC) IoC(Inversion of Control) Container는 객체의 생성 시, 객체가 참조하고 있는 타 객체에 대한 의존성을 소스 코드 내부 에서 하드 코딩 하는 것이 아닌, 소스 코드 외부에서 설정하게 함으로써, 유연성 및 확장성을 향상시킨다. 스프링의 핵심(IoC, DI, AOP, POJO)
  • 9. 9 I. 스프링이란? 스프링의 핵심(IoC, DI) IoC의 주요 기능 Dependency Injection : 객체 생성시 의존성을 주입시켜준다. Bean Lifecycle Management : 객체 생성 및 파괴 등의 생명주기를 관리한다. 스프링의 핵심(IoC, DI, AOP, POJO)
  • 10. 10 I. 스프링이란? 스프링의 핵심(IoC, DI) Scope 설명 singleton 하나의 Bean 정의에 대해서 Spring IoC Container 내에 단 하나의 객체만 존재한다. prototype 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다. request 하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다. 즉, 각각의 HTTP request는 자신만의 객체를 가진다. session 하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명 주기 안에 단 하나의 객체만 존재한다. global session 하나의 Bean 정의에 대해서 하나의 global HTTP Session의 생명주기 안에 단 하나의 객체마 존재한다. 일반 적으로 portlet context 안에서 유효하다. IoC Container에서 설정할 수 있는 Bean Scope(객체가 유효한 범위) 다음과 같이 BeanScope를 설정하면 IocContainer가 설정된 BeanScope를 참조하여 Bean의 LifeCycle을 관리하여 준다. 스프링의 핵심(IoC, DI, AOP, POJO)
  • 11. 11 I. 스프링이란? 스프링의 핵심(AOP) 객체지향 프로그래밍을 보완하는 개념으로 어플리케이션을 객체지향적으로 모듈화 하여 작성하더라도 다수의 객체들 에 분산되어 중복적으로 존재하는 공통 관심사가 여전히 존재한다. AOP는 이를 횡단관심으로 분리하여 핵심관심과 엮 어서 처리할 수 있는 방법을 제공한다. Pointcut : 어떤 클래스의 어느 JoinPoint를 사용할 것인지를 결정하는 선택 기능 JoinPoint : Advice가 삽입될 위치 Advice : 관점의 실제 구현체로 결합점에 삽 입되어 동작할 수 있는 코드 스프링의 핵심(IoC, DI, AOP, POJO)
  • 12. 12 I. 스프링이란? 스프링의 핵심(AOP) - 중복 코드의 제거 • 횡단 관심을 여러 모듈에 반복적으로 기술되는 현상을 방지 - 비즈니스 로직의 가독성 향상 • 핵심 기능 코드로부터 횡단 관심 코드를 분리함으로써 비즈니스 로직의 가독성 향상 - 생산성 향상 • 비즈니스 로직의 독립으로 인한 개발의 집중력을 높임 - 재사용성 향상 • 횡단 관심 코드는 여러 모듈에서 재사용될 수 있음 - 변경 용이성 증대 • 횡단 관심 코드가 하나의 모듈로 관리되기 때문에 이에 대한 변경 발생시 용이하게 수행할 수 있음 스프링의 핵심(IoC, DI, AOP, POJO)
  • 13. 13 프로젝트 적용 사례 I. 스프링이란? 프로젝트 적용 사례 가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다. 쿠폰 관리 DB 처리 시퀀스관리 DB 처리 메일 발송 처리 파일 업로드 처리 HTTP 파일 전송 Service 클래스의 B/L에서의 트랜잭션을 관리 한다(메소드에서 Exception이 발생하는 경우 rollback)
  • 14. 14 프로젝트 적용 사례 I. 스프링이란? 프로젝트 적용 사례 가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다. CouponService MailSender UploadManager CouponDAO SequenceDAO HttpFileSender 메일발송HTTP 파일 전송 파일 업로드 처리 쿠폰관리 DB 처리 시퀀스관리 DB 처리 쿠폰 등록 종료 시퀀스를 가져온다 업로드 파일 처리(디스크에 저장) 업로드 파일을 HTTP로 다른 WAS에 전송 쿠폰 정보 DB에 등록
  • 15. 15 스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란? 스프링의 핵심(POJO) POJO PSA 설계정보 ▶ 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정 의해놓은 설계정보로 구분된다. DI의 기본 아이디어는 유연하게 확장 가능한 오브젝트를 만들어 두고 그 관계는 외부 에서 다이내믹하게 설정해준다는 것이다. ▶ 스프링의 주요 기술인 IoC/DI, AOP와 PSA(Portable Service Abstraction)는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능 기술이라고 부른다.
  • 16. 16 스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란? 스프링의 핵심(POJO) • 특정 규약에 종속되지 않는다. • 특정 환경에 종속되지 않는다.POJO의 조건 • 특정한 기술과 환경에 종속되지 않는 깔끔한 코드 • 환경의 제약이 없으므로 자동화된 테스트에 매우 유리(예를 들어 EJB 2는 테스트하려면 서버의 구동 및 빌드와 배치 과정 이 필요하여 복잡하고 번거롭다) • 객체지향적인 설계를 자유롭게 적용(다형성, 디자인 패턴 등) POJO의 장점
  • 17. 17 스프링3의 새기능 I. 스프링이란? 스프링3의 새기능 Spring3 Java5와 JavaEE6 JSR-330 OXM @MVC와 REST 내장형 DB 지원 Converter, Conversio nService, Formatter SpEL 구분 설명 Java5와 JavaEE6 스프링 3.0은 자바 5 언어의 특징을 본격적으 로 적용해서 만들어진 최초의 스프링 버전이 다. 스프링 3.0은 J2EE 1.4와 JavaEE5와 완벽하 게 호환되며 JavaEE6의 일부 스펙을 지원한다. JSR-330 자바 코드를 이용한 빈 메타정보 생성과 DI 설 정 기능이 추가됐다. 자바 클래스와 메소드에 @Configuration과 @Bean 등의 애노테이션을 부여해서 DI 설정정보로 이용할 수 있다. SpEL SpEL은 3.0에서 새롭게 도입된 강력한 기능 을 가진 스프링의 공식 표현식 언어다. 또, SpEL API를 애플리케이션에서 직접 활용할 수 도 있다. OXM OXM은 오브젝트-XML 매핑의 약자다. 오브젝 트와 XML 문서의 상호변환을 지원하는 자바 기술에 대한 서비스 추상화 모듈인 OXM이 새 롭게 추가 됐다. @MVC와 REST @MVC는 애노테이션을 적극적으로 활용해서 웹 프레젠테이션 계층을 편리하게 개발할 수 있도록 만들어진 스프링의 최신 웹 기술이다. 스프링 3.0은 RestTemplate과 메시지 컨버터 를 이용해 REST 개발을 완벽하게 지원해 주기 도 한다. 내장형 DB 지원 Derby, HSQL, H2에 대한 내장형 유 지원 기능 이 추가됐다. Converter, ConversionService, Formatter 기존에 사용되던 PropertyEditor를 대신할 수 있는 Converter와 ConversionService 타입 변 환 API가 추가 됐다. 웹환경에 특화돼서 만들 어진 Formatter도 제공된다.
  • 18. 18 스프링의 모듈 및 모듈간 의존관계 I. 스프링이란? Aspects ASM Core Instrument Instrument.Tomcat Test JMS Transaction JDBC ORM Bean AOP Context Context.Support Web.Servlet Expression OXM Web Web.Struts Web.Portlet 스프링의 아키텍처를 좀더 자세하게 모듈 별로 나누게 되면 아래와 같은 모듈 목록이 나오게 되고, 화살표가 그어진 모 듈들은 필수 의존관계를 나타냅니다.
  • 19. 19 스프링의 모듈 및 모듈간 의존관계 I. 스프링이란? 구분 주요 기능 설명 ASM 모듈 ASM 재패키징 ASM 모듈은 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈이다. Core 모듈 공통 기능 Core 모듈은 대부분의 스프링의 모듈에서 필요로 하는 공통 기능을 갖고 있는 핵심 모듈 이다. 스프링이 사용하는 주요 타입, 애노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제 공한다. Beans 모듈 빈 팩토리 Beans는 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈이다. 빈 메타 정 보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있다. AOP 모듈 AOP AOP는 스프링의 프록시 AOP 기능을 제공하는 모듈이다. 프록시 기반 AOP를 만들 때 필 요한 어드바이스, 포인트컷, 프록시 팩토리빈, 자동 프록시 생성기 등을 제공한다. Expression 모듈 SpEL Expression은 스프링 표현식 언어 기능을 지원하는 모듈이다. Context 모듈 애플리케이션 컨텍스 트 Context는 애플리케이션 컨텍스트 기능을 제공하는 모듈이다. 애플리케이션 컨텍스트를 만드는 데 필요한 대부분의 기능을 포함해서 빈 스캐너, 자바코드에 의한 설정 기능, EJB 지원 기능, 포매터, 로드타임 위빙, 표현식, JMX, JNDI, 리모팅, 스케줄링, 스크립트 언어 지원, 검증기 등의 애플리케이션 컨테이너로서의 주요한 기능을 담고 있다. Context.Support 모 듈 컨텍스트 부가 기능 컨텍스트에서 필요로 하는 부가기능을 담은 모듈이다. EhCache, 메일 추상화 서비스, CommonJ와 Quartz 스케줄링 그리고 FreeMarker, JasperReports, Velocity 팩토리 기능을 제공한다. Transaction 모듈 트랜잭션 Transaction은 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있는 모듈이다. DataAccessException 예외 계층구조와 트랜잭션 추상화 기능, 트랜잭션 동기화 저장소 그 리고 JCA 지원 기능을 포함하고 있다. JDBC 모듈 JDBC JDBC는 JDBC 템플릿을 포함한 JDBC 지원 기능을 가진 모듈이다. ORM 모듈 ORM(Hibernate, JPA, iBats 등) ORM은 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 갖고 있는 모듈이다. 각 모듈 설명
  • 20. 20 스프링의 모듈 및 모듈간 의존관계 I. 스프링이란? 각 모듈 설명(계속) 구분 주요 기능 설명 Web 모듈 웹 공통 Web은 스프링 웹 기술의 공통적인 기능을 정의한 모듈이다. 스프링 MVC 외에도 스프링 이 직접 지원하는 스트럿츠, JSF 등을 적용할 때도 필요하다. 또한 Caucho, HttpInvoker, JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있다. 기본적인 바인딩, 컨텍스트 로더, 필터, 멀티파트, 메시지 컨버터 기능도 제공한다. Web.Servlet 모듈 서블릿 Web.Servlet은 스프링 MVC 기능을 제공하는 모듈이다. 전통적인 스프링 MVC와 최신 @MVC 기능이 모두 포함되어 있다. Web.Portlet 모듈 포틀릿 Web.Portlet은 Portlet 개발에 사용하는 스프링 모듈이다. Web.Struts 모듈 스트럿츠 1 지원 Web.Struts는 스트럿츠 1.x를 지원하는 모듈이다. 스트럿츠 1.x를 스프링의 웹 프레젠테이 션 계층으로 사용할 때 유용한 기능을 제공한다. JMS 모듈 JMS JMS는 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈이다. Aspects 모듈 AspectJ 지원 Aspects는 스프링이 제공하는 AspectJ AOP 기능을 사용할 때 필요한 모듈이다. AspectJ 로 만든 기능은 @Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변한기, AspectJ 방식의 트랜잭션 기능 등이 있다. Instrument 모듈 스프링 Java Agent Instrument는 스프링의 로드타임 위버 기능을 적용할 때 필요한 모듈이다. JVM의 – javaagent 옵션을 사용해 자바에이전트로도 사용된다. Instrument.Tomcat 모듈 톰캣 클래스 로더 Instrument.Tomcat은 애플리케이션이 아니라 톰캣 서버의 클래스 로더로 사용하는 모듈 이다. Test 모듈 테스트 Test는 스프링의 테스트 지원 기능을 가진 모듈이다. 테스트 컨텍스트 프레임워크나 목 오브젝트 등을 이용해 테스트를 만들 때 사용한다.
  • 21. 21 스프링의 모듈 및 모듈간 의존관계 I. 스프링이란? 모듈별 의존 라이브러리(요약) 스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지 결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스 프링 의존 라이브러리는 필수가 아니다.(모듈별 의존 라이브러리 중 개인적으로 흥미로운 것들만 요약하였습니다.) 구분 사용분야 설명 Jamon API 모니터링 애플리케이션 모니터 API이며, AOP를 이용한 간단한 성능측정/모니터링 기능이 필요한 경우에 사 용 BeanShell 스크립트 언어 BeanShell 스크립트를 실행하거나 빈으로 등록해서 사용할 수 있는 기능을 제공 Groovy 스크립트 언어 Groovy를 이용해서 빈을 만들어서 사용하거나 Groovy 코드를 실행시켜야 할때 필요하다. JRuby 스크립트 언어 Jruby 스크립팅 언어 지원 기능에 사용한다. Jruby를 이용해 만든 빈을 사용할 경우에 필요하다. JSR-303 Bean Validation 빈 검증 JSR-303의 빈 검증기를 이용한 검증 기능을 적용할 때 필요하다. JSR-303은 웹 환경의 모델 검증에 도 사용되지만 독자적으로 검증기를 만들어 적용할 수 도 있다. Joda Time 시간 및 날짜 Java Date and Time API를 이용한 포매터에 사용된다. FreeMarker 템플릿 FreeMarker 템플릿 지원 기능에 필요하다. FreeMarker는 스프링 MVC의 뷰로도 사용하지만 독립적 인 템플릿 엔진으로 활용할 수 도 있다. Java Mail 메일 JavaMail을 이용한 메일 메시지 추상화에 필요하다. Ehcache 캐싱 EhCache 빈을 생성할 경우에 필요하다. JasperRepor ts 문서화(보고서 형식) JasperReports를 이용할 때 활용할 수 있는 편리한 기능을 제공해주는 JasperReportsUtils를 사용할 때 필요하다.(PDF, HTML, XLS, CSV 파일 등으로 출력하는 리포팅 툴) iText 문서화(PDF) PDF 뷰를 만들때 필요
  • 22. 22 스프링의 모듈 및 모듈간 의존관계 I. 스프링이란? 모듈별 의존 라이브러리(요약) 스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지 결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스 프링 의존 라이브러리는 필수가 아니다. 구분 사용분야 설명 Quartz 스케쥴링 Quartz를 이용한 스케줄링 기능을 사용할때 필요하다. JAX-RPC, JAX-WS, XML SOAP RPC 리모팅 기능을 만들때 사용한다. Axis Web Service 웹 서비스를 구현할 때 필요하다. 하지만 Axis 보다는 JAX-WS를 사용하도록 권장한다. Axis 지원 기 능은 앞으로 제거될 예정이다. Jackson Mapper JSON Converter JSON 메시지 컨버터에 사용된다. Syndication RSS RSS/Atom 피드 뷰를 만들 때 필요 JExcelApi 엑셀 제어 엑셀 뷰를 만들 때 필요 POI 엑셀 제어 엑셀 뷰를 만들 때 필요