250x250
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
- eslint
- regex
- java
- current_date
- spring cloud
- log_bin
- REACTJS
- REACT
- Regular expression
- Effective Java
- 퀵소트
- npm
- Node
- log4j2
- spring
- nodejs
- Spring Batch
- Express
- JavaScript
- Effective Java 3/e
- Chunk
- expire_logs_days
- mysql 5.5
- migration
- 정규표현식
- try catch
- git
- update
- upgrade
- MySQL
Archives
- Today
- Total
내 세상
[Spring] Spring in Action, Chapter 1. 스프링 속으로 본문
728x90
반응형
스프링 프레임워크
- 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
- Spring, 스프링
- J2EE 애플리케이션 개발을 위한 책의 예제를 작성하면서 사용했던 프레임워크들을 발전시켜 지금에 이름.
- 자바 엔터프라이즈 개발을 편하게 해 주는 오픈 소스 경량급 애플리케이션 프레임 워크
- “JEE 애플리케이션 개발을 더 쉽게 만들겠다.”는 대단히 명확한 목적으로 만들어짐
자바 복잡도 간소화를 지원하기 위한 스프링의 네 가지 주요 전략
- POJO를 이용한 lightweight하고, non-invasive한 개발
- Non-invasive : 바탕이 되는 기술을 사용하는 클래스, 인터페이스, API 등을 코드에 직접 나타내지 않는 방법. 복잡함을 분리할 수 있음.
- DI와 Interface Orientation을 통한 loose coupling
- Aspect와 공통 규약을 통한 declarative 프로그래밍
- Aspect와 template을 통한 반복적인 코드 제거
POJO의 힘
- 스프링은 API를 이용하여 애플리케이션 코드의 분산을 가능한 막는다.
Dependency Injection : 컴포넌트의 결합도를 낮춰줌
- 여러 객체는 협력하는 객체에 대한 Reference를 얻을 책임이 있음. 그 결과, 결합도가 높아지고 테스트하기 힘든 코드가 만들어짐.
- Wiring(와이어링) : 애플리케이션 컴포넌트 간의 관계를 정하는 것 (일반적으로 XML 이용)
<bean id=”knight” class=”com.skcc.knight”>
<constructor-arg ref=”quest”>
</bean>
<bean id=”quest” class=”com.skcc.SlayDragonQuest”>
<constructor-arg value=”#{T(System).out}”/>
</bean>
- XML 기반의 설정이든 자바 기반의 설정이든 DI의 이점은 동일함.
- Application Context
- Bean에 관한 정의들을 바탕으로 Bean들을 엮어줌.
- 애플리케이션을 구성하는 객체의 생성과 Wiring을 전적으로 책임짐.
Aspect의 적용 : 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용할 수 있는 컴포넌트에 담음
- 소프트웨어 시스템 내부의 관심사들을 서로 분리(separation of concerns)하는 기술
- 여러 개의 컴포넌트는 대체로 본연의 특정 기능 외에 Logging이나 Transaction 관리, 보안 등의 시스템 서비스도 수행해야 하는 경우가 많음.
- 시스템의 여러 컴포넌트에 관련되는 경향이 있으므로 횡단 관심사(cross-cutting concerns)라고 함
- 발생할 수 있는 2가지 문제점
- 여러 컴포넌트에서 중복된 코드가 나타남.
- 컴포넌트의 코드가 본연의 기능과 관련 없는 코드로 인해 지저분해짐.
- AOP는 시스템 서비스를 모듈화해서 컴포넌트에 선언적으로 적용함. -> POJO를 단순화함
빈을 담는 그릇, 컨테이너 : 스프링 기반 애플리케이션에서는 스프링 Container 안에서 객체가 태어나고, 자라고, 소멸함.
- 빈 팩토리(BeanFactory)
- DI에 대한 기본적인 지원을 제공하는 가장 단순한 Container.
- 대부분의 애플리케이션에 대하여 지나치게 저수준의 기능을 제공함.
- 애플리케이션 컨텍스트(Application Context)
- 빈 팩토리를 확장해 Property 파일에 텍스트 메시지를 읽고 해당 이벤트 Listner에 대한 애플리케이션 이벤트 발행 같은 애플리케이션 프레임워크 서비스를 제공하는 Container.
빈의 일생
- 자바 애플리케이션에서 new 키워드를 이용해 빈을 인스턴스화하고 이를 바로 사용함. 더 이상 사용되지 않으면 garbage collection 후보가 되어 언젠가는 메모리 덩어리가 됐다가 사라짐.
- 스프링 컨테이너 내에서 빈의 생명주기는 더 정교함. 빈이 생성될 때 스프링이 제공하는 customizing 기회를 이용하려면 스프링의 빈 생명주기를 이해해야 함.
스프링의 모듈
- Spring FWK는 6개의 모듈로 구성되어 있음.
- 코어 스프링 컨테이너
- Spring FWK의 핵심은 Spring Appl.에서 빈의 생성, 설정, 처리방법을 관리하는 컨테이너.
- 이 모듈 내에서 DI를 제공하는 스프링 빈 팩토리를 확인함.
- 스프링의 AOP 모듈
- AOP 모듈을 통해 AOP를 지원함.
- DI처럼 Appl. 객체 간의 결합도를 낮추는 데 기여함.
- 주로 Appl. 전체에 걸친 관심사(트랜잭션, 보안 등)와 각 객체간의 결합도를 낮추는 데 이용됨.
- 데이터 액세스와 통합
- 스프링의 JDBC와 DAO(Data Access Objects) 모듈은 반복되는 코드 추상화 및 데이터베이스 서버가 제공하는 오류 메시지에 의미 있는 예외 계층이 추가되어 있음.
- ORM 모듈은 JDBC보다 ORM(Object-Relational Mapping)을 선호하는 사람을 위한 것
- 웹과 리모팅
- MVC(Model-View-Controller)는 user's interface가 Appl. logic과 분리되는 Web App을 만드는 경우에 일반적으로 사용되는 접근 방식.
- 인스트루멘테이션(Instrumentation)
- JVM에 에이전트를 추가하는 기능을 제공함.
- 테스팅
Summary
- Spring은 결합도가 낮은 코드를 만드는 것을 목적으로 함. 핵심은 DI와 AOP.
- DI (Dependency Injection)
- 객체들이 상호 간의 종속관계나 구체적인 구현 방법을 알 필요가 없도록 Appl. 객체들을 연결하는 방법
- 종속객체를 필요로 하는 객체가 직접 종속객체를 얻어 오는 것이 아니라, 종속객체를 필요로 하는 객체에 종속객체가 부여되는 방식.
- AOP(Aspect Object Programming)
- Appl의 여러 곳에 흩어져 있는 로직을 한 곳으로, 즉 Aspect로 모을 수 있음.
- Aspect는 스프링이 빈을 wiring할 때 런타임에 연결되어 효과적으로 빈에 새로운 기능 부여.
728x90
반응형
'Technical > Spring' 카테고리의 다른 글
[Spring] Spring in Action, Chapter 5. 스프링 웹 애플리케이션 만들기 (0) | 2019.07.30 |
---|---|
[Spring] Spring in Action, Chapter 4. 애스펙트 지향 스프링 (0) | 2019.07.30 |
[Spring] Spring in Action, Chapter 2. 빈 와이어링(묶기) (0) | 2019.07.30 |
[Spring] Spring ORM (0) | 2019.07.30 |
[Spring] Spring Core (0) | 2019.07.30 |