Framework/spring

Spring 1# - "스프링 소개"

jeeyong 2008. 3. 8. 17:40
얼마전에 Spring in Action 이라는 책을 구입했다.

좋은 책 한권은 좋은 스승을 곁에 둔것과 같다.
예전에도 느꼈던 것이지만 정말 맞는 말이다. Spring 이란 무엇인가? 라는 의문을 가지고 접근했기 때문에  추리소설을 읽듯 긴장감있게 읽을 수 있었다.

이런 좋은 정보는 나누어 공유하는 것이 옳다고 생각하기에 내가 나름 읽고 느낀점을 통해 좀더 쉽게 다른 사람들에게 Spring을 알려주자는 취지에서 작성한다.

긴잡글은 그만두고 바로 본론으로 들어간다.

Spring? AOP? IoC?
스프링 프레임워크를 공부하면서 제일 많이 보는 단어가 아닐까? 생각된다. AOP(관점지향프로그래밍), IoC(역제어) 생소한 단어들에 많이 혼동되고 어렵게 느껴질 것이다. 그러나 어려울거없다. 알고나면 이런거야? 하고 쉽다는거~

 AOP(Aspect Oriented Programing, 관점지향 프로그래밍)
이것이 스프링에서 어떻게 쓰이느냐! 그건 한 예로 "선언적 트랜잭션"을 하기 위한 기술?기능? 으로서 쓰인다.
(백번 이론적인 설명을 하는것 보다 한가지 예가 더 효과적이다.)

그럼 "선언적 트랜잭션"이란?
이 기술때문에 EJB에서도 쓰이는 기술로 Spring 프레임워크가 EJB의 기술을 좀더 편하게 사용하기 위해 만들어진 프레임워크인 만큼 사용기술에 있어서는 EJB와 비슷한 점이 많다. 그구현이 EJB와 다를뿐이지....

트랜잭션을 적용하기 위한 소스
UserTransaction transaction = null;
try{
  transaction = ... {트랜잭션 취득 했다고 치고}

  transaction.begin();

  ... 비지니스 로직 수행 ...

 transaction.commit();
} catch (Exceptione e){
  if (transaction != null) transaction.rollback();
}

위의 같은 경우 모든 비지니스로직이 들어가는 코드에 commit()이나 rollback()을 해주기 위한 코드를 작성해야 하지만 스프링 프레임워크를 사용하거나 EJB를 사용하게 되면 "트랜잭션을 생성하고 transaction.begin();, transaction.commit(), transaction.rollback() 메소드를 소스에 넣어주지 않아도 컨테이너가 알아서 관리 해준다는 의미이다.

사실 좀더 디테일하게 트랜잭션을 수행하기 위해 비지니스로직 소스에 직접 savepoint도 찍고 commit이나 rollback을 넣어주는것이 편리할수도 있겠지만 프로젝트를 수행하게 되면 모든 비지니스 로직이 그렇게 복잡한 트랜잭션 처리를 원하는 것이 아니다. 그리고 관리해야하는 객체량도 장난이 아닐테니.. "선언적 트랜잭션"은 큰 프로젝트에 필요한 기술일 것이다.

그럼 어떻게 해서 단순히 비지니스 로직만 가지고 있는 메소드를 Spring 컨테이너는 어떻게 모니터링해서 호출될때마다 트랜잭션을 걸어주느냐!? 거의 모든 프레임워크가 그렇지만 XML 설정을 통해서 이다.

Spring 컨테이너는 어플리케이션이 실행되면 Spring관련 XML를 로딩하는데 XML문서안에 Beans나, 트랜잭션을 수행할 설정, 보안설정등(만약 그런 설정이 필요에 의해 작성했다면)을 작성해 놨기 때문에 Spring 컨테이너는 등록된 bean 이 호출 되었는지를 알 수 있는 것이다.

작성중...( 궁금하신 사항이나 잘못된 정보는 리플을 통해 알려주세요.)