Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자일기

Spring의 핵심 및 기술 본문

개발

Spring의 핵심 및 기술

ka0oll 2020. 3. 21. 15:43

스프링의 핵심 : POJO

스프링의 목적은 무엇일까? 자바 엔터프라이즈 어플리케이션을 쉽게 개발할수 있도록 한것이다.  그 목적을 위해서 POJO가 핵심이 되는 것이다.

POJO란

  • plain old java object의 약자
  • 간단한 자바 오프젝트를 의미하는데, JAVA EE의 무겁고 복잡한 프레임워크를 대항하기 위한 용어이다.

POJO 프로그래밍?

  • 특정 기술이나 환경에 의존적이지 않는 Object
    • 다른 기술, 환경에서도 동작할수 있도록 확장성 지원
    • 표준 스펙을 가진 인터페이스 
      • 하이버네이트를 사용하기 위해서 직접 하이버네이트에 의존하지 않고, 스프링의 JPA같은 표준인터페이스를 가진 POJO프레임워크를 제공
  • POJO는 추상화가 잘되어있기 때문에 테스트가 쉽고, 객체지향인 설계를 제공해 확장성을 높여주고, 추상화, 캡슐화를 제공하는것이다.
  • 결국 쉽고 간단한 객체들을(POJO) 지원함으로써 엔터프라이즈 어플리케이션을 빠르게 개발할수 있도록 하는것이다.

 

스프링의 POJO를 제공하는 핵싱 요소

IOC/DI, AOP, PSA

  • 사실 스프링에서만 적용된 개념이 아닌, 객체지향적인 설계가 잘 적용한다면 자연스럽게 만들어진 것이다.

IOC/DI(Inversion of control/Dependency Injection )

IOC가 뭐지? 클라이언트(개발자, 객체)가 직접 사용할 객체를 생성하고 선택한다. 하지만 이런 제어권을 자기가 아닌 다른 대상에게 넘기는 것을 의미한다.

  • 예를 들어 서블릿개발시에 main과 같은 메소드를 호출해서 실행하는것도 아닌, 서블릿 클래스를 제공하면 웝컨테이너가 직접 관리하고 실행시켜준다. 제어권이 웹컨테이너에게 있는것이다.

스프링은 ioc컨테이너라고 불린다.

  • 객체에 대한 제어권 을 스프링 컨테이너에 넘겨, 스프링이 직접 객체를 제어한다.
  • 어떠한 제어? => 예를 들어 bean들을 만들어 냄으로써, 싱글톤으로 패턴, DI, 트랜잭션(aop)와 같은 기능들을 제공 할수 있다.

DI(Depency Injection)

  • 객체의 의존성을 직접 주입받는것이다.
  • 외부에서 주입받음으로써 쉽게 의존성이 변경될수 있고, 인터페이스화 함으로써 특정 모듈에 의존하지 않도록 확장성을 제공해준다.

AOP(Aspect Oriented Programming)

Aspect(관점)이 뭐냐? : 트랜잭션과 같이 부가 기능을 관점이라고 표현한다. 핵심(비지니스)기능과 부가기능들을 별로도 분리해서 모듈화 하고 사용하는 방식을 관점지향 프로그램이라고 부른다.

OOP랑 다른것인가? : OOP와 다른것이라고 생각들지만, 결국 OOP를 돕는 보조적인 기술이다. 부가기능들을 핵심기능에 자꾸 침투하면 객체지향적으로 핵심기능에 집중해서 개발하기 어려워지는데, 부가기능을 별도의 모듈로 분리해서, 핵심기능(객체지향)에 집중할수있도록 돕는다.

프록시 패턴을 이용해서 구현한다

  • 프록시 패턴이란 실제 타켓(실구현체가)가 있고, 가짜 객체로 wrapping하여 로직의 흐름을 제어하거나 하는 부가기능 작업을 하는것이다.

AOP구현 방법:

  • DynamicProxy : java reflection에서 제공하는 라이브러리로써, 실제 상속받은 프록시 객체를 만들어낸다. 인터페이스가 있어야 사용가능하다.
  • cglib: 스프링에서 쓰는 라이브러리로써 일반 클래스도 프록시 객체를 생성할수있다.
    • Spring은 ProxyFactory 클래스를 제공 : 내부적으론 cglib사용한다고 한다.

사용 예시

 

Dynamic Proxies in Java | Baeldung

Learn how to use Java's dynamic proxies - one of the primary proxy mechanisms available in the language.

www.baeldung.com

PSA(Portable Service Abstraction)

PSA란?? 환경과 기술의 변화에 상관없이 일관된 방식으로 기술을 사용(접근)할 수 있게 해주는 추상화

  • POJO의 원칙에 부합되는 개념이다.
  • 스프링은 JAVA의 복잡한 라이브러리들을 추상화 시켜 편리하게 사용하도록 해준다.
  • @Transaction, @Cacheable과 같은 인터페이스를 제공해서 내부 구현체를 추상화하고 쉽게 사용가능하도록 해준다.

'개발' 카테고리의 다른 글

Spring mvc NIO + webflux  (0) 2020.03.24
Mockito를 이용한 Unit테스트 Mocking  (0) 2020.03.22
도커를 이용한 테스트  (0) 2020.03.21
JUnit5을 이용한 단위테스트  (0) 2020.03.21
MSA 마이크로아키텍처 알아보자(1)  (1) 2020.03.21
Comments