sitelink1  
sitelink2  
sitelink3  
extra_vars6  
http://wiki.javajigi.net/pages/viewpage.action?pageId=280

오픈 소스 스터디 Spring 1차

Table of Contents

Introduction

Struts 프레임워크가 오픈 소스임에도 불구하고 전세계적으로 널리 사용되고 있다. Struts 프레임워크는 애플리케이션 개발에서 UI 레이어만을 담당한다. 그외 비지니스 Layer, Persistence Layer등을 담당할 프레임워크에 대한 요구를 충족시키는 것이 Spring이라는 프레임워크이다. Spring은 애플리케이션 개발에 있어 모든 영역을 지원하고 있다. Struts의 파급효과에 비해 Spring의 파급효과는 크다하지 않을 수 없다.

Spring 프레임워크가 어떠한 역할을 하는지를 이해하기 위해서 먼저 Introduction to the Spring Framework 문서를 읽어본다. 번역 문서는 http://openframework.or.kr/JSPWiki/Wiki.jsp?page=IntroducingtheSpringFramework12에서 찾을 수 있다. 이 문서를 통하여 Spring 프레임워크가 어떠한 역할을 하는지에 대하여 좀 더 깊이 있게 이해할 수 있다. 이 문서를 통하여 Spring 프레임워크가 무엇을 하는 놈인지 먼저 이해하는 것이 중요하다.

Spring 프레임워크의 기본 아키텍처는 다음과 같다.

 

Spring 프레임워크는 위 그림에서 볼 수 있는 것과 같이 7개의 큰 부분으로 구성되어 있다.

Spring Core는 Spring 프레임워크의 근간이 되는 IoC(또는 DI) 기능을 지원하는 영역을 담당하고 있다. BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.

Spring Context는 Spring Core 바로 위에 있으면서 Spring Core에서 지원하는 기능외에 추가적인 기능들과 좀 더 쉬운 개발이 가능하도록 지원하고 있다. 또한 JNDI, EJB등을 위한 Adaptor들을 포함하고 있다.

Spring DAO는 지금까지 우리들이 일반적으로 많이 사용해왔던 JDBC 기반하의 DAO개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 지원하고 있다. Spring DAO를 이용할 경우 지금까지 개발하던 DAO보다 적은 코드와 쉬운 방법으로 DAO를 개발하는 것이 가능하다.

Spring ORM은 Object Relation Mapping 프레임워크인 Hibernate, IBatis, JDO와의 결합을 지원하기 위한 기능이다. Spring ORM을 이용할 경우 Hibernate, IBatis, JDO 프레임워크와 쉽게 통합하는 것이 가능하다.

Spring AOP는 Spring 프레임워크에 Aspect Oriented Programming을 지원하는 기능이다. 이 기능은 AOP Alliance 기반하에서 개발되었다.

Spring Web은 Web Application 개발에 필요한 Web Application Context와 Multipart Request등의 기능을 지원한다. 또한 Struts, Webwork와 같은 프레임워크의 통합을 지원하는 부분을 담당한다.

Spring Web MVC는 Spring 프레임워크에서 독립적으로 Web UI Layer에 Model-View-Controller를 지원하기 위한 기능이다. 지금까지 Struts, Webwork가 담당했던 기능들을 Spring Web MVC를 이용하여 대체하는 것이 가능하다.

Spring은 한번의 스터디로 모두 커버하기에는 너무나 방대한 기능들을 포함하고 있다. 따라서 이번 스터디에서는 Spring 프레임워크의 중심이라고 할 수 있는 Spring Core, Context, AOP, DAO등에 대하여 살펴보도록 하겠다. 그 외의 다른 영역은 다음 스터디에서 진행할 예정이다.

이번 스터디에서 이해해야 할 부분

  • IoC 컨테이너의 개념.
  • AOP의 개념.
  • Spring 내에서 IoC와 AOP가 어떻게 활용되고 있는지..
  • Spring Core Architecture
  • Spring DAO와 Transaction 처리
  • Spring 프레임워크의 테스트 전략

Spring Core API 및 IoC

Spring Core API 및 IoC에 대해서는 Spring Core API 및 IoC-DI 문서에서 별도로 다루도록 하겠다.

Spring AOP

! AOP란 무엇인가?

  • Aspect-Oriented Programming in Java 문서를 통하여 AOP에 대한 기본적인 개념을 이해한다.
  • [AOP:AOP]가 무엇인지에 대하여 개념적으로 이해한다. 스터디에 참가하기 전에 AOP가 무엇인지 고민만 많이 하고 오면 됩니다. 단지 문서들을 보시고 대충 감만 잡고 오시면 됩니다.
  • Aspect와 Concerns가 무엇인지 이해한다.
  • AOP가 실무 프로젝트에서 어떻게 활용되었을 때 유용한지를 논의한다.

AOP 개념을 이해하기 위하여 다음 문서를 꼭 읽어보시기 바랍니다.

위 문서 보시면서 AspectJ에 대해서는 뭐 별다르게 볼 필요는 없습니다. Part 1. Separate software concerns with aspect-oriented programming를 집중적으로 보셔서 AOP가 뭐하는 놈인지만 이해하시기 바랍니다. 이 문서에서 가장 핵심이 되는 내용을 그림을 통해서 살펴보도록 하겠습니다.


위 그림은 AOP로 개발하지 않았을 때의 일반적인 현상입니다. 현재까지 대부분의 프로젝트에서 발생하는 것으로 비지니스 로직을 고민할 코드에서 Persitence(Transaction), Security, Logging등을 모두 고민해야 합니다. 소스코드 또한 이러한 Concern들을 동시에 해결할 수 있도록 구현합니다.

 


이와 같은 개발환경하에서 AOP의 의도는 각 Concern들을 찾아 분리한 다음 별도의 코드에서 구현하자는 것입니다. 위 그림처럼 Concern Identifier과정을 거쳐 Concern들을 분리한 다음 각 기능들을 별도로 구현합니다. 이와 같인 Concern들을 별도로 구현한 것을 하나의 Aspect라고 합니다.

 


이렇게 별도로 구현되어 있는 Aspect들이 최종적으로는 핵심 비지니스 로직과 결합하여 작동해야 합니다. 위 그림에서 보는 바와 같이 각 Concern별로 구현되어 있는 것을 Weaving 작업을 통하여 핵심 비지니스 로직에 통합하여 실행하는 방법입니다.

 

AOP 용어정리

*Cross-cutting concerns : Cross-cutting concerns에 대하여 이야기하기 전에 Concern이 무엇인지를 먼저 이해해야 한다. Concern을 우리말로 번역해 보면 "관계,관심,걱정,염려"로 풀이할 수 있다. 관심이 가는 것, 걱정해야 할 것..도대체 무엇을 말하는 것일까? 한참을 고민하다 나는 다음과 같이 결론을 내렸다. 우리들이 애플리케이션이 개발하기 위하여 관심을 가지고 구현해야하는 각각의 기능들을 하나의 Concern이다. Concern에는 해당 애플리케이션에서 필요로하는 비지니스 로직도 될 수 있으며, Logging, Transaction 처리, Security등 각각이 하나의 Concern이다.
그렇다면 Cross-cutting concerns이란? Cross가 나오는거 보니까 여러 기능들에 관여하는 Concern인가보다. Cross-cutting concerns이란 하나의 영역에서만의 고유한 Concern이 아니라 여러군데에서 공통적으로 관여하는 Concern인가보다. 그렇다면 어떤 Concern들이 여기에 속할 수 있을까? 앞의 Concern 종류를 보면 고유 비지니스 로직은 각 모듈과 클래스마다 다를 것이 분명하기 때문에 이건 아닐거 같다. 그럼 Logging, Transaction 처리, Security등은 어떨까? 이런 놈들은 애플리케이션 전체 영역에서 공통적으로 사용되는 Concern이다. 그러므로 이 같은 놈들을 Cross-cutting concerns이 될 수 있겠다라는 생각이다. 즉, 애플리케이션 개발에서 여러 영역에 같은 방식으로 관여하는 Concern을 Cross-cutting concerns이라고 잠정적인 결론을 내렸다.

  • Advice : Logging과 같은 Cross-cutting concerns의 경우 거의 모든 클래스에 분산되어 있는 것을 볼 수 있다. 이와 같은 Cross-cutting concerns을 여러 영역에 분산해 구현하는 것이 아니라 한 곳에 모아서 구현하는 것을 Advice라고 한다. 즉, 일정한 패턴을 가지는 클래스의 특정 method에는 해당 Logging을 출력하라는 구현부분을 가지는 것을 Advice라고 한다.
  • JoinPoint : 메소드 호출이나 특정 예외를 던지는 것과 프로그램이 실행되는 지점을 이야기한다.
  • Point-cut : Cross-cutting concerns에 해당하는 기능을 구현한 부분이 Advice라고 했다. 그렇다면 이렇게 구현되어 있는 Advice를 어떤 패턴을 가지는 클래스와 메써드에 적용할지를 결정하는 것이 Point-cut이다. 즉 해당 Advice가 적용되어야 하는 곳을 가리키는 것이 Point-Cut이다. 즉, JoinPoint의 모음이 Point-Cut이다.
  • Aspect : Aspect는 Advice와 Point-Cut을 합쳐서 하나의 Aspect라고 칭한다. Advice와 Point-Cut을 이용하여 Logging이라는 Concern을 분리하여 독립적으로 구현할 수 있었다. 이처럼 Advice와 Point-Cut을 이용하여 원하는 Concern을 구현하는 것을 하나의 Aspect라고 한다. 지금까지 살펴본 Logging은 Logging Aspect가 될 것이다.
  • Introduction : 실행되고 있는 클래스에 새로운 인터페이스를 추가하여 원래의 Object가 가지고 있는 속성, 행위이외의 다른 일이 가능하도록 하게 된다.

Spring AOP의 Advice는 여러개의 Advice를 가진다. Spring에서 지원하고 있는 Advice는 다음과 같다.

  • Around advice : 메소드 호출과 같은 joinpoint주위(surround)의 advice. 이것은 가장 강력한 종류의 advice이다. Around advice는 메소드 호출 전후에 사용자 지정 행위를 수행한다. 그것들은 joinpoint를 처리하거나 자기 자신의 반환값을 반환함으로써 짧게 수행하거나 예외를 던지는 것인지에 대해 책임을 진다.
  • Before advice : joinpoint전에 수행되는 advice. 하지만 joinpoint를 위한 수행 흐름 처리(execution flow proceeding)를 막기위한 능력(만약 예외를 던지지 않는다면)을 가지지는 않는다.
  • Throws advice : 메소드가 예외를 던질다면 수행될 advice. Spring은 강력한 타입의 Throws advice를 제공한다. 그래서 당신은 Throwable 나 Exception으로 부터 형변환 할 필요가 없는 관심가는 예외(그리고 하위클래스)를 잡는 코드를 쓸수 있다.
  • After returning advice : joinpoint이 일반적으로 예를 들어 메소드가 예외를 던지는것없이 반환된다면 완성된 후에 수행되는 advice.

AOP에 대한 개념은 처음 접하는 개발자들에게 다소 어렵게 느껴질 수 있다. 앞에서 살펴본 용어 또한 생소한 개념이기 때문에 도대체 무슨 말을 하는지 이해하기 힘들 수도 있다. 그러나 너무 걱정하지 마라. 앞으로 살펴볼 Spring AOP의 예제를 본다면 지금까지 이야기한 내용이 무엇인지 쉽게 이해할 수 있을 것이다.

Spring AOP

Spring AOP를 이해하기 위해서는 먼저 J2SE 1.3부터 지원하고 있는 Java Dynamic Proxy에 대하여 이해하고 있어야 한다. Spring AOP가 이 기반하에서 구현되어 있기 때문이다. Dynamic Proxy에 대해서는 자바의 Dynamic Proxies문서를 참고하기 바란다. Dynamic Proxies에 대한 개념이 있으면 Spring AOP를 이해하는데 그리 어렵지 않을 것이다.

Spring AOP에 관한 예제가 너무 많아서 다음과 같이 나누어서 설명하도록 하겠다.

다음에 나오는 예제는 Pro Spring 책에서 다룬 AOP 예제를 사용하여 설명하고 있다.

  • Hello World in AOP : 초간단 HelloWorld AOP 예제. 이 예제를 통하여 Around Advice를 어떻게 구현할 수 있는지 알 수 있다.

Spring DAO와 Transaction처리

Spring JDBC와 Transaction처리 : 지금까지 우리들이 JDBC 기반하에서 개발하던 방식과 Spring JDBC 기반하에서 개발할 경우의 차이점을 분석해본다. 또한 Spring 프레임워크 기반하에서의 Transaction 처리 방법에 대하여 살펴보도록 하겠다.

참고 문서

JDBC Development with the Spring Framework : Spring Framework하에서 JDBC를 이용하여 개발할 수 있는 방법에 대하여 상세하게 설명하고 있다.

Spring 프레임워크의 테스트 전략

OSP:권한 관리 프로젝트 예제를 보면서 설명하도록 한다.

참고문헌


번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
23 Spring프레임워크 소개문서 (2) 황제낙엽 2007.03.22 123
22 Spring프레임워크 소개문서 (1) 황제낙엽 2007.03.22 107
21 Cugain의 샘플프로젝트 jpetstore 분석기 - (1) jpetstore 설치 file 황제낙엽 2007.02.22 123
20 Cugain의 샘플프로젝트 jpetstore 분석기 - (7) PetStoreImpl.java 황제낙엽 2007.05.24 51
19 Cugain의 샘플프로젝트 jpetstore 분석기 - (6) petstore-servlet.xml 분석 황제낙엽 2007.04.27 19
18 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 232
17 Cugain의 샘플프로젝트 jpetstore 분석기 - (4) dataAccessContext-jta.xml 분석 황제낙엽 2007.04.21 27
16 Cugain의 샘플프로젝트 jpetstore 분석기 - (3) dataAccessContext-local.xml 분석 황제낙엽 2007.04.21 40
15 Cugain의 샘플프로젝트 jpetstore 분석기 - (2) web.xml 분석 황제낙엽 2007.03.20 92
14 IoC (Inversion of Control) 컨테이너에 대한 정리 황제낙엽 2007.02.21 50
13 자바지기 1차 오픈 소스 스터디 문서모음 file 황제낙엽 2007.01.30 46
» Spring 프레임워크를 이용한 효율적인 개발 전략 1차 황제낙엽 2007.01.30 47
11 Spring framework jpetstore 샘플 분석기 - (6) jpetstore 예제로 살펴보는 Spring MVC와 iBatis 연동 황제낙엽 2007.01.18 48
10 Spring framework jpetstore 샘플 분석기 - (5) jpetstore 에서의 InternalResourceViewResolver 황제낙엽 2007.01.18 17
9 Spring framework jpetstore 샘플 분석기 - (4) jpetstore 에서의 HandlerMapping 황제낙엽 2007.01.18 36
8 Spring framework jpetstore 샘플 분석기 - (3) jpetstore 에서의 Spring MVC 설정 황제낙엽 2007.01.18 13
7 Spring framework jpetstore 샘플 분석기 - (2) jpetstore 에서의 Spring 초기 설정과 IoC 황제낙엽 2007.01.18 18
6 Spring framework jpetstore 샘플 분석기 - (1) jpetstore 설치하기 황제낙엽 2007.01.18 30
5 Spring WebFlow Introduction (웹개발을 직관적으로) 황제낙엽 2006.12.09 555
4 IoC(Inversion of Control)란 무엇인가? 황제낙엽 2006.12.09 93