스프링 프레임워크 핵심

핵심기술

POJO [1]

  • Plain Old Java Object

  • 객체지향 프로그래밍 기법과 언어가 주는 장점인 유연한 설계와 재사용성 활용하여 비즈니스의 복잡성과 변화를 상대함.
  • 객체지향 설계(OOD, Object Oriented Design) 및 객체지향 프로그래밍(OOP, Object Oriented Programming) 원칙을 참고할 것.

IoC / DI

  • 제어의 역전(IoC) [2]
    • Inversion Of Control
    • 컴퓨터 프로그램의 사용자 지정 부분(프로그래머가 작성한 소스코드)이 프레임워크의 흐름제어를 받는 디자인 패턴임.
    • 프레임워크의 일반적인 속성임. 
    • 헐리우드 법칙
  • 의존성 주입(DI) [3]
    • Dependency Injection
    • IoC 구현을 통해 의존관계 해결을 위한 디자인 패턴임. [4]
    • 테스트 하기 용이한 구조를 유도할 수 있음.

    • 스프링은 xml 설정이나 애노테이션을 통해 의존성 주입을 쉽게 할 수 있는 방법을 제공함.

배경

"문제는 통제의 어떤 측면이 반전되고 있는가?"입니다. Martin Fowler는 2004 년 자신의 사이트에서 IoC(Inversion of Control)에 관한이 질문을 제기했습니다. Fowler는 원리를 더 자명하게하기 위해 이름 바꾸기를 제안하고 의존성 주입(Dependency Injection)을 제안했습니다. [5]

AOP

  • Aspect Oriented Programming
  • 모듈성을 높일 목적으로 서로 다른 관심사를 분리(separation of cross-cutting concerns)하는 프로그래밍 패러다임. [6]
  • 성격이 다른 로직(업무 로직과 업무 로직 외 공통적인 부분)이 함께 있는 경우 이를 분리해서 처리해야 복잡성을 해결할 수 있음.
  • 로깅, 보안, 트랜잭션 등이 있음.

PSA

  • Potable Service Abstraction
  • 개발환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근하게 해주는 기능
  • 서비스 추상화를 통해서 로우 레벨의 기술 구현 부분과 기술을 사용하는 인터페이스를 분리하고, 환경과 세부 기술에 독립적인 접근 인터페이스를 제공하면 기술적인 복잡함을 줄일 수 있음.

 


[1] ^ https://www.martinfowler.com/bliki/POJO.html

[2] ^ https://en.wikipedia.org/wiki/Inversion_of_control

[3] ^ https://en.wikipedia.org/wiki/Dependency_injection

[4] ^ https://www.martinfowler.com/articles/injection.html#InversionOfControl

[5] ^ http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html#overview-dependency-injection

[6] ^ https://en.wikipedia.org/wiki/Aspect-oriented_programming