Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- OOP
- ddd
- Exception
- Spring Data Redis
- Transaction
- Generic
- bounded context
- reflection
- 서명
- *
- Java
- mockito
- rest api
- bytecode
- di
- Rest
- spring
- IOC
- MSA
- PSA
- JWT
- jvm
- SOA
- JSON
- redis
- AOP
- junit5
Archives
- Today
- Total
개발자일기
Spring의 핵심 및 기술 본문
스프링의 핵심 : 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사용한다고 한다.
사용 예시
- DB 트랜잭션
- Spring Jpa Data
- dynamic proxy : https://www.baeldung.com/java-dynamic-proxies
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