일단 본론에 들어가기 전에 MVC에 대해서는 다 알꺼라 생각한다. 몇줄만 적어보면

MVC는 Model, View, Controller의 약자로 예전의 UI, DB처리, 비즈니스 로직을 하나의 클래스나 파일에서 처리하던 것을 분리하는 것을 말한다.

간단하게 몇줄만 적었다. ㅋㅋ
그럼 Spring MVC 프레임웍에서 어떻게 사용자 요청이 처리되는지 알아보자.

1. 사용자의 요청이 오면 DispatcherServlet이라는 것이 받는다. 얘를 앞단 중계자라는 의미로 Front Controller라고 부른다.
2. 받은 것을 뭔가 매핑이 되어 있는 곳에서 적절한걸 찾아서 다른 곳으로 전달한다. 이 것을 핸들러라고 한다.
3. 전달 받은 데이터를 기반으로 DB에서 데이터를 얻어온 다음에 ModelAndView라는 객체에 저장해서 넘긴다고 한다.
4. 그 다음 DispatcherServlet이라는 놈에서 화면에 보여줄 View 와 Model 정보를 View Resolver라는 것을 통해서 View를 결정한다.
5. 해당 View에 데이터를 넘기고, View에서는 화면을 처리한 결과를 DispatcherServlet으로 넘긴다.
6. 마지막으로 화면으로 보내준다.

이 내용을 그림으로 표현한 것이 바로 아래 링크에 있다.
http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html
마우스 스크롤이 어떻게 되어 있느냐에 따라서 다르겠지만, 한 3번 정도 스크롤하면 볼 수 있다. ^^;

자세한 구현 방법은 다음 글에 올리도록 하겠다.

Posted by tuning-java
,
먼저 아래의 간단한 소스를 읽어 보자.

package proxytest;
public interface ITempLogic {
 public String greet();
}
----------
package proxytest;
public class TempLogicImpl implements ITempLogic {
 public String greet() {
  return "Hi";
 }
}
----------
package proxytest;
public class TempLogicProxy implements ITempLogic {
 private ITempLogic itl=null;
 public TempLogicProxy(ITempLogic l) {
  itl=l;
 }
 public String greet() {
  System.out.println("before");
  String r=itl.greet();
  System.out.println("after");
  return r;
 }
 public static void main(String args[]) {
  ITempLogic l=new TempLogicProxy(new TempLogicImpl());
  System.out.println(l.greet());
 }
}
----------
 간단하게 소스에 대해서 설명을 하자면,
 ITempLogic이라는 인터페이스를 하나 만들고,
 해당 인터페이스를 구현한 TempLogicImpl 이라는 클래스를 하나 만들었다.
 구현된 TempLogicImpl 이라는 클래스를 감싸주는 TempLogicProxy라는 클래스를 만들어 주어서 그 클래스에서 TempLogicImpl을 대행하여 수행해준다.

Posted by tuning-java
,

AOP : Aspect Oriented Programming

관점지향 프로그래밍이다. 어플리케이션을 OOP 관점으로 모듈화하여 작성해도 다른 모듈에서 발생하는 횡단 관심을 해결하기 위한 방법이다.

횡단 관심 : 로깅 보안, 트랜젝션등 부가 기능을 의미하며,
기존의 프로그램을 최대한 수정하지 않고 원하는 부가기능을 처리하고자 하는것이다.

AOP로 구현시 핵심 모듈을 건들지 않기 때문에 재사용성과 유지보수성이 쉬워진다.

여기서 AOP의 단점은 성능에 영향을 준다는 것이다.

참고로 횡단 관심을 해결하기 위한 시점은 다음과 같다.

  1. 메소드 호출 이전 시점
  2. Exception이 발생된 시점
  3. 메소드 호출 이후 시점

여기서 시점을 point cut 이라고 하고, 포인트 컷에서 해야하는 동작을 Advice라고 한다.
point cut과 advice를 모아놓은 것을 Aspect 라고 한다.

advice의 종류

  • around advice : org.aopalliance.intercept.MethodInterceptor - 메소드 수행 전후, Exception을 모두 처리할 수 있다.
  • before advice : org.springframework.aop.MethodBeforeAdvice - 메소드 수행전 작업을 처리할 수 있다.
  • after advice : org.springframework.aop.AfterReturningAdvice - 메소드 수행후 작업을 처리할 수 있다.
  • throws advice : org.springframework.aop.ThrowsAdvice - Exception 발생시 작업을 처리할 수 있다.


결론적으로 AOP를 사용하게되면,
원하는 proxy 기반의 interceptor 를 XML 기반으로 지정할 수 있게 되고,
XML에 지정된 bean을 사용하도록 소스를 변경해 주면 proxy에서 처리하는 부분을 사용할 수 있다.

참고로 Spring 에서는 이러한 Aspect를 Java로 구현하기 위해서 다음과 같은 방법을 사용한다.
방법 1 : 스키마 기반의 구현
방법 2 : Anotation을 이용한 구현

Posted by tuning-java
,

IoC는 Inversion of Control 의 약자이다.
이는 프레임웍에서 클래스의 객체를 관리하는 구조라고 생각하면 된다.

IoC의 구현 방법은 DL과 DI 두가지가 있다.
DL : Dependency Lookup
DI : Dependencty Injection

DL은 JNDI를 이용하여 Lookup 하는 방식을 말하고, DI는 각 오브젝트에서 의존적인 resource나 collaborator에 대한 책임을 갖지 않고 컨테이너가 그 일을 담당하도록 하는 것이다.

DI는 다음과 같이 두가지로 나뉜다.
Setter Injection
Constructor Injection

Setter Injection은 JavaBeans의 Property 구조를 이용하며, 주로 이 방법을 사용한다. 두가지 중 어떤 방법을 사용할 지에 대해서는 개인의 취향을 따르거나, 프로젝트의 표준을 따라야 한다.


Posted by tuning-java
,
여기에 있는 내용은 제가 교육 받으면서 필요한 부분에 대해서 정리를 해 놓은 것 입니다.
굉장히 심도가 얕기 때문에, 자세한 내용은 책을 활용하셔야 겠지요?


Spring Framework (스프링 프레임웍) 이란건 대체 무엇일까?

스프링 프레임웍을 한마디로 표현하자면
EJB 기반으로 개발을 하지 않고 POJO(Plain Old Java Object) 기반으로 개발을 하더라도 가볍고, 제어가 가능한 상호 관련이 적은, AOP (Aspect Oriented Programming. 관점지향 프로그래밍)을 지원하고, 컨테이너를 통해 라이프사이클을 관리하고, XML 기반으로 컴포넌트를 개발할 수 있도록 지원해주는 프레임웍이라고 할 수 있다.

(한마디로 표현하자니까 이해하기도 어려울 듯 하고, 열나 길다 - -;)

스프링 프레임웍은 다음과 같은 7개의 모듈로 되어 있다.
Spring Core
Spring Context
Spring DAO
Spring ORM
Spring AOP
Spring Web
Spring Web MVC

Core : DI 라는 Dependency Injection 기능을 제공한다.
Context : 컨텍스트라는 정보를 제공하는 설정을 관리한다. JNDI, EJB, 국제화, 스케줄링이 여기에 포함된다.
DAO : DB와 관련된 JDBC 코딩 부분을 처리해 주기 위한 JDBC 추상화 레이어를 제공한다.
ORM : JDO, Hibernate, iBATIS 등 O-R Mapping API를 위한 레이어를 제공한다.
AOP : 관점지향 프로그래밍을 제공한다.
Web : 웹 기반의 여러가지 기능을 제공한다.
Web MVC : Model과 View(Web form) 사이의 구분을 제공하기 위한 관련된 기능을 제공한다.

이제 스프링 프레임웍이 어떻게 되었는지 간단히 알아보았으니,
다음에는 IoC 컨테이너 부터 천천히 알아보자.
Posted by tuning-java
,
윤 머시기 강사가 이야기한

Spring Framework 가 만들어진 이유

Proxy의 불편함 => AOP 의 사용
JDBC의 불편함 => Spring JDBC
Web 프로그래밍의 불편함 => Spring MVC

기타 등등의 지금까지 Java 기반의 프로젝트를 하면서 불편한 점에 대해서
보완을 하기 위해서 만들어 졌다고 한다.
Posted by tuning-java
,