들어가며

IoC/DI, 제어의 역전

오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델

  • 유연성, 확장성이 뛰어난 코드를 만들게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있다.
  • 스프링은 IoC/DI 를 프레임워크의 근간으로 삼고 있다.
  • 말그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아닌 외부에서 결정되는 것을 의미한다.
    • 즉, 스프링 컨테이너가 필요에 따라 개발자 대신 Bean들을 제어 해주는 행위이다.
  • 스프링이 직접 제공하는 모든 기술과 API, 컨테이너는 IoC/DI 방식으로 작성되어있다.

서비스 추상화

구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법

  • 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들도록 한다.

AOP

애플리케이션 코드에 산재해 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델

  • 스프링은 AOP 를 이용해서 다양한 엔터프라이즈 서비스를 적용하고도 깔끔한 코드를 유지하도록 한다.



1장 초난감 DAO 코드에 DI 를 적용해나가는 과정으로 확장과 변경에 용이하게 대응하도록 개선

개방 폐쇄 원칙 OCP

  • 변화의 특성이 다른 부분을 구분해주고 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어주는 원칙
  • 기능이 다양해지고 확장하려는 성질
  • 고정되고 변하지 않으려는 성질

템플릿

바뀌는 성질이 다른 코드 중에서

  • 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분
  • 자유롭게 변경되는 성질을 가진 부분으로부터 독립
    ⇒ 효과적으로 활용할 수 있도록 하는 방법
  • 스프링에 적용된 템플릿 기법
  • 완성도 있는 DAO 코드를 만드는 방법

지금까지 만든 DAO 에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술들을 추상화하고, 일관된 방법으로 사용할 수 있도록 지원하는지 살펴보자

서비스 추상화를 통해 근본적인 문제를 해결했던 트랜잭션 경계 설정 기능을 AOP 를 이용해 더 깔끔하고 세련되게 바꿔보자.




full verions - notion