PowerPoint Presentation

Similar documents
Spring Boot

Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

제11장 프로세스와 쓰레드

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

Spring

제목

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

Spring Boot/JDBC JdbcTemplate/CRUD 예제

본 강의에 들어가기 전

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Inclusion Polymorphism과 UML 클래스 다이어그램 구조에 의거한 디자인패턴 해석

Intro to Servlet, EJB, JSP, WS

Microsoft PowerPoint - 테스트주도개발.pptx

슬라이드 1

[Brochure] KOR_TunA

<323020C0CCB8EDC8A32DB0E6B7AEC4C1C5D7C0CCB3CA2E687770>

PowerPoint Presentation

설계란 무엇인가?

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint 프레젠테이션

유니티 변수-함수.key

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

제목

Spring Data JPA Many To Many 양방향 관계 예제

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

제목

No Slide Title

JVM 메모리구조

cover story3 자바기술의미래를비추는거울 스프링프레임워크 2.5 스프링프레임워크 (SpringFramework) 의세번째메이저업그레이드인스프링 (Spring) 2.5 가지난 11 월말에릴리즈되었다. 스프링의캐치프레이 즈처럼더욱간결해지고더욱강력해진 (simpler

PowerPoint 프레젠테이션

Microsoft PowerPoint - JCO2007_Spring2.0_발표자료_Rev-A.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D>

Web Services 와 EAI

JAVA Bean & Session - Cookie

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Blog

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint 프레젠테이션

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

2장 변수와 프로시저 작성하기

PowerPoint Presentation

Spring 3의 JSR 303 지원

제8장 자바 GUI 프로그래밍 II

파워포인트

Interstage5 SOAP서비스 설정 가이드

PowerPoint Presentation

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Design Issues

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

Microsoft PowerPoint 장강의노트.ppt

Web Application을 구성하는 패턴과 Spring ROO의 사례

C++ 기본문법 정리

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

PowerPoint Presentation

<313720C0CCB8EDC8A32DB5BFC0CFC7D120B0E6B7AE20C4C1C5D7C0CCB3CA20B1B8C1B620C8AFB0E62E687770>

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - CSharp-10-예외처리

Apache Ivy

파워포인트 템플릿

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Chap12-OOP.ppt

슬라이드 1

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

신림프로그래머_클린코드.key

01-OOPConcepts(2).PDF

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint - Smart CRM v4.0_TM 소개_ pptx

- 목차 - 1. 프로젝트소개 배경및목적 프로젝트기능 4 2. 관련기술 웹사이트개발 패션데이터분석알고리즘 기대효과 진행상황 참조

Microsoft PowerPoint - chap01-C언어개요.pptx

Network Programming

OOP 소개

ThisJava ..

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

어댑터뷰

쉽게 풀어쓴 C 프로그래밍

제1부스프링핵심개념 스프링이제공하는기능은매우다양하지만핵심을파고들어가보면스프링의주요기능은종속객체주입 (DI: Dependency Injection) 과애스펙트지향프로그래밍 (AOP: Aspect-Oriented Programming) 으로귀결된다. 1장 스프링속으로 에서

MVVM 패턴의 이해

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

No Slide Title

뇌를 자극하는 JSP & Servlet 슬라이드

C# Programming Guide - Types

KYO_SCCD.PDF

쉽게 풀어쓴 C 프로그래밊

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 2강

쉽게 풀어쓴 C 프로그래밍

Transcription:

Spring Framework 의이해 - 강사김현오 -

1. 스프링프레임워크개요 1.1 스프링프레임워크개요 1.2 스프링시작하기 스프링의등장배경 POJO 프레임워크 스프링프레임워크

스프링의등장배경 (1/2) 자바엔터프라이즈애플리케이션개발표준인 EJB EJB 를사용하면애플리케이션작성을쉽게할수있다. 저수준의트랜잭션이나상태관리, 멀티쓰레딩, 리소스풀링과같은복잡한저수준의 API 따위를이해하지못하더라도아무문제없이애플리케이션을개발할수있다. Enterprise JavaBean 1.0 Specification, Chapter 2 Goals 그러나, 현실은너무어려웠다. EJB 의대안, 스프링프레임워크 Rod Johnson 은자신의저서에서 EJB 를사용하지않고엔터프라이즈애플리케이션을개발하는방법을소개하였고, 이것이스프링프레임워크의모태가되었다. 2

스프링의등장배경 (2/2) EJB 개구려서내가이번에 EJB 안쓰고개발하기 책냈으니횽아들한번만봐주삼 ~ Rod Johnson 오! 대박 ~ 이생퀴잘만들었는데? 이거오픈소스로함만들어보까? Juergen Hoeller ㅇㅇ ~ EJB 가개겨울같았으니까이름을 봄 으로하는게어때? Yann Caroff 3

POJO + Framework 점차 POJO + 경량프레임워크을사용하기시작 POJO 특정프레임워크나기술에의존적이지않은자바객체 특정기술에얽매이지않기때문에생산성, 이식성향상 경량프레임워크 EJB 가제공하는서비스를지원해줄수있는프레임워크등장 Hibernate, JDO, ibatis, Spring 4

스프링프레임워크 (1/2) 스프링프레임워크란? 자바로엔터프라이즈애플리케이션을만들때포괄적으로사용할수있는 Programming 및 Configuration 모델을제공해주는프레임워크 그러니, 주로하는일은애플리케이션수준에인프라스트럭처를제공하는일이고 쉽게말하면, 개발자가귀찮은일에신경쓰지않고비즈니스로직개발에만전념할수있게해준다. * 엔터프라이즈시스템이란서버에서동작하며기업과조직의업무를처리해주는시스템을말한다. 5

스프링프레임워크 (2/2) 2003 년 6 월아파치 2.0 라이선스로공개 Release History 1.0 : 2004 년 4 월 2.0 : 2006 년 10 월 2.5 : 2007 년 11 월 3.0 : 2009 년 12 월 3.1 : 2011 년 12 월 3.1.4 : 2013 년 1 월 4.0.1 : 2014 년 1 월 6

스프링프로젝트 7

오픈소스프레임워크 8

1. 스프링프레임워크개요 1.1 스프링프레임워크개요 1.2 스프링시작하기 실습환경준비 (Maven, STS) Hello MVC

Maven Maven 소프트웨어프로젝트를포괄적으로관리할수있게해주는도구 Project Object Model 개념에기반 프로젝트의빌드, 의존성관리, 리포팅, 문서화등의기능제공 현재가장많이사용하는소프트웨어프로젝트관리도구 Maven by google trends 10

Maven 11

Maven 의존관계관리 Maven 의 pom.xml 에서프로젝트간의존관계를관리할수있다. My Project 12

STS Spring Tool Suite 이클립스기반의스프링용통합개발환경 STS 를설치하는두가지방법 1. STS IDE 설치하기 2. 기존이클립스에설치하기 Spring.io 사이트에서 STS 다운로드 Eclipse Marketplace 에서 STS 설치 13

2. 스프링프레임워크이해와활용 2.1 스프링프레임워크의이해 2.2 IoC Spring Framework 의구조 POJO 공통프로그래밍모델 IoC/AOP/PSA 경량컨테이너 SOLID 원칙

Spring Framework 구조 스프링삼각형 스프링애플리케이션은 POJO 를이용해서만든애플리케이션코드와 POJO 가어떻게관계를맺고동작하는지를정의해놓은설계정보로구분된다. POJO PSA 설계정보 15

Plain Old Java Object POJO Plain Old Java Object 특별한기술에종속되지않은순수한자바객체 테스트하기용이하며, 객체지향설계를자유롭게적용할수있음 - Martin Fowler, Rebecca Parson, Josh Mackenzie가 2000년에만든용어 e wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it's caught on very nicely http://en.wikipedia.org/wiki/pojo POJO PSA 16

Plain Old Java Object 스프링이엔터프라이즈시스템의복잡함을다루는방법 스프링은비즈니스로직의복잡함과엔터프라이즈기술의복잡함을분리해서구성할수있도록도와준다. POJO POJO 비즈니스로직의복잡함 엔터프라이즈애플리케이션전체의복잡함 POJO POJO 엔터프라이즈기술의복잡함 스프링프레임워크 17

Inversion Of Control IoC 객체지향언어에서 Object간의연결관계를런타임에결정하게하는방법 객체간의관계가느슨하게연결됨 (loose coupling) IoC의구현방법중하나가 DI(Dependency Injection) http://en.wikipedia.org/wiki/inversion_of_control 참조 POJO PSA 18

Inversion Of Control 헐리우드원칙 Hollywood Principle Don t call us, we will call you! 19

Aspect Oriented Programming AOP 관심사의분리 (SoC) 를통해서소프트웨어의모듈성을향상시키고자하는프로그래밍패러다임 소스코드레벨에서관심사의모듈화를지함하는프로그래밍방법이나도구를포함 http://en.wikipedia.org/wiki/aspect oriented_programming 참조 POJO PSA 20

Portable Service Abstraction PSA 환경과세부기술의변화에관계없이일관된방식으로기술에접근할수있게해주는설계원칙 예를들어, 데이터베이스에관계없이동일하게적용할수있는트랜잭션처리방식 POJO PSA 21

경량컨테이너 가벼움 (Lightweight) 20여개의모듈로세분화되는수십만코드라인 불필요하게무겁지않음 Spring이필요로하는처리능력 ( 성능 ) 은무시할정도 경량컨테이너 (Lightweight Container) 애플리케이션객체의생명주기 (Lifecycle) 와설정 (Configuration) 을담고관리함 애플리케이션객체를생성하고, 설정하고, 객체간의관계를지정하는방법을제공 22

객체지향설계원칙 (SOLID) SOLID 원칙 객체지향프로그래밍및설계의 5가지기본원칙 이원칙들을적용하면, 상대적으로유지보수하기쉽고확장성있는시스템을만들수있음 리팩토링을위한가이드라인으로사용할수있음 agile, adaptive programming의주요전략 http://www.butunclebob.com/articles.unclebob.principlesofood 참조 Robert C. Martin (Uncle Bob) OOP, C++, Java, Patterns, UML, 컨설턴트애자일소프트웨어개발선언문 Object Mentor 설립 (www.objectmentor.com) cleancoders.com 23

객체지향설계원칙 (SOLID) SOLID 원칙 약자 FullName 설명 SRP OCP LSP ISP DIP The Single Responsibility Principle The Open Closed Principle The Liskov Substitution Principle The Interface Segregation Principle The Dependency Inversion Principle 한클래스 ( 모듈 ) 은하나의책임을가져야함. 한클래스는변경할이유를하나만가져야함 클래스를변경하는것없이클래스의행위를확장할수있어야함 상속된클래스는기반클래스타입으로대체할수있어야함 클라이언트가명확하도록상세한인터페이스를만들어라. 구체클래스가아닌추상화된클래스에의존해라. 24

2. 스프링프레임워크이해와활용 2.1 스프링프레임워크의이해 2.2 스프링 IoC 2.3 스프링빈설정 IoC 개념 의존관계검색과주입 IoC 컨테이너 애플리케이션컨테이너

IoC 개념 (1/5) 객체제어방식 기존 : 필요한위치에서개발자가필요한객체생성로직구현 IoC : 객체생성을 Container에게위임하여처리 IoC 사용에따른장점 객체간의결합도를떨어뜨릴수있음 (loose coupling) 객체간결합도가높으면? 해당클래스가유지보수될때그클래스와결합된다른클래스도같이유지보수되어야할가능성이높음 26

IoC 개념 (2/5) Open/Closed Principle OOP 에서의엔티티 ( 클래스, 모듈, 함수 ) 는확장에는열려있고변경에는닫혀있어야함 High cohesion/loose Coupling 하나의클래스는하나의기능만을담당해야함 클래스간의관계는책임들이얽혀있어서는안되며쉽게다른관계로대치될수있어야함 Hollywood Principle Don t call us, we will call you! 27

IoC 개념 (3/5) 객체간의강한결합의예 BookService 구현체와 UserService 구현체를 BookShelfService 에서직접생성하여사용. BookService 또는 UserService 가교체되거나내부코드가변경되면 BookShelfService 까지수정해야할필요성이있음 BookShelfService 에서 BookService 의구현체와 UserService 의구현체를직접생성함 28

IoC 개념 (4/5) 객체간의강한결합을다형성을이용해결합도를낮춤 BookService 와 UserService 는 CommonService 를상속함 BookShelfService 에서각서비스를이용시 BookService 와 UserService 모두 CommonService 타입으로이용가능 BookService 와 UserService 모두 CommonService 형태로이용가능함 29

IoC 개념 (5/5) 객체간의강한결합을 Factory를이용해결합도를낮춤 각 Service를생성하여반환하는 Factory 이용 Service를이용하는쪽에서는인터페이스만알고있으면어떤구현체가어떻게생성되는지에대해서는알필요없음 이 Factory 패턴이적용된것이 Container의기능이며이 Container의기능을제공해주고자하는것이 IoC모듈 각서비스를생성하여반환하는책임을가진 Factory 30

의존관계검색과주입 Dependency Lookup 컨테이너가 lookup context를통해서필요한리소스나오브젝트를얻는방식 JNDI 이외의방법을사용한다면 JNDI관련코드를오브젝트내에서일일이변경해주어야함 lookup 한오브젝트를필요한타입으로 Casting 해주어야함 Naming Exception을처리하기위한로직필요 Dependency Injection 오브젝트에 lookup 코드를사용하지않고컨테이너가직접의존구조를오브젝트에설정할수있도록지정해주는방식 오브젝트가컨테이너의존재여부를알필요가없음 lookup 관련된코드들이오브젝트내에서사라짐 Setter Injection Constructor Injection Dependency Lookup JNDI Lookup IoC Setter Injection Dependency Injection Constructor Injection Method Injection 31

IoC 컨테이너 오브젝트의생성과관계설정, 사용, 제거등의작업을애플리케이션코드대신독립된컨테이너가담당 컨테이너가코드대신오브젝트에대한제어권을갖고있어 IoC라고부름 이런이유로, 스프링컨테이너를 IoC 컨테이너라고부르기도함 스프링에서 IoC를담당하는컨테이너에는 BeanFactory,ApplicationContext가있음 interface BeanFactory 빈 (bean) 객체에대한생성과제공을담당 단일유형의객체를생성하는것이아니라, 여러유형의빈 (bean) 을생성, 제공 객체간의연관관계를설정, 클라이언트의요청시빈을생성 빈의라이프사이클을관리 interface ApplicationContext BeanFactory 가제공하는모든기능제공 엔터프라이즈애플리케이션을개발하는데필요한여러기능을추가함 I18N, 리소스로딩, 이벤트발생및통지 컨테이너생성시모든빈정보를메모리에로딩함 interface ebapplicationcontext 웹환경에서사용할때필요한기능이추가된애플리케이션컨텍스트 가장많이사용하며, 특히 Xml ebapplicationcontext 를가장많이사용 32

애플리케이션컨텍스트 ApplicationContext 싱글톤레지스트리로서의애플리케이션컨텍스트 애플리케이션컨텍스트는우리가만들었던오브젝트팩토리와비슷한방식으로동작하는 IoC 컨테이너이다. 스프링은기본적으로별다른설정을하지않으면내부에서생성하는빈오브젝트를모두싱글톤으로만든다. 매번클라이언트에서요청이올때마다각로직을담당하는오브젝트를새로만들어서사용한다고생각해보자. 요청한번에 5 개의오브젝트가새로만들어지고초당 500 개의요청이들어오면, 초당 2500 개의새로운오브젝트가생성된다. 1 분이면십오만개, 한시간이면 9 백만개의새로운오브젝트가만들어진다. 아무리자바의오브젝트생성과가비지컬렉션의성능이좋아졌다고한들이렇게부하가걸리면서버가감당하기힘들다. 그래서엔터프라이즈분야에서는서비스오브젝트라는개념을일찍부터사용해왔다. 서블릿은자바엔터프라즈기술의가장기본이되는서비스오브젝트라고할수있다. 스펙에서강제하진않지만, 서블릿은대부분멀티스레드환경에서싱글톤으로동작한다. 서블릿클래스당하나의오브젝트만만들어두고, 사용자의요청을담당하는여러스레드에서하나의오브젝트를공유해동시에사용한다. 33

스프링 IoC 주요용어 빈 (bean) 스프링이 IoC 방식으로관리하는오브젝트를말한다. 관리되는오브젝트라고부르기도한다. 스프링이직접그생성과제어를담당하는오브젝트만을빈이라고부른다. 빈팩토리 (bean factory) 스프링이 IoC 를담당하는핵심컨테이너를가리키다. 빈을등록하고. 생성하고, 조회하고돌려주고, 그외에부가적인빈을관리하는기능을담당한다. 보통은이빈팩토리를바로사용하지않고이를확장한애플리케이션컨텍스트를이용한다. 애플리케이션컨텍스트 (application context) 빈팩토리를확장한 IoC 컨테이너이다. 빈을등록하고관리하는기본적인기능은빈팩토리와동일하다. 스프링이제공하는각종부가서비스를추가로제공한다. 빈팩토리라고부를때는주로빈의생성과제어의관점에서이야기하는것이고, 애플리케이션컨텍스트라고할때는스프링이제공하는애플리케이션지원기능을모두포함해서이야기하는것이라고보면된다. 설정정보 / 설정메타정보 (configuration metadata) 스프링의설정정보란애플리케이션컨텍스트또는빈팩토리가 IoC 를적용하기위해사용하는메타정보를말한다. 이는구성정보내지는형상정보라는의미이다. 스프링프레임워크 스프링프레임워크는 IoC 컨테이너, 애플리케이션컨텍스트를포함해서스프링이제공하는모든기능을통틀어말할때주로사용한다. 34

2. 스프링프레임워크이해와활용 2.1 스프링프레임워크의이해 2.2 스프링 IoC 2.3 스프링빈설정 스프링빈 Scope 스프링빈설정 스프링빈생명주기

스프링빈 Scope 스프링빈생성범위 범위 설명 singleton 스프링컨테이너당하나의인스턴스빈만생성 ( 디폴트 ) prototype request session 컨테이너에빈을요청할때마다새로운인스턴스생성 HTTP 요청별로새로운인스턴스를생성 HTTP 세션별로새로운인스턴스를생성 싱글톤빈 (Singleton Bean) 스프링빈은기본적으로싱글톤으로만들어짐 따라서, 컨테이너가제공하는모든빈의인스턴스는항상동일함 컨테이너가항상새로운인스턴스를반환하게만들고싶다면 scope 을 prototype 으로설정해야함 @Component("beanScopeCookBookDatasource") @Scope("singleton") public class BeanScopeBookDatasource { } private String driverclass; private String url; private String username; private String password; 36

스프링빈설정 스프링빈설정메타정보 XML 문서 애노테이션 BeanDefinition 메타정보 IoC 컨테이너 자바코드 메타정보의표현방식 37

스프링빈설정 - XML XML 방식의스프링빈설정 XML문서형태로빈의설정메타정보를기술 단순하며사용하기쉬움, 가장많이사용하는방식 <bean> 태그를통해세밀한제어가가능 XML 방식부터익히는것이쉬움 <?xml version="1.0" encoding="utf 8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring beans.xsd"> <bean id="chef" class="kr.or.kosta.spring.cookbook.chef"> <property name="recipe" ref="recipe"/> </bean> <bean id="recipe" class="kr.or.kosta.spring.cookbook.recipe.gimchi"/> </beans> 38

스프링빈설정 - Annotation 애노테이션방식의스프링빈설정 애플리케이션의규모가커지고빈의갯수가많아질경우 XML 파일을관리하는것이번거로움 빈으로사용될클래스에특별한애노테이션을부여해주면자동으로빈등록가능 오브젝트빈스캐너 로 빈스캐닝 을통해자동등록 빈스캐너는기본적으로클래스이름을빈의아이디로사용한다. 정확히는클래스이름의첫글자만소문자로바군것을사용한다. @Component public class AnnotatedChef { @Autowired Recipe recipe; public void sayingredients() { StringBuffer sb = new StringBuffer(); String[] ingredients = recipe.ingredients(); for (String ingredient : ingredients) { sb.append(ingredient); sb.append("\n"); } System.out.println(sb.toString()); } 39

스프링빈설정 - Annotation 애노테이션으로빈설정시꼭 component scan 을설정해주어야한다. <annotated root context.xml> <?xml version="1.0" encoding="utf 8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/springcontext. xsd"> </beans> <context:component scan base package="kr.or.kosta.*"/> 40

스테레오타입애노테이션목록 빈자동등록에사용할수있는애노테이션목록 빈자동인식을위한애노테이션을이렇게여러가지로사용하는데는계층별로빈의특성이나종류를나타내려는목적도있고, AOP 포인트컷표현식을사용하면특정애노테이션이달린클래스만을선정할수가있다. 이를이용해특정계층의빈에부가기능을부여해줄수도있다. 스테레오타입 @Repository @Service @Controller @Component 적용대상 데이터액세스계층의 DAO 또는 Repository 클래스에사용 DataAccessException 자동변환과같은 AOP 의적용대상을선정하기위해사용하기도함 서비스계층의클래스에사용 프레젠테이션계층의 MVC 컨트롤러에사용. 스프링웹서블릿에의해웹요청을처리하는컨트롤러빈으로선정 위의계층구분을적용하기어려운일반적인경우에사용 41

의존관계주입 (Dependency Injection, DI) 의존관계주입 (dependency injection) 제어의역행 (inversion of control, IoC) 이라는의미로사용되었음 Martin Fowler, 2004(http://martinfowler.com/articles/injection.html) - 제어의어떠한부분이반전되는가라는질문에 의존관계주입 이라는용어를사용 - 복잡한애플리케이션은비즈니스로직을수행하기위해서최소두개이상의클래스들이서로협업 - 각각의객체는협업하고자하는객체의참조를얻는것에책임성이있음 - 이부분은높은결합도 (highly coupling) 와테스트하기어려운코드를양산함 DI 를통해시스템에있는각객체를조정하는외부개체가객체들에게생성시에의존관계를주어짐 - 즉, 의존이객체로주입됨 - 객체가협업하는객체의참조를어떻게얻어낼것인가라는관점에서책임성의역행 (inversion of responsibility) 임 - 느슨한결합 (loose coupling) 이주요강점 - 객체는인터페이스에의한의존관계만을알고있으며, 이의존관계는구현클래스에대한차이를모른채서로다른구현으로대체가능 File 의존관계주입 Writer Console 의존관계주입 42

스프링빈의존관계설정 애노테이션사용 스테레오타입 @Resource @Autowired @Inject 적용대상 JSR 250 표준 Annotation, 스프링 2.5 부터지원멤버변수, Setter 메소드에사용가능 스프링 2.5 부터지원스프링에서만사용가능, required 속성을통해 DI 여부조정멤버변수, Setter, 생성자, 일반메서드에사용가능 JSR 330 표준, Spring 3.0 부터사용가능프레임워크에종속적이지않음, javax.inject x.x.x.jar 필요멤버젼수, Setter, 생성자, 일반메서드에사용가능 43

스프링빈의존관계설정 애노테이션사용 멤버변수에 @Resource @Component public class Chef { @Resource(name="gimChi") // 동일한타입의빈이여러개일경우 name 을통해서구분한다. Recipe recipe; public void sayingredients() { StringBuffer sb = new StringBuffer(); String[] ingredients = recipe.ingredients(); for (String ingredient : ingredients) { sb.append(ingredient); sb.append("\n"); } System.out.println(sb.toString()); } 44

스프링빈의존관계설정 애노테이션사용 setter 에 @Resource @Component public class Chef { Recipe recipe; public Recipe getrecipe() { return recipe; } @Resource(name="gimChi") public void setrecipe(recipe recipe) { this.recipe = recipe; } 45

스프링빈의존관계설정 애노테이션사용 생성자에서 @Autowired @Component public class PrintChef { Recipe recipe; Printer printer; public PrintChef() {} @Autowired // 생성자가여러개일경우에는하나만사용가능 public PrintChef(@Qualifier("bulGoGi") Recipe recipe, @Qualifier("stringPrinter") Printer printer) { this.recipe = recipe; this.printer = printer; } 동일한타입의 bean 이여러개일경우에는 @Qualifer( 이름 ) 으로식별한다. 46

스프링빈의존관계설정 애노테이션사용 맴버변수에서 @Autowired @Component public class PrintChef { @Autowired @Qualifier("gimChi") Recipe recipe; @Autowired @Qualifier("stringPrinter") Printer printer; public PrintChef() {} public PrintChef(Recipe recipe, Printer printer) { this.recipe = recipe; this.printer = printer; } 동일한타입의 bean 이여러개일경우에는 @Qualifer( 이름 ) 으로식별한다. 47

스프링빈의존관계설정 애노테이션사용 일반메서드에서 @Autowired @Component public class PrintChef { Recipe recipe; Printer printer; public PrintChef(Recipe recipe, Printer printer) { this.recipe = recipe; this.printer = printer; } @Autowired public void initprintchef(@qualifier("bulgogi") Recipe recipe, @Qualifier("stringPrinter") Printer printer) { this.recipe = recipe; this.printer = printer; } @Qualifer 는 xml 설정사용시는불가능함 48

스프링빈생명주기 49

토의 질의응답 토론 넥스트리소프트 ( 주 ) 김현오선임 (hyunohkim@nextree.co.kr) 50