슬라이드 1

Size: px
Start display at page:

Download "슬라이드 1"

Transcription

1 Spring Framework 3.X 오문정강사 Spring3- Oh Moon Jeong - 1-1

2 레이어 vs. 티어 레이어 논리적분할, 단방향 티어 -- 물리적분할, 양방향 Spring3- Oh Moon Jeong - 2-2

3 Java EE Java 2 Platform, Enterprise Edition Java EE 6 specifies technologies to support multitier enterprise applications Spring3- Oh Moon Jeong - 3-3

4 JAVAEE 응용어플리케이션 with EJB 비즈니스티어확장을위한분산객체 (distributed object) 기술을적용 (+) 비즈니스티어확장을통한가용성향상 (-) 기술복잡도가높아이해하기어려움 (-) 개발생산성 (-) 성능 (-) 유지보수성 (-) 테스트 EJB 컨테이너필요 (-) 컨테이너이식성 벤더고유서비스 (-) 개체지향개발-컨테이너API 제약 Spring3- Oh Moon Jeong - 4-4

5 JAVAEE 응용어플리케이션 without EJB 비즈니스컨테이너서비스는인정분산객체 (distributed object) 기술은오버스팩웹티어와비즈니스티어를분할하지않고웹티어내에통합함 (+) 배우기쉬움 (+) 개발생산성 (+) 성능 (+) 유지보수성 (+) 테스트용이 (+) 컨테이너이식성-Servlet컨테이너 (+) 개체지향개발 (-) 비즈니스티어분산홖경미지원 (-) LightwegihtContainer표준이없음 Spring3- Oh Moon Jeong - 5-5

6 POJO Plain Old Java Object Java Language 이외에어떤제약도받지않는개체 스프링의자바빈이란용어는 POJO 와같은말이다. POJO 가아닌사례 Spring3- Oh Moon Jeong - 6-6

7 요약 POJO 기반 J2EE 응용어플리케이션 Without EJB 프레임워크기반응용어플리케이션 Spring3- Oh Moon Jeong - 7-7

8 SPRING FRAMEWORK Spring3- Oh Moon Jeong - 8-8

9 SpringFramework 의특징 스프링은 어플리케이션프레임워크 로불리며, 웹어플리케이션은물론콘솔어플리케이션, GUI어플리케이션등어떤어플리케이션에도적용가능한프레임워크이다. 다양한 API와의연동지원을통한JAVA EE 구현가능하다. POJO지원 특정규약 ( 특정클래스로부터상속해서만들어야하는규약 ) 에종속되지않는다. 특정환경 ( 특정서버및기술 ) 에종속되지않는다. 스프링은 EJB와같은복잡한순서를거치지않아도간단하게이용할수있기때문에 Lightweight 컨테이너라고도부른다. 스프링은 Dependency Injection(DI) 과 Aspect Oriented Programming(AOP) 을가장중점적인기술로사용한다. Spring3- Oh Moon Jeong - 9-9

10 스프링구성모듈 Spring3- Oh Moon Jeong

11 스프링설치 spring홈페이지 - spring 소스 : maven 중앙저장소 : spring-framework release-a-with-docs.zip Spring3- Oh Moon Jeong

12 (dependency injection) D I Spring3- Oh Moon Jeong

13 객체지향설계원칙 High Coherence, Low Coupling class CD 음식점 - 공통모듈상속 shop::bakery + Bakery() + sale(string) : Food + tostring() : String «사용» «interface» FoodMaker + make() : Food shop::shoptest + main(string[]) : void «사용» DonutMaker CoffeeMaker Food + make() : Donut + make() : Coffee - name: String shop::cafe + Cafe() + sale(string) : Food + tostring() : String «생성» shop::donut + Donut() shop::coffee + Coffee() shop::cake + Cake() Spring3- Oh Moon Jeong

14 상속 Low Coupling? shop::bakery public class Bakery{ public Bakery(){} // 케익을만들어야한다면? + Bakery() + sale(string) : Food + tostring() : String «사용» «interface» FoodMaker + make() : Food public Food sale(string type){ if(" 도넛 ".equals(type)){ FoodMaker dm = new DonutMaker( ); Donut d = dm.make(); id «사용» DonutMaker CoffeeMaker return d; }else if(" 커피 Food".equals(type)){ shop::cafe + Cafe() + sale(string) : Food + tostring() : String + make() : Donut + make() : Coffee «생성» - name: String FoodMaker cm = new CoffeeMaker( ); Coffee coffee = cm.make(); return coffee; shop::donut + Donut() shop::coffee } } + Coffee() shop::cake + Cake() public String tostring(){ return " 빵집입니다."; Spring3- Oh Moon Jeong }

15 Inversion of Control ( 이하 IoC) 란? Component dependency resolution, configuration 및 lifecycle 을해결하기 위한 Design Pattern DIP (Dependency Inversion Principle) 또는 Hollywood Principle (Don t call us we ll call you) 라는용어로도사용 특정작업을수행하기위해필요한다른컴포넌트들을직접생성하거나획득하기보다는이러한의존성들을외부에정의하고컨테이너에의해공급받는방법으로동작 Spring3- Oh Moon Jeong

16 IoC IoC 의장점 클래스 / 컴포넌트의재사용성증가 단위테스트용이 Assemble과 Configure를통한시스템구축용이 IoC 와 Dependency Injection 간의관계 Spring3- Oh Moon Jeong

17 Dependency Injection 예시 객체사이의의존관계를객체자체에서가아닌외부설정을이용하여주입을함으로써각객체간의의존관계를맺는것을말한다. 대표적인방법으로생성자를통한주입, 설정메소드를통한주입이있다. 조건 클래스모델이나코드에는런타임시점의의존관계가드러나지않는다. 그러기위해서는인터페이스에만의존하고있어야한다. (FoodMaker를구현한클래스가바뀌거나메서드내용이바뀌어도 Bakery에영향을주지않는다 ) 런타임시점의의존관계는컨테이너나팩토리같은제3의존재가결정한다. 의존관계는사용할오브젝트에대한레퍼런스를외부에서제공 ( 주입 ) 해줌으로써만들 어진다. Spring3- Oh Moon Jeong

18 Dependency Injection class CD 음식점 Cafe Shop - foodmaker: FoodMaker + Cafe(FoodMaker) + sale() : Food + tostring() : String «사용» «interface» FoodMaker + make() : Food DonutMaker + make() : Food Bakery Shop «사용» DependencyInj ection + main(string[]) : void - foodmaker: FoodMaker + Bakery(FoodMaker) + sale() : Food + tostring() : String «생성» CoffeeMaker + make() : Food CakeMaker + make() : Food Factory + bakery() : Bakery + cafe() : Cafe + foodmaker() : FoodMaker Food # name: String + tostring() : String Coffee + Coffee() Donut + Donut() Cake + Cake() Spring3- Oh Moon Jeong

19 런타임시의의존관계주입과사용의존관계 object OD 음식점 «interface» :FoodMaker :Bakery ::Bakery - foodmaker: FoodMaker «의존관계주입» «사용의존관계» :CoffeeMaker ::CoffeeMaker + make() : Food :CakeMaker «생성» :Factory Spring3- Oh Moon Jeong

20 Spring Container DI 을적용하려면각객체들을생성및관리할조립기가필요하다. 개발자가직접만들수도있지만, 조립할객체가증가하고의존관계가복잡해질수록 조립기를만드는일또한어렵다. DI 패턴을지원해주는프레임워크를사용하는것을권장 Spring3- Oh Moon Jeong

21 Spring Container 어플리케이션컨텍스트 = IoC Container = Bean Factory = Spring Spring3- Oh Moon Jeong

22 Spring Container 스프링에서는스프링이제어권을가지고직접만들고관계를부여하는오브젝트단위의컴포넌트를 Bean이라고한다. 동시에스프링빈은스프링컨테이너가생성과관계설정, 사용등을제어해주는제어의역전이적용된오브젝트를말한다. 빈팩토리 (Bean Factory) 스프링에서는빈의생성과관계설정같은제어를담당하는 IoC오브젝트를라고부른다. 기본인터페이스명은 BeanFactory이다. 어플리케이션컨텍스트 (ApplicationContext ) 빈팩토리라부를때는주로빈생성과제어의관점에서이야기하는것이고, 라고할때는스프링이제공하는애플리케이션지원기능을모두포함한경우를말한다. 기본인터페이스명은 ApplicationContext이며 BeanFactory의하위인터페이스이다. Context 생성시모든Singleton Bean을미리 loading하여bean이필요할때즉시사용할수있도록보장한다. Spring3- Oh Moon Jeong

23 Spring Container Spring3- Oh Moon Jeong

24 Bean 객체설정방법 자바코드설정정보 XML 설정정보 <beans> methodname() <bean id= methodname 빈의클래스 return new BeanClass class= a.b.beanclass /> -- bean 기본속성 -- name : 주입받을곳에서호출할이름 id : name과같음, 단중복되면안됨. "/" 나 "," class : 주입할클래스 public class Factory { public Bakery bakery(){ return new Bakery(foodMaker()); public FoodMaker foodmaker(){ } return new CoffeeMaker(); <bean id="bakery" class="shop.xml.bakery"> <constructor-arg name="foodmaker" ref="foodmaker"> </constructor-arg> </bean> <bean id="foodmaker" class="shop.xml.coffeemaker"> </bean> Spring3- Oh Moon Jeong

25 Bean 객체사용법 ClassPathXmlApplicationContext : 클래스경로에있는xml 파일로부터로딩 ex) ApplicationContext context = new ClassPathXmlApplicatoinContext("c:/config.xml"); FileSystemXmlApplicationContext : 파일시스템에있는xml 파일로부터로딩 ex) ApplicationContext context = new FileSystemXmlApplicatoinContext("c:/config.xml"); GenericXmlApplicationContext : 클래스패스의루트에있는 xml 파일로부터로딩 ex) GenericXmlApplicationContext context = new GenericXmlApplicationContext( config.xml ); XmlWebApplicationContext : 웹어플리케이션에포함되어있는 xml 파일로부터로딩 Spring3- Oh Moon Jeong

26 Bean 객체사용법 Dependency LookUp 으로빈객체사용 public class DependencyInjection{ public static void main(string []args){ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Factory.class); Bakery b1 = ctx.getbean("bakery", Bakery.class); Bakery b2 = ctx.getbean("bakery", Bakery.class); System.out.println(b1 == b2); Food f = b1.sale(); System.out.println(f); } } Spring3- Oh Moon Jeong

27 DI 의존관계설정방법 생성자방식 XML 설정파일에서생성자주입요소는 <constructor-arg> Setter 메서드방식 XML 설정파일에서 setter 주입요소는 <property> 생성자와 Setter 메서드에서공통으로쓰이는속성 단, <property> 요소는 ref속성과 value속성에만갖는다. 속성 설명 index 생성자의몇번째인수에값을넘길것인가를지정한다. type 생성자의어떤데이터타입인인수에값을넘길것인지지정한다. ref 자식요소 <ref bean= 빈이름 /> 대신사용할수있다 value 자식요소 <value> 값 </value> 대신사용할수있다. Spring3- Oh Moon Jeong

28 <constructor-arg> <bean id="bakery" class="shop.xml.bakery"> <constructor-arg ><ref bean="foodmaker"/> </constructor-arg> </bean> id 가 foodmaker 인빈객체를생성자에전달 <bean id="foodmaker" class="shop.xml.coffeemaker"> public class Bakery{ </bean> private FoodMaker foodmaker; public Bakery(){} <ref> 태그대신 ref속성사용가능 public Bakery(FoodMaker foodmaker){ this.foodmaker = foodmaker; <constructor-arg ref="foodmaker"/> } public Food sale(){ return foodmaker.make( ); 전달받은파라미터가 2개이상인경우 } } <constructor-arg value="10"/> <constructor-arg ref="sender"/> value 의기본타입은 String 타입이다. 타입지정에는 type 속성설정 <constructor-arg><value>10</value></constructor-arg> <constructor-arg><value type="long">10</value></constructor-arg> Spring3- Oh Moon Jeong

29 <property> <bean id="bakery" class="shop.xml.bakery"> <property name="foodmaker"><ref bean="foodmaker"/></property> </bean> <bean id="foodmaker" </bean> 참고 )null값처리 id 가 foodmaker 인빈객체를 setfoodmaker() 에전달 class="shop.xml.coffeemaker"> public class Bakery{ private FoodMaker foodmaker; public Food sale(){ return foodmaker.make( ); } public void setfoodmaker(foodmaker foodmaker) { this.foodmaker = foodmaker; } } <constructor-arg> 나 <property> 요소에서비어있는 <value> 요소를작성하면 String타입필드에는빈문자열 ( ) 가설정된다.( 숫자타입필드일경우에는예외가발생한다.) 빈문자열이아니라명시적으로 null 값을설정하려면 <value> 대신 <null> 요소를사용한다. <constructor-arg> <null/> </constructor-arg> Spring3- Oh Moon Jeong

30 Collection 타입의객체설정주입 <property> 또는 <constructor-arg> 의하위태그로 Collection타입의값을설정하는태그들 태그 Collection종류 설명 <list> java.util.list List 계열컬렉션값목록전달 <set> java.util.set Set 계열컬렉션값목록전달 <map> java.util.map Map계열컬렉션에key-value의값목록전달 <props> java.util.properties Properties 에 key(string)-value(string) 의값목록전달 Spring3- Oh Moon Jeong

31 Collection 타입의객체설정주입 <list> List 계열컬렉션이나배열에값들을넣기. <ref bean= bean_id /> : bean 객체를 list 에추가 <value [type= type ]> 값 </value> : 문자열 (String), Primitive 값을 list 에추가 <map> public void setmylist(list list){ } <bean id= otherbean class= vo.otherbean /> <bean id= mybean class= vo.myvo > <property name= mylist > <list><value>10</value> ->String 으로저장됨 <value type= java.lang.integer >20</value>->Integer 로저장됨 <ref bean= otherbean /> </list> </property> </bean> public void setmymap(map map){ } <bean id= otherbean class= vo.otherbean /> <bean id= mybean class= vo.myvo > <property name= mymap > <map> <entry key= id value= abc /> <entry key= other value-ref= otherbean /> </map> </property> Spring3- Oh Moon Jeong </bean>

32 autowire="byname" 의존관계자동설정 값의미 no Autowiring을하지않는다. byname Bean의프로퍼티에대한 Setter메서드의이름과같은이름의 id 를갖는 Bean객체를설정해준다. 설정파일 setter주입 <bean id="driver" class="autoby package autobyname; Name.Driver" public class Driver { autowire="byname"> private Car c; </bean> public void setcar(car c){ this.c = c; <bean id="car" } class="autobyname.civic"/> public void driving(){ </beans> c.run(); }} package autobyname; public interface Car { void run(); } package autobyname; public class Civic implements Car { public void run() { System.out.println("CIVIC이달린다."); }} Spring3- Oh Moon Jeong

33 autowire="bytype" 의존관계자동설정 bytype Bean 의프로퍼티에대한 Setter 메서드의인수타입을사용해 B ean 객체를설정해준다. 설정파일 <bean id="driver" class="autobytype.driver" autowire="bytype"> </bean> <bean id="car" class="autobytype.civic"/> setter주입 package autobytype; public class Driver { private Car c; public void setaaa( Car c ){ this.c = c; } public void driving(){ c.run(); } } 또는소스파일에어노테이션을설정해서자원접근수단간소화설정파일 setter주입 <context:annotation-config/> public class Driver private Car c; <bean id="driver" class="autoconfig.driver"/> <bean id="car" class="autoconfig.civic"/> public void driving(){ c.run(); }} Spring3- Oh Moon Jeong

34 autowire="constructor" 의존관계자동설정 constructor 생성자파라미터타입과같은타입을갖는빈객체를생성자에전달한다. 설정파일 <bean id="driver" class="autoconstructor.driver" autowire="constructor"> </bean> <bean id="car" class="autoconstructor.civic"/> 생성자주입 package autoconstructor; public class Driver { private Car c; public Driver(Car c) { this.c = c; } public void driving(){ c.run(); } } Spring3- Oh Moon Jeong

35 실습 오브젝트관계에서생성할 Outputter빈은 FileOutputter타입의빈을생성한다. MessageBean빈으로는 MessageBeanImpl타입의빈을생성한다. MessageBeanImpl의빈설정은생성자injection으로 name을설정하고, setter injection으로 greeting과 outputter를설정한다. FileOutputter의 filepath는 a.txt로설정한다.(setter / 생성자주입어느것도관계없음 ) sayhello( ) 에서메시지를만들어서 [e.g)name값님 greeting값!] output( 메시지 ) 를호출한다. output( ) 에서 a.txt파일에메시지를출력한다. Spring3- Oh Moon Jeong

36 실습테스트소스 package message.output; import org.springframework.context.applicationcontext; import org.springframework.context.support.filesystemxmlapplicationcontext; public class MessageTest { public static void main(string[] args) { ApplicationContext factory = new FileSystemXmlApplicationContext("src/message/output/beans.xml"); MessageBean bean =factory.getbean("messagebean", MessageBean.class); bean.sayhello( ); } } Spring3- Oh Moon Jeong

37 BEAN LIFE CYCLE Spring3- Oh Moon Jeong

38 Bean Scope Spring3- Oh Moon Jeong

39 Bean Scope 서로다른 Scope 빈에대한의존처리 생명주기가더긴빈의의존객체로설정되면의존객체의 Scope은주입된객체의 Scope과같아진다. e.g ) Singleton빈에서 Prototype빈을사용하면 Prototype빈도 Singleton Scope을갖는다. Singleton 빈 사용 Prototype 빈 올바른범위를적용하려면 <aop:scoped-proxy/> 태그를사용 <bean id="p" class="~" scope="prototype"> <aop:scoped-proxy/> </bean> <bean id="s" class="xxx"> <property name="p" ref="p"/> </bean> Spring3- Oh Moon Jeong

40 Bean Life Cycle Spring3- Oh Moon Jeong

41 Bean Life Cycle bean 의 init-method 속성 설정된메서드명의메서드가빈객체생성후한번실행 <bean id="messagebean" class="lifecycle.messagebeanimpl" init-method="init"> bean 의 destroy-method 속성 설정된메서드명의메서드가빈객체가힙에서삭제되기전에실행 bean 의 lazy-init 속성 ApplicationContext 를이용하면 ApplicationContext 가초기화되는시점에모든 Bean 을생성해놓고이용한다. 하지만필요한시점에객체를생성하기원하다면 lazy-init 속성을지정한다. <bean id= messagetest class= MessageBean lazy-init= true /> bean 의 depends-on 속성 XML 에설정한순서대로 Bean 객체가생성되는것이 default 이다. 하지만 depends-on 속성으로강제순서를지정할수있다. 해당 bean 보다먼저생성해야하는 bean 을값으로준다.<bean id="userservice" class="a.service" depends-on= userdao"/> <bean id= userdao class= UserDAO /> bean 의 factory-method 속성 private 생성자를갖는빈을참조할메서드지정 Spring3- Oh Moon Jeong

42 어노테이션기반설정 Spring3- Oh Moon Jeong

43 어노테이션 설정파일에 <context:annotation-config> 반드시의존주입되어야하는프로퍼티용 public void setnumber(int number){ } <bean id="r" c="a.b.foo"> <property name="number" 설정된생성자 / 필드 / 메서드는객체생성시자동호출됨. 프로퍼티타입으로빈찾음. 동일타입의빈이두개이상이면예외발생한다. 해당빈을찾지못하면예외발생됨. void seta(a a){ } Spring3- Oh Moon Jeong

44 @Qualifier("main") private Recorder recorder; <bean id="re1" class="a.b.recorder"><qualifier value="main"> <bean id="re2" private init-method 속성과 destroy_method 속성과같은역할 Spring3- Oh Moon Jeong

45 XML에 <bean> 을설정하지않아도자동검색되어빈으로등록될클래스에선언한다. 단, xml에 <context:component-scan base-package=" 자동검색할패키지명 "/> 을지정한다. 빈의 스프링3에서는 메서드이름이아닌다른이름을빈객체의 name으로사용하려면어노테이션의 name public CustomerDAO customerdao(){ } Spring3- Oh Moon Jeong

46 실습개요 스프링데이터소스용 API인 org.springframework.jdbc.datasource.simpledriverdatasource를주입해서매번db와의연결중복을피한다. SimpleDriverDataSource는 org.springframework.jdbc release.jar에있으므로 build path에추가해야한다. Spring3- Oh Moon Jeong

47 실습테스트소스 package datasource; : public class CustomerDAOTest{ public static void main(string []args){ // 실습1 Lookup방법 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("dsApplicationContext.xml", CustomerDAOTest.class); // 실습2 Lookup방법 /*AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DAOFactory.class); */ CustomerDAO dao = ctx.getbean("customerdao", CustomerDAO.class); try { Customer c = dao.findbyid("id0"); } catch (Exception e) { e.printstacktrace(); } } } Spring3- Oh Moon Jeong

48 실습 1 - Autowired 를이용한 CustomerDAOImpl 과설정파일만들기 :CustomerDao Impl 실습내용 XML 설정파일을완성하고, CustomerDAOImpl 에 datasource 를 autowire 한다 DataSource 용설정내용은아래와같다. 파일명 : (dsapplication.xml) <bean id="datasource" class="org.springframework.jdbc.datasource.simpledriverdatasource"> <property name="driverclass" value=""/> <property name="url" value=""/> <property name="username" value=""/> <property name="password" value=""/> </bean> Spring3- Oh Moon Jeong

49 실습 2 어노테이션를이용하는 Factory 클래스만들기 Autowire 실습에서사용한 XML 설정파일대신어노테이션을활용한 Factory 클 래스를사용한다. 클래스이름 : DAOFactory object OD 데이터소스 :CustomerDao :CustomerDAO Impl «interface» :DataSource «의존관계주입» «사용의존관계» :SimpleDataSource :DAOFactory «생성» Spring3- Oh Moon Jeong

50 Aspect Oriented Programming AOP Spring3- Oh Moon Jeong

51 Aspect Oriented Programming 여러업무의공통기능을클래스단위로모으고모듈로부터분리함으로써재사용성과보수성을높이는것이 OOP이다. 그러나그기능을사용하기위한코드까지는각모듈로부터분리할수없었다. 그렇기때문에분리한기능을이용하기위해서는코드가각모듈에횡단으로산재 (Cross -cutting Concern) 하게된다. 핵심관심 (core concerns) 시스템의핵심가치와목적이그대로드러난관심영역.. 비즈니스로직 횡단관심 (crosscutting concern) 아래와같은쉽게모듈화되지않는부분 -로그작성(logging), -보안/ 인증 (security/authentication), -트랜잭션(transaction), -리소스풀링 (resource pooling), -에러검사(error checking), -정책적용(policy), -멀티쓰레드안전관리 (multithread), -데이터퍼시스턴스 (persistence) 등 Spring3- Oh Moon Jeong

52 Aspect Oriented Programming Aspect Oriented Programming 핵심관심사항과횡단관심사항 ( 공통모듈 ) 을기준으로프로그래밍함으로써공통모듈을손쉽게적용할수있게해준다. AOP에서는횡단관점까지분리하여각모듈로부터관점에관한코드를완전히제거하는것을목표로한다. Spring3- Oh Moon Jeong

53 AOP 용어 Weaving : Advice 를 Pointcut 에삽입하는것 프로그램실행순서 Advisor pointcut A WHEN + WHAT ( 공통코드 ) 공통관심기능을언제핵심로직에적용할지를정의한것 Advice X Advice 를적용가능한지점을말한다. 핵심로직 joinpoint Advisor pointcut B WHERE 여러개의조인포인트를하나로결합한것 Advice 와 Pointcut 을하나로묶어취급한빈 Advice Y Spring3- Oh Moon Jeong

54 Weaving 방식 Weaving Advice 를 Pointcut 에삽입하는것 컴파일시에 Weaving AspectJ에서사용하는방식 컴파일할때알맞은위치에공통코드를삽입 클래스로딩시에 Weaving (LoadTimeWeaving) AspectJ에서사용하는방식 로딩한클래스의바이너리정보를변경하여알맞은위치에공통코드를삽입한새로운바이너리코드를사용한다. 원본클래스파일은변경하지않는다. 런타임시에 Weaving ( 동적 AOP) 프록시를생성하여핵심로직을구현한객체에접근하게된다. Spring3- Oh Moon Jeong

55 클래스다이어그램 <<interface>> MessageBean +sayhello(name:string) Spring AOP Logging 처리 MessageBeanImpl +sayhello(name:string) Spring3- Oh Moon Jeong

56 Proxy 기반 AOP 구현 필요라이브러리 org.springframwork.aop-3.x-release.jar com.springsource.org.aopalliance jar AOP 구현절차 1. Advice 클래스작성하기. 설정파일에 Advide설정한다. 2. 설정파일에 PointCut을설정한다. 3. 설정파일에 Advice와 PointCut을묶어놓은 Advisor를설정한다. 4. 설정파일에 ProxyFactoryBean클래스를이용하여대상객체에 Advisor를적용한다. 5. getbean() 메소드로빈객체를가져와사용한다. Spring3- Oh Moon Jeong

57 Proxy 기반 AOP <<interface>> MessageBean +sayhello(name:string) <bean id="messagebean" Proxy +sayhello(name:string) <<interface>> MethodInterceptor +invoke( ) Target ( 핵심기능 ) MessageBeanImpl +sayhello(name:string) JoinPoint <bean id="proxy"> 프록시에서쓰일 Target 빈주입 Advisor 빈주입 LogginAdvice ( 부가기능 ) +invoke( ) <bean id="logginadvice"> Advisor <bean id="helloadvisor" ~> 사용할 Advice 빈주입 Pointcut 용메서드설정 Spring3- Oh Moon Jeong

58 Proxy 패턴 다이나믹프록시와프록시팩토리빈 프록시클래스없이도프록시오브젝트를런타임시에만들어주는 JDK다이나믹프록시기술을적용할수있다. 하지만동일한기능의프록시를여러오브젝트에적용할경우오브젝트단위로중복이일어나는문제가있다. JDK다이나믹프록시와같은프록시기술을추상화한스프링의프록시팩토리빈을이용해서다이나믹프로시생성방법에 DI를도입했다. 스프링의 ProxyFactoryBean은프록시를생성해서빈오브젝트로등록하게해주는팩토리빈이다. Spring3- Oh Moon Jeong

59 Proxy 기반 AOP 구현절차 1. Advice 클래스작성하기 (aop.loggingadvic) advice 타입인터페이스설명 Before advice After returning advice org.springframework.ao p. MethodBeforeAdvice org.springframework.ao p. AfterReturningAdvice joinpoint 전에수행되는 advice. 하지만 joinpoint 를위한수행흐름처리 (execution flow proceeding) 를막기위한능력 ( 만약예외를던지지않는다면 ) 을가지지는않는다. joinpoint 이일반적으로예를들어메소드가예외를던지는것없이반환된다면완성된후에수행되는 advice. After throwing advice Around advice org.springframework.ao p.throwsadvice org.aopalliance.intercept.methodinterceptor 메소드가예외를던져서빠져나갈때수행되는 advice 메소드호출과같은 joinpoint 주위 (surround) 의 advice. 이것은가장강력한종류의 advice 이다. Around advice 는메소드호출전후에사용자정의행위를수행할수있다. joinpoint 를처리하거나자기자신의반환값을반환함으로써짧게수행하거나예외를던지는것인지에대해책임을진다. Spring3- Oh Moon Jeong

60 Proxy 기반 AOP 구현절차 설정파일명 : e.g src/sample1/proxyaop.xml 1. 설정파일에 Advice 빈설정한다. <bean id="loggingadvice" class="sample1.loggingadvice" /> 2. 설정파일에 Advisor (Advice 참조정보와 PointCut) 를설정한다. <bean id="helloadvisor" class="org.springframework.aop.support.defaultpointcutadvisor"> <property name="advice"> <ref local="loggingadvice" /> </property> <property name="pointcut"> <bean class="org.springframework.aop.support.jdkregexpmethodpointcut"> <property name="pattern"> <!-- 메서드이름중 'sayhello' 가포함된메소드의호출을 PointCut 으로지정하게된다.--> <value>.*sayhello.*</value> </property> </bean> </property> </bean> Spring3- Oh Moon Jeong

61 Proxy 기반 AOP 구현절차 4. 설정파일에 ProxyFactoryBean 클래스를이용하여대상객체에 Advisor 를 적용한다. <bean id="targetbean" class="aop.messagebeanimpl"> <property name="name"> <value>spring</value> </property> </bean> <!-- 프록시클래스를매번개발자가구현하기어려워, JD 다이나믹프록시기술기반의 " 스프링프록시팩토리빈 " 을이용한다. 프록시를생성해서빈객체로등록해주는팩토리빈이다. --> <bean id="proxy" class="org.springframework.aop.framework.proxyfactorybean"> <property name="target"> <ref local="targetbean" /> </property> <property name="interceptornames"> <!-- 적용할 Advice/Advisor 를지정한다. --> <list> <value>helloadvisor</value> </list> </property> Spring3- Oh Moon Jeong

62 Proxy 기반 AOP 구현절차 5. getbean() 메소드로빈객체를가져와사용한다. package sample1; import org.springframework.context.support.filesystemxmlapplicationcontext; public class AopTest { public static void main(string[] args) { FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("src/sample1/proxyaop.xml"); //MessageBean인터페이스를구현한 //MessageBeanImpl( 핵심관점용빈 : 타깃 ), XXX클래스 ( 부가관점용빈 : 프록시 ) 가있다. // 클라이언트는프록시를 lookup MessageBean bean = ctx.getbean("proxy", MessageBean.class); } // 클라이언트가프록시의 sayhello() 를요청하면 // 포인트컷으로설정된타깃의 sayhello() 메서드호출전후에 // 어드바이스 :sample1.loggingadvice를수행한다. bean.sayhello(); } Spring3- Oh Moon Jeong

63 AspectJ 기반 AOP 구현 필요라이브러리 com.springsource.org.aspect release.jar aspectjrt.jar aspectjweaver.jar AspectJ 포인트컷표현식은포인트컷지시자를이용해작성한다. 포인트컷지시자중가장대표적으로사용되는지사자가 execution( ) 이다. [ ] 는생략가능, 는 OR 조건이다. 포인트컷설명 execution Bean의조건에맞는메서드나생성자의실행을 Pointcut으로한다. within Bean이조건에설정한타입이라면메서드의실행을 Pointcut으로한다. this Bean이조건에설정한타입에대입할수있는인스턴스라면, 메서드실행을 Point cut으로한다. target 대상이되는객체가조건에설정된타입에대입할수있는인스턴스라면, 메서드의실행을 Pointcut으로한다. args 메서드의인수가조건에설정한타입에대입할수있는인스턴스라면, 메서드실행을 Pointcut으로한다. Spring3- Oh Moon Jeong

64 AspectJ포인트컷표현식 패턴문자 * : 1개의모든값을표현 ( 파라미터로쓰일경우 1개의파라미터, execution ( package로쓰일경우 1개의하위패키지 ).. : 0개이상 [ 접근제한자패턴 ] 리턴값타입패턴 - 반드시하나의타입을지정해야한다. 또는 * 를써서모든타입을다선택하겠다고해도된다. [ 패키지와클래스이름에대한타입패턴 ] -사용할때는패키지. 클래스형태로. 을두어연결해야한다 * 를이용할 수있다... 를사용하면한번에여러개의패키지를선택할수있다. 메서드이름패턴 -모든메서드를다선택하겠다면 * 를넣으면된다. ( 파라미터타입패턴.., ) 파라미터의타입패턴을순서대로넣을수있다. 파라미터가없는메서드를지정하려면 ( ) 로적는다파라미터의타입과개수에상관없이모두다허용하는패턴을만드려면.. 을넣으면된다. 을사용해서뒷부분의파라미터조건만생략할수있다 [ throws 예외패턴 ] ) Spring3- Oh Moon Jeong

65 AspectJ 포인트컷표현식 within within( 패키지패턴. 클래스패턴 ) e.g) within(test.spring.service.memberservice), within(test.spring..memberservlice) bean bean(bean이름패턴 ) e.g) bean(memberservice), bean(*service) Spring3- Oh Moon Jeong

66 AspectJ 포인트컷표현식의메서드선정예제 ex) a.b.targetinterface +hello( ) +hello(string) +plus(int, int) +minus(int, int) a.b.target a.b.target void void hello() hello(string) 1 execution(* hello(.. ) ) o o 2 execution(* hello( ) ) o 3 execution(* hello(string) o int plus( int,int) int minus(int,int ) throws RuntimeExcept ion void method( ) a.b.bean void method( ) throws Runtime Exceptio n 4 execution(* meth*(..) ) o o 5 execution(* *(int, int) ) o o 6 execution(* *( ) ) o o o 7 execution(* a.b.target.*(..)) o o o o o 8 execution(* a.b.*.*(..)) o o o o o o 9 execution(* a.b..*.*(..)) o o o o o O 10 execution(* a..*.*(..)) o o o o o O 11 execution(* com..*.*(..)) 12 execution(* *..Target.*(..)) o o o o O 13 execution(* *..Tar*.*(..)) o o o o O 14 execution(* *..*get.*(..)) O o o o o 15 execution(* *..B*.*(..)) O 16 execution(* *..TargetInterface.*(..)) o o o O 17 execution(* *(..) throws Runtime*) O O 18 execution(int *(..)) o O 19 execution(void *(..)) o o o O Spring3- Oh Moon Jeong

67 AspectJ 기반 AOP Advice 종류 Before Advice 대상객체의메소드가실행되기전에실행됨 return type : 상관없다. argument : 없거나JoinPoint객체를받는다. <aop:before method="logbefore" pointcut-ref="logpointcut" /> public void logbefore(joinpoint jp){ } Spring3- Oh Moon Jeong

68 AspectJ 기반 AOP Advice 종류 After Returing Advice 대상객체의메소드실행이정상적으로끝난뒤실행됨 return type : 상관없다. argument : 없거나 JoinPoint 객체를받는다. 없거나 JoinPoint 객체를받는다. JoinPoint 는항상첫 argument 로사용 된다. 대상메소드에서리턴되는값을 argument 로받을수있다. type : Object 또는대상메소드에서 return 하는 value 의 type <aop:after-returning pointcut-ref= publicmethod method="returnlogging" returning= retvalue /> public void returnlogging(object retvalue){ } 87 Spring3- Oh Moon Jeong

69 AspectJ 기반 AOP Advice 종류 After Throwing Advice 대상객체의메소드실행중예외가발생한경우실행됨 return type : 상관없으나void로한다. argument : 없거나 JoinPoint객체를받는다. JoinPoint는항상첫argument로사용된다. 대상메소드에서전달되는예외객체를 argument로받을수있다. <aop:after-throwing pointcut-ref= publicmethod method="throwinglogging" throwing="ex"/> public void throwinglogging(joinpoint jp, MyException ex){ } Spring3- Oh Moon Jeong

70 AspectJ 기반 AOP Advice 종류 After Advice 대상객체의메소드실행이종료된뒤오류발생여부와상관없이무조건실행된다. return type : 상관없다. argument : 없거나JoinPoint객체를받는다. <aop:afterpointcut-ref= publicmethod method= afterlogging /> public void afterlogging(){ } Spring3- Oh Moon Jeong

71 AspectJ 기반 AOP Advice 종류 Around Advice 위의네가지Advice를다구현할수있는Advice. return type : Object argument JoinPoint를반드시첫argument로지정한다. <aop:around pointcut-ref= publicmethod method= aroundlogging /> public Object aroundlogging(proceedingjoinpointjoinpoint) throws Throwable{ // 대상객체의메소드호출전해야할전처리코드 Object retvalue = joinpoint.proceed(); // 대상객체의메소드호출 // 대상객체처리이후해야할후처리코드 } return retvalue; // 호출한곳으로리턴값넘긴다. 넘기기전수정가능 Spring3- Oh Moon Jeong

72 JoinPoint 대상객체에대한정보를가지고있는객체로 Spring container 로부터받는다. org.aspectj.lang패키지에있음 반드시Advice 메소드의첫argument로와야한다. 메소드들 Signature: 호출되는대상객체에대한구문정보를가진객체 Object gettarget() : 대상객체를리턴 Object[] getargs() : 파라미터로넘겨진값들을배열로리턴. 넘어온값이없으면빈배열개체가return 됨. Signature getsignature() : 호출되는메소드의정보 String getname() : 대상메소드명리턴 String toshorstring() : 대상메소드명리턴 String tolongstring() : 대상메서드전체syntax를리턴 String getdeclaringtypename() : 대상메소드가포함된type을return. (package명.type명) Spring3- Oh Moon Jeong

73 AspectJ 기반 AOP 구현절차 1. Advice 클래스작성하기 (aspectj.loggingadvice) 2. 설정파일에 Advice 빈설정한다. ( 설정파일명 : e.g src/aspectj/aspectjaop.xml ) <beans xmlns=" xmlns:aop=" xmlns:xsi=" xsi:schemalocation=" <!-- advice 담당 --> <bean id="loggingadvice" class="aspectj.loggingadvice" /> Spring3- Oh Moon Jeong

74 AOP 설정태그 <aop:config> : aop설정의root 태그. Aspect 설정들의묶음 <aop:aspect> : Aspect 설정 하나의Aspect 설정, Aspect가여러개일경우 <aop:aspect> 태그가여러개온다. 한개의Aspect (advice + pointcut) 을설정 속성 ref : 공통관심사항을설정한Bean(Advice 빈 ) 참조 id: 식별자. 다른Aspect 태그와구별하기위한식별자 자식태그 <aop:pointcut> : pointcut지정 advice관련태그가올수있다. Spring3- Oh Moon Jeong

75 AOP 설정태그 <aop:pointcut> : Advice 에서참조할 pointcut 설정 Pointcut( 공통기능이적용될곳 ) 을지정하는태그 <aop:config> 나 <aop:aspect> 의자식태그 AspectJ표현식을통해 pointcut지정 속성 : id : 식별자로advice 태그에서사용됨 expression : pointcut지정 <aop:pointcut id= publicmethod expression= execution(public * org.myspring..*.*(..)) /> Advice Weaving 설정태그들 A. <aop:before> -메소드실행전실행될Advice B. <aop:after-returning> -메소드정상실행후실행될Advice C.<aop:after-throwing> -메소드에서예외발생시실행될Advice D.<aop:after> -메소드정상또는예외발생상관없이실행될Advice finally E.<aop:around> -모든시점에서적용시킬수있는Advice 구현 Spring3- Oh Moon Jeong

76 설정파일샘플 <aop:config> <!-- advice참조 --> <aop:aspect id="logaspece" ref="loggingadvice"> <!-- pointcut지정 --> <aop:pointcut expression="execution(* sayhello() )" id="logpointcut"/> <!-- weaving 방법 --> <aop:before method="logbefore" pointcut-ref="logpointcut" /> <aop:after-returning method="logafterreturning" pointcut-ref="logpointcut" /> <aop:after method="logafter" pointcut-ref="logpointcut"/> <aop:around method="logaround" pointcut-ref="logpointcut" </aop:aspect> </aop:config> <bean id="targetbean" class="aspectj.messagebeanimpl"> <property name="name"><value>spring</value></property> </bean> Spring3- Oh Moon Jeong

77 AspectJ 기반 AOP 구현절차 3. getbean() 메소드로빈객체를가져와사용한다. public class AspectjTest { public static void main(string[] args) { FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("src/aspectj/aspectjaop.xml"); MessageBean bean = ctx.getbean("targetbean", MessageBean.class); bean.sayhello(); } } Spring3- Oh Moon Jeong

78 @Aspect 어노테이션을이용한 어노테이션을이용하여Aspect 클래스에직접Advice 및Pointcut등을직접설정 설정파일에 <aop:aspectj-autoproxy/> 를추가해야함 Aspect class를 <bean> 으로등록 어노테이션 : Aspect pointcut returning= throwing= pointcut pointcut ) Around를제외한나머지메소드들은첫argument로 JoinPoint를가질수있다. Around메소드는 argument로 ProceedingJoinPoint를가질수있다. Spring3- Oh Moon Jeong

79 @Aspect 어노테이션을이용한 AOP 구현절차 1. Advice public class LoggingAdvice sayhello() )") public void pointcut(){ } // 포인트컷을적용한메서드. Advice public Object logbefore(joinpoint jp) throws Throwable{ sayhello() )") public Object logaround(proceedingjoinpoint pjp) throws Throwable { } Spring3- Oh Moon Jeong

80 @Aspect 어노테이션을이용한 AOP 구현절차 2. 설정파일에 aspectj-autoproxy 요소를설정한다. ( 설정파일명 : e.g src/aspectj/aspectjannotation.xml )) <beans xmlns=" xmlns:xsi=" xmlns:aop=" xsi:schemalocation=" <aop:aspectj-autoproxy /> <bean id="loggingadvice" class="aspectj.annotation.loggingadvice" /> <bean id="targetbean" class="aspectj.annotation.messagebeanimpl"> <property name="name"> <value>spring</value> </bean> </property> Spring3- Oh Moon Jeong

81 스프링 JDBC Spring3- Oh Moon Jeong

82 부가기능과핵심기능 add( ) PreparedStatement pstmt = 추가작업 pstmt.executeupdate( ) delete( ) PreparedStatement pstmt = 삭제작업 pstmt.executeupdate( ) 기능 변하는부분 변하지않는부분 Spring3- Oh Moon Jeong

83 Template Method Pattern <<abstract>>customerdao add( ) PreparedStatement pstmt = makestatement( ); pstmt.executeupdate( ) delete( ) PreparedStatement pstmt = makestatement( ); pstmt.executeupdate( ) abstract makestatement( ) : PreparedStatement CustomerDAOAdd makestatement( ) PreparedStatement pstmt = con.preparestatement( sql ); // 추가작업 pstmt.setstring(1, id) ; pstmt.setstring(2, name); pstmt.setstring(3, password); return pstmt; CustomerDAODelete makestatement( ) PreparedStatement pstmt = con.preparestatement( sql ); // 삭제작업 pstmt.setstring(1, id) ; return pstmt; Spring3- Oh Moon Jeong

84 Strategy Pattern client Strategy 제공 변하지않는부분을말함자주변하는부분을만들어줄외부기능을말함 Context Context 정보제공 Strategy strategy 선택, 생성 Concrete Strategy A Concrete Strategy B Spring3- Oh Moon Jeong

85 Strategy Pattern class Class Model 2. Context CustomerDAO 3 Strategy «interface» StatementStrategy + makestatement(connection) : PreparedStatement + jdbccontextwithstatementstrategy(statementstratagy) : void Connection con=null; PreparedStatement pstmt =null; try { con= datasource.getconnection(); DeleteStatement + makestatement(connection) : PreparedStatement pstmt = stmt.makestatement(con); pstmt.executeupdate(); }catch(sqlexception sqle){ throw sqle; }finally{ if(pstmt!= null) pstmt.close(); if(con!= null) con.close(); } + add(customer) : void StatementStratgy st = new AddStatement(c); jdbccontextwithstatementstrategy(st); Context 정보제공 - c: Customer AddStatement + AddStatement(Customer) + makestatement(connection) : PreparedStatement String sql = "INSERT INTO customer" + " (ID, PASSWORD, NAME, GENDER, ZIP, REGDATE, ADDRESS) " + " VALUES (?,?,?,?,?, SYSDATE,?)"; 1. 클라이언트가 strategy 선택 PreparedStatement pstmt = con.preparestatement(sql); pstmt.setstring(1, c.getid()); pstmt.setstring(2, c.getpassword()); pstmt.setstring(3, c.getname()); pstmt.setstring(4, c.getgender()); pstmt.setstring(5, c.getzip()); pstmt.setstring(6, c.getaddress()); Spring3- Oh Moon Jeong

86 Context 와 DI 변하지않는 Context부분 (jdbccontextwithstatementstrategy) 은다른클라이언트 (XXXDAO) 들에게도사용가능하다. 따라서 Context를클라이언트 (CustomerDAO) 에서분리해본다. 이렇게분리된 Context를템플릿이라고할수있다. Spring3- Oh Moon Jeong

87 Context 를템플릿클래스로분리, 변경 Spring3- Oh Moon Jeong

88 DI 설정 <bean id="customerdao" class="com.my.dao.customerdao"> <property name="datasource" ref="datasource" /> </bean> <bean id="datasource" class="org.springframework.jdbc.datasource.simpledriverdatasource"> <property name="driverclass" value="oracle.jdbc.driver.oracledriver"/> <property name="url" <property name="username" value="hr"/> <property name="password" value="hr"/> </bean> Spring3- Oh Moon Jeong

89 구현 Strategy 를클라이언트의 Anonymous Class 로변경 public void add(final Customer c) throws SQLException{ jdbccontext.workwithstatementstrategy( new StatementStrategy( ){ public PreparedStatement makestatement(connection con) throws SQLException{ String sql = "INSERT INTO customer" + " " (ID, PASSWORD, NAME, GENDER, ZIP, REGDATE, ADDRESS) " + " VALUES (?,?,?,?,?, SYSDATE,?)"; PreparedStatement pstmt = con.preparestatement(sql); pstmt.setstring(1, c.getid()); pstmt.setstring(2, c.getpassword()); pstmt.setstring(3, c.getname()); pstmt.setstring(4, c.getgender()); pstmt.setstring(5, c.getzip()); pstmt.setstring(6, c.getaddress()); return pstmt; } } ); } Spring3- Oh Moon Jeong

90 Template Callback 패턴을 2. Template public void add(final Customer c) throws 호출 SQLException{ jdbccontext.workwithstatementstrategy( new StatementStrategy( ){ public PreparedStatement makestatement(connection con) throws SQLException{ String sql = "INSERT INTO customer" + " " (ID, PASSWORD, NAME, GENDER, ZIP, REGDATE, ADDRESS) " + " VALUES (?,?,?,?,?, SYSDATE,?)"; PreparedStatement pstmt = con.preparestatement(sql); } pstmt.setstring(1, c.getid()); pstmt.setstring(2, c.getpassword()); pstmt.setstring(3, c.getname()); pstmt.setstring(4, c.getgender()); pstmt.setstring(5, c.getzip()); pstmt.setstring(6, c.getaddress()); return pstmt; public class JdbcContext { private DataSource datasource; public void setdatasource(datasource datasource) { this.datasource = datasource; } // 템플릿 public void workwithstatementstrategy( StatementStrategy stmt) throws SQLException{ 3. 참조정보생성 Connection con=null; PreparedStatement pstmt =null; try { con= datasource.getconnection(); pstmt = stmt.makestatement(con); pstmt.executeupdate(); }catch(sqlexception sqle){ 4. Callback호출 throw sqle; 7. 작업수행 }finally{ if(pstmt!= null) pstmt.close(); if(con!= null) con.close(); } } } Spring3- Oh Moon Jeong } ); 1. Callback 생성 5. 클라이언트 final 변수참조 6. 작업수행후반환

91 콜백부분의변하는구문과변하지않는구문분리이전 public void add(final Customer c) throws SQLException{ jdbccontext.workwithstatementstrategy( 변하지않는부분 new StatementStrategy( ){ public PreparedStatement makestatement(connection con) throws SQLException{ 변하는부분 String sql = "INSERT INTO customer" + " " (ID, PASSWORD, NAME, GENDER, ZIP, REGDATE, ADDRESS) " + " VALUES (?,?,?,?,?, SYSDATE,?)"; PreparedStatement pstmt = con.preparestatement(sql); pstmt.setstring(1, c.getid()); pstmt.setstring(2, c.getpassword()); pstmt.setstring(3, c.getname()); pstmt.setstring(4, c.getgender()); pstmt.setstring(5, c.getzip()); pstmt.setstring(6, c.getaddress()); Spring3- Oh Moon Jeong return pstmt;

92 콜백부분의구문분리이후 public class CustomerDAO {.. public void add(final Customer c) throws SQLException{ String sql ="INSERT INTO customer" + " (ID, PASSWORD, NAME, GENDER, ZIP, REGDATE, ADDRESS) " + " VALUES (?,?,?,?,?, SYSDATE,?)"; jdbccontext.executesql( sql, c.getid(), c.getpassword(), c.getname(), c.getgender(), c.getzip(),c.getaddress()); } public class JdbcContext {. private void executesql(final String sql, final Object... args) throws SQLException { jdbccontext.workwithstatementstrategy(new StatementStrategy(){ public PreparedStatement makestatement(connection con) throws SQLException{ PreparedStatement pstmt = con.preparestatement(sql); for(int i=0; i<args.length; i++){ pstmt.setobject(i+1, args[i]); } return pstmt; } }); } Spring3- Oh Moon Jeong }

93 스프링 JDBC API JdbcTemplate 스프링은 JDBC를이용하는 DAO에서사용할수있도록준비된다양한템플릿을제공한다. 거의모든종류의 JDBC코드에사용가능한템플릿과콜백을제공한다. SimpleJdbcTemplate JdbcTemplate과 NamedParameterJdbcTemplate에서가장많이사용되는기능을통합하고 JAVA5이상의장점을최대한활용할수있게만든 API이다. JDBC의모든기능을최대한활용할수있는유연성을갖고있다. SimpleJdbcInsert, SimpleJdbcCall DB가제공해주는메타정보를활용해서최소한의코드만으로단순한 JDBC코드를작성하게해준다 Spring3- Oh Moon Jeong

94 스프링의 JdbcTemplate update( ) String sql = "INSERT INTO customer(id, PASSWORD, NAME) VALUES (?,?,?) "; jdbctemplate.update( sql, c.getid(), c.getpassword(), c.getname() ); queryforobject( ) String sql = "SELECT * FROM customer WHERE id=?"; String idvalue = "id0"; jdbctemplate.queryforobject( sql, new Object[]{ idvalue }, new RowMapper<Customer>() { public Customer maprow(resultset rs, int rownum) throws SQLException{ Customer c = new Customer(); c.setid(rs.getstring("id")); c.setpassword(rs.getstring("password")); c.setname(rs.getstring("name")); return c; } } ); Spring3- Oh Moon Jeong

95 스프링의 JdbcTemplate query queryforint String sql = "SELECT * FROM customer ORDER BY id"; jdbctemplate.query( sql, new RowMapper<Customer>( ){ public Customer maprow(resultset rs, int rownum) throws SQLException { Customer c = new Customer(); c.setid(rs.getstring("id")); c.setpassword(rs.getstring("password")); c.setname(rs.getstring("name")); return c; } } ); String sql = "SELECT COUNT(*) FROM customer"; return this.jdbctemplate.queryforint(sql); Spring3- Oh Moon Jeong

96 스프링 JDBC API 스프링 JDBC 가해주는작업 Connection열기, 닫기 Statement준비와닫기 Statement실행 ResultSet반복 예외처리와변환 : JDBC작업중발생하는모든예외는스프링JDBC의예외변환기가처리해준다. CheckedException인 SQLException을 RuntimeException인 DataAccessException타입으로변환해준다. 런타임예외로전환할뿐아니라 DB별에러코드를참고해서일관된의미를가진 DataAccessException 계층구조내의예외로변환해준다. 트랜잭션처리 : 스프링JDBC는트랜잭션동기화기법을이용해선언적트랜잭션기능과맞물려돌아간다. 트랜잭션을시작한후에스프링 JDBC의작업을요청하면진행중인트랜잭션에참여한다. 트랜잭션이없는채로호출될경우에는새로운트랜잭션을만들어서사용하고작업을마치면트랜잭션을종료한다. Spring3- Oh Moon Jeong

97 SpringJDBC 용 Exception DataAccessException NonTransient DataAccessException DataIntegrityViolation Exception DataRetrievalFailure Exception PermissionDenied DataAccessException InvalidDataAccessResour ceusageexception DuplicateKey Exception BadSqlGrammar Exception TypeMismatch DataAccessException Spring3- Oh Moon Jeong

98 SPRING MVC Spring3- Oh Moon Jeong

99 Spring MVC 구성주요컴포넌트 DispatcherServlet - Front Controller Controller - 클라이언트요청처리를수행하는 Controller HandlerMapping - 클라이언트의요청을처리할 Controller를찾는작업처리 View - 응답하는로직을처리 ViewResolver - 응답할 View를찾는작업을처리 ModelAndView - 응답할 View와 View에게전달할값을저장하는용도의객체 Spring3- Oh Moon Jeong

100 Spring MVC 를이용한어플리케이션작성순서 1. web.xml에 DispacherServlet등록및ㅌ등록 2. 설정파일에 HandlerMapping 설정 3. 컨트롤러구현및 Spring 설정파일에등록 4. 컨트롤러와 JSP의연결위해 View Resolver설정 5. JSP코드작성 Spring3- Oh Moon Jeong

101 web.xml 에 DispatcherServlet 설정 <servlet> <servlet-name>web1</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>web1</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> Spring3- Oh Moon Jeong

102 web.xml 의캐릭터인코딩처리를위한필터설정 <filter> <filter-name>encodingfilter</filter-name> <filter-class>org.springframework.web.filter.characterencodingfilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>euc-kr</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Spring3- Oh Moon Jeong

103 스프링설정파일 Spring Container는설정파일의내용을읽어 WebApplicationContext객체를생성 설정파일내용 MVC 구성요소 (HandlerMapping, Controller, ViewResolver, View) 설정 bean, aop를설정 설정파일명기본작성규칙 "<servlet-name>-servlet.xml" WEB-INF\ 아래에추가한다. Spring3- Oh Moon Jeong

104 스프링설정파일 다른이름의설정파일또는여러설정파일이필요할경우 <servlet> 의하위태그인 <init-param> 에 contextconfiglocation이름으로등록 경로는Application Root부터절대경로로표시 여러개의경우, 또는공백으로구분 <servlet> <servlet-name>web1</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/server-service.xml /WEB-INF/dao-service.xml </param-value> </init-param> </servlet> Spring3- Oh Moon Jeong

105 스프링설정파일 공통 Spring 설정파일등록 공통스프링설정파일들을로드하기위해리스너 (ContextLoaderListener) 설정 공통스프링설정파일명은 applicationcontext.xml 이다. <listener> <listener-class> org.springframework.web.context.contextloaderlistener </listener-class> </listener> 공통설정파일이여러개인경우 <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/service-service.xml /WEB-INF/dao-data.xml </param-value> </context-param> Spring3- Oh Moon Jeong

106 HandlerMapping RequestURL과컨트롤러를매핑시켜준다. 다양한 HandlerMapping 클래스를 Springframework가제공 Spring 설정파일에 <bean> 으로등록해서설정한다. HandlerMapping 인터페이스를구현한클래스들 종류 BeanNameUrlHandlerMapping 빈으로등록여부 DEFAULT SimpleUrlHandlerMapping ControllerBeanNameHandlerMapping ControllerClassNameHandlerMapping DefaultAnnotationHandlerMapping DEFAULT 매핑방법 Ant 경로패턴? : 1 개의문자와매칭 * : 0 개의문자와매칭 ** : 0 개이상의디렉터리와매칭 Spring3- Oh Moon Jeong

107 HandlerMapping BeanNameUrlHandlerMapping 빈이름을이용해매핑해주는핸들러매핑전략이다. url과일치하는빈이름을갖는빈을컨트롤러로사용한다. 디폴트핸들러매핑이기때문에 BeanNameUrlHandlerMapping을빈으로등록하지않아도된다. <bean class="org.springframework.web.servlet.handler.beannameurlhandlermapping" /> <bean name="/test.do" class="web1.testcontroller"/> 빈아이디를이용못함 id에는 / 추가못함 <!-- <bean id="/test.do" class="web1.testcontroller"/> --> public class TestController implements Controller{ } Spring3- Oh Moon Jeong

108 HandlerMapping SimpleUrlHandlerMapping BeanNameUrlHandlerMapping 은빈이름에매핑정보를넣기때문에매핑정보를관리하기 불편하다는단점이있다. URL 과컨트롤러의매핑정보를한곳에모아놓을수있는핸들러매핑이다. 매핑정보는 SimpleUrlHandlerMapping 빈의프로퍼티에넣어준다. 디폴트핸들러매핑이아니기때문에프로퍼티에매핑정보를직접넣어빈을등록해야사 용할수있다. <bean id= handlermapping class= org.springframework.web.servlet.handler.simpleurlhandlermapping > <property name= mapping > <props> <prop key="/content/**/*.do">indexcontroller</prop> <prop key="greeting/hello.do">detailcontroller</prop> </props> </property> </bean> <bean name="indexcontroller" /> <bean name="detailcontroller" /> Spring3- Oh Moon Jeong

109 HandlerMapping ControllerBeanNameHandlerMapping 빈의아이디나빈이름을이용해매핑해주는핸들러매핑전략이다. ControllerBeanNameHandlerMapping 이자동으로빈아이디에 / 를붙여주기때문에빈 의아이디로도매핑할 URL 을지정할수있다. 다음과같이컨트롤러빈이선언되어있다면, hello 빈을 /hello.do URL 에매핑해준다. <bean id= hello.do class= controller.acontroller > 디폴트핸들러매핑이아니기때문에 ControllerBeanNameHandlerMapping 을빈으로등 록해줘야적용된다. <bean class= org.springframework.web.servlet.mvc.support.controllerbeannameurlhandlermapping> 빈이름앞뒤에붙일수있는 prefix 와 suffix 를지정할수있다. <property name= urlprefix value= /app/sub/ /> </bean> /app/sub/hello.do URL hello.do ) public class MyController implements Controller{ } Spring3- Oh Moon Jeong

110 HandlerMapping ControllerClassNameHandlerMapping 빈이름대신클래스이름을 URL에매핑해주는핸들러매핑클래스다. 기본적으로클래스이름을모두 URL로사용하지만 Controller로끝날때는 Controller를뺀나머지이름을 URL에매핑해준다. 다음과같은컨트롤러클래스는 /hello URL에매핑된다. public class HelloController implements Controller{ } 디폴트핸들러매핑이아니기때문에 ControllerClassNameHandlerMapping 을빈으로등 록해줘야적용된다. <bean class= org.springframework.web.servlet.mvc.support.controllerclassnameurlhandlermapping /> Spring3- Oh Moon Jeong

111 HandlerMapping DefaultAnnotationHandlerMapping 클래스에대한매핑을처리한다. Spring3- Oh Moon Jeong

112 Controller 비즈니스로직을호출하여처리결과 ModelAndView인스턴스를반환한다 Controller 작성법 Controller 인터페이스를구현한클래스를이용하는방법 public class IndexController implements Controller{ public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { } 어노테이션을이용한방법 컨트롤러의역할을담당하는메서드의파라메터개수와타입, 리턴타입등을자유롭게결정할수있다. Spring3- Oh Moon Jeong

113 어노테이션작성절차 어노테이션 : 컨트롤러클래스에적용한다 어노테이션 : public class HelloController public ModelAndView hello(){ System.out.println("welcome.do 용 controller 입니다!"); ModelAndView mav = new ModelAndView(); mav.setviewname("/web-inf/view/hello.jsp"); Map<String, String> model = new HashMap<String, String>(); model.put("greeting", "WELCOME! OhMoonJeong's SPRING MVC"); mav.addallobjects(model); return mav; } } 3. 설정파일에컨트롤러클래스를빈으로등록한다. <context:annotation-config></context:annotation-config> <bean id="hellocontroller" class="web1.hellocontroller"></bean> Spring3- Oh Moon Jeong

114 @InitBinder Spring3- Oh Moon Jeong

115 Controller 의메서드파라미터의종류 파라미터 설명 HttpServletRequest HttpServletResponse HttpSession Locale java.util.locale 타입. DispatcherServlet 의 LocaleResolver 가결정한 Locale 객체를받는다. InputStream, Reader OutputStream,Writer HttpServletRequest 의 getinputstream() 을통해받을수있는콘텐트스트림 HttpServletResponse 의 의 URL 에 { } 로들어가는패스변수를받는다. 요청파라미터를 URL 의쿼리스트링으로보내는대신 URL 패스로풀어쓰는방식에유용. 예를들어 /user/view?id=10 보다 /user/view/10 /user/view/{id} ) public String view(@pathvariable( id ) int id){ } 로처리가능 Spring3- Oh Moon Jeong

116 Controller 의메서드파라미터의종류 Http 요청파라미터를메서드파라미터에넣어주는애노테이션 public String id ) int name ) String 애노테이션을사용했다면해당파라미터가반드시있어야한다. 없으면 HTTP400 오류발생. 파라미터를필수가아닌선택제공하려면 required 속성을 false 로지정할수있다 public void id, request=false, defaultvalue= -1 ) int id){ } 의이름은생략가능한다. public String view(@requetsparam int id) { 요청과함께전달된쿠키값을메서드파라미터에넣어준다. 애노테이션의기본값에쿠키의이름을지정한다. public void check(@cookievalue ( auth ) String auth) { } public void (value= auth, required false, defaultvalue= NONE ) String auth) { } Spring3- Oh Moon Jeong

117 Controller 의메서드파라미터의종류 모델정보를담을때사용하는객체 ( 컬렉션 ) 가전달된다. Map, Model, ModelMap Model 과 ModelMap 은 addattribute() 메서드를제공하고, Map 은 put() 를제공한다. public void hello(modelmap model){ User user = new User(1, Spring ); // 모델 model.addattribute(user); // addattribute( user, user) 와같음 } Spring3- Oh Moon Jeong

118 Controller 의메서드파라미터의종류 메서드파라미터에도부여할수있고메서드레벨에적용할수도있음 1. command 으로여러 HTTP 파라미터를개별적으로가져오는것보다, /user/search ) public String search(@modelattribute UserSerch usersearch){ 2. 별도의메서드로 public class ModelAttributeController ("namearray") public String[] getname(){ System.out.println("getName()"); return new String[ ]{" 추신수 ", " 류현진 ", " 이대호 "}; public String main(){ System.out.println("main()"); return "main"; //main뷰에 namearray모델이함께전달됨. public String play(){ System.out.println("play()"); return "play"; //play뷰에 namearray모델이함께전달됨. } Spring3- Oh Moon Jeong

119 Controller 의메서드파라미터의종류 현재세션을다룰수있는객체를제공해준다. 세션안에저장된객체를제거해줄때사용. sessionstatus.setcomplete( ) ; HTTP 요청의 body 부분을그대로전달한다. XML 이나 JSP 기반의메시지를사용하는요청에서유용. public void message(@requestbody String body){ 값을파라미터에부여한다. 주로시스템프로퍼티를가져와파라미터에대입가능하다. public String hello(@value( #{SystemProperties[ os.name ]} ) String name) { } Spring3- Oh Moon Jeong

120 Controller 의메서드리턴타입의종류 리턴타입 ModelAndView Model Map 설명 String 뷰이름을리턴한다. 뷰정보및모델정보를담고있는 ModelAndView 객체 뷰에전달할객체정보를담고있는 Model 을리턴한다. 이때뷰이름은요청 URL 로부터결정된다. 뷰에전달할객체정보를담고있는 Map 을리턴한다. 이때뷰이름은요청 URL 로부터결정된다. View 객체 View 객체를직접리턴, 해당 View 객체를이용해서뷰를생성한다. 어노테이션적용 메서드가 ServletResponse 나 HttpServletResponse 타입의파라미터를갖는경우메서드가직접응답을처리한다고가정한다. 그렇지않을경우요청 URL 로부터결정된뷰를보여준다. 어노테이션이적용된경우, 리턴객체를 HTTP 응답으로전송한다. Spring3- Oh Moon Jeong

121 컨트롤러클래스나메서드에직접부여하고이를이용해서매핑한다. 메서드단위로 URL을매핑할수있어서컨트롤러의개수를줄일수있다. URL뿐아니라 GET/POST와같은 HTTP메서드, 심지어는파라미터와 HTTP헤더정보까지매핑에활용할수있다 특정파라미터가지정됐을때만따로분리하는식의컨트롤러매핑이가능하다 매핑정보가지저분해지고관리하기힘들어진다 value="/login.do", method=requestmethod.get ) public String form() { return "loginform"; method=requestmethod.post) public ModelAndView String String password) { } Spring3- Oh Moon Jeong

122 Controller 컨트롤러클래스자동스캔 <context:component-scan base-package="web1"> Spring3- Oh Moon Jeong

123 ModelAndView Controller처리결과후응답할 view와 view에전달할값을저장. 생성자 ModelAndView(String viewname) : 응답할view설정 ModelAndView(String viewname, Map values) : 응답할view와view로전달할값들을저장한Map 객체 ModelAndView(String viewname, String name, Object value) : 응답할view이름, view로넘길객체의name-value 주요메소드 setviewname(string view) : 응답할view이름을설정 addobject(string name, Object value) : view에전달할값을설정, requestscope에설정됨 addallobjects(map values) : view에전달할값을map에name-value로저장하여한번에설정 Redirect 방식전송 : view 이름에 redirect: 접두어붙인다. ex)mv.setviewname( redirect:/welcome.html ); Spring3- Oh Moon Jeong

124 ViewResolver Controller가넘긴 view이름을통해알맞은view를찾는역할 1. Controller는 ModelAndView객체에응답할 view이름을넣어 return. 2. DispatchServlet은 ViewResolver에게응답할view를요청한다. 3. ViewResolver는 View이름을이용해알맞은 view객체를찾아 DispatcherServlet에게전달. Spring 설정파일에등록한다. Spring3- Oh Moon Jeong

125 ViewResolver ViewResolver 의종류 InternalResourceViewResolver JSP나HTML등의내부자원을이용해뷰생성 InternalResourceView를기본뷰로사용 BeanNameViewResolver 뷰의이름과동일한이름을가지는빈을 View 로사용 사용자정의 View 객체를사용하는경우주로사용 XmlViewResolver BeanNameViewResolver 와동일하나뷰객체를 Xml 파일에설정해놓는것이차이. Bean 등록시 location 프러퍼티에 xml 파일을지정 Spring3- Oh Moon Jeong

126 InternalResourceViewResolver 설정 <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/view/"></property> <property name="suffix" value=".jsp"></property> </bean> ModelAndView mav = new ModelAndView(); mav.setviewname("/web-inf/view/hello.jsp"); ModelAndView mav = new ModelAndView(); mav.setviewname("hello"); Spring3- Oh Moon Jeong

127 View JSP를이용한뷰구현 JSP에서사용가능한 custom tag <spring:message> <form:errors> Spring3- Oh Moon Jeong

128 Message 처리 MessageSource 를이용한메시지국제화처리 메시지파일의종류 message.properties : 기본메시지파일. 시스템의언어및지역에맞는프로퍼티파일이 존재하지않을경우에사용한다. message_en.properties : 영어메시지파일 message_ko.properties : 한글메시지파일 greeting=welcome. login.success=login success login.fail.id=id {0} is not exist login.fail.password=invalid password greeting= 환영합니다. login.success= 로그인성공 login.fail.id= 아이디 {0} 가존재하지않습니다 login.fail.password= 비밀번호가일치하지않습니다 message_en_uk.properites : 영국을위한영어메시지파일 메시지파일은클래스저장경로와같다. Spring3- Oh Moon Jeong

129 Message 처리 ApplicationContext는 MessageSource 인터페이스를상속받고있다. MessageSource API String getmessage(string code, Object[ ] args, String defaultmessage, Locale locale); String getmessage(string code, Object[ ] args, Locale locale); String getmessage(messagesourceresolvable resolvable, Locale locale); ApplicationContext 는등록된빈객체중에서이름이 "messagesource" 인 MessageSource 타입의빈객체를이용하여메시지를가져온다. <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basenames"> <list> <value>message</value> </list> </property> <!-- <property name="basename" value="message"></property> --> </bean> Spring3- Oh Moon Jeong

130 Message 처리 빈객체에서메시지이용하기 MessageSourceAware 인터페이스를구현한뒤 setmessagesource( ) 메서드를통 해전달받은 MessageSource 의 getmessage( ) 메서드를이용하여메시지사용 public class LoginController implements MessageSourceAware{ private MessageSource public void setmessagesource(messagesource messagesource) { } : this.messagesource = messagesource; Locale kr = Locale.getDefault(); String msg = messagesource.getmessage("login.success", new Object[0], kr); String []args = new String[]{ "id0" }; msg = messagesource.getmessage("login.fail.id", args, kr); mav.addobject("message",msg); mav.setviewname("msg"); : greeting= 환영합니다. login.success= 로그인성공 login.fail.id= 아이디 {0} 가존재하지않습니다 login.fail.password= 비밀번호가일치하지않습니다 Spring3- Oh Moon Jeong

131 Validation validation.properties 파일 #errorcode=value required= 필수입력항목입니다 설정파일 <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basenames"> <list> <value>message</value> <value>validation</value> </list> </property> <!-- <property name="basenames" value="message"></property> --> </bean> Spring3- Oh Moon Jeong

132 Validation Validator 인터페이스 ( org.springframework.validation.validator ) 폼값을저장한 Command 객체의유효성여부를검사 boolean supports(class<?>class) Validator 가해당클래스에대한값검증을지원하는지여부를리턴한다 void validate(object target, Errors errors) target 객체에대한검증을실행한다. 검증결과문제가있을경우 Errors 객체에어떤문제인지에 대한정보를저장한다 public class CustomerValidator implements Validator { public boolean supports(class<?> arg0) { return Customer.class.isAssignableFrom(arg0); } public void validate(object target, Errors errors) { Customer c = (Customer)target; if( c.getid()==null c.getid().trim().equals("")) { errors.rejectvalue("id", "required"); // 타깃객체의 id 프로퍼티에 required 에러코드를등록 } } Spring3- Oh Moon Jeong

133 Validation Error 인터페이스 ( org.springframework.validation.errors ) 입력한값이유효하지않은경우 Errors 에에러메시지를저장해서뷰에전달 BindingResult 인터페이스 폼값을 Command 객체에바인딩한결과를저장하고, 에러코드로부터에러메시지를가 져온다 Errors BindingResult AbstractBindingResult Spring3- Oh Moon Jeong

134 Validation Errors 인터페이스 reject 메서드 : 검증대상객체의전체에러를설정 reject(string errorcode) : 전체객체에대한글로벌에러코드를추가한다 reject(string errorcode, String defaultmessage) : 전체객체에대한글로벌에러코드를추가한다. 에러코드에대한메시지가존재하지않을경우 defaultmessage 를사용한다 reject(string errorcode, Object[]errorArgs, String defaultmessage) : 전체객체에대한글로벌에 러코드를추가한다. 메시지인자로 errorargs 를전달한다. 에러코드에대한메시지가존재하지 않을경우 defaultmessage 를사용한다 rejectvalue 메서드 : 특정프로퍼티의검증에러를설정 rejectvalue(string filed, String errorcode) : 필드에대한에러코드를추가한다 rejectvalue(string field, String errorcode, String defaultmessage): 필드에대한에러코드를추가 한다. 에러코드에대한메시지가존재하지않을경우 defaultmessage 를사용한다 public void validate(object target, Errors errors) { errors.rejectvalue("id", "required"); // 타깃객체의 id 프로퍼티에 required 에러코드를등록 } Spring3- Oh Moon Jeong

135 Validation Errors haserrors( ) 에러가존재하는경우 true를리턴 geterrorcount( ) 에러개수를리턴 hasglobalerrors( ) reject() 메서드를이용해서추가된글로벌에러가존재할경우 true리턴 getglobalerrorcount( ) reject() 메서드를이용해서추가된글로벌에러개수를리턴 hasfielderrors( ) rejectvalue( ) 메서드를이요해서추가된에러가존재할경우 true리턴 getfielderrorcount( ) rejectvalue( ) 메서드를이용해서추가된에러개수를리턴 hasfielderrors(string field) rejectvalue( ) 메서드를이용해서추가한특정필드의에러가존재할경우 true리턴 getfielderrorcount(string field) rejectvalue( ) 메서드를이용해서추가한특정필드의에러개수를리턴 Spring3- Oh Moon Jeong

136 Validation Controller 메서드에 BindingResult 타입또는 Error 타입의파라미터를추가한 public Customer command, BindingResult result){ CustomerValidator validator = new CustomerValidator(); validator.validate(command, result); if(result.haserrors()){ mav.setviewname("signupform"); } } Spring3- Oh Moon Jeong

137 Validation JSP 에서에러메시지설정방법 uri=" prefix="spring" %> <spring:hasbinderrors> name 속성에명시한커맨드객체와관련된정보를 <form:errors> 태그 에서사용할수있도록설정한다. uri=" prefix="form" %> <form:errors> path 속성에명시한커맨드객체. 프로퍼티와관련된모든에러메시지를출력한다. uri=" prefix="spring" %> uri=" prefix="form" %> <spring:hasbinderrors name="c /> <input type="text" name="id > <form:errors path="c.id"/> Spring3- Oh Moon Jeong

138 TRANSACTION Spring3- Oh Moon Jeong

139 Transaction EJB의선언적트랜잭션경계설정기능을복잡한환경이나구현조건없이 POJO 의장점을유지한채 SPRING에도제공한다. 트랜잭션방법 코드에의한트랜잭션경계설정 선언적트랜잭션경계설정 코드내에서직접트랜잭션을관리하지않아도된다. 프록시 AOP를이용해서트랜잭션기능을부여하는방법 1. AOP와 tx네임스페이스 Spring3- Oh Moon Jeong

140 AOP 와 tx 네임스페이스 1. 트랜잭션어드바이스 <tx:advice id="txadvice" transaction-manager="transactionmanager"> <tx:attributes> <tx:method name="*" /> </tx:attributes> </tx:advice> 2. 포인트컷 : 기본적으로인터페이스에적용된다. <aop:pointcut id="a" expression="execution(public void com.my.dao.customerdao.*(..))"/> 3. 어드바이저 <aop:config > <aop:pointcut id="a" expression="execution(public void com.my.dao.customerdao.*(..))"/> <aop:advisor advice-ref="txadvice" pointcut-ref="a"/> </aop:config> 또는 <aop:config > <aop:advisor advice-ref="txadvice" pointcut=" execution(public void com.my.dao.customerdao.*(..))"/> </aop:config> Spring3- Oh Moon Jeong

141 @Transactional 어노테이션 1. 설정파일 <tx:annotation-driven transaction-manager="txmanager"/> <bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <bean id="customerdao" class="com.my.dao.customerdaoimpl"> <property name="datasource" ref="datasource" /> </bean> 2. 트랜잭션이적용될타깃인터페이스나클래스, 어노테이션을부여해서트랜잭션대상으로지정하고트랜잭션속성을제공한다 어노테이션적용우선순위 ( 높음 ) Transactional ( 낮음 ) Spring3- Oh Moon Jeong

142 트랜잭션속성 트랜잭션어드바이스 <tx:attributes> <tx:method name= read-only= isolation= propagation= timeout= rollback-for= no-rollback-for= /> </tx:attributes> e. g) <tx:advice id="txadvice" transaction-manager="txmanager"> <tx:attributes> <tx:method name="add*" propagation="required"/> <!--<tx:method name="add*" propagation="requires_new"/> --> <!-- <tx:method name="add*" rollback-for="exception" propagation="required"/> readonly=, isolation=, propagation=, timeout=, rollback-for=, no-rollback-for= ) propagation=propagation.required, rollbackfor=exception.class ) public void add(customer c) throws Exception{ } Spring3- Oh Moon Jeong

143 트랜잭션전파 트랜잭션경계의시작점에서트랜잭션전파속성을참조해서해당범위의트랜잭션을어떤식으로진행시킬지결정할수있다. 모든속성이모든종류의트랜잭션매니저와데이터액세스기술에서다지원되지않을수있으니각트랜잭션매니저의 API문서를참고해야한다. Spring3- Oh Moon Jeong

144 트랜잭션의전파 (PROPAGATION_REQUIRED) 호출된메소드가호출한쪽의트랜잭션에서실행되는경우 uncheckedexception Spring3- Oh Moon Jeong

145 트랜잭션의전파 (PROPAGATION_ NOT_SUPPORTED) 호출된메소드가트랜잭션없이실행되는경우 Spring3- Oh Moon Jeong

146 트랜잭션의전파 (PROPAGATION_REQUIRES_NEW) 호출된메소드가별도의새로운트랜잭션내에서실행되는경우 Spring3- Oh Moon Jeong

147 트랜잭션의전파속성 (propagation) 전파 PROPAGATION_REQUIRED PROPAGATION_ SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_ NOT_SUPPORTED PROPAGATION_NEVER PROPAGATION_NESTED 설명활성화된트랜잭션이존재한다면스프링은이트랜잭션을사용하고그렇지않다면새로운트랜잭션을시작한다. 활성화된트랜잭션이존재한다면스프링은이트랜잭션을사용하지만활성화된트랜잭션이없다면새로운트랜잭션을시작하지않는다. 활성화된트랜잭션이존재한다면스프링은이트랜잭션을사용하지만활성화된트랜잭션이없다면스프링은예외를던진다. 스프링은항상새로운트랜잭션을시작한다. 만약활성화된트랜잭션이이미존재한다면이트랜잭션은잠시중지된다. 스프링은활성화된트랜잭션내에서코드를실행하지않는다. 코드는항상트랜잭션이아닌상태에서실행되며기존에존재하는트랜잭션이있다면모두잠시중지시킨다. 활성화된트랜잭션이존재해도항상트랜잭션없이코드를실행한다. 만약활성화된트랜잭션이존재한다면예외를던진다. 활성화된트랜잭션이존재하면중첩된트랜잭션내에서실행된다. 만약활성화된트랜잭션이없다면코드는 TransactionDefinition.PROPAGATION_REQUIRED가설정된것처럼실행된다. Spring3- Oh Moon Jeong

148 트랜잭션 propagation 과 rollback-for 속성 Spring3- Oh Moon Jeong

Web Service Computing

Web Service Computing Spring MVC 2015 Web Service Computing Request & Response HTTP(Hyper-Text Transfer Protocol) 웹서버가하는일은요청 (Request) 과응답 (Response) 의연속이다. 1) 브라우저에 www.google.co.kr 을입력한다면 2) 구글서버에페이지를요청하는것이고 3) 화면이잘나타난다면구글서버가응답을한것이다.

More information

Spring Boot

Spring Boot 스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

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

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 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 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 Jakarta is a Project of the Apache

More information

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

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f JPA 에서 QueryDSL 사용하기위해 JPAQuery 인스턴스생성방법 http://ojc.asia, http://ojcedu.com 1. JPAQuery 를직접생성하기 JPAQuery 인스턴스생성하기 QueryDSL의 JPAQuery API를사용하려면 JPAQuery 인스턴스를생성하면된다. // entitymanager는 JPA의 EntityManage

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D> Inside Spring Web MVC 안영회 ahnyounghoe@gmail.com 차례 MVC 개요와오해 Spring Web MVC 개요 Demo 로이해하는 Spring Web MVC 대표적인컨트롤러활용 정리 한국 스프링 사용자 모임 MVC 개요와 오해 한국 스프링 사용자 모임 MVC 개요 MVC 에대한오해 컨트롤러는서블릿이다! 컨트롤러는액션이다! 비즈니스로직은컨트롤러다!

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

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

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인 표준프레임워크로구성된컨텐츠를솔루션에적용하는것에문제가없는지확인 ( S next -> generate example -> finish). 2. 표준프레임워크개발환경에솔루션프로젝트추가. ( File -> Import -> Existring Projects into

More information

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

(Microsoft PowerPoint - spring_ibatis.ppt [\310\243\310\257 \270\360\265\345]) 중소기업직업훈련컨소시엄 Spring & Ibatis 프레임워크과정 11.8.27 ~ 11.10.15 한국소프웨어기술진흥협회 (KOSTA) 1 Web Application 설계방식 모델 1 설계방식 모델 2 설계방식 2 모델 1 설계방식 (1/2) 모델 1 개요 JSP 만이용하여개발하는경우 JSP + Java Bean을이용하여개발하는경우 Model2의 Controller

More information

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

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id=entitymanagerfactory class=org.springframework.orm.jpa.localentitymanagerfactorybean p:persistenceunitname= JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

Open Source Framework과 Ajax

Open Source Framework과  Ajax Spring framework 1 Spring 이란? 오픈소스프레임워크 Rod Johnson 창시 Expert one-on-one J2EE Design - Development, 2002, Wrox Expert one-on-one J2EE Development without EJB, 2004, Wrox 엔터프라이즈어플리케이션개발의복잡성을줄여주기위한목적 EJB

More information

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

<property name=configlocation value=classpath:/egovframework/sqlmap/example/sql-map-config.xml/> <property name=datasource ref=datasource2/> * 표준프레임워크로구성된컨텐츠를솔루션에적용 1. sample( 게시판 ) 프로젝트생성 - egovframe Web Project next generate example finish 2. 프로젝트추가 - 프로젝트 Import 3. 프로젝트에 sample 프로젝트의컨텐츠를추가, 기능동작확인 ⓵ sample 프로젝트에서 프로젝트로복사 sample > egovframework

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

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

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

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1. AOP - 개요 (1/7) 서비스개요 객체지향프로그래밍 (Object Oriented Programming) 을보완하는개념으로어플리케이션을객체지향적으로모듈화하여작성하더라도다수의객체들에분산되어중복적으로존재하는공통관심사가여전히존재한다. AOP는이를횡단관심으로분리하여핵심관심과엮어서처리할수있는방법을제공한다. 로깅, 보안, 트랜잭션등의공통적인기능의활용을기존의비즈니스로직에영향을주지않고모듈화처리를지원하는프로그래밍기법

More information

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

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

歯JavaExceptionHandling.PDF

歯JavaExceptionHandling.PDF (2001 3 ) from Yongwoo s Park Java Exception Handling Programming from Yongwoo s Park 1 Java Exception Handling Programming from Yongwoo s Park 2 1 4 11 4 4 try/catch 5 try/catch/finally 9 11 12 13 13

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

중간고사

중간고사 중간고사 담당교수 : 단국대학교응용컴퓨터공학박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호 (4자리숫자 ) 를기입하면성적공고시학번대신암호를사용할것임. 1. JSP 란무엇인가? 간단히설명하라.

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

KYO_SCCD.PDF

KYO_SCCD.PDF 1. Servlets. 5 1 Servlet Model. 5 1.1 Http Method : HttpServlet abstract class. 5 1.2 Http Method. 5 1.3 Parameter, Header. 5 1.4 Response 6 1.5 Redirect 6 1.6 Three Web Scopes : Request, Session, Context

More information

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

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

Intro to Servlet, EJB, JSP, WS

Intro to Servlet, EJB, JSP, WS ! Introduction to J2EE (2) - EJB, Web Services J2EE iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

슬라이드 1

슬라이드 1 7. [ 실습 ] 예제어플리케이션개발 1. 실습개요 2. 프로젝트환경구성 3. 기본환경설정 4. 예제어플리케이션개발 5. 참조 - 539 - 1. 실습개요 (1/4) 7. [ 실습 ] 예제어플리케이션개발 스프링기반의 EGOV 프레임워크를사용하여구현된예제어플리케이션구현을통하여 Presentation Layer와 Business Layer의연계를살펴본다. 예제어플리케이션구현기능

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

파워포인트 템플릿

파워포인트 템플릿 ibizsoftware 정호열차장 ( 표준프레임워크오픈커뮤니티커미터 ) Agenda 1. ibatis 와 Hibernate 의개념및특징 2. Hibernate 와 JPA 쿼리종류 3. ibatis 와 Hibernate 동시사용을위한 Transaction 처리방안 4. @EntityListeners 활용방법 Agenda 5. Hibernate 사용시 Dynamic

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

J2EE Concepts

J2EE Concepts ! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

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

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

스프링.docx

스프링.docx 1. 스프링기초 01. 스프링프레임워크란? 중량급인 J2EE 컨테이너를대신할경량컨테이너로서스프링을고안. 경량컨테이너란 POJO(Plain Old Java Object) 로불리는, 컨테이너와프레임워크등에의존하지않는일반오브젝트의생애주기관리나오브젝트간의의존관계를해결하는아키텍처를구현한컨테이너. 02. 스프링프레임워크특징 1) 경량컨테이너. 스프링컨테이너는자바객체의생성,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

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

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

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

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

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

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

Spring

Spring Spring MVC 프로젝트생성 2015 Web Service Computing 일반적인스프링의정의 스프링의정의 자바엔터프라이즈개발을편하게해주는오픈소스경량급애플리케이션프레임워크 스프링의기원 로드존슨 (Rod Johnson) 이라는유명 J2EE 개발자가출간한 Expert One-on- One J2EE Design and Development 이라는제목의책에소개된예제샘플

More information

PowerPoint Presentation

PowerPoint Presentation Spring Framework 의이해 - 강사김현오 - 1. 스프링프레임워크개요 1.1 스프링프레임워크개요 1.2 스프링시작하기 스프링의등장배경 POJO 프레임워크 스프링프레임워크 스프링의등장배경 (1/2) 자바엔터프라이즈애플리케이션개발표준인 EJB EJB 를사용하면애플리케이션작성을쉽게할수있다. 저수준의트랜잭션이나상태관리, 멀티쓰레딩, 리소스풀링과같은복잡한저수준의

More information

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence) 8 중 1 2008-01-31 오전 12:08 오픈소스스터디 jpetstore 예제로살펴보는 Spring MVC와 ibatis 연동 Added by Sang Hyup Lee, last edited by Sang Hyup Lee on 1월 16, 2007 (view change) Labels: (None) 지금까지 Spring MVC 를셋팅하는과정에서부터하나의

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 한국성서대학교컴퓨터소프트웨어학과 BoostCourse (Full-Stack Developer) 김석래 예약서비스 기본제공페이지 Spring Framework 시스템설정 (pom.xml) Pom.xml Spring DB Servlet JSON 아직확실히필요한지알수없음 dbcp MySQL DTO DTO DAO Controller Service View Config

More information

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드] GUI 설계 6 주차 DB 연동김문정 tops@yd.ac.kr 강의순서강의전환경 JDK 설치및환경설정톰캣설치및환경설정이클립스 (JEE) 설치및환경설정 MySQL( 드라이버 ) 설치및커넥터드라이브연결 DB 생성 - 계정생성이클립스에서 DB에연결서버생성 - 프로젝트생성 DB연결테이블생성및등록 2 MySQL 설치확인 mysql - u root -p MySQL 에데이터베이스추가

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

Web Services 와 EAI

Web Services 와 EAI Spring.NET 프레임워크활용가이드 Version 0.2 엔소아컨설팅대표컨설턴트전병선 Spring.NET 프레임워크활용가이드 애플리케이션프레임워크 Spring.NET 프레임워크 IoC 컨테이너와 DI AOP (Aspect-Oriented Programming) 애플리케이션프레임워크 프레임워크 (framework) 틀구조, 뼈대, 골격, 구조, 구성 애플리케이션프레임워크

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

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

Web Application을 구성하는 패턴과 Spring ROO의 사례 Spring Roo 와함께하는 쾌속웹개발 정상혁, KSUG (www.ksug.org) 목차 1. Tool 2. Demo 3. Application 1. Tool 1.1 개요 1.2 Command line shell 1.3 Round-trip 1.4 익숙한도우미들 1.1 개요 Text Based RAD Tool for Java Real Object Oriented의첫글자들

More information

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

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W Research & Technique Apache Tomcat RCE 취약점 (CVE-2019-0232) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE-2019-0232 취약점은 Windows 시스템의 Apache Tomcat 서버에서 enablecmdlinearguments

More information

실용적인 스프링 AOP

실용적인 스프링 AOP 스프링 AOP 선택, 활용, 이슈 2008.10.12 백기선 한국스프링사용자모임 (http://ksug.org) 1 안녕하세요. 백기선입니다. http://whiteship.me whiteship2000@gmail.com 목표 : 행복한개발자. 취미 : 블로깅, 스크린캐스팅, 스프링, 하이버네이트, 번역, 큐브, 피아노 현재 새싹 OpenSprout 여친구함

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드] - Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 2012 년자바카페 OPEN 세미나 주제 : Spring 프레임워크중요구성원리 2012. 6. 16 Today Story 1. 티어와레이어 2. 웹프로그래밍과엔터프라이즈프로그래밍 3. MVC 모델과웹개발의흐름 4. Spring 3대구성원리와디자인패턴 5대원리 5. AJAX와데이터처리 Today Story 1. 티어와레이어 2. 웹프로그래밍과엔터프라이즈프로그래밍

More information

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

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

JAVA Bean & Session - Cookie

JAVA Bean & Session - Cookie JAVA Bean & Session - Cookie [ 우주최강미남 ] 발표내용소개 자바빈 (Java Bean) 자바빈의개요 자바빈의설계규약 JSP 에서자바빈사용하기 자바빈의영역 세션과쿠키 (Session & Cookie) 쿠키의개요 쿠키설정 (HTTP 서블릿 API) 세션의개요 JSP 에서의세션관리 Java Bean Q. 웹사이트를개발한다는것과자바빈?? 웹사이트라는것은크게디자이너와프로그래머가함께개발합니다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

개발문서 Oracle - Clob

개발문서 Oracle - Clob 개발문서 ORACLE CLOB 2008.6.9 ( 주 ) 아이캔매니지먼트 개발팀황순규 0. clob개요 1. lob과 long의비교와 clob와 blob 2. 테이블생성쿼리 ( 차이점-추가사항 ) 3. select 쿼리 4. insert 쿼리및 jdbc프로그래밍 5. update 쿼리및 jdbc프로그래밍 (4, 5). putclobdata() 클래스 6. select

More information

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

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

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

뇌를 자극하는 JSP & Servlet 슬라이드 속성 & 리스너 JSP & Servlet 2/39 Contents 학습목표 클라이언트요청에의해서블릿이실행될때에컨테이너에의해제공되는내장객체의종류와역할, 그리고접근범위특성등을알아본다. 웹컴포넌트사이의데이터전달을위한내장객체에서의속성설정과이에따른이벤트처리방법에대해알아본다. 내용 서블릿의초기화환경을표현하는 ServletConfig 객체 웹애플리케이션의실행환경을표현하는

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 03-TCP Programming.ppt Chapter 3. - Socket in Java - 목차 소켓소개 자바에서의 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 에코프로그램 - EchoServer 에코프로그램 - EchoClient Q/A 1 1 소켓소개 IP,, and Socket 포트 (): 전송계층에서통신을수행하는응용프로그램을찾기위한주소 소켓 (Socket):

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 # 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 예외처리 배효철 th1g@nate.com 1 목차 예외와예외클래스 실행예외 예외처리코드 예외종류에따른처리코드 자동리소스닫기 예외처리떠넘기기 사용자정의예외와예외발생 예외와예외클래스 구문오류 예외와예외클래스 구문오류가없는데실행시오류가발생하는경우 예외와예외클래스 import java.util.scanner; public class ExceptionExample1

More information

슬라이드 1

슬라이드 1 전자정부개발프레임워크 1 일차실습 LAB 개발환경 - 1 - 실습목차 LAB 1-1 프로젝트생성실습 LAB 1-2 Code Generation 실습 LAB 1-3 DBIO 실습 ( 별첨 ) LAB 1-4 공통컴포넌트생성및조립도구실습 LAB 1-5 템플릿프로젝트생성실습 - 2 - LAB 1-1 프로젝트생성실습 (1/2) Step 1-1-01. 구현도구에서 egovframe>start>new

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 웹서버프로그래밍 2 JSP 개요 01. JSP 개요 (1) 서블릿 (Servlet) 과 JSP(Java Server Page) 서블릿은자바를이용한서버프로그래밍기술 초기웹프로그래밍기술인 CGI(Common Gateway Interface) 를대체하기위해개발되었으나, 느린처리속도, 많은메모리요구, 불편한화면제어등의한계로 PHP, ASP 등서버스크립트언어등장 JSP

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa Anyframe Jdbc Support Plugin Version 1.1.0 저작권 2007-2014 삼성 SDS 본문서의저작권은삼성 SDS 에있으며 Anyframe 오픈소스커뮤니티활동의목적하에서자유로운이용이가능합니다. 본문서를복제, 배포할경우에는저작권자를명시하여주시기바라며본문서를변경하실경우에는원문과변경된내용을표시하여주시기바랍니다. 원문과변경된문서에대한상업적용도의활용은허용되지않습니다.

More information

슬라이드 1

슬라이드 1 EJB and JBoss SEAM 양수열소장 Java Champion, JCO Advisor, Inpion Consulting Agenda Web Framework & EJB What is Seam? Why Seam? Q/A Framework history Main Milestone in Standard & OpenSource 95 96 97 98 99 00

More information

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

Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비 Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비용부담을초래할뿐더러안정성에도문제가되곤한다. 이에본내용은 Spring Framework를통해앞에서의문제점들을해결할수있는데초점을맞췄으며,

More information

JavaGeneralProgramming.PDF

JavaGeneralProgramming.PDF , Java General Programming from Yongwoo s Park 1 , Java General Programming from Yongwoo s Park 2 , Java General Programming from Yongwoo s Park 3 < 1> (Java) ( 95/98/NT,, ) API , Java General Programming

More information

슬라이드 1

슬라이드 1 SpringFramework Tutorial Think about User experience for your successful Business 오라클자바 Spring Framework 개요 - 경량, 관점지향, 제어역행, 컨테이너에대한개념 Rod Johnson 이만든오픈소스프레임워크 복잡한엔터프라이즈애플리케이션개발을겨냥 단순성, 테스트용이성, 느슨한결합성의측면에서스프링의이점을얻을수있음

More information

Spring @MVC 어노테이션 @RequestParam, @RequestHeader, @Cookie, @RequestBody, @ResponseBody, @ModelAttribute, @SessionAttribute, @ExceptionHandler,@ControllerAdvice, FlashMap, RedirectAttributes, @XmlRootElement,

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Spring 3의 JSR 303 지원

Spring 3의 JSR 303 지원 Spring 3 의 JSR 303(Bean Validation) 지원 - 귀찮은확인, 쉽고편하게하자!- 2010. 9. 11 KSUG 안세원 kingori@gmail.com 목차 JSR 303 (Bean Validation) 소개 JSR 303 개요 JSR 303 주요구성요소 Spring 3 의 JSR 303 지원 Spring 3 의 JSR 303 활용 Spring

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information