이야기박스
Chapter 8. 스프링이란 무엇인가? 본문
반응형
이번 장은 스프링을 넘어서 어디서든 적용될 만한 철학을 담고 있음
정의란 원래 사물의 본질적인 뜻을 담고 있다. 따라서 정의를 이해하려는 노력은 중요하다.
스프링의 정의
"자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크"
# 애플리케이션 프레임워크
* 프레임워크, 라이브러리 : 한 가지 기술에 특화된 목표를 가지고 만들어짐
==> '애플리케이션' 프레임워크 : 에플리케이션의 전 영역을 포괄하는 범용적인 프레임워크
핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로서 애플리케이션 개블을 편리하게 해주는 애플리케이션 프레임워크!
# 경량급
실제로는 가볍지 않지만, 불필요한 기능이 없다.
즉, 가성비가 좋다.
# 자바 엔터프라이즈 개발을 편하게
초기 설정만 잘 신경써서 해주면, 나중에는 애플리케이션 로직에만 신경쓰면 되도록 만들어 줌.
# 오픈소스
말 그대로 오픈소스
스프링의 목적
목적을 알아야 그 도구를 제대로 활용할 수 있다.
과거에 자바 앤터프라이즈 프로젝트 (JavaEE)는 자주 실패하였다고 한다.
Because, 자바로 개발하는건 너무 복잡하였기 때문
# 왜 복잡하였는가?
1. 기술적인 제약조건과 요구사항이 늘었음
시대가 변하기 때문 (ex. 보안)
2. 비지니스 로직의 복잡함이 늘어났기 때문
모든 업무처리가 컴퓨터로 이루어졌기 때문,
안그래도 복잡하던 로직이 더욱 복잡해짐...
* 우리 업무를 생각해보자.. 기껏 만들었는데, 회사 정책이 바뀐다? ---> 기존에 한 작업이 종이조각처럼 될 수 있다
복잡함의 원인은 제거대상이 아님, 복잡함을 잘 해결할 수 있는 기술과 전략이 필요하다.
# EJB의 실패
로우레벨의 기술적 복잡함을 신경쓰지 않게 하자는 전략
- 분리에는 성공하였지만 EJB란 환경에 종속되는 코드로 만들어져야 한다는 부담 생김
- 발전주기가 너무 느림
# 스프링의 비침투적 방식
* 침투적 방식 : 기술을 적용했을 때, 관련 코드나 규약 등이 코드에 등장하는 경우 (EJB)
비침투적인 방식은 기술 적용 사실이 코드에 직접 반영되지 않는다.
==> 기술적인 복잡함을 비지니스 로직과 깔끔하게 분리해낼 수 있었다.
# 스프링의 전략
엔터프라이즈 기술 적용시 발생하는 문제 두가지에 대해 다음과 같이 대처한다.
1. 기술에 대한 접근 방식이 일관성이 없고, 특정 환경에 종속적이다.
--> 서비스 추상화 (트랜잭션 추상화, OXM 추상화, 데이터 액세스 기술 등)
2. 기술적인 처리를 담당하는 코드가 성격이 다른 코드에 섞여서 등장한다
--> AOP
남은것은 비지니스 로직인데, 이는 자바의 객체지향기법으로 해결한다.
(알아서 잘 만들라는 이야기..)
스프링은 객체 지향에 방해되는 요소들을 분리시켜주는 일을 하는 것 뿐
POJO 프로그래밍
그렇다면 어떻게 비지니스 로직을 구현하는가? 바로 POJO로 한다.
스프링의 주요 기술들은 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술(Enable Technology)이라 불림
스프링의 삼각형
# POJO란?
Plain Old Java Object의 약자
자바의 기본 오브젝트가 없어보이니까 있어보이게 이름 만든게 POJO
# POJO의 조건
- 특정 규약에 종속되지 않는다
- 특정 환경에 종속되지 않는다
( 매우 독립적인 오브젝트임 )
# POJO의 장점
- 특정 기술/환경에 종속되지 않는 오브젝트기 때문에 깔끔한 코드가 나옴
- 자동화된 테스트에 유리
- 객체지향 설계를 자유롭게 할 수 있음
# POJO 프레임워크
스프링, 하이버네이트가 대표적인 예시
스프링은 자신의 기술영역 (core)에만 관여하고, POJO로 이루어진 비지니스 로직 영역에서는 모습을 감춘다. (사용자에게 맡긴다)
스프링의 기술
앞에서 보았던 스프링 삼각형의 구성요소들을 제공해준다.
# IoC/DI
가장 기본이자 핵심이다. 아래 두 기술들도 이것들을 바탕으로 하고 있다.
* 왜 오브젝트들 간의 결합을 약하게 구성할까?
--> 유연한 확장이 가능하도록 하기 위함
--> 유연한 확장이 가능하도록 하기 위함
# AOP
# PSA
반응형
'Programming Language > Spring' 카테고리의 다른 글
Spring - Filter (0) | 2019.08.13 |
---|---|
Spring JPA. Batch Insert 에러 (0) | 2019.03.28 |
Chapter 7. 스프링 핵심 기술의 응용 (0) | 2019.03.21 |
Chapter 6. AOP(3) 포인트 컷과 트랜잭션 (0) | 2019.02.08 |
Chapter 6. AOP(2) (0) | 2019.02.08 |