슬라이드 1

Size: px
Start display at page:

Download "슬라이드 1"

Transcription

1 SpringFramework Tutorial Think about User experience for your successful Business 오라클자바

2 Spring Framework 개요 - 경량, 관점지향, 제어역행, 컨테이너에대한개념 Rod Johnson 이만든오픈소스프레임워크 복잡한엔터프라이즈애플리케이션개발을겨냥 단순성, 테스트용이성, 느슨한결합성의측면에서스프링의이점을얻을수있음 스프링은경량의제어역행과관점지향컨테이너프레임워크이다. 경량전체스프링의크기는 1MB 남짓한하나의 JAR 파일, 스프링에의해발생하는부하는무시해도되는수준 관점지향스프링은관점지향프로그래밍을위한풍부한지원을한다. 스프링프레임워크 제어역행제어역행 (IoC) 라는기술을통해애플리케이션의느슨한결합을도모한다. 컨테이너애플리케이션객체의생명주기와설정을포함하고관리한다는점에서스프링은일종의컨테이너이다.

3 Spring Framework 개요 - 스프링모듈 Core 프레임워크의가장기본적인부분이고 IoC 와의존성삽입 (Dependency Injection- DI) 기능을제공한다 DAO 끔찍한 JDBC 코딩과데이터베이스업체특정에러코드의파싱을할필요를제거하는 JDBC 추상화레이어를제공한다. 또한 JDBC 패키지는특정인터페이스를구현하는클래스를위해서뿐아니라당신의모든 POJOs 를위해서도선언적인트랜잭션관리만큼프로그램에따른방식으로할수있는방법을제공한다. ORM JDO, Hibernate, 그리고 ibatis 를포함하는인기있는객체 - 관계맵핑 API 를위한통합레이어를제공한다. ORM 패키지는사용하여당신은앞에서언급된간단한선언적인트랜잭션관리와같은 Spring 이제공하는다른모든기능을사용해서혼합하여모든 O/R 매퍼를사용할수있다 AOP 당신이정의하는것을허용하는 AOP 제휴호환 aspect- 지향프로그래밍구현물을제공한다. 예를들어코드를명백하게분리하기위한메소드 - 인터셉터와 pointcut 은논리적으로구별되어야할기능을구현한다. 소스레벨메터데이타기능을사용하여당신은.NET 속성과다소비슷한모든종류의행위적정보를당신의코드로결합한다. Web 멀티파트파일업로드기능, 서블릿리스너를사용한 IoC 컨테이너의초기화그리고웹 - 기반애플리케이션컨텍스트와같은기본적인웹 - 기반통합기능들을제공한다. WebWork 나 Struts 와함께 Spring 을사용할때이것은그것들과통합할패키지이다. Spring 프레임워크개요 MVC 웹애플리케이션을위한 Model-View-Controller(MVC) 구현물을제공한다. Spring 의 MVC 구현물은어떤오래된구현물이아니다. 이것은도메인모델코드와웹폼 (Web forms) 사이의분명한구분을제공하고유효성체크와같은 Spring 프레임워크의다른모든기능을사용하도록당신에게허용한다

4 HelloService com/education/edu01 - 스프링을한번경험해보는시간으로 HelloService 를작성 HelloService HelloServiceImpl edu01.xml HelloServiceTest

5 이전개발과의차이점 - HelloService 를통하여기존개발방식과의차이점을알아본다. 기존의방식 CustomerManager customermanager = new CustomerManager(); CustomerDao dao = new CustomerDao(); customermanagere.setdao(dao); Customer customer = customermanager.getcustomer(suninet@naver.com); Spring 의방식 CustomerManager customermanager = new CustomerManager(); CustomerDao dao = new CustomerDao(); customermanagere.setdao(dao); Customer customer = customermanager.getcustomer(suninet@naver.com); Spring 컨테이너가처리, 컨테이너가처리할수있는메커니즘이필요, XML 파일에정의함

6 The container - Spring IoC container 에대한이해 애플리케이션오브젝트들을소싱하거나인스턴스화하는책임, BeanFactory 인터페이스는 IoC container 의중심에있음. XmlBeanFactory 은 XML 설정메타데이타를취하여그것을이용하여완전히설정된시스템또는어플리케이션을생성.

7 BeanFactory - BeanFactory의객체생성 2 내부적으로객체를생성 ServiceObject BeanFactory 1 Bean definitions 을입력으로사용 3 객체가외부에서주입 (Injection) Bean Definitions File

8 configuration metadata - Bean 설정방법 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>

9 컨테이너초기화 (instantiating a container) - Spring IoC container 를직접인스턴스화하기 인스턴스화하기 ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"services.xml", "daos.xml"); // an ApplicationContext is also a BeanFactory (via inheritance) BeanFactory factory = context; 빈을얻어오기 MyBean mybean = (MyBean)factory.getBean( mybean );

10 Bean Definitions File 읽기 - 설정파일읽어오기방법 FileSystemResource 절대경로 / 상대경로둘다가능함, \\, / 둘다가능함 BeanFactory factory = new XmlBeanFactory(new FileSystemResource("WebContent/WEB- INF/spring-config/hello.xml")); ClassPathResource classpath 내에있는리소스검색시사용 BeanFactory factory = new XmlBeanFactory(new ClassPathResource("edu/biz/helloworld/hello.xml"));

11 IoC(Inversion of Control) - 마틴파울러가말하기를... 마틴파울러는 2004 년의글에서제어의어떤측면이역행되는것인지에대한의문을제기했다. 그는의존하는객체를역행적으로취득하는것이라는결론을내렸다. 그는그와같은정의에기초하여제어역행이라는용어에좀더참신한 의존성주입 (dependency injection) 이라는이름을지어줬다. 모든어플리케이션은비지니스로직을수행하기위해서로협업하는둘또는그이상의클래스들로이뤄진다. 전통적으로각객체는협업할객체의참조를취득해야하는책임이있다. 이것이의존성이다. 이는결합도가높으며테스트하기어려운코드를만들어낸다. IoC 를적용함으로써객체들은시스템내의각객체를조정하는어떤외부의존재에의해생성시점에서의존성을부여받는다. 즉의존성이객체로주입 (inject) 된다는말이다. 따라서 IoC 는한객체가협업해야하는다른객체의참조를취득하는방법에대한책의의역행이라는의미를갖는다.

12 Spring 에서의 IoC(Inversion of Control) - 스프링에서컴포넌트간의의존성에대한고찰 스프링에서는어떤컴포넌트가다른컴포넌트와의연관관계를관리할책임이없다. 그대신, 컨테이너에의해컴포넌트간의협업을위한참조가주어진다. <<interface>> CustomerDao CustomerManager CustomerDaoImpl public CustomerManager() { this.customerdao = new CustomerDaoImpl(); ///~

13 IoC 는왜필요한가? - interface 살펴보기 (1) 인터페이스를사용하여실제구현된객체를알지못함. 구현내용을인터페이스의뒤로숨김으로써클라이언트클래스에영향을주지않고도실제구현클래스가교체가능 Collection size():int add(o:object) iterator():iterato r Collection interface 를사용한코드예 public void setorder(collection collection) {... Iterator iter = collection.iterator(); while(iter.hasnext()) ){ Object o = iter.next();... //while //: ArrayList List Stack

14 IoC 는왜필요한가? - interface 살펴보기 (2) 인터페이스를작성하였으나구상클래스를직접인스턴스화함. 구현내용을인터페이스의뒤로숨기지못하고강하게결합 (coupling) 되어있음. CustomerDao query(...) 어플리케이션에서의구현예 public void CustomerManager() { this.customerdao = new CustomerDaoImpl(); public List getcustomers(searchoptions params) { return this.customerdao.query(params); CustomerDaoImp l

15 IoC 는왜필요한가? - IoC 를사용하지않는경우와그렇지않은경우의비교 IoC 를사용하지않는경우 Servlet Container CustomerManager CustomerDaoImp 수정 l IoC를사용한경우 Servlet Container CustomerManager CustomerDao 주입 CustomerFindManage 수정 r CustomerDaoImp l CustomerFindManager 주입 CustomerDao 수정 ApplicationContext 읽음 customer-biz.xml

16 객체지향설계원칙 - 유연한객체지향적인프로그램이되기위해서 설계원칙 자주변경되는구상클래스 (Concrete class) 에의존하지마라 어떤클래스를상속받아야한다면, 기반클래스를추상클래스로만들어라 인터페이스를만들어서이인터페이스에의존하라 DIP(Dependency Inversion Principle) 나쁜품질의코드 경직성 : 무엇이든하나를바꿀때마다다른것도바꿔야한다. 부서지기쉬움 : 시스템에서한부분을 public void 변경하면 setcustomerdao(customerdao 그것과전혀 dao) { 상관없는다른부분이오류 발생 부동성 : 시스템을여러컴포넌트로분해해서재사용하기힘들다 끈끈함 : 개발환경이편집-컴파일-테스트순환을한번도는데시간이엄청나게길다. 쓸데없이복잡함 : 괜히머리를굴려서짠코드구조가굉장히많다. 필요없는반복 : copy & paste 불투명함 : 코드를만든의도에대한설명을볼때그설명에 표현이고인다 라는말이잘어울림

17 ApplicationContext - 더많은기능을제공하는 ApplicationContext 를사용하자 기능 국제화지원을포함해텍스트메시지를해석하는수단제공 이미지등과같은자원을로딩하는범용적인방법을제공 ClassPathXmlApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext( "conf/appcontext.xml"); FileSystemClassPathXmlApplicationContext ApplicationContext ctx = new FileSystemClassPathXmlApplicationCont ext("conf/appcontext.xml"); FileSystemXmlApplicationContext ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:conf/appcontext.xml");

18 IoC 분류체계 - IoC 컨테이너를이용하여빈을주입하는방법과검색하는방법에대한정의분류체계 DL Setter Injection DL: Dependency Lookup DI: Dependency Injection IoC DI Constructor Injection Method Injection 컨테이너관리객체저장소 서블릿컨테이너는서블릿관리를위해서 web.xml 을사용 EJB 컨테이너는 ejb-jar.xml 에설정되어있는정보들이 JNDI 에저장되어관리된다. Spring 에서는 POJO 를관리하기위해서 XML 이나, properties 파일을이용

19 Lookup Sample - 저장소의 bean 을검색하여사용 Sample> String salesmanagername = salesmanager ; ServletContext ctx= getservletcontext(); WebApplicationContext wc = WebApplicationContextUtils.getRequireWebApplicationContext(ctx); SalesManager sm = (SalesManager)wc.getBean(salesManagerName); 저장소에관리되고있는 Bean을개발자들이직접 Lookup하여사용하는것을 Dependency Lookup Dependency Injection 은이같은의존관계를컨테이너가자동적으로연결시켜주는것을말함.

20 DI(Dependency Injection) - Setter Injection Java XML public class SalesManager { private SalesMan salesman; public void setsalesman(salesman sm) { this.salesman = sm; ////~ <beans> <bean id="salesman" class="edu.biz.ioc.carsalesman"/> <bean id="greetingservice" class="edu.biz.ioc.salesmanager"> <property name="salesman"> <ref bean="salesman"/> </property> </bean> </beans>

21 DI(Dependency Injection) - Constructor Injection Java XML public class SalesManager { private SalesMan salesman; public SalesManager(SalelsMan sm) { this.salesman = sm; ////~ <beans> <bean id="salesman" class="edu.biz.ioc.carsalesman"/> <bean id="salesman" class="edu.biz.ioc.carsalesman"/> <bean id= salesmanager" class="edu.biz.ioc.salesmanager"> <constructor-arg> <ref bean="salesman"/> </constructor-arg> </bean> </beans>

22 DI(Dependency Injection) - 리스트나배열묶기 Java public class ListManager { public List<Object> list; public void setlist(list<string> list) { this.list = list; public void print() { XML <property name= barlist > <list> <value>bar1</value> <ref bean= bar2 /> </list> </property>

23 DI(Dependency Injection) - Set (java.util.set) 묶기 Java XML public class SalesManager { private Set items; public setitems(set set) { this.items = set; ////~ <property name= barlist > <set> <value>bar1</value> <ref bean= bar2 /> </set> </property>

24 DI(Dependency Injection) - Map(java.util.Map) 묶기 Java public class SalesManager { private Map items; public setitems(map map) { this.items = map; ////~ XML <property name= barlist > <map> <entry key= key1 > <value>bar1</value> </entry> <entry key= key2 > <value>bar1</value> </entry> </map> </property>

25 전통적인 DAO 단의코드분석 - 전통적인코드에서문제점 반복, 부차적인것들이뒤섞여있다. public Branch select(string branchid) throws SQLException { Logger logger = LogFactory.getLog(getClass()); logger.debug( start ); String sql = " SELECT * FROM TB_Branch WHERE branchcode =? " ; Connection con = this.getconnection(); PreparedStatement pstmt = null; ResultSet rs = null; int paramidx = 1; Branch branch = null; try { pstmt = con.preparestatement(sql); pstmt.setstring(paramidx++, branchid); rs = pstmt.executequery(); while(rs.next()) { branch.setbranchcode(rs.getstring("branchcode")); // while catch (SQLException e) { throw e; finally { if(rs!= null) rs.close(); if (pstmt!= null) pstmt.close(); this.close(); logger.debug( finished ); return branch; //: 핵심관심사

26 횡단관심사 - 복잡한문제를다루는최선의방법은문제를단순하게만드는것 객체지향을사용한다고하더라도부차적인관심사를코드에서제거하지못한다. 따라서생산성이저하되고품질이저하된다. 또한개선의어려움이있다. 복잡한문제를다루는최선의방법은문제를단순하게만드는것이다. 그런데그에대한해결책은? CustomerService ActivityService ScheduleService 트 this.customerdao 랜 = dao; 보안 잭션 기타 횡단관심사

27 AOP 용어 - 실행하기전에먼저말하는법을배우자. AOP 가뭐지????? 결합점 (Join point) 교차점 (pointcut) 충고 (Advice) 에스팩트 (Aspect) 대상 (target) 엮기 (Weaving) 프록시 (Proxy) 인스턴스의생성시점, 메소드를호출하는시점, Exception 이발생하는시점과같이애플리케이션이실행될때특정작업이실행되는시점을의미한다. 교차점은결합점들을선택하고결합점의환경정보 (context) 를수집하는프로그램의구조물이다. Target 클래스와 Advice 가결합 (Weaving) 될때둘사이의결합규칙을정의하는것이다. 충고는교차점에서지정한결합점에서실행되어야하는코드이다. 에스팩트는 AOP의중심단위. Advice와 pointcut을합친것이다.(advisor) 충고를받는클래스를대상 (target) 라고한다. 대상은여러분이작성한클래스는물론, 별도의기능을추가하고자하는써드파티클래스가될수있다. 에스펙트를대상객체에제공하여새로운프록시객체를생성하는과정을말한다. 대상객체에충고가적용된후생성된객체

28 Spring 의 AOP - Spring 에서제공하는메소드결합점이해 객체지향을사용한다고하더라도부차적인관심사를코드에서제거하지못한다. 따라서생산성이저하되고품질이저하된다. 또한개선의어려움이있다. 복잡한문제를다루는최선의방법은문제를단순하게만드는것이다. 그런데그에대한해결책은? public class SmallMart implements SmallMartInterface { 사전충고 public String[] getproducts(string productname) throws Exception{ String[] arr = { "Good morning", "Good evening" ; 예외충고 System.out.println(arr[0]); System.out.println(arr[1]); return null; //: 주변충고사후충고 ///~ 호출부분 : smallmart.getproducts( aaa );

29 AspectJ 교차점 - AspectJ 교차점문법 교차점은프로그램실행중에결합점 (join point) 을포착하거나알려줌. 교차점은에스펙트, 클래스, 인터페이스내에선언됨. AspectJ 에서교차점은무명이거나이름을가질수있음. 교차점이름 교차점유형 public pointcut accountoperations() : call(* Account. *(..)) 참조지정자 핵심어 서명 문법 : [ 참조지정자 ] pointcut 교차점 - 이름 (([ 매개변수 ]): 교차점 - 정의

30 AspectJ 교차점 - AspectJ 와일드카드 와일드카드 * 마침표제외, 문자가 0 개이상.. 마침표포함, 문자가 0 개이상 + 주어진타입의임의의서브클래스, 서브인터페이스 단항연산자! 부정연산자, 교차점에표시된겨합점을제외한모든결합점을선택 이항연산자 두개의교차점을결합하면양쪽교차점에있는모든결합점이선택 && 두개의교차점을모두만족하는결합점만선택 괄호를사용하여기본연산자우선순위를변경하고코드를읽기쉽게만들수있다.

31 AspectJ 교차점 - 서명 (signature) 패턴 Java 에서클래스, 인터페이스, 메소드와필드들은모두서명을가지고잇다. 결합점을지정할때이서명을사용한다. 타입서명패턴 * 클래스, 인터페이스, 패키지이름의일부표현.. 직접또는간접서브패키지를표현 + 서브타입 ( 서브클래스또는서브인터페이스 ) 를표현 예시 javax.swing.jcomponent+ javax.swing.jcomponent 의모든서브클래스를의미

32 AspectJ 교차점 - 타입서명샘플 타입서명패턴예서명패턴 Account *Account Java.*.Date Java..* Javax..*Model+ 대응되는타입 Account 이름이 Account 로끝나는타입 Java 패키지의직접서브패키지에있는타입 Date Ex) java.util.date, java.sql.date Java 패키지또는 java 패키지의직접서브패키지에있는모든타입 Ex) java.awt, java.util 또는 java 패키지의간접서브패키지에있는모든타입 Ex) java.awt.event, java.util.logging Java 패키지또는간접, 직접서브패키지이름이 Model 로끝나거나이들에서상속된서브타입 Ex) TableModel, TreeModel 과이것에서상속된서브타입

33 AspectJ 교차점 - 타입서명샘플 연산자를사용하여결합한타입서명예 서명패턴!Vector Vector Hashtable Javax..*.Model javax.swing.text.document Java.util.RandomAccess+ && java.util.list+ 대응되는타입 Vector 이외의모든타입 Vector 또는 Hashtable Javax 패키지나이것의직접또는간접서브패키지에있는이름이 Model로끝나는모든타입또는 javax.swing.text.document 지정된 2개인터페이스모두를구현하는타입, 예 를들어 java.util.arraylist 는 2개의인터페이스를모두구현하므로이서명에의해선택된다.

34 AspectJ 교차점 - 메서드서명샘플 메서드서명의예서명패턴 public void Account.set*(*) public void Account.*() public * Account.*() public * Account.*(..) 대응되는타입 타입에관계없는하나의파라미터, set 으로시작하는 Account 의 public method All public methods in the Account class that return void and take no arguments. take no arguments All public methods in the Account class that and return any type. All public methods in the Account class taking any number and type of arguments.

35 AspectJ 교차점 - 메서드서명샘플 메서드서명의예 서명패턴 대응되는타입 * Account.*(..) All methods in the Account class. This will even match methods with private access.!public * Account.*(..) public static void Test.main(String[] args) All methods with nonpublic access in the Account class. This will match the methods with private, default, public andvoid setcustomerdao(customerdao dao) { protected access. The static main() method of a Test class with public access. * Account+.*(..) All methods in the Account class or its subclasses. This will match any new method introduced in Account s subclasses.

36 AspectJ 교차점 - 메서드서명샘플 메서드서명의예 서명패턴 대응되는타입 * java.io.reader.read(..) Any read() method in the Reader class irrespective of type and number of arguments to the method. In this case, it will match read(), read(char[]), and * java.io.reader.read(char[],..) read(char[], private CustomerDao int, customerdao; int). Any read() method in the Reader class irrespective of type and number of arguments to the method as long as the first argument type is char[]. In this case, it will match read(char[]) and read(char[], int, int), but not read().

37 AspectJ 교차점 - 메서드서명샘플 메서드서명의예 서명패턴 * javax..*.add*listener(event - Listener+) * *.*(..) throws Remote- Exception public void Collection.clear() public void Account.debit(float) throws InsufficientBalanceExcepti 대응되는타입 Any method whose name starts with add and ends in Listener in the javax package or any of the direct and indirect subpackages that take one argument of type EventListener or its subtype. For example, it will match TableModel.addTableModelListener( public Table- void setcustomerdao(customerdao dao) { ModelListener). Any method that declares it can throw RemoteException. The method clear() in the Collection class that has public access, returns void, and takes no arguments. The public method debit() in the Account class that returns void, takes a single float argument, and

38 AspectJ 교차점 - 생성자서명샘플 생성자서명의예 서명패턴 public Account.new() public Account.new(int) public Account.new(..) public Account+.new(..) public *Account.new(..) public Account.new(..) throws InvalidAccountNumberExce 대응되는타입 A public constructor of the Account class taking no arguments. A public constructor of the Account class taking a single integer argument. All public constructors of the Account class taking any number and type of arguments Any public constructor of the Account class or its subclasses. Any public constructor of classes with names ending with Account. This will match all the public constructors of the SavingsAccount and CheckingAccount classes.

39 AspectJ 교차점 - 유형별결합점유형별결합점문법결합점유형메소드실행메소드호출생성자실행생성자호출클래스초기화필드읽기참조필드쓰기참조예외처리실행객체초기화객체초기화이전충고실행 유형별교차점문법 execution(methodsignature) call(methodsignature) execution(constructorsignature) call(constructorsignature) get(fieldsignature) staticinitialization(typesignature) set(fieldsignature) handler(typesignature) initialization(constructorsignature) preinitialization(constructorsignature) adviceexecution()

40 AspectJ 교차점 - 어휘구조에기초한교차점 - 어휘유효범위는작성된코드의정적인부분을칭하는용어 어휘구조에기초한교차점예 교차점 within(account) within(account+) withincode(* Account.debit(..)) withincode(* *Account.getBalance(..)) 설명 Account 클래스의어휘유효범위내에있는모든결합점 Account 클래스와서브클래스의어휘유효범위내에있는모든결합점 Account 클래스와서브클래스의어휘유효범위내에 있는모든결합점 Acount로이름이끝나는클래스의모든 getbalance() 의어휘유효범위내에있는모든결합점

41 AspectJ 교차점 - 실행객체교차점 - 실행시점의객체의종류에기초하여결합점을선택한다. 실행객체교차점예 교차점 this(account) target(account) 설명 현재객체가 Account 인모든결합점. 현재실행객체가 Account 이거나 SavingsAccount 와같이서브클래스이면그객체의모든메서드호출 ( 정적메소드제외 ) 과멤버변수참조등이결합점으로선택 메서드의실행대상객체가 Account의인스턴스인경우그객체의모든결합점. 대상객체가 Account이거나 SavingsAccount와같이서브클래스이면그객체의모든메서드호출 ( 정적메소드제외 ) 과멤버변수참조등이결합점으로선택 이교차점들은타입을매개변수로사용. 타입을지정할때 * 나.. 와같은와일드카드를사용할수없다.

42 AspectJ 교차점 - 매개변수교차점및조건검사교차점 - 매개변수및조건검사에에기초하여결합점을선택 매개변수교차점예 교차점 args(string,..., int args(remoteexception) 조건검사교차점 교차점 if(system.currenttimemills( )> triggertime) if(circle.getradius() < 5) 설명 첫번째매개변수가 String 타입이고, 마지막매개변수가 int 타입 RemoteException 타입을단한개의매개변수로가진모든결합점 설명 현재시간이 triggertime을지난후에발생하는모든결합점 circle 의 radius 가 5 보다작은모든결합점

43 충고 (advice) - 충고는실제로대상객체에무엇인가를서술한다. 이전충고 (before advice) before():call( * Account.*(..)) {... 여기서무엇을한다. 이후충고 (after advice) after():call( * Account.*(..)) {... 메서드의실행이끝남을로깅 이후충고 - 예외발생시 after() throwing : call(* Account.*(..)) {... 메서드의비정상적종료를로깅 이후충고 반환값포착 after() returning (Amount amt) : call(* Account.*(..) {... 메서드의정상적인종료를로깅

44 충고 (advice) - 충고는실제로대상객체에무엇인가를서술한다. 대체충고 (arround advice) void around(accout account, float amount) throws InsufficientBalanceException: call(* Account.debit(float) throws InsufficientBalanceException) && target(account) && args(amount) { try { proceed(acount, amount); catch(insufficientbalanceexception ex) {.. 로직

45 결합점에서충고로환경정보전달 - 충고를구현하기위해결합점의자료가필요한경우처리 교차점을사용하여실행시점의환경정보를얻어서충고에게전달, this(),target(),args() 교차점은환경정보를제공. 아래에서이전충고의무명교차점은메서드와관련된모든매개변수를수집. 현재실행객체를얻으려면 target() 대신 this() 를사용 환경정보전달하기 - 무명교차점사용 before (Account account, float amount): call (void Account, credit(float)) && target ( account) && args (amount) { System.out.println( Crediting + amount + to + account); 매개변수전달 대상객체전달

46 결합점에서충고로환경정보전달 - 충고를구현하기위해결합점의자료가필요한경우처리 유명교차점이포착한실행객체와매개변수환경정보를결합점에서충고로전달하기. 아래에서는유명교차점을사용. 유명교차점을사용하는경우는유명교차점에서환경정보를수집해야함. 환경정보전달하기 - 유명교차점사용 public creditoperation(account account, float amount) : call(void Account.credit(float)) && target( account ) && args( amount); before(account account, float amount) : creditoperation(account, amount) { System.out.println( Crediting + amount + to + account);

47 결합점에서충고로환경정보전달 - 충고를구현하기위해결합점의자료가필요한경우처리 대체충고의예 public aspect FailureHandlingAspect { final int MAX_TRIES = 3; Object around() throws RemoteException (1) 충고의메서드부분 : call( * RemoteService.get*(..) throws RemoteException) { int retry = 0; while(true) { try { return proced(); (3) 포착된결합점의실행 catch(remoteexception ex) { System.out.println( Encountered + ex); if(++retry > MAX_RETRIES) { throw ex; System.out.println( \tretrying... ); (2) 충고의무명교차점부분

48 반사기능으로결합점정보참조하기 - reflection을이용하여결합점과관련된정적 / 동적정보를사용하기 3가지특별한종류의객체 thisjoinpoint 결합점과관련된동적정보 thisjoinpointstaticpart 결합점의구조적인정보 thisenclosingjoinpointstaticpart 결합점을둘러싼환경정보 JoinPoint getargs():object[] gettarget():object getthis():object getstaticpart():joinpoint.staticpart JoinPoint.StaticPart getkind():string getsignauture():signature getsourcelocation():sourcelocation Signature getdeclaringtype():class getmodifiers():int getname():string

49 Aspect - 관점지향횡단관심사를구현하는기본단위로클래스와유사 Aspect 선언문법 [access specification] aspect <AspectName> [extends class-or-aspect-name] [implements interface-list] [<association-specifier>(pointcut)] {...aspect body -에스펙트는데이터멤버와메서드를포함할수있다. -에스펙트는참조지정자를가질수있다. -에스펙트를추상 (abstract) 에스펙트로정의할수있다. public abstract aspect AbstractLogging { public abstract pointcut logpoints(); // 추상교차점 public abstract Logger getlogger(); // 추상메소드 before(): logpoints() { // 추상교차점에대한충고 getlogger().log(thisjoinpoint); // 추상메서드사용

50 Spring AOP support - Support Spring Configuration file AspectJ 지원을활성화하기위해서스프링설정파일에다음을추가 annotation 을가진 bean class 를다른빈과마찬가지로선언 <bean id="myaspect" class="org.xyz.notveryusefulaspect"> <!-- configure pro perties of aspect here as normal --> </bean> class annotation 을가진 bean class 를작성 package org.xyz; import public class NotVeryUsefulAspect {

51 Spring AOP - Pointcut - Supported Pointcut 스프링에서지원하는포인트컷 구분 execution within this @within 설명 메소드실행에대응하는조인포인트 특정타입 ( 에포함되는 ) 의메소드실행으로제한 참조빈. 즉, Spring AOP 프록시가주어진타입인경우로제한. 타입과일치하는모든 JoinPoint 프록시의대상이되는객체가주어진타입인경우로제한. 타입과일치하는 target 객체의모든메소드 Joinpoint 인자가주어진타입인경우로제한 실행하는객체의클래스가주어진타입의애노테이션을갖는경우로제한 실행시점의인자가특정타입의애노테이션을갖는경우로제한 조인포인트의주체가주어진애노테이션을갖는경우로제한 '&&', ' ', '!' 를이용하여논리연산을할수있고, id로써연산도가능.

52 Spring AOP - Combining Pointcut expression 스프링에서포인트캇표현을 '&&', ' ', '!' 를이용하여논리연산을할수있고, id * *(..))") private void anypublicoperation() private void intrading() && intrading()") private void tradingoperation() { Pointcut 참조 외부클래스에정의된 Pointcut public void beforeadvice() {... Spring AOP 는런타임 Proxy 방식이기때문에 this 와 target 지시자역시같은객체를참조합니다.

53 Spring AOP - Pointcut Examples execution(public * *(..)) execution(* set*(..)) execution(* com.xyz.service.accountservice.*(..)) execution(* com.xyz.service.*.*(..)) execution(* com.xyz.service..*.*(..)) within(com.xyz.service.*) within(com.xyz.service..*) this(com.xyz.service.accountservice) @args(com.xyz.security.classified)

54 Spring AOP - Advice - Before annotation import org.aspectj.lang.annotation.aspect; import public class BeforeExample public void doaccesscheck() { //... Using an in-place pointcut public class BeforeExample com.xyz.myapp.dao.*.*(..))") public void doaccesscheck() { //...

55 Spring AOP - Advice - After returning annotation import org.aspectj.lang.annotation.aspect; import public class AfterReturningExample public void doaccesscheck() { //... Access the actual value that was public class AfterReturningExample pointcut="com.xyz.myapp.systemarchitecture.dataaccessoperation()", returning="retval") public void doaccesscheck(object retval) { //...

56 Spring AOP - Advice - After throwing annotation import org.aspectj.lang.annotation.aspect; import public class AfterThrowingExample public void dorecoveryactions() { //... 예외를제한하기 ( 지정된타입의예외가발생했을때만적용 public class AfterThrowingExample pointcut="com.xyz.myapp.systemarchitecture.dataaccessoperation()", throwing="ex") public void dorecoveryactions(dataaccessexception ex) { //...

57 Spring AOP - Advice - After (finally) annotation mport org.aspectj.lang.annotation.aspect; import public class AfterFinallyExample public void doreleaselock() { //...

58 Spring AOP - Advice - Around annotation import org.aspectj.lang.annotation.aspect; import org.aspectj.lang.annotation.around; import public class AroundExample doaroundpointcut()) public Object dobasicprofiling(proceedingjoinpoint pjp) throws Throwable { // start stopwatch Object retval = pjp.proceed(); // stop stopwatch return retval; 첫번째매개변수로반드시 ProceedingJoinPoint 타입의변수를선언.

59 Spring AOP - Advice - 어드바이스에파라미터넘기기 (Passing parameters to advice) &&" + "args(account,..)") public void validateaccount(account account) { //... * register*(..))") private void loggingoperation() {// the pointcut && args(bean)") private void loggingoperation2(aopbean bean) {// the pointcut public void validparameter2(aopbean bean) { //... //:

60 Spring AOP - JoinPoint - JoinPoint ) public void validateaccount(joinpoint joinpoint) { pointcut= execution(public * com.ecucation.*.(..)), returning = ret ) public void returninglogging(joinpoint joinpoint, Object ret) { * com.education..*.addcourse*(..))") private void loggingoperation() {// the pointcut && args(..,userid)") private void loggingoperationargs(string userid) {// the pointcut public void beforelogging( JoinPoint jp, String userid) { System.out.println(jp.getTarget().toString()); System.out.println(" 검색조건사용자아이디 = " + userid); //:

61 Spring AOP - XML Schema 이용 - XML 설정방법살펴보기 XML 설정 <aop:config> <aop:aspect id="loggingaspect" ref="loggingaspect2"> <aop:pointcut id="publicmethod" expression="execution(public * com.education..*(..))" /> <aop:before pointcut-ref="publicmethod" method="beforelogging" /> <aop:after-returning pointcut-ref="publicmethod" method="afterreturningloggin" /> </aop:aspect> </aop:config> Tag 설명 구분 <aop:config> <aop:aspect> <aop:pointcut> <aop:around> 설명 AOP 설정정보표현 Aspect 설정 포인트컷설정 Around Advice 설정

62 Spring AOP - XML Schema 이용 - XML 설정방법살펴보기 Advice Tag 설명 구분 <aop:before> <aop:after-returning> <aop:after-throwing> <aop:after> <aop:around> 설명

63 Spring AOP - XML Schema 이용 - XML 설정방법살펴보기 After Returning Advice <aop:config> <aop:aspect id="loggingaspect" ref="loggingaspect2"> <aop:pointcut id="publicmethod" expression="execution(public * com.education..*(..))" /> <aop:before pointcut-ref="publicmethod" method="beforelogging" /> <aop:after-returning pointcut-ref="publicmethod" method="afterreturningloggin" returning= ret /> </aop:aspect> </aop:config> (Java) public void afterreturningloggin(joinpoint joinpoint, Object ret) { System.out.println(" 실행이완료된메소드 :" + joinpoint.getsignature().getname()); //:

64 Spring AOP - XML Schema 이용 - XML 설정방법살펴보기 After Throwing Advice <aop:config> <aop:aspect id="loggingaspect" ref="loggingaspect2"> <aop:pointcut id="publicmethod" expression="execution(public * com.education..*(..))" /> <aop:before pointcut-ref="publicmethod" method="beforelogging" /> <aop:after-throwing pointcut-ref="publicmethod" method="afterreturningloggin" throwing= ex /> </aop:aspect> </aop:config> (Java) public void afterthrowingloggin(someexception ex) {... //:

65 Spring JDBC - 예외처리 DataAccessException Spring의 DAO 프레임워크가던지는모든예외는 DataAccessException DataAccessException은반드시직접처리할필요는없다. - RuntimeException이기때문에 uncheck exception에속한다. checked exception 이과도한 catch나 throws 절을야기시켜코드가난잡하게들수있다 Unchecked-Exception이발생하는경우는대부분복구가불가능한것이므로직접처리할필요는없다. 만약복구가가능한경우라면예외를잡아호출스택으로전달되도록할수있다. 예외처리의규칙작성 만 - 비지니스로직을수행하는중발생하는비지니스오류는 Checked Exception 으로처리하고그렇지않으면 Unchecked Exception 으로처리 -Checked Exception 중사용자가인지해야되는 Exception 은해당메시지출력한다.

66 Spring JDBC - Tomcat 설정 Spring 의 DAO 프레임워크에서는 Connection 객체를 DataSource 를통해서취득. Spring 에서는 Connection 객체를직접프로그래머가다루지않는다. <context>.xml <Resource auth="container" description="mdb DB Connection" name="jdbc/ds_edu" type="javax.sql.datasource"/> <ResourceParams name="jdbc/ds_edu"> <parameter> <name>password</name> <value></value> </parameter> <parameter> <name>url</name> <value>jdbc:odbc:driver={microsoft Access Driver (*.mdb);dbq=z:\education\source\spring.ibatis\data\edu.mdb</value> </parameter> <parameter> <name>driverclassname</name> <value>sun.jdbc.odbc.jdbcodbcdriver</value> </parameter> <parameter> <name>username</name> <value>admin</value> </parameter> </ResourceParams>

67 Spring JDBC - web.xml 에설정하고 JNDI 로부터 DataSource 취득하기 web.xml <resource-ref> <description>mdb DB Connection</description> <res-ref-name>jdbc/ds_edu</res-ref-name> <res-type>javax.sql.datasource</res-type> <res-auth>container</res-auth> </resource-ref JNDI 로부터 DataSource 취득 Spring에서는 DataSource를애플리케이션의다른서비스객체들과마찬가지로스프링빈으로취급하는데, 이경우 JndiObjectFactoryBean을사용한다. <bean id= datasource class= org.springframework.jndi.jndiobjectfactorybean > <property name= jndiname > <value>java:comp/env/jdbc/mydatasource</value> </property> </bean>

68 Spring JDBC - web.xml 에설정하고 JNDI 로부터 DataSource 취득하기 web.xml <resource-ref> <description>mdb DB Connection</description> <res-ref-name>jdbc/ds_edu</res-ref-name> <res-type>javax.sql.datasource</res-type> <res-auth>container</res-auth> </resource-ref JNDI 로부터 DataSource 취득 Spring에서는 DataSource를애플리케이션의다른서비스객체들과마찬가지로스프링빈으로취급하는데, 이경우 JndiObjectFactoryBean을사용한다. <bean id= datasource class= org.springframework.jndi.jndiobjectfactorybean > <property name= jndiname > <value>java:comp/env/jdbc/mydatasource</value> </property> </bean>

69 Spring JDBC - Spring에서지원하는 DAO 특징알아보기일관된 DAO 지원 스프링은데이터접근프로세스에있어서고정된부분과가변적인부분을명확히분류. 고정적인부분은템플릿 (template) 이며, 가변적인부분은콜백 (callback) 이다. 템플릿은프로세스의고정적인부분을관리. 콜백은구체적인구현을넣어야하는장소. 고정된부분은트랜잭션관리, 자원관리, 예외처리등을맡는다. 콜백은질의문생성, 파라미터바인딩, 결과집합마샬링등처리. 로직에만집중

70 Spring JDBC - 전통적인방식의 DAO 개발코드살펴보기 JDBC 코드의문제점 public insertperson(person person) throws SQLException { Connection con = null; 자원선언 PrepareStatement stmt = null; try { con = datasource.getconnection();... stmt.executeupdate(); catch(sqlexception e) { 예외처리 finally { 연결개시 try { if((stmt!= null) stmt.close(); catch(sqlexception e) {LOGGER.warn(e); try { if((con!= null) con.close(); catch(sqlexception e) {LOGGER.warn(e); 자원반환

71 Spring JDBC - 스프링의 DAO 핵심인 JdbcTemplate JdbcTemplate 스프링의모든데이터접근프레임워크는템플릿클래스를포함한다. 이경우템플릿클래스는 JdbcTemplate 클래스이다. JdbcTemplate 클래스가작업하기위해필요한것은 DataSource 뿐이다. 스프링의모든 DAO 템플리클래스는스레드에안전하기때문에, 애플리케이션내의각각의 DataSource 에대해서하나의 JdbcTemplate 인스턴스만을필요로한다. public class MyDaoImpl implement MyDao { private JdbcTemplate jdbc; public void setjdbcteamplate(jdbctemplate jdbctemplate) { this.jdbc = jdbctemplate; //: ///~

72 Spring JDBC - DataSource, JdbcTemplate, DAO 정의 Bean 정의 <bean id="datasource" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname"> <value>java:comp/env/jdbc/education</value> </property> <property name="resourceref" value="true" /> </bean> <bean id="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource"> <ref bean="datasource" /> </property> </bean> <bean id="basicdao" class="edu.jdbc.basic.basicdao"> <property name="jdbctemplate"> <ref bean="jdbctemplate" /> </property> </bean>

73 Spring JDBC - int,long,double,date 값을반환하는기본쿼리연습 기본쿼리 public int queryforint() { String sql = " SELECT col_int FROM TBA_Basic"; return this.jdbc.queryforint(sql); //: public long queryforlong() { String sql = " SELECT public col_long class FROM CustomerManager TBA_Basic"; { return this.jdbc.queryforlong(sql); //: public double queryfordouble() { String sql = " SELECT col_double FROM TBA_Basic"; Double d = (Double)this.jdbc.queryForObject(sql, Double.class); return d.doublevalue(); //: public Date queryfordate() { String sql = " SELECT col_date FROM TBA_Basic"; Date d = (Date)this.jdbc.queryForObject(sql, Date.class); return d; //:

74 Spring JDBC - 질의결과를 Map 에담거나, RowCallbackHandler 사용하기 기본쿼리 /** * 쿼리결과를 Map에담는다. */ public List queryforlist() { String sql = "SELECT top 100 * FROM TBA_Sample"; return this.jdbc.queryforlist(sql); //: /** * 쿼리결과를 Map에담는다. */ public List queryforlist2(string city) { String sql = "SELECT top 100 * FROM TBA_Sample WHERE city like? "; Object[] args = { city + "%" ; return this.jdbc.queryforlist(sql, args); //: public SampleBean querywithprocessrow() { String sql = " SELECT top 1 * FROM TBA_Sample "; final SampleBean bean = new SampleBean(); this.jdbc.query(sql, new RowCallbackHandler() { public void processrow(resultset rs) throws SQLException { bean.setaddr(rs.getstring("addr")); bean.setcity(rs.getstring("city")); bean.setzipcode(rs.getstring("zipcode")); //: ); return bean; //:

75 Spring JDBC - insert, update,delete 처리하기 데이터쓰기 public int insertwithobject(person person) { StringBuffer sb = new StringBuffer(); sb.append("insert INTO TBA_Person (id, name, age,sex, profile, createdate, updatedate )"); sb.append("values "); sb.append("(?,?,?,?,?,?,? )"); Object[] args = { person.getid(),person.getname(),person.getage(),person.getsex(),person.getprofile(),person.getcreatedate(),person.getupdatedate() ; return this.jdbc.update(sb.tostring(), args); //: public int update(person person) { String sql = "" + "UPDATE TBA_Person " + " SET " + " age =? " + ",name =? " + "WHERE id =? "; //: Object[] args = { person.getage(),person.getname(),person.getid() ; return this.jdbc.update(sql, args);

76 Spring JDBC - 여러개의데이타를한번에쓰기 Batch Update public int[] insert(final List persons) { String sql = "" + " update tba_person set \n" + " name =? " + ",age =? " + ",sex =? where id =? "; //: BatchPreparedStatementSetter setter = null; setter = new BatchPreparedStatementSetter() { public int getbatchsize() { return persons.size(); public void setvalues(preparedstatement ps, int index) throws SQLException { Person person = (Person)persons.get(index); int parameterindex = 1; ps.setstring(parameterindex++, person.getname()); ps.setint(parameterindex++, person.getage()); ps.setstring(parameterindex++, person.getsex()); ps.setstring(parameterindex++, person.getid()); ; return this.jdbc.batchupdate(sql, setter);

77 Spring JDBC - 객체를목록에담기 (1) RowMapper public class SampleBeanRowMapper implements RowMapper { public Object maprow(resultset rs, int arg1) throws SQLException { SampleBean bean = new SampleBean(); bean.setaddr(rs.getstring("addr")); bean.setcity(rs.getstring("city")); bean.setzipcode(rs.getstring("zipcode")); return bean; //: ///~ /** * 외부에서구현된 RowMapper를사용하여 리스트반환 */ public List queryforlistwithexternalrowmapper() { String sql = " SELECT top 100 A.* FROM TBA_Sample A"; return this.jdbc.query(sql, new SampleBeanRowMapper()); //:

78 Spring JDBC - 객체를목록에담기 (2) RowMapper /** * 내부에서구현된 RowMapper 이용하여리스트반환 */ public List queryforlistwithrowmapper() { String sql = " SELECT top 100 A.* FROM TBA_Sample A"; return this.jdbc.query(sql, new RowMapper() private { CustomerDao customerdao; public public Object void setcustomerdao(customerdao maprow(resultset rs, int arg1) dao) { throws SQLException this.customerdao { = dao; SampleBean bean = new SampleBean(); bean.setaddr(rs.getstring("addr")); bean.setcity(rs.getstring("city")); bean.setzipcode(rs.getstring("zipcode")); return bean; //: ); //:

79 Spring JDBC - 저장프로시저사용하기 (1) CallableStatementCallback public ProcTestBean execprocedure(final String userid) { //: return (ProcTestBean)this.jdbc.execute("{ call simple(?,?) ", new CallableStatementCallback() { public Object doincallablestatement(callablestatement arg0) throws SQLException public class { CustomerManager { ProcTestBean private bean CustomerDao = new ProcTestBean(); customerdao; arg0.setstring(1, public void setcustomerdao(customerdao userid); dao) { arg0.registeroutparameter(2, this.customerdao Types.VARCHAR); = dao; arg0.execute(); bean.setmessage(arg0.getstring(2)); return bean; // doincallable... );

80 Spring JDBC - 저장프로시저사용하기 (2) public List execresultsetproc(final String userid) { return (List)this.jdbc.execute("{ call resultset_proc(?,?) ", new CallableStatementCallback() { public Object doincallablestatement(callablestatement arg0) throws SQLException { List list = new ArrayList(); arg0.registeroutparameter(1, Types.INTEGER); arg0.registeroutparameter(2, Types.VARCHAR); boolean hasresults = arg0.execute(); int errorcode = arg0.getint(1); String message public = arg0.getstring(2); class CustomerManager { if(errorcode!= 0) throw new private SQLException(message, CustomerDao, customerdao; errorcode); public if(hasresults) void { setcustomerdao(customerdao dao) { ResultSet rs = null; try { rs = arg0.getresultset(); while(rs.next()) { CategoryTestBean bean = new CategoryTestBean(); bean.setcategoryid(rs.getstring("categoryid")); bean.setcateogryname(rs.getstring("categoryname")); list.add(bean); catch (Exception e) { finally { if(rs!= null) rs.close(); rs = null; //if return list; // doincallable...); //:

81 Spring JDBC - Transaction - Spring 에서지원하는 transaction TransactionDefinition public interface TransactionDefinition { int getpropagationbehavior(); int getisolationlevel(); int gettimeout(); boolean isreadonly(); gettimeout 실행하는트랜잭션이시작해서종료할때가지의시간을초단위제어 isreadonly 실행하는트랜잭션이 red-only 상태여부를결정가능 getisolationlevel 트랜잭션의격리레벨을결정 getpropagationbehavior 트랜잭션이실행되어야하는범위에대한제어및여러개의트랜잭션이상호작용하는것에대한결정

82 Spring JDBC - Transaction - 격리레벨이해하기 격리레벨 (Isolation level) ISOLATION_DEFULAT ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE 개별적인 PlatformTransactionManager 를위한디폴트값 다른트랜잭션에서 commit 되지않은데이타조회가능함으로트랜잭션의기능수행을하지않는다. 대게의데이타베이스의디폴트이다. 다른트랜잭션에서 commit하지않은데이타는볼수없다. public void setcustomerdao(customerdao 다 dao) { 다른트랜잭션이새로운데이타를입력했다면볼수있 하나의트랜잭션이실행된후에다른트랜잭션이실행

83 Spring JDBC - Transaction - 격리레벨이해하기 격리레벨 (Isolation level) 1. Read Uncommitted( 커밋되지않은읽기 ) 한사용자가 "A" 라는데이타를 "B" 라는데이타로변경하는동한다른사용자는 "B 라는아직완료되지않은 Uncommitted 혹은 Dirty 데이터 "B" 를읽을수있다. 다른트랜잭션에서커밋하지않은데이타를읽을수있음. 2. Read Committed ( 커밋된읽기 ) SELECT 문장이수행되는동안해당데이터에 Shared Lock이걸립니다. 그러므로, 어떠한사용자가A라는데이터를 B라는데이터로변경하는동안다른사용자는해당데이터에접근할수없습니다. 다른트랜잭션에의해커밋된데이터를읽을수있다. 3. Repeatable Read ( 반복읽기 ) 트랜잭션이완료될때까지 SELECT 문장이사용하는모든데이터에 Shared Lock이걸리므로다른사용자는그영역에해당되는데이터에대한수정이불가능합니다. 가령, Select col1 from A where col1 between 1 and 10을수행하였고이범위에해당하는데이터가 2건이있는경우 (col1=1과 5) 다른사용자가 col1이 1이나 5인 Row에대한 UPDATE이불가능합니다. 하지만, col1이 1과 5를제외한나머지이범위에해당하는 Row를 INSERT하는것이가능합니다. 처음에읽어온데이타와두번째읽어온데이타가동일한값을갖는다. 4. Serializable ( 직렬혹은순차기능 ) 트랜잭션이완료될때까지 SELECT 문장이사용하는모든데이터에 Shared Lock이 걸리므로다른사용자는 그영역에해당되는데이터에대한수정및입력이 불가능합니다. 예를들어, Repeatable Read의경우 1에서 10 사이에해당되는 데이터에대한 UPADTE이가능하였습니다. 하지만이 Level에서는 UPDATE 작업도 허 용하지않습니다. 동일한데이터에대해서동시에두개이상의트랜잭션이수행될수없다.

84 Spring JDBC - Transaction - 전달행위알아보기 TransactionDefinition PROPAGATION_REQUIRED 하나의트랜잭션이존재하면그트랜잭션을지원, 없다면새로운트랜잭션을시작. 가장자주사용되는옵션 PROPAGATION_SUPPORTS 하나의트랜잭션이존재하면그트랜잭션을지원, 없다면비 - 트랜잭션형태로수행 PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTE D PROPAGATION_NEVER PROPAGATION_NESTED 이미트랜잭션이존재하면그트랜잭션을지원하고, 활성화된 public 트랜잭션이 class CustomerManager 없으면예외를던진다 {. public void setcustomerdao(customerdao 있다면일시정지한다. dao) { 이를일시중지 언제나새로운트랜잭션을수행, 이미활성화된트랜잭션이 트랜잭션을실행하지않고있다가트랜잭션이존재하게되면 트랜잭션을실행하지않고있다가트랜잭션이존재하게되면예외를던진다. 현재의트랜잭션이존재하면중첩된트랜잭션내에서실행, 없으면 REQUIRED 처럼작동

85 Spring JDBC - Transaction - 트랜잭션의상태와, 트랜잭션의실질적인관리자에대해알아보기 TransactionStatus 트랜잭션의상태를관리하는역할을담당. PlatformTransactionManager 에서트랜잭션을 Commit 할지 Rollback 할지를결정하기위해사용한다. public interface TransactionStatus extends SavepointManager { boolean isnewtransaction(); void setrollbackonly(); boolean isrollbackonly(); PlatformTransactionManager 실질적인트랙잭션을실행하는역할을한다. commit/rollback 작업을실행하도록지원 public interface PlatformTransactionManager { void commit(transactionstatus status)... void rollback(transactionstatus status)..

86 Spring JDBC - Transaction - 트랜잭션매니저 bean 정의하기 TransactionManger 정의 <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"/> </bean> public class TransactionService1 public class { CustomerManager { /** 트랜잭션매니져 public */ void setcustomerdao(customerdao dao) { private PlatformTransactionManager this.customerdao transactionmanager; = dao; public void settransactionmanager(platformtransactionmanager transactionmanager) { this.transactionmanager = transactionmanager;... ///~

87 Spring JDBC - Transaction - 프로그래밍적으로트랜잭션처리하기 (1) 프로그래밍적으로트랜잭션처리샘플 public void addperson(person person) { DefaultTransactionDefinition transdef = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED); transdef.setreadonly(false); transdef.setisolationlevel(transactiondefinition.isolation_read_committed); //: Assert.notEmpty(person.getFamilies()); String newid = this.createnewpersonid(); TransactionStatus status = transactionmanager.gettransaction(transdef); person.setid(newid);... person.setupdatedate(createdatetime); try {... transactionmanager.commit(status); catch (Exception e) { transactionmanager.rollback(status); throw new RuntimeException(e);

88 Spring JDBC - Transaction - 프로그래밍적으로트랜잭션처리하기 (2-1) 프로그래밍적으로트랜잭션처리샘플 <bean id="transactiontemplate" class="org.springframework.transaction.support.transactiontemplate"> <property name="transactionmanager"> <ref bean="transactionmanager" /> </property> </bean> public class TransactionService4 { ///~ private PersonDao persondao; private FamilyDao familydao; private TransactionTemplate transactiontemplate;

89 Spring JDBC - Transaction - 프로그래밍적으로트랜잭션처리하기 (2-2) 프로그래밍적으로트랜잭션처리샘플 public void addperson(final Person person) { final String newid = this.createnewpersonid(); person.setid(newid); String createdatetime = DatetimeUtil.getCurrentDateTime().substring(0, 8); person.setcreatedate(createdatetime); person.setupdatedate(createdatetime); //: Object retobject = transactiontemplate.execute( new TransactionCallback() { public Object dointransaction(transactionstatus status) { int rv = persondao.insertwithobject(person); for(int i=0; i < person.getfamilies().length; i++) { Family fbean = person.getfamilies()[i]; fbean.setid(person.getid()); rv = addfamily(fbean); // for return null; ); //:

90 Spring JDBC - Transaction - EJB 에서지원되던선언적으로트랜잭션처리하기 선언적으로트랜잭션처리 (2-1) <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"/> </bean> <bean id="namematch" public void setcustomerdao(customerdao 트랜잭션애트리뷰트 dao) { class="org.springframework.transaction.interceptor.namematchtransactionattributesource"> <property name="properties"> <props><prop key="add*">propagation_required,-exception</prop></props> </property> </bean> <bean id="transactioninterceptor class="org.springframework.transaction.interceptor.transactioninterceptor"> <property name="transactionmanager"> <ref bean="transactionmanager" /> </property> <property name="transactionattributesource"> <ref bean="namematch" /> </property> </bean>

91 Spring JDBC - Transaction - EJB 에서지원되던선언적으로트랜잭션처리하기 선언적으로트랜잭션처리 (2-2) <bean id="autoproxycreator" class="org.springframework.aop.framework.autoproxy.beannameautoproxycreator "> <property name="beannames"> <list> <idref bean="transactionservice" /> </list> </property> <property name="proxytargetclass"> <value>true</value> </property> </bean> 트랜잭션적용대상

92 Spring JDBC - Transaction - 격리레벨과전파행위, 오류시롤백규칙정의 TransactionAttributes PROPAGATION,ISOLATION,readOnly,-Exception,+Exception 전달행위 ( 필수 ) 격리레벨 public ( 선택 class ) 읽기전용 CustomerManager ( 선택 ) Rollback { 규칙 ( 선택 ) Rollback 규칙 ( 선택 ) RuntimeException이발생하는경우에는 rollback, CheckedException이발생하는경우에는 commit하도록되어있다. 마이너스 (-) 로시작하는 Exception에대해서는무조건 rollback 하도록한다. 플러스 (+) 로시작하는 Exception에대해서는 commit한다.

93 Spring JDBC - Transaction - JDK1.5 rollbackfor=runtimeexception.class) public void addperson(person person) { String createdatetime = DatetimeUtil.getCurrentDateTime().substring(0, 8); Assert.notEmpty(person.getFamilies()); String newid = this.createnewpersonid(); person.setid(newid); person.setcreatedate(createdatetime); person.setupdatedate(createdatetime); int rv = this.persondao.insertwithobject(person); Assert.isTrue(rv == 1); for (int i = 0; i < person.getfamilies().length; i++) { Family fbean = person.getfamilies()[i]; fbean.setid(newid); rv = this.addfamily(fbean); Assert.isTrue(rv == 1); // for //:

94 Spring JDBC - Transaction - JDK1.5 Annotation propagation isolation readonly 트랜잭션전파규칙, Default=REQURIED 격리레벨 읽기전용여부, default=false rollbackfor norollbackfor timeout 작성예시 ) public class TestService { 트랜잭션의타임아웃시간, rollbackfor={duplicateorderidexception.class, AaaException.class) void createorder(order order) throws DuplicateOrderIdException ; List querybycriteria(order criteria); 롤백할예외타입설정. 예 ) rollbackfor={exception.class 롤백하지않을타입설정. 예 ) norollbackfor={businessexception

95 Spring JDBC - Transaction - JDK1.5 Annotation ApplicationContext.xml 설정 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:jee=" xmlns:aop=" xmlns:tx=" xsi:schemalocation=" <tx:annotation-driven transaction-manager="transactionmanager"/>

96 Spring MVC - 웹개발환경이해 환경설정 1. Eclipse Tomcat JDK 1.5 or higher 4. run Tomcat 5. Test Hello World!!

97 Spring MVC - Spring Web 요청흐름이해하기 웹요청흐름 Handler Mapping URL 패턴을 Controller 에매핑 요청 Dispatcher Controller Servlet private CustomerDao ModelAndView customerdao; 4 ModelAndView 리턴 5 View객체를찾기위한질의 front-controller 요청을컨트롤러에전달 하나이상의서비스객체에비즈니스로직위임 6 Model 객체전달 ViewResolver View View 객체를반환 Rendering

98 Spring MVC - 스프링 MVC 주요구성요소개념파악 Spring MVC 주요구성요소 DispatcherServlet HandlerMapping 클라이언트의요청에대한전체흐름을제어 클라이언트의요청을처리할컨트롤러결정 Controller 클라이언트의요청을처리한다. ModelAndView ViewResolver View 결과정보및뷰의정보 public 컨트롤러의 class 처리결과를 CustomerManager 생성할뷰를 { 겾어 public void 컨트롤러의 setcustomerdao(customerdao 처리결과화면생성 dao) {

99 Spring MVC - web.xml 에 MVC 요소설정 DispatcherServlet 설정 <servlet> <servlet-name>oraclejava</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value> /WEB-INF/config/edu-02-action.xml /WEB-INF/config/tuto/tuto08-message-action.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

100 Spring MVC - web.xml 에 MVC 요소설정 Character Encoding Filter <filter> <filter-name>encodingfilter</filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

101 Spring MVC - ApplicationContext 이해 (1) DispatcherSerlvet의설정파일에는스프링 MVC 컴포넌트와관련된 <bean> 정의를포함서비스계층과데이터계층에속하는빈역시 DispatcherServlet의설정파일에포함할수있지만별도의설정파일을두는것이좋음. 설정파일들이모두로드되도록하기위해컨텍스트로더를설정컨텍스트로더는 DispatcherServlet이로드하는것이외의컨텍스트설정파일을로드 ContextLoaderListener를 web.xml에설정 <listener> <listener-class> org.springframework.web.context.contextloaderlistener </listener-class> </listener> 설정파일의위치를알려주지않으면 /WEB-INF/applicationContext.xml 이라는스프링설정파일을찾는다. 서블릿컨텍스트에 contextconfiglocation 이라는파라미터를설정하면, 컨텍스트로더가로드할수있는하나이상의스프링설정파일을지정할수있다.

102 Spring MVC - ApplicationContext 이해 (2) <context-param> <param-name>contextconfiglocation</param-name> <param-value> /WEB-INF/config/base-config.xml </param-value> </context-param> DispatcherServlet이 bean을필요로하는경우, ContextLoaderListener를사용하여사 용될빈을설정할수있다. contextconfiglocation 컨텍스트파라미터를이용하여설정.

103 Spring MVC - 스프링에서 view를찾는방법 ViewResolver(1) <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolve r"> <property name="prefix"> <value></value> </property> <property name="suffix"> <value></value> </property> - Controller </bean> 의코드조각 String jspurl = "/ui/edu02/edu02.jsp"; return new ModelAndView(jspUrl);

104 Spring MVC - 스프링에서 view 를찾는방법 ViewResolver(2) JSP 파일의위치를 WEB-INF 아래의경로로이동후설정하기 <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolve r"> <property name="prefix"> <value>/web-inf/ui/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> - Controller의코드조각 String jspurl = edu02/edu02"; return new ModelAndView(jspUrl);

105 Spring MVC - 스프링설정파일위치를변경하기 Relative path 를 classpath 로변경하기 <init-param> <param-name>contextconfiglocation</param-name> <param-value> /WEB-INF/config/edu-02-action.xml </param-value> </init-param> <init-param> <param-name>contextconfiglocation</param-name> <param-value> classpath:com/education/web/config/edu-02-action.xml </param-value> </init-param> test 해보기

106 Spring MVC - 웹요청이들어오면해당요청을처리할컨트롤러구하기 HandlerMapping DispatcherServlet 은클라이언트요청이들어오면해당요청을처리할컨트롤러를구하기위해 HandlerMapping 을이용한다. 1) base-config.xml <bean name="beannameurlmapping" class="org.springframework.web.servlet.handler.beannameurlhandlermapping"> </bean> 2) edu-03-action.xml <bean name="/beanname.do" class="com.education.web.controller.edu03.beannamecontroller"> </bean> 3) 웹요청 <a href= /beanname.do >lession 3</a>

107 Spring MVC - 웹요청이들어오면해당요청을처리할컨트롤러구하기 SimpleUrlHandlerMapping 1) base-config.xml <bean id="simpleurlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="mappings"> <bean class="org.springframework.beans.factory.config.propertiesfactorybean"> <property name="locations"> <list><value> </value></list> 2) edu-03-action.xml </bean> </property> </bean> classpath:com/education/web/config/edu-04-urlmap.properties <bean id="simpleurl class="com.education.web.controller.edu04.simpleurlcontroller /> 3) 웹요청 <a href="/simpleurl.do">lession 4</a><br/>

108 Spring MVC - 웹요청이들어오면해당요청을처리할컨트롤러의종류컨트롤러종류 단순컨트롤러 다중액션컨트롤러 public void setcustomerdao(customerdao 폼컨트롤러 dao) { 명령컨트롤러

109 Spring MVC - 다양한웹요청에대한가장적합한컨트롤러인 MultiActionController 이해 MultiActionController (1) 1) 연관된기능과관련된코드를하나의컨트롤러에서구현 2) 컨트롤러가지나치게많이생기지않도록함 3) 보통하나의화면에하나의컨트롤러를둔다. Java Code public class FirstController extends MultiActionController{ public ModelAndView showpage(httpservletrequest request, HttpServletResponse response) throws Exception { String jspurl = "/ui/edu02/edu02.jsp"; return new ModelAndView(jspUrl); ///~ public ModelAndView getname(httpservletrequest request, HttpServletResponse response) throws Exception { String jspurl = "/ui/edu02/edu02.jsp"; request.setattribute("username", " 김상현 "); return new ModelAndView(jspUrl); ///~ ///~

110 Spring MVC - 다양한웹요청에대한가장적합한컨트롤러인 MultiActionController 이해 MultiActionController (2) 메소드이름결정 ParameterMethodNameResolver 를사용하면편리하게메소드를결정할수있다. 가장간편한방법이고가장많이선호하는방법 ParameterMethodNameResolver <bean id="controllermethodnameresolver class="org.springframework.web.servlet.mvc.multiaction. ParameterMethodNameResolver"> <property name="paramname"> <value>request</value> </property> <property name="defaultmethodname"> <value>dodefault</value> </property> </bean>

JAVA PROGRAMMING 실습 08.다형성

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

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

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

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

슬라이드 1

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

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

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

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

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

제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

단계

단계 TIBERO-WAS 연동 Guide 본문서에서는 Tibero RDBMS 에서제공하는 JDBC 통한 JEUS, WEBLOGIC 등다양한 WAS (Web Application Server) 제품과의연동방법을알아본다. Contents 1. Connection Pool 방식... 2 2. JEUS 연동... 3 2.1. JEUSMain.xml 설정 (Thin 방식

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

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

Microsoft PowerPoint - CSharp-10-예외처리

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

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

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

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

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

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 프레젠테이션

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

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

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

(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

쉽게 풀어쓴 C 프로그래밊

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

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

신림프로그래머_클린코드.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

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

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

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

파워포인트 템플릿

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

More information

Spring

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

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

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

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

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

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

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

본 강의에 들어가기 전

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

More information

PowerPoint 프레젠테이션

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

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

(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

PowerPoint Presentation

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

More information

실용적인 스프링 AOP

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

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

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

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

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

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

교육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

01-OOPConcepts(2).PDF

01-OOPConcepts(2).PDF Object-Oriented Programming Concepts Tel: 02-824-5768 E-mail: hhcho@selabsoongsilackr? OOP (Object) (Encapsulation) (Message) (Class) (Inheritance) (Polymorphism) (Abstract Class) (Interface) 2 1 + = (Dependency)

More information

JVM 메모리구조

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

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

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

MasoJava4_Dongbin.PDF

MasoJava4_Dongbin.PDF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: MasoJava4_Dongbindoc Revision number: Issued by: < > SI, dbin@handysoftcokr

More information

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

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

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

어댑터뷰

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

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. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 Spring 연동가이드 2010. 08 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2010-08 snkim

More information

PowerPoint Presentation

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

More information

JAVA PROGRAMMING 실습 09. 예외처리

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

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

Microsoft PowerPoint - 2강

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

More information

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

Microsoft PowerPoint - JCO2007_Spring2.0_발표자료_Rev-A.ppt [호환 모드] From Spring 1.x Spring 2.0 To 이일민 (Consultant, Epril) 안영회 (Consultant, Epril) 2 목차 q Spring의목표와전략 q Spring 2.0 q Core Container and DI q AOP q Portable Service Abstractions q Web q Spring Portfolio 3 Spring

More information

05-class.key

05-class.key 5 : 2 (method) (public) (private) (interface) 5.1 (Method), (public method) (private method) (constructor), 3 4 5.2 (client). (receiver)., System.out.println("Hello"); (client object) (receiver object)

More information

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

2장  변수와 프로시저 작성하기 Chapter. RequestDispatcher 활용 요청재지정이란? RequestDispatcher 활용 요청재지정구현예제 Chapter.9 : RequestDispatcher 활용 1. 요청재지정이란? 클라이언트로부터요청받은 Servlet 프로그램이응답을하지않고다른자원에수행흐름을넘겨다른자원의처리결과를대신응답하는것또는다른자원의수행결과를포함하여응답하는것을요청재지정이라고한다.

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

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

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

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형 AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형 언어 변환 1.4. 기대 효과 4.4. 프로그램 Restructuring 4.5. 소스 모듈 관리 2. SeeMAGMA 적용 전략 2.1. SeeMAGMA

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

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

* 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

스프링.docx

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

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

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

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

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

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

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

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 Spring 연동가이드 2014. 10 Copyright c 2000~2014 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2010-08 snkim

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

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

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

More information

No Slide Title

No Slide Title J2EE J2EE(Java 2 Enterprise Edition) (Web Services) :,, SOAP: Simple Object Access Protocol WSDL: Web Service Description Language UDDI: Universal Discovery, Description & Integration 4. (XML Protocol

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

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

<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

슬라이드 1

슬라이드 1 Spring Framework 3.X 오문정강사 (muffle@hanmail.net) 2013. 1. Spring3- Oh Moon Jeong - 1-1 레이어 vs. 티어 레이어 논리적분할, 단방향 티어 -- 물리적분할, 양방향 Spring3- Oh Moon Jeong - 2-2 Java EE Java 2 Platform, Enterprise Edition

More information

슬라이드 1

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

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

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

Semantic Consistency in Information Exchange

Semantic Consistency in Information Exchange 제 6 장제어 (Control) 6.1 구조적프로그래밍 (Structured Programming) 6.2 예외 (Exceptions) Reading Chap. 7 숙대창병모 1 6.1 구조적프로그래밍 숙대창병모 2 Fortran 제어구조 10 IF (X.GT. 0.000001) GO TO 20 11 X = -X IF (X.LT. 0.000001) GO TO

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

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

More information

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

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습문제 Chapter 05 데이터베이스시스템... 오라클로배우는데이터베이스개론과실습 1. 실습문제 1 (5 장심화문제 : 각 3 점 ) 6. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (2) 7. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (5)

More information

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

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

PowerPoint Presentation

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

More information

PowerPoint Presentation

PowerPoint Presentation Class : Method Jo, Heeseung 목차 section 1 생성자 (Constructor) section 2 생성자오버로딩 (Overloading) section 3 예약어 this section 4 메소드 4-1 접근한정자 4-2 클래스메소드 4-3 final, abstract, synchronized 메소드 4-4 메소드반환값 (return

More information

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2 예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 kkman@sangji.ac.kr 2 예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생야기된예외를적절히처리 (exception handler) kkman@sangji.ac.kr

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

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

Microsoft PowerPoint - 테스트주도개발.pptx 테스트가능한 소프트웨어설계와 TDD 작성패턴 Testable software design & TDD patterns 한국스프링사용자모임 (KSUG ) 채수원 발표자소개 LG CNS 경영기술교육원기술교육팀전임강사 강의과목디자인패턴 & 리팩터링 분석설계실무 Agile 적용실무 블로그여름으로가는문 blog.doortts.com Comments 내용이나후기에대해서는

More information