티스토리 뷰
스프링의 주요 기술은 크게 세 가지입니다.
- DI(Dependency Injection)
- AOP(Aspect Oriented Programming)
- PSA(Portable Service Abstraction)
위 세가지는 애플리케이션을 POJO로 개발할 수 있게 해주는 기술입니다.
POJO와 스프링의 주요 기술을 알아보기 전에 스프링의 등장 배경에 대해서 간단히 알아봅시다.
스프링의 등장 배경
스프링 이전에는 EJB(Enterprise Java Bean) 스펙을 구현하여 여러 WAS 제품이 출시되었다고 합니다.
그런데 컨테이너의 다양한 서비스를 제공 받기 위해서는 EJB 스펙을 무조건 지켜야 했습니다.
EJB 스펙을 지키는 것에 있어서 다음과 같은 문제점이 있었습니다.
- 서비스가 구현하는 실제 비즈니스 로직보다 많은 EJB 컨테이너를 사용하기 위한 상투적인 코드
- 업체마다 EJB 컨테이너를 구현한 내용이 달라 설정이 복잡해짐
결국 EJB의 단점은 특정 기술에 비즈니스 로직이 종속된다는 점입니다.
컨테이너의 역할은 필요할 때마다 다른 객체를 컨테이너에서 받아내 객체들 간의 의존성 해결입니다.
로드 존슨은 EJB를 사용하지 않고도 객체간 의존성 해결이 가능한 컨테이너를 개발했는데, 이것이 스프링입니다.
로드 존슨은 위와 같은 상황을 겨울(winter)이라 칭하였고 이제 봄(spring)을 맞이하자는 의미로 스프링이라는 이름을 지었다고 합니다.
스프링은 WAS의 기능적인 부분을 유지하되 특정 기술에 비즈니스 로직이 종속되는 점을 해결하여 개발자는 비즈니스 로직에 집중할 수 있도록 도와줍니다.
이것이 스프링의 철학이고, 개발자는 이 철학을 이해하면서 개발을 해야 스프링을 잘 사용하고 있다고 할 수 있습니다.
POJO
Martin Fowler가 만들어낸 단어로 Plain Old Java Object의 약자입니다.
EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것보다 간단한 자바 객체를 사용한다는 의미를 가집니다.
POJO의 조건
- 특정 규약에 종속되지 않습니다.
- 단일 상속 제한 때문에 객체지향적인 설계기법 적용이 어려워집니다.
- 다른 환경으로의 이전이 어려워집니다.
- 특정 환경에 종속되지 않습니다.
- 예를 들어, 웹 환경에 종속되는 HttpServletRequest나 HttpSession와 관련된 API를 직접 이용해서는 안 됩니다.
- 단일 책임 원칙(SRP)을 지키는 클래스
POJO의 장점
- 깔끔한 코드! 특정한 기술과 환경에 종속되지 않아 코드를 읽고 이해하기 편합니다.
- 자동화된 테스트에 매우 유리합니다.
- 객체지향적인 설계를 자유롭게 적용할 수 있습니다.
스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크라고 불립니다.
POJO에 대해 알아봤으니 위에서 언급했던 POJO로 개발할 수 있게 해주는 가능 기술들을 살펴봅시다.
DI(Dependency Injection)
구체적인 의존 오브젝트와 그것을 사용할 주체, 보통 클라이언트라고 부르는 오브젝트를 런타임 시에 연결해주는 작업을 말합니다.
DI는 다음과 같은 세가지 조건을 충족하는 작업을 말합니다.
- 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않습니다.
- 런타임 시점의 의존관계는 컨테이너나 팩토리같은 제 3의 존재가 결정합니다.
- 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공해줌으로써 만들어집니다.
핵심은 설계 시점에서는 알지 못했던 두 객체의 관계를 맺도록 도와주는 제 3의 존재가 있다는 것입니다.
(제 3의 존재: 스프링 애플리케이션 컨텍스트, 빈 팩토리, IoC 컨테이너 등)
AOP(Aspect Oriented Programming)
애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해 Aspect라는 독특한 모듈로 만들어서 설계하고 개발하는 방법을 AOP (Aspect Oriented Programming)이라고 합니다.
Aspect를 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와줍니다.
PSA(Portable Service Abstraction)
환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근할 수 있게 도와줍니다.
즉, 클라이언트가 일관성 있게 사용할 수 있는 인터페이스를 정의해주고 DI를 통해 어댑터 역할을 하는 오브젝트를 이용하게 해줍니다.
결론
이번 포스팅에서는 스프링의 주요기술에 대해 간략하게 알아봤습니다.
다음 포스팅에서는 이 주요기술을 톺아보는 시간을 가져보겠습니다.
'Sping Framework' 카테고리의 다른 글
스프링의 주요 기술 [1-2]. 애플리케이션 컨텍스트 (0) | 2023.02.07 |
---|---|
스프링의 주요 기술 [1-1]. DI (0) | 2023.02.06 |
JPA에서의 bulk insert, bulk update test (0) | 2022.08.14 |
프로토타입과 스코프 [3]. 스코프 (0) | 2022.07.15 |
프로토타입과 스코프 [2]. 프로토타입 빈의 DL 전략 (0) | 2022.07.13 |
- Total
- Today
- Yesterday
- kotest
- 이팩티브 자바
- Java
- 백준
- 프로그래머스
- MSA
- 클린 아키텍처
- 코테
- Olympiad
- 객체지향
- Algorithm
- 디자인패턴
- node.js
- Kotlin
- 알고리즘
- C++
- 정규표현식
- BAEKJOON
- Spring
- BOJ
- 테라폼
- Spring Boot
- programmers
- Effective Java
- 클린 코드
- JPA
- 이펙티브 자바
- 디자인 패턴
- kkoon9
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |