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

Size: px
Start display at page:

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

Transcription

1 제1부스프링핵심개념 스프링이제공하는기능은매우다양하지만핵심을파고들어가보면스프링의주요기능은종속객체주입 (DI: Dependency Injection) 과애스펙트지향프로그래밍 (AOP: Aspect-Oriented Programming) 으로귀결된다. 1장 스프링속으로 에서는 DI와 AOP의기본적인개념을살펴보고, 이두기능이애플리케이션객체간의결합도를줄이는데어떻게기여하는지알아본다. 2장 빈와이어링 에서는 DI를이용해애플리케이션객체간의결합도를줄이기위해스프링의 XML 기반설정을사용하는방법에대해좀더깊이있게살펴본다. 여기서애플리케이션객체를정의하고의존객체와연결하는방법을배운다. XML이스프링을설정할수있는유일한방법은아니다. 2장에서배운내용에이어 3장 XML 설정최소화 에서는최소한의 XML( 또는전혀 XML을사용하지않아도 ) 애플리케이션객체연결을가능하게하는스프링의몇가지새로운기능을살펴본다. 4장 애스펙트지향스프링 에서는스프링의 AOP 기능을이용해시스템전반에걸친서비스 ( 보안이나감사등 ) 와그서비스를받는객체간의결합도를줄이는방법을살펴본다. 이장은스프링 AOP를이용해선언적트랜잭션과보안을제공하는방법을배우게될 6장과 9장의기반이되는장이다.

2

3 1 장스프링속으로 1장에서다룰내용스프링의코어모듈살펴보기애플리케이션객체간의결합도줄이기 AOP를이용해횡단관심사관리하기스프링의빈컨테이너 모든것은빈 (bean) 에서시작됐다. 1996년, 자바 (Java) 라는프로그래밍언어는아직참신하고, 흥미진진하고, 전도유망한언어에불과했다. 애플릿을이용해풍부하고동적인웹애플리케이션을만드는데매료되어자바진영으로모여들었던많은개발자는얼마지나지않아자바언어의가능성이저글링하는만화캐릭터를그려내는정도에그치지않는다는것을알게됐다. 이전의다른언어와달리자바는개별컴포넌트로이뤄진복잡한애플리케이션을만들수있게해줬다. 애플릿에이끌려자바를찾아왔던개발자들은컴포넌트에매료되어남게됐다. 그해 12월, 썬마이크로시스템즈가자바를위한소프트웨어컴포넌트모델을정의한자바빈즈 (JavaBeans) 1.00-A 명세를발표했다. 이명세는자바객체를재사용이가능하게하고단순한자바객체를이용해복잡한애플리케이션을쉽게구성할수있게해주는일련의코딩정책을정의한것이었다. 자바빈즈는이처럼재사용할수있는애플리케이션컴포넌트를정의하는범용수단으로사용하려는의도로만들어졌지만, 실제로는주로사용자인터페이스위젯을만드는데사용되고있었다. 실질적인 작업을하기에는너무단순해보였던것이다. 엔터프라이즈개발자들은그이상의것을원했다. 3

4 4 1 장스프링속으로 첨단애플리케이션은자바빈즈명세에서직접적으로제공하지않는트랜잭션지원이나보안, 분산컴퓨팅등의서비스를필요로하는경우가많다. 그래서 1998년썬 (Sun) 은엔터프라이즈자바빈즈 (EJB: Enterprise JavaBeans) 명세 1.0을발표했다. 이명세는자바컴포넌트개념을서버측으로확장해엔터프라이즈서비스를제공한것이었지만, 원래자바빈즈명세가가졌던간결함을그대로유지하지는못했다. 사실 EJB는이름말고는자바빈즈명세와유사한점이전혀없다. EJB를기반으로한많은애플리케이션이성공적으로구축되어왔지만, EJB는엔터프라이즈애플리케이션개발을간소화하겠다는본래의취지에전혀부합하지못했다. EJB의선언적프로그래밍모델이트랜잭션이나보안같은개발의기반구조를상당부분간소화해준것은사실이지만, 배포디스크립터 (deployment descriptor) 나홈인터페이스, 리모트인터페이스, 로컬인터페이스등의코드때문에개발이복잡하고어려워진다. 시간이지나면서점점더많은개발자가 EJB에환멸을느끼게됐다. 결과적으로최근에는 EJB의인기가시들해지고개발자는좀더쉬운방법을찾아나섰다. 이렇게해서이제자바컴포넌트개발은다시처음으로돌아왔다. 애스펙트지향프로그래밍 (AOP: Aspect-Oriented Programming) 과종속객체주입 (DI: Dependency Injection) 역주1 같은새로운프로그래밍기법들덕분에이전에는 EJB로만가능했던것들을자바빈으로도할수있게됐다. 사용하기복잡한 EJB를쓰지않아도평범한자바객체 (POJO: Plain-Old Java Object) 로도 EJB 같은선언적프로그래밍모델이가능해진것이다. 간단한자바빈으로도충분하다면더이상불편한 EJB 컴포넌트를사용할필요가없다. 1) 이렇게되자, 당연한일이지만 EJB도 POJO 지향프로그래밍모델을사용할수있도록변화했다. DI와 AOP 개념을채택하면서 EJB는예전보다훨씬간결해졌다. 그러나대부분의개발자들이느끼기에는변화의폭이너무작고느렸다. EJB 3 명세가발표됐을때 POJO 기반의다른개발프레임워크들은이미자바커뮤니티에서사실상의표준으로자리잡고있었다. 우리가이책을통해살펴볼스프링프레임워크는바로이러한가벼운 POJO 기반개발진영을 역주 1 종속객체주입, 즉 DI(Dependency Injection) 는스프링에서가장기본이되면서도매우중요한의미를갖는다. 기존에가장많이쓰이던표현은 의존성주입 이었다. 하지만이표현은 없는의존성을만들어주입한다 는오해를일으키고, 이때문에 DI의이해가어려웠다고생각한다. DI는없는의존성을주입하는것이아니라의존성은이미존재하되, 실제객체가필요로하는종속객체를주입하는것을의미한다. 따라서 의존성주입 보다뜻이명확하도록 종속객체주입 이라는표현을사용하겠다. 또이책에서는원어의억지스러운번역보다는쉽고자연스럽게받아들일수있는번역을택했음을미리밝혀둔다.

5 1.1 자바개발간소화 5 진두지휘하고있다. 이장에서는우선스프링이어떤것인지전체적인감을잡고이책의나머지부분을이해하는데필요한정보를얻을수있도록스프링프레임워크를개략적으로소개할것이다. 이장을읽고나면스프링이어떤종류의문제를해결해주는지파악할수있을것이다. 중요한것부터먼저하는게일의순서가아닐까! 자, 이제스프링의모든것을알아보자. 1.1 자바개발간소화 스프링 (Spring) 은로드존슨 (Rod Johnson) 이그의책 Expert One-on-One: J2EE Design and Development ( Expert One-on-One J2EE 설계와개발, 정보문화사 ) 를통해소개한오픈소스프레임워크로서엔터프라이즈애플리케이션개발의복잡함을겨냥해만들어졌다. 스프링은 EJB로만할수있었던작업을평범한자바빈을사용해서할수있게해준다. 스프링이서버측개발에만유용한것은아니다. 간소함, 테스트의용이함, 낮은결합도라는견지에서보면모든자바애플리케이션이스프링의덕을볼수있다. 다른이름의빈 (bean) 스프링에서는애플리케이션컴포넌트를가리켜 빈 (bean) 과 자바빈 (JavaBean) 이라는용어를자유롭게사용하고있지만, 이것이꼭자바빈규약 (JavaBeans specification) 전체를문자그대로지켜야한다는의미는아니다. POJO(Plain-Old Java Object, 평범한자바객체 ) 라면어떤것이나스프링의컴포넌트가될수있다. 이책에서는느슨한수준의자바빈정의를사용하며, POJO 와동의어라생각해도괜찮다. 이책을통해스프링의다양한내용을살펴보겠다. 하지만스프링이제공하는거의모든기본사상은몇가지기초적인개념으로귀결되며, 이는스프링의기본임무인 자바개발간소화 에모든초점을맞춘다. 이것이핵심키워드다! 특정기능을간소화하는프레임워크는많이존재하다. 하지만스프링의목적은자바개발을폭넓게간소화하는데있다. 이내용은더많은설명이필요해보인다. 그럼어떻게자바개발을간소화할수있을까? 자바복잡도에대한공격을지원하기위해스프링은네가지주요전략을채택했다.

6 6 1 장스프링속으로 POJO를이용한가볍고 (lightweight) 비침투적인 (non-invasive) 개발역주2 2) DI와인터페이스지향 (interface orientation) 을통한느슨한결합도 (loose coupling) 애스펙트와공통규약을통한선언적프로그래밍애스펙트와템플릿을통한상투적인코드축소스프링이수행하는거의모든작업은이네가지전략중하나이상에속한다. 앞으로스프링이자바개발을간소화하는방법에대한구체적인예제를살펴보면서이와같은사상을확장해나가겠다. 먼저스프링이 POJO 지향개발을통해어떻게침투적인개발을최소화할수있는지부터알아보자 POJO 의힘 오랜기간자바개발경험이있다면인터페이스의구현이나클래스의확장을강요하는프레임워크를본적이있으며, 심지어이런프레임워크로작업한경험도있으리라생각된다. 전형적인예가바로 EJB 2 시대의무상태세션빈 (stateless session bean) 이다. 코드 1.1의간단한 HelloWorldBean에서보듯이 EJB 2 명세의요구사항은다소무겁다. 코드 1.1 EJB 2.1 은침략적인 API 로, 일반적으로필요하지도않은메소드를강제로구현하게한다. package com.habuma.ejb.session; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class HelloWorldBean implements SessionBean { public void ejbactivate() { 왜이런메소드가필요할까? public void ejbpassivate() { public void ejbpassivate() { public void ejbremove() { 역주 2 침투적이란 EJB 와같이특정기술을적용했을때그기술과관련된코드나규약등이등장하는경우를말한다. 꼭필요한기능이아니지만특정기술을사용한다는이유로특정클래스, 인터페이스, API 등의코드가등장할경우를말하며, 이는개발의복잡성을가중시킬수있다.

7 1.1 자바개발간소화 7 public void setsessioncontext(sessioncontext ctx) { public String sayhello() { EJB 의핵심비즈니스로직 return "Hello World"; public void ejbcreate() { SessionBean 인터페이스는여러생명주기콜백메소드 ( 이러한메소드는 ejb 로시작한다 ) 구현으로 EJB의생명주기에연결시킨다. 하지만필요하지않음에도불구하고 SessionBean 인터페이스가 EJB의생명주기에강제로연결시킨다는말이더정확한표현이다. 실제로 HelloWorld Bean의대부분의코드는전적으로프레임워크를위한용도다. 묻고싶다. 누가누구를위해일하는가? 하지만 EJB 2만침략적으로다가온건아니다. 다른인기있는프레임워크인스트러츠 (Struts), 웹워크 (WebWork), 그리고태피스트리 (Tapestry) 의초기버전등도간단한자바클래스가아니라자신만의프레임워크를강요했다. 이런무거운 (heavyweight) 프레임워크는개발자에게불필요한코드가흩어져있는클래스작성을강요하고, 프레임워크에묶어두고, 테스트수행도어려웠다. 반면에스프링은 API를이용하여애플리케이션코드의분산을가능한막는다. 스프링은스프링에특화된인터페이스구현이나스프링에특화된클래스확장을거의요구하지않는다. 스프링기반애플리케이션의클래스에는스프링이사용한다는표시도거의없다. 최악의경우, 클래스에스프링의애너테이션 (annotation) 이붙지만그렇지않은경우엔 POJO다. 설명을위해코드 1.1의 HelloWorldBean 클래스를스프링이관리하는빈으로함수를다시작성하면코드 1.2와같다.

8 8 1 장스프링속으로 코드 1.2 스프링은 HelloWorldBean 에불합리한요구를하지않는다. package com.habuma.spring; public class HelloWorldBean { public String sayhello() { 이것이실제필요한전부다. return "Hello World"; 더나아지지않았는가? 정신없던생명주기메소드는모두사라졌다. 실제로 HelloWorldBean 은구현하지도, 확장하지도않았고, 심지어스프링 API에서어떤것도임포트하지않았다. HelloWorldBean은군살이없고, 평범하며, 모든구문은 POJO다. 간단한형태에도불구하고 POJO는매우강력할수있다. 스프링이 POJO에힘을불어넣는방법중하나는 DI를활용한조립이다. 그럼, DI를통해애플리케이션객체상호간의결합도를낮추는방법을알아보자 종속객체주입 종속객체주입 (DI: Dependency Injection) 이라는문구가다소위협적으로들려서복잡한프로그래밍기술의개념이나디자인패턴이떠오를수있다. 하지만 DI는생각만큼복잡하지않다. 사실프로젝트에 DI를적용해보면코드가훨씬더간단해지고, 이해하기쉬우며, 테스트하기도쉬워진다. HelloWorld 예제보다복잡한실제애플리케이션에서는두개이상의클래스가서로협력하여비즈니스로직을수행한다. 이때각객체는협력하는객체에대한레퍼런스 ( 즉, 종속객체 ) 를얻을책임을진다. 그결과, 결합도가높아지고테스트하기힘든코드가만들어지기쉽다. 예를들어, 코드 1.3에있는 Knight 클래스를생각해보자.

9 1.1 자바개발간소화 9 코드 1.3 DamselRescuingKnight 는 RescueDamselQuest 만떠날수있다. package com.springinaction.knights; public class DamselRescuingKnight implements Knight { private RescueDamselQuest quest; public DamselRescuingKnight() { quest = new RescueDamselQuest(); RescueDamselQuest 에강하게결합된다. public void embarkonquest() throws QuestException { quest.embark(); 보다시피 DamselRescuingKnight는생성자안에자신의원정 (Quest) 인 RescueDamselQuest 를생성한다. 이것은 DamselRescuingKnight가 RescueDamselQuest에강하게결합되도록하며, 기사의원정출정목록을심각하게제한한다. 도움이필요한여성이있는곳에기사도있다. 하지만용을물리쳐야하거나원탁역주3 이필요하다면, 또한순회하려면 이런 그냥앉아만있어야한다. 3) 게다가 DamselRescuingKnight에대한단위테스트를작성하기도몹시어렵다. 단위테스트에서는기사의 embarkonquest() 가호출될때 quest의 embark() 메소드의호출을확인하고싶어한다. 하지만여기서는이를수행하는명확한방법이없다. 안타깝게도 DamselRescuing Knight는테스트하지못한채로남아있게된다. 결합도는머리가둘달린짐승이다. 결합도가높은코드는한편으로테스트와재활용이어렵고, 이해하기도어려우며, 오류를하나수정하면다른오류가발생하는경향이있다. 반면에전혀결합이없는코드는아무것도할수없다. 무언가쓸만한일을하려면클래스들끼리어떻게든서로알고있어야한다. 결합은필요하지만주의해서관리해야한다. 반면에 DI를이용하면객체는시스템에서각객체를조율하는제3자에의해생성시점에종속객체 (dependency) 가부여된다. 객체는종속객체를생성하거나얻지않는다. 즉, 종속객체는종속객체가필요한객체에주입된다. 역주 3 원탁 (Round Table) 은영국의전설적통치자아서왕과그기사들이앉았던둥근탁자다.

10 10 1 장스프링속으로 이의미를설명하기위해코드 1.4에있는 BraveKnight를살펴보자. 이클래스는용감할뿐만아니라발생할어떤종류의원정도떠날수있다. 코드 1.4 BraveKnight 는부여된어떤 Quest 도충분히감당할정도로유연하다. package com.springinaction.knights; public class BraveKnight implements Knight { private Quest quest; public BraveKnight(Quest quest) { this.quest = quest; Quest 가주입된다. public void embarkonquest() throws QuestException { quest.embark(); 보다시피 DamselRescuingKnight와달리 BraveKnight는자신의원정 (Quest) 을생성하지않는다. 대신에생성시점에생성자인자로원정이부여된다. 이와같은종류의종속객체주입을생성자주입 (constructor injection) 이라고한다. 게다가부여된원정은모든원정이구현하는인터페이스인 Quest 타입으로제공된다. 따라서 BraveKnight는 RescueDamselQuest, SlayDragonQuest, MakeRoundTableRounderQuest, 또는부여된다른 Quest 구현을떠날수있다. 여기서요점은 BraveKnight가 Quest의특정구현체에결합되지않는다는사실이다. Quest 인터페이스를구현하기만하면기사에게어떤종류의원정을떠나도록요청하든문제가되지않는다. 이것이바로 DI의주요이점인 느슨한결합도 (loose coupling) 다. 어떤객체가자신이필요로하는종속객체를인터페이스를통해서만알고있다면 ( 구현클래스나인스턴스화되는방법이아니라 ) 사용하는객체쪽에는아무런변경없이종속객체를다른구현체로바꿀수있다. 실제종속객체를바꾸는가장일반적인방법중하나는테스트동안의모조구현체이용이다. 강한결합도 (tight coupling) 로인해 DamselRescuingKnight를적절히테스트할수없었지만, 코드 1.1과같이 Quest의모조구현체를제공하여 BraveKnight를쉽게테스트할수있다.

11 1.1 자바개발간소화 11 코드 1.5 BraveKnight 테스트를위하여모조 Quest 를주입한다. package com.springinaction.knights; import static org.mockito.mockito.*; import org.junit.test; public class BraveKnightTest public void knightshouldembarkonquest() throws QuestException { Quest mockquest = mock(quest.class); 모조 Quest 생성 BraveKnight knight = new BraveKnight(mockQuest); mockquest 주입 knight.embarkonquest(); verify(mockquest, times(1)).embark(); 여기서는 Quest 인터페이스의모조구현체를만들기위해 Mockito 로알려진모조객체프레임워크를사용했다. 모조객체가생겼으면 BraveKnight의새로운인스턴스를생성하고, 생성자를통해모조 Quest를주입한다. embarkonquest() 메소드를호출한후에는 Mockito에게 Quest의 embark() 메소드가정확히한번호출됐는지확인하도록한다. 기사에게원정임무주입 이렇게해서 BraveKnight 클래스는모든원정임무를부여받을수있게됐다. 그러면이제 BraveKnight 클래스에어떤 Quest를부여할지를어떻게지정할수있을까? 애플리케이션컴포넌트간의관계를정하는것을와이어링 (wiring) 이라고한다. 스프링에서컴포넌트를와이어링하는방법은여러가지가있그림 1.1 종속객체주입은객체가스스로종속객지만가장일반적인방법은 XML을이용하는체를획득하는것과는반대로객체에종속객체가부여되는것을의미한다. 방법이다. 코드 1.6은 BraveKnight에게 Slay DragonQuest를부여하는간단한스프링설정파일인 knights.xml이다.

12 12 1 장스프링속으로 코드 1.6 스프링의 XML 설정을이용하여 BraveKnight 에게 SlayDragonQuest 를주입하기 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" <bean id="knight" class="com.springinaction.knights.braveknight"> <constructor-arg ref="quest" /> 원정빈주입 </bean> <bean id="quest" class="com.springinaction.knights.slaydragonquest" /> SlayDragonQuest 생성 </beans> 이예제는빈과빈을와이어링하는간단한예를보여준다. 지금은자세한내용에신경쓰지않아도된다. 자세한내용은 2장에서빈을와이어링하는다른방법들과함께살펴볼예정이다. BraveKnight와 Quest 사이의관계를정의했으니이제이 XML 설정파일을로드하여애플리케이션을구동해볼차례다. 실행해보기 스프링애플리케이션에서애플리케이션컨텍스트 (application context) 는빈에관한정의들을바탕으로빈들을엮어준다. 스프링애플리케이션컨텍스트는애플리케이션을구성하는객체의생성과와이어링을전적으로책임진다. 스프링에는애플리케이션의여러구현체가존재하며, 각각의주요차이점은설정을로드하는방법에있을뿐이다. knights.xml에서는빈들이 XML 파일에선언되어있으므로애플리케이션컨텍스트로 Class PathXmlApplicationContext를사용하면좋다. 이스프링컨텍스트구현체는애플리케이션의클래스패스에있는하나이상의 XML 파일에서스프링컨텍스트를로드한다. 코드 1.7에있는 main() 메소드는 ClassPathXmlApplicationContext를사용해 knights.xml을로드하고 Knight에대한레퍼런스를얻는다.

13 1.1 자바개발간소화 13 코드 1.7 KnightMain.java 는기사를포함하는스프링컨텍스트를로드한다. package com.springinaction.knights; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; public class KnightMain { public static void main(string[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("knights.xml"); 스프링컨텍스트로드 Knight knight = (Knight) context.getbean("knight"); 기사빈얻기 knight.embarkonquest(); 기사사용 여기서 main() 메소드는 knights.xml 파일을기반으로스프링애플리케이션컨텍스트를생성한다. 그런다음 ID가 knight인빈을조회하기위해팩토리로애플리케이션컨텍스트를사용한다. Knight 객체에대한레퍼런스를얻은후에간단히 embarkonquest() 메소드를호출해기사를주어진원정의길로떠나보낸다. 이클래스는기사가어떤유형의 Quest를떠나는지에대해서는아무것도알지못한다. BraveKnight를다룬다는사실도알지못한다. knights.xml 파일만이어떤구현체인지확실히알고있다. 지금까지 DI를간단히살펴봤다. 앞으로도이책을통해 DI에대한더많은내용을알아보겠다. 하지만 DI를더자세히알아보고싶다면 DI를상세히다루는단지 R. 프라사나 (Dhanji R. Prasanna) 의 Dependency Injection 을읽어보기바란다. 하지만지금은또다른스프링의자바간소화전략인 애스펙트 (Aspect) 를통한선언적프로그래밍 을알아보자 애스펙트적용 DI가소프트웨어컴포넌트의결합도를낮춰준다면, 애스펙트지향프로그래밍은애플리케이션전체에걸쳐사용되는기능을재사용할수있는컴포넌트에담을수있게해준다. 애스펙트지향프로그래밍은소프트웨어시스템내부의관심사들을서로분리 (separation of

14 14 1 장스프링속으로 concerns) 하는기술이라고설명할수있다. 시스템은보통특정한기능을책임지는여러개의컴포넌트로구성된다. 그러나각컴포넌트는대체로본연의특정한기능외에로깅이나트랜잭션관리, 보안등의시스템서비스도수행해야하는경우가많다. 이러한시스템서비스는시스템의여러컴포넌트에관련되는경향이있기때문에횡단관심사 (cross-cutting concerns) 라고한다. 이러한관심사가여러컴포넌트에퍼지게되면코드는다음두가지차원에서복잡해진다. 시스템전반에걸친관심사를구현하는코드가여러컴포넌트에서중복되어나타난다. 이때문제는이관심사의구현을변경해야하는경우여러컴포넌트를모두변경해야한다는것이다. 이관심사를별도의모듈로추상화해서각컴포넌트에서하나의메소드만호출할수있도록만든다고하더라도, 여전히이메소드가여러컴포넌트에서중복되어나타나는문제는동일하다. 컴포넌트의코드가본연의기능과관련없는코드로인해지저분해진다. 주소록에주소를등록하는메소드는보안상태가유지됐는지아닌지에는신경쓸필요없이주소를등록하는방법에만관여하는것이좋다. 그림 1.2는위에설명한복잡성을그림으로나타낸것이다. 왼쪽에있는비즈니스객체들은시스템서비스와매우긴밀하게관련을맺고있다. 각객체가본연의책임을수행할뿐만아니라로깅과보안, 트랜잭션컨텍스트에대해서도알아야한다. AOP는시스템서비스를모듈화해서컴포넌트에선언적으로적용할수있게해준다. AOP를이용하면시스템서비스에대해서는전혀알지못하면서응집도가높고본연의관심사에집중하는컴포넌트를만들수있다. 다시말해애스펙트는 POJO를말그대로평범하게해준다. 그림 1.3에서묘사하고있는것처럼애스펙트를애플리케이션의여러컴포넌트를덮는담요처럼생각하면개념을잡는데도움이될것이다. 이그림에서애플리케이션의핵심은비즈니스기능을구현하는모듈들로구성되어있고, AOP를이용해서이핵심애플리케이션위에추가적인기능을여러겹으로덮고있다. 이때핵심기능을구현하는모듈에는아무런변화도가하지않고추가적인기능을선언적으로적용할수있다. 이개념은매우강력한개념으로서, 보안, 트랜잭션, 로깅등을처리하느라고애플리케이션의핵심비즈니스로직이지저분해지는것을막아준다. 기사예제로다시돌아가, 기본적인스프링애스펙트를추가해보면서스프링에서애스펙트를적용하는방법을구체적으로살펴보자.

15 1.1 자바개발간소화 15 그림 1.2 시스템관련관심사가주관심사가아닌모듈들에로깅이나보안등시스템전반에걸친관심사에대한호출들이여기저기흩어져있다. 그림 1.3 AOP 를이용하면시스템전반에걸친관심사가관련컴포넌트를감싼다. 이렇게함으로써애플리케이션의컴포넌트들이본연의비즈니스기능에집중할수있다. AOP 실습음유시인으로알려진음악을좋아하는이야기꾼에의해기사의업적이노래로기록되기때문 에음유시인의서비스를이용하여 BraveKnight의출정과복귀를기록하고싶다고가정해보자. 사용할 Minstrel 클래스는코드 1.8과같다.

16 16 1 장스프링속으로 코드 1.8 Minstrel 은중세시대의음악을좋아하는로깅시스템이다. package com.springinaction.knights; public class Minstrel { public void singbeforequest() { 원정전에호출됨 System.out.println("Fa la la; The knight is so brave!"); public void singafterquest() { 원정후에호출됨 System.out.println( "Tee hee he; The brave knight did embark on a quest!"); 보다시피 Minstrel은두개의메소드가있는간단한클래스다. singbeforequest() 메소드는기사가원정을떠나기전에호출되며, singafterquest() 메소드는기사가원정을마친후에호출된다. 코드에서작업하기위해서는간단해야한다. 따라서 Minstrel을사용하기위해서 BraveKnight를적절히수정하자. 첫번째시도는다음과같다. 코드 1.9 Minstrel 메소드를호출해야하는 BraveKnight package com.springinaction.knights; public class BraveKnight implements Knight { private Quest quest; private Minstrel minstrel; public BraveKnight(Quest quest, Minstrel minstrel) { this.quest = quest; this.minstrel = minstrel; public void embarkonquest() throws QuestException { minstrel.singbeforequest(); 기사가자체적인음유시인을관리해야할까? quest.embark(); quest.embark(); minstrel.singafterquest(

17 1.1 자바개발간소화 17 기교를부려봤다. 하지만일부는여기서적절해보이지않는다. 정말로기사의관심범위내에서음유시인을관리해야할까? 음유시인은기사의요청없이도그의일을수행한다. 궁극적으로음유시인의일은기사의업적에대해노래하는것이다. 왜기사가음유시인에게그의작업을수행하도록상기시켜줘야하는가? 게다가기사는음유시인에대해알아야하므로, 강제로 Minstrel을 BraveKnight에주입 (inject) 한다. 이는 BraveKnight의코드를복잡하게만들뿐만아니라음유시인이없는기사를원하는경우당황스러워진다. 만일 Minstrel이 null이라면? 이와같은상황을다루기위해몇가지 null 체크로직을도입해야할까? 간단한 BraveKnight 클래스가점차복잡해지기시작하고 nullminstrel 시나리오까지처리해야한다면그복잡함은더해진다. 하지만 AOP를사용하면기사의원정에대해노래할음유시인을선언할수있으며, 기사는 Minstrel 메소드를직접처리하는일에서해방된다. Minstrel을애스펙트로바꾸려면스프링설정파일의하나로선언하기만하면된다. 여기서는 knights.xml 파일을수정하여 Minstrel을애스펙트로선언했다. 코드 1.10 Minstrel 을애스펙트로선언하기 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:aop=" xsi:schemalocation=" <bean id="knight" class="com.springinaction.knights.braveknight"> <constructor-arg ref="quest" /> </bean> <bean id="quest" class="com.springinaction.knights.slaydragonquest" /> <bean id="minstrel" class="com.springinaction.knights.minstrel" /> Minstrel 빈선언 <aop:config> <aop:aspect ref="minstrel">

18 18 1 장스프링속으로 <aop:pointcut id="embark" expression="execution(* *.embarkonquest(..))" /> 포인트컷정의 <aop:before pointcut-ref="embark" method="singbeforequest"/> 비포어드바이스선언 <aop:after pointcut-ref="embark" method="singafterquest"/> 애프터어드바이스선언 </aop:aspect> </aop:config> </beans> 여기서스프링의 aop 설정네임스페이스를사용하여 Minstrel 빈이애스펙트라고선언한다. 먼저 Minstrel을빈으로선언해야한다. 그런다음 <aop:aspect> 엘리먼트에서빈을참조한다. 애스펙트를더정의해보자면, embarkonquest() 메소드가실행되기전에 Minstrel의 singbeforequest() 메소드가호출되어야한다고선언한다 (<aop:before> 를이용하여 ). 이것을비포어드바이스 (before advice) 라부른다. 그리고 embarkonquest() 메소드가실행된후에 singafterquest() 메소드가호출되어야한다고선언한다 (<aop:after> 를이용하여 ). 이것을애프터어드바이스 (after advice) 라부른다. 양쪽경우모두 pointcut-ref 애트리뷰트는 embark 라는이름의포인트컷 (pointcut) 을참조한다. 이포인트컷은앞에있는 <pointcut> 엘리먼트에어드바이스가적용될위치를선택하는 expression 애트리뷰트와함께정의돼있다. expression 구문은 AspectJ의포인트컷표현식언어다. AspectJ나 AspectJ 포인트컷표현식의작성방법을자세히모른다고해도걱정할필요는없다. 4장에서스프링의 AOP에대해더자세히논의할것이다. 지금은스프링이 BraveKnight 가원정을떠나기전과후에 Minstrel의 singbeforequest() 와 singafterquest() 메소드를호출한다는정도만알아도충분하다. 이렇게해서몇줄안되는 XML 설정으로 Minstrel을스프링애스펙트로바꿨다. 지금완전히이해가되지않더라도걱정할필요는없다. 4장에서다양한스프링 AOP 예제를통해충분히이해할수있는시간을갖게된다. 지금은이예제에서다음에설명하는두가지점만분명하게알고넘어가면된다.

19 1.1 자바개발간소화 19 첫번째는 Minstrel이여전히 POJO라는점이다. Minstrel이애스펙트로사용될것임을나타내는내용은 Minstrel에전혀포함되어있지않다. 스프링컨텍스트에서선언적으로애스펙트가된다. 두번째이면서가장중요한점은 BraveKnight가 Minstrel을명시적으로호출하지않아도 Minstrel이 BraveKnight에적용될수있다는사실이다. 실제로 BraveKnight는 Minstrel 의존재를전혀인식하지못한다. 또한중요한것은 Minstrel을애스펙트로바꾸기위해몇가지스프링마법을사용했지만, 먼저 <bean> 으로선언돼야한다는사실이다. 여기서의핵심은종속객체주입같은다른스프링빈과함께수행할수있는스프링애스펙트를이용하면무엇이든가능하다는점이다. 기사에대해노래하기위해애스펙트를사용하는일도즐거울수있지만, 스프링의 AOP는더실용적인목적으로사용된다. 나중에보겠지만스프링 AOP는선언적트랜잭션 (6장) 과보안 (9 장 ) 등의서비스를제공하기위해도입한다. 하지만지금은스프링이자바개발을간소화시켜주는또하나의방법을알아보자 템플릿을이용한상투적인코드제거 코드를작성하다가이전에이미작성했던코드같다고느껴본적이있는가? 이것은데자뷰 (déjà vu) 가아니다. 이것이바로상투적인코드다. 즉, 공통작업이나간단한작업을위해반복적으로작성해야하는코드다. 안타깝게도자바 API에는상투적인코드가많이포함돼있다. 상투적코드의대표적인예는데이터베이스에서데이터를조회하는 JDBC 작업이다. 예를들어, 이전에 JDBC로작업한적이있어도다음에도유사한코드를작성해야하는경우가있다. 코드 1.11 JDBC 등상당수의자바 API에는상투적인코드작성이많이포함돼있다. public Employee getemployeebyid(long id) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = datasource.getconnection();

20 20 1 장스프링속으로 stmt = conn.preparestatement( "select id, firstname, lastname, salary from " + "employee where id=?"); 직원조회 stmt.setlong(1, id); rs = stmt.executequery(); Employee employee = null; if (rs.next()) { employee = new Employee(); employee.setid(rs.getlong("id")); 데이터로부터객체생성 employee.setfirstname(rs.getstring("firstname")); employee.setlastname(rs.getstring("lastname")); employee.setsalary(rs.getbigdecimal("salary")); return employee; catch (SQLException e) { 여기서무엇을수행해야하지? finally { if(rs!= null) { 정리작업 try { rs.close(); catch(sqlexception e) { if(stmt!= null) { try { stmt.close(); catch(sqlexception e) { if(conn!= null) { try { conn.close(); catch(sqlexception e) { return null;

21 1.1 자바개발간소화 21 보다시피 JDBC 코드는직원의이름과급여를데이터베이스에서조회한다. 하지만조회하는부분을찾으려면열심히살펴봐야한다. 그이유는몇줄안되는직원조회코드가 JDBC 형식의더미에묻혀버렸기때문이다. 먼저커넥션 (connection) 을생성하고, 그런다음에질의객체 (statement) 를생성하며, 마지막으로결과를조회한다. 그리고예외를던지더라도 (throw) 수행할수있는작업이많지않음에도불구하고, JDBC의분노를달래기위해검사형예외 (checked exception) 인 SQLException을잡아야 (catch) 한다. 마지막으로모든작업을완료한후에는커넥션과질의객체, 그리고결과집합을닫는정리작업을수행해야한다. 이또한분노를일으킬수있다. 따라서여기서도별도로 SQLException을잡아야한다. 코드 1.11에서가장주목할부분은거의모든 JDBC 작업을위해작성했던코드와완벽히동일하다는사실이다. 직원조회를위해수행하는작업은극히일부분이다. 대부분은 JDBC의상투적인코드다. 상투적인코드작업에 JDBC만있는것은아니다. 많은기능은종종유사한상투적인코드를요구한다. JMS, JNDI, 그리고 REST 서비스의소비에는수많은공통적인반복코드가포함돼있다. 스프링은템플릿에상투적인코드를캡슐화하여반복적인코드를제거하는방법을찾는다. 스프링의 JdbcTemplate은전통적인 JDBC에서필요한모든형식없이도데이터베이스작업을수행할수있게한다. 예를들어, 스프링의 SimpleJdbcTemplate(JdbcTemplate의서브클래스로자바 5 기능을활용한다 ) 을사용하면 JDBC API가요구하는작업이아니라직원데이터를조회하는작업에초점을맞추도록 getemployeebyid() 메소드를재작성할수있다. 업데이트된 getemployeebyid() 메소드는코드 1.12와같다.

22 22 1 장스프링속으로 코드 1.12 템플릿은코드가작업에바로집중할수있게한다. public Employee getemployeebyid(long id) { return jdbctemplate.queryforobject( "select id, firstname, lastname, salary " + SQL 쿼리 "from employee where id=?", new RowMapper<Employee>() { public Employee maprow(resultset rs, int rownum) throws SQLException { 결과를객체에매핑 Employee employee = new Employee(); employee.setid(rs.getlong("id")); employee.setfirstname(rs.getstring("firstname")); employee.setlastname(rs.getstring("lastname")); employee.setsalary(rs.getbigdecimal("salary")); return employee;, id); 쿼리파라미터지정 보다시피새롭게수정된 getemployeebyid() 는매우간단하면서도실제로데이터베이스에서직원을조회하는작업에초점을맞춘다. 템플릿의 queryforobject() 메소드에는 SQL 쿼리, RowMapper( 결과집합데이터를도메인객체에매핑 ), 그리고쿼리파라미터가부여될수있다. getemployeebyid() 에서는이전에보였던 JDBC의상투적인코드가보이지않는다. 이것은모두템플릿내부에서처리된다. 지금까지 POJO 지향개발, DI, AOP, 그리고템플릿을이용하여자바개발의복잡성을공격하는방법을살펴봤다. 또한 XML기반설정파일에서빈과애스펙트를설정하는방법도살펴봤다. 그런데이러한파일을어떻게로드할수있을까? 그리고어디에로드될까? 이제부터애플리케이션의빈이위치하는스프링컨테이너를살펴보자. 1.2 빈을담는그릇, 컨테이너 스프링애플리케이션에서는스프링컨테이너 (container) 에서객체가태어나고, 자라고, 소멸한다. 그림 1.4와같이스프링컨테이너는객체를생성하고, 서로엮어주고, 이들의전체생명주기 ( 생성에서소멸까지 ) 를관리한다.

23 1.2 빈을담는그릇, 컨테이너 23 스프링컨테이너가어떤객체를생성하고구성해서서로엮어줘야하는지알수있게설정하는방법은다음장에서설명하겠다. 우선은객체들의삶의터전인스프링컨테이너자체부터이해하는것이더중요하다. 스프링컨테이너에대한이해를토대로객체가어떻게관리되는지를이해해야한다. 스프링컨테이너는스프링프레임워크의핵심부에위치한다. 스프링컨테이너는종그림 1.4 스프링애플리케이션에서객체는스프링컨속객체주입을이용해서애플리케이션을테이너내에서태어나고, 더불어살아간다. 구성하는컴포넌트를관리하며, 협력컴포넌트간연관관계의형성도여기에서이뤄진다. 이러한짐을컨테이너에덜어버린객체들은더명확하고이해하기쉬우며, 재사용을촉진하고, 단위테스트가용이해진다. 스프링컨테이너는여러가지가있다. 스프링에는여러컨테이너구현체가존재하며, 이들은크게두가지로분류된다. 첫번째부류는빈팩토리 (org.springframework.beans.factory. BeanFactory 인터페이스에의해정의된다 ) 로, 이는 DI에대한기본적인지원을제공하는가장단순한컨테이너다. 두번째부류는애플리케이션컨텍스트 (org.springframework.context. ApplicationContext 인터페이스에의해정의된다 ) 로, 빈팩토리를확장해프로퍼티파일에텍스트메시지를읽고해당이벤트리스너에대한애플리케이션이벤트발행같은애플리케이션프레임워크서비스를제공하는컨테이너다. 스프링으로작업할때빈팩토리나애플리케이션컨텍스트중에아무거나사용해도상관없지만, 빈팩토리는대부분의애플리케이션에대하여지나치게저수준의기능을제공한다. 따라서빈팩토리보다는애플리케이션컨텍스트를더선호한다. 따라서앞으로는애플리케이션컨텍스트에초점을맞춰작업할예정이며, 빈팩토리에대해서는많은시간을할애하지않겠다 또하나의컨테이너, 애플리케이션컨텍스트 스프링에는다양한종류의애플리케이션텍스트가있다. 그중에서가장많이접하게될세가지는다음과같다.

24 24 1 장스프링속으로 ClassPathXmlApplicationContext - 클래스패스에위치한 XML 파일에서컨텍스트정의내용을로드한다. FileSystemXmlApplicationContext - 파일시스템에서, 즉파일경로로지정된 XML 파일에서컨텍스트정의내용을로드한다. XmlWebApplicationContext - 웹애플리케이션에포함된 XML 파일에서컨텍스트정의내용을로드한다. XmlWebApplicationContext는 7장에서웹기반스프링애플리케이션을설명할때살펴보기로한다. 지금은간단히 FileSystemXmlApplicationContext를이용해서파일시스템에서애플리케이션컨텍스트를로드하거나, ClassPathXmlApplicationContext를이용해서클래스패스에서애플리케이션컨텍스트를로드하자. 파일시스템이나클래스패스에서애플리케이션컨텍스트를로드하는방법은빈팩토리때와유사하다. 다음은 FileSystemXmlApplicationContext를로드하는코드다. ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml"); 클래스패스에서로드하는 ClassPathXmlApplicationContext 도다를바없다. ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml"); 둘사이에차이가있다면 FileSystemXmlApplicationContext의경우 foo.xml을파일시스템에서지정된경로 (c:/fool.xml) 로찾고, ClassPathXmlApplicationContext는클래스패스에포함된모든경로 (JAR 파일포함 ) 에서찾으려한다는점이다. 애플리케이션컨텍스트를얻은다음켄텍스트의 getbean() 메소드를호출하여스프링컨테이너에서빈을조회할수있다. 이제스프링컨테이너를생성하는기초방법을익혔으니컨테이너내부빈의생명주기를좀더살펴보자 빈의일생 보통의자바애플리케이션에서빈의생명주기는매우단순하다. 자바의 new 키워드를이용하거나역직렬화 (deserialization) 를통해빈을인스턴스화하고이를바로사용한다. 빈이더이상

25 1.2 빈을담는그릇, 컨테이너 25 사용되지않으면가비지컬렉션 (garbage collection) 후보가되어언젠가는메모리덩어리가됐다가허공속으로사라질것이다. 반면에스프링컨테이너내에서빈의생명주기는좀더정교하다. 빈이생성될때스프링이제공하는커스터마이징기회를이용하려면스프링의빈생명주기를이해해두는것이좋다. 그림 1.5는 BeanFactory 컨테이너내에서빈이갖는구동 (startup) 생명주기를보여준다. 그림 1.5 빈은스프링컨테이너에서탄생과소멸사이에몇단계의과정을거치게된다. 각단계는스프링이빈을관리하는방법을제어할수있는기회이기도하다. 보다시피빈팩토리는빈이사용가능한상태가되기전에몇가지준비 (setup) 과정을수행한다. 그림 1.5의각과정을상세히설명하면다음과같다. 1. 스프링이빈을인스턴스화한다. 2. 스프링이값과빈의레퍼런스를빈의프로퍼티에주입한다. 3. 빈이 BeanNameAware를구현하면, 스프링이빈의 ID를 setbeanname() 메소드에넘긴다. 4. 빈이 BeanFactoryAware를구현하면, setbeanfactory() 메소드를호출하여빈팩토리자체를넘긴다. 5. 빈이 ApplicationContextAware를구현하면, 스프링이 setapplicationcontext() 메소드를호출하고본애플리케이션컨텍스트 (enclosing application context) 에대한참조를넘긴다.

26 26 1 장스프링속으로 6. 빈이 BeanPostProcessor 인터페이스를구현하면, 스프링은 postprocessbeforeinitiali zation() 메소드를호출한다. 7. 빈이 InitializingBean 인터페이스를구현하면, 스프링은 afterpropertiesset() 메소드를호출한다. 마찬가지로빈이 init-method와함께선언됐으면, 지정한초기화메소드가호출된다. 8. 빈이 BeanPostProcessor를구현하면, 스프링은 postprocessafterinitialization() 메소드를호출한다. 9. 이상태가되면빈은애플리케이션에서사용할준비가된것이며, 애플리케이션컨텍스트가소멸될때까지애플리케이션컨텍스트에남아있다. 10. 빈이 DisposableBean 인터페이스를구현하면, 스프링은 destroy() 메소드를호출한다. 마찬가지로빈이 destroy-method와함께선언됐으면, 지정된메소드가호출된다. 이제스프링컨테이너가어떻게생성되고로드되는지알게됐지만, 우리는아직컨테이너에아무것도넣지않았기때문에별쓸모가없다. 스프링 DI를활용하려면컨테이너에애플리케이션객체를넣고서로연결해줘야한다. 빈와이어링 (wiring) 은 2장에서좀더상세히살펴보겠다. 그에앞서, 스프링프레임워크가무엇으로구성되어있고최신버전의스프링이제공하는기능이무엇인지현대스프링현황을조사해보자. 1.3 스프링현황 앞서살펴봤듯이, 스프링프레임워크는 DI, AOP, 그리고상투적인코드축소를통해자바개발을간소화하는데초점을맞춘다. 이모두스프링이수행하는작업이며, 유용하다. 하지만스프링에는눈에보이는것보다더많은기능이존재한다. 스프링프레임워크안에서스프링이자바개발을쉽게할수있는여러가지방법을찾을수있다. 하지만스프링프레임워크자체를넘어서웹서비스, OSGi, 플래시 (Flash), 그리고심지어.NET 등의영역으로스프링을확장하여코어프레임워크를구축하려는프로젝트의더큰생태계가있다. 먼저코어스프링프레임워크가어떤도움을주는지자세히분석해보자. 그런다음, 안목을넓혀서더큰스프링포트폴리오의다른구성요소를검토하도록하자.

27 1.3 스프링현황 스프링모듈 스프링프레임워크는여러개의개별모듈로구성되어있다. 스프링프레임워크를다운로드하여압축을풀면그림 1.6과같이 dist 디렉터리에서 20개의다른 JAR 파일을볼수있다. 스프링을구성하는 20개의 JAR 파일은그림 1.7에보이는여섯개의기능카테고리중하나에속한다. 그림 1.6 JAR 파일에는스프링프레임워크배포파일이존재한다. 이모듈들은전체적으로보면엔터프라이즈애플리케이션개발에필요한모든것을제공한다. 그러나애플리케이션을만들때항상이스프링프레임워크모듈전체를이용해야하는것은아니다. 스프링프레임워크는다른프레임워크나라이브러리와쉽게통합될수있으므로원하는기능이스프링에없어도직접개발할필요없이다른프레임워크나라이브러리를사용할수있다. 스프링모듈들이전체적인구조하에서각각어떤기능을담당하는지하나씩살펴보기로하자.

28 28 1 장스프링속으로 웹과리모팅 그림 1.7 스프링프레임워크는여섯개의잘정의된모듈로구성돼있다. 코어스프링컨테이너스프링프레임워크의핵심은스프링애플리케이션에서빈의생성, 설정, 그리고처리방법을관리하는컨테이너다. 이모듈내에서 DI를제공하는스프링빈팩토리를확인할수있다. 빈팩토리를구성하다보면여러가지스프링의애플리케이션컨텍스트구현체가보이는데, 각각은스프링을구성하는다른방법을제공한다. 빈팩토리와애플리케이션컨텍스트외에도이모듈은이메일, JNDI 액세스, EJB 통합, 그리고스케줄링등의다양한엔터프라이즈서비스도제공한다. 보다시피모든스프링의모듈은코어컨테이너위에구축된다. 애플리케이션구성시암묵적으로코어컨테이너클래스를사용한다. 코어모듈은스프링의 DI를살펴보는 2장을시작으로이책의전반에걸쳐다룬다. 스프링의 AOP 모듈스프링은 AOP 모듈을통해애스펙트지향프로그래밍을풍부하게지원한다. AOP 모듈은스프링애플리케이션에서애스펙트를개발할수있는기반이되는것으로서, DI처럼애플리케이션객체간의결합도를낮추는데기여한다. AOP는주로애플리케이션전체에걸친관심사 ( 트랜잭션이나보안등 ) 와각객체간의결합도를낮추는데이용된다.

29 1.3 스프링현황 29 스프링의 AOP 지원에대해서는 4 장에서자세히살펴본다. 데이터액세스와통합 JDBC를이용해작업하다보면커넥션을얻어오고, 질의객체를생성하고, 결과집합을처리하 고, 커넥션을닫는코드를수없이반복하게된다. 스프링의 JDBC와 DAO(Data Access Objects, 데이터액세스객체 ) 모듈은이렇게반복되는코드를추상화하므로이모듈을이용하면데이터베이스관련코드를깔끔하고간단하게만들수있고, 데이터베이스리소스를닫지않아서발생할수있는문제를예방할수있다. 또한이모듈에는여러종류의데이터베이스서버가제공하는오류메시지위에의미있는예외계층이추가되어있다. 이모듈을이용하면더이상암호문같은 SQL 오류메시지를이해하려고머리를싸매지않아도된다! 스프링의 ORM 모듈은 JDBC보다객체관계매핑 (ORM: Object-Relational Mapping) 도구를선호하는사람들을위한것이다. 스프링의 ORM 모듈은 DAO 모듈위에올라가서 ORM 솔루션용 DAO를만드는편리한방법을제공한다. 스프링은고유한 ORM 솔루션을구현하지않고, 하이버네이트, 자바퍼시스턴스 API, 자바데이터객체 (JDO), ibatis SQL Maps 등널리사용되는 ORM 프레임워크와의연결고리를제공한다. 스프링의트랜잭션관리기능은 JDBC 뿐만아니라이 ORM 프레임워크들도지원한다. 5장에서스프링데이터액세스를살펴볼때스프링의템플릿기반 JDBC 추상화가어떻게 JDBC 코드를크게간소화하는지알아본다. 이모듈은또한메시징을통해다른애플리케이션과의비동기식통합을위하여 JMS(Java Message Service) 를이용한스프링추상화를포함한다. 그리고스프링 3.0 현재, 이모듈은원래스프링웹서비스 (Spring Web Services) 프로젝트의일부분이었던객체 -XML 매핑 (OXM: Object-XML Mapping) 을포함한다. 또한이모듈은스프링의 AOP 모듈을이용하여스프링애플리케이션에서객체들의트랜잭션관리서비스를제공한다. 스프링의트랜잭션지원기능은 6장에서자세히살펴본다. 웹과리모팅 MVC(Model-View-Controller) 패러다임은사용자인터페이스가애플리케이션로직과분리되는웹애플리케이션을만드는경우에일반적으로사용되는접근방식이다. 자바의유명한 MVC 프레임워크가운데에는아파치스트럿츠 (Apache Struts), JSF, 웹워크 (WebWork), 태피

30 30 1 장스프링속으로 스트리 (Tapestry) 등이있다. 스프링이다양한유명 MVC 프레임워크와잘통합되기는하지만, 웹과리모팅모듈에는애플리케이션의웹계층에서결합도를낮추는스프링의기술을잘반영하는 MVC 프레임워크가별도로만들어져있다. 이프레임워크는두가지형태로구성되어있다. 하나는기존웹애플리케이션을위한서블릿기반프레임워크이고, 다른하나는자바포틀릿 (portlet) API에대한개발을위한포틀릿기반애플리케이션이다. 사용자접촉 (user-facing) 웹애플리케이션뿐만아니라이모듈은다른애플리케이션과상호작용하는애플리케이션을개발하기위한다양한리모팅옵션도제공한다. 스프링의리모팅기능에는 RMI(Remote Method Invocation), Hessian, Burlap, JAX-WS, 그리고스프링의 HTTP 호출자등이있다. 7장에서스프링의 MVC 프레임워크를살펴본다음, 10장에서스프링의리모팅기능을확인해보겠다. 테스팅개발자가작성하는테스트의중요성을인식하여스프링은스프링애플리케이션테스트에전념하는모듈을제공한다. 이모듈안에서 JNDI, 서블릿, 그리고포틀릿과동작하는코드의단위테스트작성을위한모조객체구현을확인할수있다. 통합테스트의경우, 이모듈은스프링애플리케이션컨텍스트에서빈을로드하고이컨텍스트에있는빈과의작업을지원한다. 스프링의테스팅모듈은 4장에서처음다룬다. 그런다음 5장과 6장에서스프링데이터액세스와트랜잭션을테스트하는방법을살펴보면서배운내용을넓혀가겠다 스프링포트폴리오 스프링은눈에보이는게다가아니다. 실제로스프링프레임워크다운로드에있는것보다더많은기능이존재한다. 만일코어스프링프레임워크에서멈춘다면, 다양한스프링포트폴리오가제공하는풍부한잠재력을놓치게된다. 전체스프링포트폴리오에는코어스프링프레임워크와서로연관되어구축된다양한프레임워크와라이브러리가있다. 전체스프링포트폴리오는자바개발의모든측면에서스프링프로그래밍모델을제공해준다.

31 1.3 스프링현황 31 스프링포트폴리오가제공하는모든기능을설명하려면책몇권의분량이필요하다. 따라서여기서는코어스프링프레임워크의범위를넘어선일부내용을포함하여스프링포트폴리오의몇가지주요부분위주로살펴보겠다. 스프링웹플로스프링웹플로 (Spring Web Flow) 는스프링의코어 MVC 프레임워크를기반으로목표를향해사용자를안내하는 ( 마법사나장바구니를떠올리면된다 ) 대화형, 흐름기반웹애플리케이션구축을지원한다. 스프링웹플로는 8장에서자세히논의하겠으며, 스프링웹플로에대한더많은정보는홈페이지 스프링웹서비스코어스프링프레임워크는웹서비스로스프링빈을선언적으로배포할수있지만, 이러한서비스는틀림없이구조적으로열악한구현우선 (contract-last) 모델역주4 을기반으로한다. 서비스에대한규약은빈의인터페이스에서결정된다. 스프링웹서비스 (Spring Web Services) 는규약우선 (contract-first) 웹서비스모델을제공하는데, 여기서서비스규약을충족하기위해서서비스구현체가작성된다. 4) 이책에서스프링웹서비스에대해논의하지는않겠다. 하지만더많은정보는스프링웹서비스의홈페이지인 스프링시큐리티보안은많은애플리케이션의핵심요소다. 스프링 AOP를이용하여구현된스프링시큐리티 (Spring Security) 는스프링기반애플리케이션에선언적보안메커니즘을제공한다. 애플리케이션에스프링시큐리티를추가하는방법은 9장에서살펴보겠다. 더많은정보는스프링시큐리티의홈페이지 스프링인티그레이션 많은엔터프라이즈애플리케이션은다른엔터프라이즈애플리케이션과상호작용해야한다. 스 역주 4 구현우선 (contract-last) 모델은자바소스코드를먼저작성한후에 WSDL 을자동생성하여구현하는방식 (code-first 라고도함 ) 이며, 규약우선 (contract-first) 모델은 WSDL 파일을먼저작성한후자바소스코드를작성하는방식이다.

32 32 1 장스프링속으로 프링인티그레이션 (Spring Integration) 은몇가지공통적인통합패턴의구현체를스프링의선언적방식으로제공한다. 이책에서는스프링인티그레이션은다루지않는다. 하지만스프링인티그레이션에대한더많은정보는마크피셔 (Mark Fisher), 요나스파트너 (Jonas Partner), 마리우스보고예비치 (Marius Bogoevici), 그리고이바인펄드 (Iwein Fuld) 가쓴 Spring Integration in Action 을읽어보거나스프링인티그레이션홈페이지인 을살펴보기바란다. 스프링배치데이터의일괄작업이필요하다면배치처리만큼좋은방법은없다. 배치애플리케이션을개발한다면스프링배치 (Spring Batch) 를이용해스프링의강건한 POJO 지향개발모델을활용할수있다. 스프링배치는이책의범위밖이다. 하지만티에리템플라 (Thierry Templier) 와아르노꼬골르느 (Arnaud Cogoluègnes) 가쓴 Spring Batch in Action 에서많은정보를얻을수있다. 또한스프링배치홈페이지 스프링소셜소셜네트워크는인터넷에서떠오르는트렌드로, 페이스북이나트위터등의소셜네트워크사이트와의통합기능을갖춘애플리케이션도계속증가하는추세다. 관심있는분야라면스프링의소셜네트워크확장기능인스프링소셜 (Spring Social) 을살펴보기바란다. 스프링소셜은비교적최신분야이며이책에서별도로다루지는않지만, 보다많은정보는 스프링모바일모바일애플리케이션은소프트웨어개발의또하나의중요한분야다. 많은사용자들이선호하는단말이스마트폰과태블릿기기로이동하고있다. 스프링모바일 (Spring Mobile) 은모바일웹애플리케이션개발을지원하는스프링의새로운확장기능이다. 스프링모바일과관련된프로젝트로는스프링안드로이드 (Spring Android) 프로젝트가있다.

33 1.3 스프링현황 33 이새로운프로젝트는스프링프레임워크가제공하는단순함을안드로이드용네이티브애플리케이션개발에적용하는데그목적이있다. 처음부터이프로젝트는안드로이드애플리케이션내에서사용할수있는스프링의 RestTemplate 버전을제공한다 (RestTemplate은 11장에서다룬다 ). 이프로젝트역시새로운분야이고이책의범위를벗어나지만, 더다양한내용은 springsource.org/spring-mobile과 스프링 DM 스프링 DM(Spring Dynamic Module) 은 OSGi의동적모듈화방식과스프링의선언적 DI가조화를이룬다. 스프링 DM을이용하면, OSGi 프레임워크내에서서비스를선언적으로발행하고소비하는별개의높은응집도와낮은결합도의모듈로구성된애플리케이션을구축할수있다. 주목할점은 OSGi 세계에서의엄청난충격으로인해선언적 OSGi 서비스에대한스프링 DM 모델은 OSGi Blueprint Container 로 OSGi 명세자체가공식화됐다. 또한 SpringSource는스프링 DM을 Gemini 패밀리의일부로이클립스프로젝트로전환했으며, 지금은 Gemini Blueprint로알려져있다. 스프링 LDAP DI와 AOP 외에도스프링프레임워크를통해적용되는또다른공통기법은 JDBC 쿼리또는 JMS 메시징같이불필요하게복잡한작업에대해템플릿기반의추상화를만드는것이다. 스프링 LDAP은 LDAP에스프링스타일의템플릿기반액세스를제공하며, 일반적으로 LDAP 작업에포함된단순반복적인코드를제거한다. 스프링 LDAP에관한더많은정보는 에서확인가능하다. 스프링리치클라이언트웹기반애플리케이션이전통적인데스크톱애플리케이션에서주목을빼앗아간듯보인다. 하지만아직스윙 (Swing) 애플리케이션을개발한다면스윙에스프링의힘을제공하는풍부한애플리케이션툴킷인스프링리치클라이언트 (Spring Rich Client) 를확인해보기바란다.

34 34 1 장스프링속으로 스프링.NET.NET 프로젝트에서도 DI와 AOP를포기할필요가없다. 스프링.NET(Spring.NET) 은.NET 플랫폼에대해서도스프링의느슨한결합과애스펙트지향기능을동일하게제공한다. 핵심적인 DI와 AOP 기능외에도스프링.NET은 ADO.NET, NHibernate, ASP.NET, 그리고 MSMQ 작업에대한모듈을포함해.NET 개발을단순화하기위한몇가지모듈이있다. 스프링.NET에관한더많은정보는 스프링-플렉스어도비 (Adobe) 의플렉스 (Flex) 와에어 (AIR) 는리치인터넷애플리케이션개발을위한강력한기능을제공한다. 이러한리치 UI가서버측자바코드와상호작용해야할경우 BlazeDS로알려진리모팅과메시징기법을이용할수있다. 스프링- 플렉스 (Spring-Flex) 통합패키지는플렉스와에어애플리케이션이 BlazeDS를이용하여서버측스프링빈과통신할수있게한다. 또한스프링루 (Spring Roo) 를위한부가기능이있으며, 플렉스애플리케이션의신속한 (rapid) 애플리케이션개발을가능하게한다. 스프링- 플렉스의탐구는 스프링액션스크립트 (Spring ActionScript) 는 액션스크립트에서스프링프레임워크의다양한혜택을제공한다. 스프링루점점더많은개발자들이스프링을이용하여작업함에따라스프링과관련프레임워크에관한공통용어들과모범사례 (best practice) 가등장하고있다. 동시에애플리케이션개발작업을단순하게하는스크립트기반개발모델과함께루비온레일스 (Ruby on Rails) 와그레일스 (Grails) 등의프레임워크가떠오르고있다. 스프링루 (Spring Roo) 는상호작용적인도구환경을제공하여스프링애플리케이션의신속한개발을가능하게하며, 지난몇년간확인된모범사례를통합했다. 루와다른신속한애플리케이션개발프레임워크와의차이점은스프링프레임워크를사용하여자바코드를만든다는점이다. 결과물은많은기업개발조직에낯선언어로코딩된별도의프레임워크가아니라하늘에한점부끄럼없는스프링애플리케이션이다. 스프링루에관한더많은정보는

35 1.4 스프링의새로운기능 35 스프링확장지금까지설명한모든프로젝트외에도 여기에포함된유용한기능은다음과같다. 파이썬 (Python) 언어를위한스프링구현체블롭 (Blob) 저장 db4o와 CouchDB 퍼시스턴스스프링기반워크플로 (workflow) 관리라이브러리스프링시큐리티를위한커버로스 (Kerberos) 와 SAML 확장 1.4 스프링의새로운기능 이책의 2판을작성한후거의 3년이흘렀고, 그기간동안많은일들이벌어졌다. 스프링프레임워크에는두번의중요한릴리즈가있었는데, 각각은애플리케이션개발을쉽게하는새로운기능과개선을가져왔다. 그리고스프링포트폴리오의몇가지다른멤버도큰변화를겪었다. 이책은이와같은변화를다룬다. 하지만지금은스프링에서새로워진기능이무엇인지부터간단히살펴보자 스프링 2.5 에서새로워진기능 2007년 11월, 스프링프레임워크의 2.5 버전이릴리즈됐다. 스프링 2.5의의미는애너테이션기반개발이채택됐다는데있다. 스프링 2.5 이전에는 XML 기반설정이표준이었다. 하지만스프링 2.5에서도입된다양한방식의애너테이션활용은스프링설정에필요한 애너테이션을통한애너테이션기반 JSR-250 애너테이션 ( 또는다양한스테레오타입애너테이션중하나 ) 을적용한스프링컴포넌트자동탐지 (auto-detection)

36 36 1 장스프링속으로 스프링웹개발을크게간소화시키는완전히새로운애너테이션기반스프링 MVC 프로그래밍모델 JUnit 4와애너테이션기반의새로운통합테스트프레임워크스프링 2.5의애너테이션은중요한얘기지만다음과같은내용도더있다. JDBC 4.0, JTA 1.1, JavaMail 1.4, 그리고 JAX-WS 2.0를포함한전체자바 6와자바 EE 5 지원이름으로스프링빈에애스펙트를위빙 (weaving) 하는새로운빈-이름포인트컷표현식 AspectJ 로딩시점위빙을위한지원기능내장애플리케이션컨텍스트세부정보설정을위한 context 네임스페이스와메시지드리븐 (message-driven) 빈설정을위한 jms 네임스페이스를포함한새로운 XML 설정네임스페이스 SqlJdbcTemplate에서의명명된파라미터지원이책을통해이와같은새로운스프링기능을살펴본다 스프링 3.0 에서새로워진기능 스프링 2.5의훌륭한기능들로인해뒤이은스프링 3.0에서가능한기능이무엇인지상상하기쉽지않았다. 하지만 3.0 릴리즈와함께스프링은애너테이션기반사상의유지와다양한새로운기술로한단계도약했다. XML, JSON, RSS, 또는다른적절한응답을이용하여 REST 스타일 URL에응답하는스프링 MVC 컨트롤러를포함한스프링 MVC의전체규모 REST 지원. 스프링 3.0의새로운 REST 지원은 11장에서살펴본다. 다른빈과시스템속성을포함하여다양한소스로부터값의주입을가능하게하여스프링 DI를새로운수준으로제공하는새로운표현식언어 (expression language). 스프링의표현식언어는 MVC를위한새로운애너테이션. 7장에서스프링 MVC를살펴보면서이러한애너테이션의사용법을알아본다. 스프링 MVC의쉬운설정을위한새로운 XML 네임스페이스 JSR-303(Bean Validation) 애너테이션을이용한선언적유효성검증지원

37 1.4 스프링의새로운기능 37 새로운 JSR-330 DI 명세지원비동기식과스케줄링된메소드의애너테이션지향선언 XML이없이스프링설정이가능한새로운애너테이션기반의설정모델. 이새로운설정방식은 2장에서살펴본다. 객체-XML(OXM) 매핑기능이스프링웹서비스 (Spring Web Services) 프로젝트에서코어스프링프레임워크로이동스프링 3.0의새로운기능만큼이나스프링 3.0에없는기능이무엇인지도파악하는것도중요하다. 특히, 스프링 3.0으로시작하려면이제는자바 5 이상이필요하다. 자바 1.4는더이상스프링에서지원하지않는다 스프링포트폴리오에서새로워진기능 코어스프링프레임워크외에도스프링을기반으로하는프로젝트에는흥미로운새로운움직임이있다. 모든세부적인변경사항을다루기에지면이부족하지만중요하다고생각되는몇가지항목을살펴보면다음과같다. 스프링웹플로 2.0(Spring Web Flow 2.0) 은대화형웹애플리케이션생성을더쉽게만드는간편해진플로정의스카마와함께릴리즈됐다. 스프링웹플로 2.0과함께스프링자바스크립트 (Spring JavaScript) 와스프링페이스 (Spring Faces) 가생겼다. 스프링자바스크립트는동적인동작을이용하여웹페이지의점진적향상을가능하게하는자바스크립트라이브러리다. 스프링페이스는스프링 MVC 와스프링웹플로내에서뷰기술로 JSF의사용을가능하게한다. 예전의아씨지시큐리티 (Acegi Security) 프레임워크는완벽히정비되어스프링시큐리티 2.0(Spring Security 2.0) 으로릴리즈됐다. 이러한새로운구현에서스프링시큐리티는애플리케이션보안을설정하는데필요한 XML의양을극적으로줄이는새로운설정스키마를제공한다. 이책을쓰는시점에도스프링시큐리티는계속발전하고있다. 스프링시큐리티 3.0이최근에릴리즈됐는데, 보안제약조건을선언하는스프링의새로운표현식언어를활용하여선언적방식의보안적용을더간소화한다. 보다시피스프링은활동적이며, 계속해서진화하는프로젝트다. 엔터프라이즈자바애플리케이션개발을더용이하게만드는것을목표로새로운무엇이항상존재한다.

38 38 1 장스프링속으로 1.5 요약 지금까지스프링을이용해어떤일을할수있는지알아봤다. 스프링은엔터프라이즈자바개발자의작업을쉽게하고, 결합도가낮은코드를만드는것을목적으로한다. 여기서핵심은 DI와 AOP다. 1장에서는스프링의 DI에대해간단히살펴봤다. DI는객체들이상호간의종속관계나구체적인구현방법을알필요가없도록애플리케이션객체들을연결하는방법이다. 종속객체를필요로하는객체가직접종속객체를얻어오는것이아니라, 종속객체를필요로하는객체에종속객체가부여되는방식이다. 종속객체를필요로하는객체는인터페이스를통해서주입된객체만알기때문에결합도가낮아진다. DI에이어스프링의 AOP 지원에대해서도간단히살펴봤다. AOP를이용하면일반적으로애플리케이션의여러곳에흩어져있는로직을한곳으로, 즉애스펙트로모을수있다. 각애스펙트는스프링이빈들을와이어링할때런타임에연결되어효과적으로빈에새로운기능을부여한다. DI와 AOP는스프링의중추에해당한다. 스프링프레임워크를잘사용하려면이두가지주요기능을잘이해하고사용해야한다. 이장에서는스프링의 DI와 AOP 기능의기본적인사항들을알아봤지만, 뒤에나오는여러장을통해 DI와 AOP를자세히알아보겠다. 그럼이제잔소리는그만접어두고 2장으로이동하여스프링에서 DI를이용해객체들을연결하는방법을알아보자.

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

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

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

JAVA PROGRAMMING 실습 08.다형성

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

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

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

슬라이드 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

쉽게 풀어쓴 C 프로그래밊

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

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

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

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

제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

쉽게 풀어쓴 C 프로그래밍

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

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

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

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

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

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

PowerPoint Presentation

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

More information

Microsoft PowerPoint - CSharp-10-예외처리

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

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

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

More information

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

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

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

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

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

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

Microsoft PowerPoint - chap01-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 학습목표 프로그래밍의 기본 개념을

More information

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 26 장애플릿 이번장에서학습할내용 애플릿소개 애플릿작성및소개 애플릿의생명주기 애플릿에서의그래픽컴포넌트의소개 Applet API의이용 웹브라우저상에서실행되는작은프로그램인애플릿에대하여학습합니다. 애플릿이란? 애플릿은웹페이지같은 HTML 문서안에내장되어실행되는자바프로그램이다. 애플릿을실행시키는두가지방법 1. 웹브라우저를이용하는방법 2. Appletviewer를이용하는방법

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

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

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

More information

슬라이드 1

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

More information

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

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

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

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

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

PowerPoint 프레젠테이션

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

More information

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

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

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

제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

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

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

<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

어댑터뷰

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

More information

PowerPoint Presentation

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

More information

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

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

More information

JVM 메모리구조

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

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr 실제세계는객체로이루어진다. 2 객체와메시지 3 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4 객체 5 객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작

More information

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

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 애플리케이션기초 애플리케이션컴포넌트 액티비티와태스크 Part 1 프로세스와쓰레드 컴포넌트생명주기 Part 2 2 Library Java (classes) aapk.apk (android package) identifiers Resource & Configuration aapk: android

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

슬라이드 1

슬라이드 1 모바일소프트웨어프로젝트 지도 API 1 조 20070216 김성수 20070383 김혜준 20070965 이윤상 20071335 최진 1 매시업? 공개 API? 2 매시업 웹으로제공하고있는정보와서비스를융합하여새로운소프트웨어나서비스, 데이터베이스등을만드는것 < 최초의매시업 > 3 공개 API 누구나사용할수있도록공개된 API 지도, 검색등다양한서비스들에서제공 대표적인예

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

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

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN

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

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

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

@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

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

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

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Software Verification Junit, Eclipse 및빌드환경 Team : T3 목차 Eclipse JUnit 빌드환경 1 Eclipse e 소개 JAVA 를개발하기위한통합개발환경 주요기능 Overall 빌드환경 Code edit / Compile / Build Unit Test, Debug 특징 JAVA Code를작성하고이에대한 debugging

More information

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

- 목차 - 1. 프로젝트소개 배경및목적 프로젝트기능 4 2. 관련기술 웹사이트개발 패션데이터분석알고리즘 기대효과 진행상황 참조 졸업작품중간보고서 빅데이터기반의패션의류분석 T6 200711459 이남섭 200711468 장재호 201011346 오지연 지도교수님하영국교수님 ( 인 ) - 1 - - 목차 - 1. 프로젝트소개 3 1.1 배경및목적 3 1.2 프로젝트기능 4 2. 관련기술 5 2.1 웹사이트개발 5 2.2 패션데이터분석알고리즘 11 3. 기대효과 13 4. 진행상황 13

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

목차 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

슬라이드 1

슬라이드 1 Visual 2008 과신속한애플리케이션 개발 Smart Client 정병찬 ( 주 ) 프리엠컨설팅개발팀장 johnharu@solutionbuilder.co.kr http://www.solutionbuilder.co.kr 목차 Visual Studio 2008 소개 닷넷프레임워크 3.5 소개 Language Integrated Query (LINQ) 어플리케이션개발홖경

More information

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 DB 와 WEB 연동 (1) [2-Tier] Java Applet 이용 웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 JAVA Applet 을이용한 Client Server 연동기법 } Applet

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

JAVA PROGRAMMING 실습 09. 예외처리

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

More information

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

cover story3 자바기술의미래를비추는거울 스프링프레임워크 2.5 스프링프레임워크 (SpringFramework) 의세번째메이저업그레이드인스프링 (Spring) 2.5 가지난 11 월말에릴리즈되었다. 스프링의캐치프레이 즈처럼더욱간결해지고더욱강력해진 (simpler cover story3 자바기술의미래를비추는거울 스프링프레임워크 2.5 스프링프레임워크 (SpringFramework) 의세번째메이저업그레이드인스프링 (Spring) 2.5 가지난 11 월말에릴리즈되었다. 스프링의캐치프레이 즈처럼더욱간결해지고더욱강력해진 (simpler and more powerful) 스프링 2.5 의달라진모습과 2008 년에새롭게등장하는스프링포트폴리오에

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

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에 개념정리및샘플예제 EJB stateful sample 문서 2016. 01. 14 목차 JEUS EJB Session Bean가이드... 3 1. stateful session bean... 3 1.1 stateful sample 가이드... 3 1.1.1 sample source... 3 1.1.2 결과확인... 6 1.2 http session에서사용하기...

More information

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

歯Writing_Enterprise_Applications_2_JunoYoon.PDF Writing Enterprise Applications with Java 2 Platform, Enterprise Edition - part2 JSTORM http//wwwjstormpekr Revision Document Information Document title Writing Enterprise Applications

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

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

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint 장강의노트.ppt 클래스와객체 클래스와객체 객체 : 우리주변의어떤대상의모델 - 예 : 사람, 차, TV, 개 객체 = 상태 (state) + 행동 (behavior) - 예 : 개의상태 - 종자, 이름, 색개의행동 - 짖다, 가져오다 상태는변수로행동은메소드로나타냄 객체는클래스에의해정의된다. 클래스는객체가생성되는틀혹은청사진이다. 2 예 : 클래스와객체 질문 : 클래스와객체의다른예는?

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lab 4 ADT Design 클래스로정의됨. 모든객체들은힙영역에할당됨. 캡슐화 (Encapsulation) : Data representation + Operation 정보은닉 (Information Hiding) : Opertion부분은가려져있고, 사용자가 operation으로만사용가능해야함. 클래스정의의형태 public class Person { private

More information

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

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim(); 인터페이스적용 오리객체설계하기 ) 청둥오리, 물오리를설계하세요. 1 단계 : 필요한객체설계 class 청둥오리 { class 물오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim(); mallardduck.fly(); mallardduck.quack(); redheadduck.swim();

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

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

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

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345]) Chapter 17. RMI Mingyu Lim Collaborative Computing Systems Lab, School of Internet & Multimedia Engineering Konkuk University, Seoul, Korea 학습목표 RMI란 RMI 구조 RMI는어떻게동작하는가 로컬객체를원격객체로변경하기 RMI를이용한계산기애플리케이션

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

Web Services 와 EAI

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

More information

중간고사

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

More information

wtu05_ÃÖÁ¾

wtu05_ÃÖÁ¾ 한 눈에 보는 이달의 주요 글로벌 IT 트렌드 IDG World Tech Update May C o n t e n t s Cover Story 아이패드, 태블릿 컴퓨팅 시대를 열다 Monthly News Brief 이달의 주요 글로벌 IT 뉴스 IDG Insight 개발자 관점에서 본 윈도우 폰 7 vs. 아이폰 클라우드 컴퓨팅, 불만 검증 단계 돌입 기업의

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

슬라이드 1

슬라이드 1 Continuous Integration 엔터프라이즈어플리케이션아키텍처 조영호카페PJT팀 2008.10.01 youngho.cho@nhncorp.com 목차 1. Domain Logic Pattern 2. Data Source Pattern 3. Putting It All Together 1. Domain Logic Pattern Layered Architecture

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 Template

PowerPoint Template 설치및실행방법 Jaewoo Shim Jun. 4. 2018 Contents SQL 인젝션이란 WebGoat 설치방법 실습 과제 2 SQL 인젝션이란 데이터베이스와연동된웹서버에입력값을전달시악의적동작을수행하는쿼리문을삽입하여공격을수행 SELECT * FROM users WHERE id= $_POST[ id ] AND pw= $_POST[ pw ] Internet

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

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

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

PowerPoint Presentation

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

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

Microsoft PowerPoint - 18-DataSource.ppt

Microsoft PowerPoint - 18-DataSource.ppt 18 장 : JDBC DataSource DataSource JDBC 2.0의 javax.sql 패키지에포함되어도입됨 DataSource 인터페이스는데이터베이스커넥션을만들거나사용하는데좀더유연한아키텍처를제공하기위해도입됨 DataSource를이용할경우, 클라이언트코드는한줄도바꾸지않고서도다른데이터베이스에접속할수있도록해줌 즉 DataSource 는커넥션상세사항들을캡슐화

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information