- POJOs를 기반으로 한 경량개발
- 객체 간 느슨한 결합을 위한 의존성 주입
- AOP(관점지향프로그래밍)을 기반으로 한 선언적 프로그래밍
- 표준 자바코드 최소화
=> "Java Enterprise 개발 단순화"
참고
https://needjarvis.tistory.com/585
https://velog.io/@galaxy/Spring의-기본-특징-POJO
의존성 주입은 객체간의 결합을 느슨하게 해준다.
느슨한 결합은 다음과 같은 장점이 있는데,
출처: https://mangkyu.tistory.com/150 [MangKyu's Diary]
(Aspect Oriented Programming, 관점지향 프로그래밍)
기존의 단순 OOP에서는 계좌이체, 입출금, 이자계산의 서비스가 각각의 OOP로 프로그래밍 되었고, 각각의 OOP 모두 기능 작동을 위해 로깅, 보안, 트랜잭션을 하는 코드가 구현되어있었다.
그런데 계좌이체, 입출금, 이자계산 비즈니스 모두가 공통적으로 갖는 로직이 있는 것을 알 수 있다. 그렇다면 이것을 각각의 OOP 소스코드에서 제거하고 외부로 빼내 하나의 공통 모듈로 만들 수 있다. 이것이 바로 기존의 OOP에 AOP 관점을 더해 발전시킨 기법이다.
Core Concern(핵심 관심)
: 각 서비스의 핵심 비즈니스 로직. i.e. 계좌이체, 입출금, 이자계산
Crosscut Concern(횡단 관심)
: 공통 모듈. i.e. 로깅, 보안, 트랜잭션
AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에서 존재하는 것이다.
AOP개념을 도입함으로써 얻는 장점
AOP의 구성 요소
JointPoint : Crosscut Concern(횡단 관심)을 삽입할 시점(when).
i.e. 함수가 Before(실행 전), After(실행 후), AfterReturning(반환 후), AfterThrowing(예외 발생시), Around(실행 전과 후)
PointCut : 어떤 클래스의 어떤 함수에 삽입할건지. 삽입할 위치(where).
Aspect : JointPoint(when) + PointCut(where)
Advice : 무엇(what)을 삽입할건지.
Weaving : Aspect(when + where) + Advice(what). 위빙을 통해 지정된 객체를 새 Proxy 객체로 생성한다.
Proxy : Crosscut Concern(횡단 관심)이 Core Concern(핵심 관심)에서 직접 실행되지 않고 Proxy(대리인)을 생성해 실행된다.
[출처]
https://greendreamtrre.tistory.com/601
스프링 프레임워크는 POJO(Plain Old Java Object)를 지원합니다.
즉, 별도의 API를 사용하지 않고 일반 자바 코드만으로 구성 가능하기 때문에 기본적으로 매우 가볍습니다.
(스프링 기본 프로젝트는 약 2MB에 불과)
출처: https://the-dev.tistory.com/15 [DevLogs]
[참고하면 좋은 글]
우리는 왜 스프링을 사용하는가? https://joychae.tistory.com/27