-
Notifications
You must be signed in to change notification settings - Fork 0
Spring FrameWork
hyunwoo9301 edited this page Jul 22, 2017
·
7 revisions
뼈대가 되는 구조를 미리 작성해 놓고, 그 뼈대를 토대로 구체적인 개발을 하는 방법을 제공하는 미들웨어
- 프레젠테이션 계층
- 사용자로 부터 데이터를 입력받거나 출력해 보이는 계층
- 이벤트 처리 및 데이터 포멧팅을 담당
- 제어 계층
- 구성 요소간 처리 흐름 제어
- 요청을 검증하고, 로직에 요청을 전달
- 로직의 응답을 대응되는 뷰와 연결
- 비즈니스 계층
- 제어 계층과 퍼시스턴스 계층 사이를 연결
- 퍼시스턴스 계층
- 데이터베이스나 파일에 접근하여 CRUD
- 도메인 계층
- 데이터 객체
개방 폐쇄 원칙
- 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- 높은응집도(하나의 책임에 집중)와 낮은 결합도 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다
- DAO(Data Access Object)
- DB를 사용해 데이터를 CRUD하는 기능을 전담하는 객체
- DAO를 통해서만 접근함으로써, 다수의 원격호출 오버헤드를 DTO나, VO를 통해 줄일 수 있다.
- POJO(Plain Old Java Object)
- 계층간 데이터 교환을 위한 순수한 데이터 객체
- 그 속성에 접근하기 위한 getter와 setter만 가지고 있는 클래스
- DTO(Data Transfer Obejct) vs VO(Value Object)
- VO - 값이 같으면 같은 오브젝트로 취급
- DTO - 다른 오브젝트라면 값이 같더라도 다르게 취급
- BO
- 비즈니스 로직을 담당
- 비즈니스 수행을 위해 DAO 메소드를 호출함
컨테이너는 인스턴스 생명주기를 관리하며, 코드의 처리과정을 위임받은 독립적인 존재
- 사용자의 호출에 의해 스스로 코드를 참조하고 객체의 생성과 소멸을 컨트롤
- BeanFactory: bean의 정의는 즉시 로딩, bean 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않는다.(lazy loading)
- ApplicationContext: 컨텍스트 초기화 시점에서 모든 싱글톤 bean을 로드
객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권을 프레임워크가 가짐 (IoC 컨테이너)
DI의 사용목적: 분리형으로 개발하여 결합도를 낮추는 것.
- Constructor Injection: A의 생성자에서 B를 생성
- Setter Injection: A가 B가 만든 C를 사용
- Javabean: 디폴트 생성자를 가지는 POJO
- Spring의 bean: 스프링이 제어권을 가지고 직접 생성해서 컨테이너에 등록, 컨테이너에 의해 그 생명주기가 관리되는 객체
- 부가적인 업무가 주 업무에 강한 응집력을 가지고 있는 경우 서비스 추상화가 어려워진다.
- 이러한 문제를 해결하기 위한 기법으로 OOP(Obejct Oriented Programming)의 보완적 개념
- 핵심적인 기능에서 부가적인 기능을 분리하여 작성(Cross Cutting, 크로스 컷팅)하고, 필요할 때 도킹하여 사용
- AOP Advice: 메인 업무에 보조적으로 추가될 보조 업무를 JAVA레벨이 아닌 XML을 통해 객체를 생성하고 인젝션
-
Spring
-
Web
-
Security
-
ETC