[Spring] Spring Framework 핵심 정리

✨Spring Framework?
- 자바 플랫폼을 위한 오픈소스 프레임워크
- 엔터프라이즈(EE)급 애플리케이션을 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션
- 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컫는다.
- Spring Framework는 경량 컨테이너로 자바 객체(Bean)를 담고 직접 관리(Bean Factory)
- 객체의 생성, 소멸 등 생명주기를 관리하여 언제든 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다. (=> IoC)
🧣POJO (Plain Old Java Object) : 경량 컨테이너
- 평범하고 오래된 자바 오브젝트
POJO는 getter/setter를 가진 단순 자바 오브젝트로 정의한다.
- 단순 오브젝트는 의존성이 없고, 테스트 및 유지보수에 유연.
🎑DI (Dependency Injection)
- DI : 의존성 주입
- 객체를 직접 생성하지 않고 외부에서 생성한 후, 주입시키는 방법
- 결합도를 낮춘다.
- 유연성을 높인다.
- 방법 : 객체를
setter 또는 생성자를 통해 생성하여 사용한다.
- 스프링 객체 :
Bean
- 프로젝트 실행시, 사용자가
빈으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행 -> 객체를 관리하는 빈 컨테이너
🎁IoC (Inversion of Control)
- Inversion of Control : 제어의 역전
- 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에서 결정
- 결합도를 낮춘다.
- 일반적인 프로그램
- 객체 결정 및 생성 -> 의존성 객체 생성(클래스 내부에서) -> 객채 내 메소드 호출
- 즉, 모든 작업을 사용자가 제어
- IoC 프로그램
- 객체 생성 -> 의존성 객체 주입(스프링에게 제어권을 위임) -> 의존성 객체 내 메소드 호출
- 즉, 사용자가 제어의 흐름을 컨트롤하지 않고 위임한 객체에 맡긴다.
- 프로그램이 실행될때마다 스프링이 모든 의존성 객체를 만들어주고 필요한 곳에 주입시킨다. =>
Bean들이 싱글톤 패턴의 특징을 갖는다.
- DI와 DL
- DI는 위와 같다.
- DL (Dependency Lookup) : 의존성 검색
- 객체 관리를 위한 별도의 저장소에 빈을 저장하고, 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈을 검색
🚡AOP (Aspect Oriented Programming)
- AOP : 관점 지향 프로그래밍
- 여기서! OOP란?
- OOP (Object Oriented Programming) : 객체 지향 프로그래밍
- 객체들의 유기적인 관계를 통한 프로레스로 진행
- 낮은 결합도 + 독립적 + 유연한 모듈로의 캡슐화
- 중복된 코드 -> 가독성, 확장성, 유지보수성 저하 => AOP 보완
- AOP는 핵심 기능과 공통 기능을 분리
- 무분별한 코드를 한 곳에 모아 중복 코드를 제거하고 공통 기능을 한 곳에 보관, 공통 기능 을 수정하면 모든 핵심 기능들의 공통 기능이 변경되어 유지보수성이 향상되고 재활용성이 극대화 된다.
- 특히,
트랜잭션, 로깅, 보안과 같은 여러 모듈에서 공용으로 사용되는 기능을 분리하여 관리
🥩구조

- Spring Core
- = Spring Container
- Bean Factory : IoC 패턴을 적용하여 객체 구성부터 의존성 처리까지 모든 일을 처리
- Spring Context
- JNDI, EJB, Validation, Scheduiling, Internalization 등 엔터프라이즈 서비스를 포함
- Spring AOP
- Spring DAO
- Database에 접근하는 객체
- Spring JDBC DAO는 추상 레이어를 지원 -> 코딩 또는 예외처리하는 부분을 간편화하여 일관된 방법으로 코드를 짤 수 있도록 도와줌
- Spring ORM
- ORM : Object - Relational Mapping
- Ibatis, Hibernate, JDO 등 보편화된 ORM 도구를 사용할 수 있도록 함
- JPA 추천
- JPA : Java Persistence API
- 자바 진영의 ORM
- 스프링 데이터 JPA
- Spring Web
- 애플리케이션 모듈에 내장되어 있으며 WEB 기반의 응용프로그램에 대한 Context 제공
- 일반적으로 Web App. 개발에 필요한 기본 기능을 지원
- Spring MVC
- 아래와 같음
- JSP, Velocity, Tiles 등 수많은 View 기능 지원
🥨Spring MVC (Model 2)
- Model View Controller
- MVC :
사용자 인터페이스와 비지니스 로직을 분리하여 개발
- Model1, Model2로 나뉘어 있다.
- Model?
- 데이터 처리
Service + DAO(Data Access Object)
- Service 영역은 불필요한 HTTP 통신을 하지 않으며,
request or response와 같은 객체를 매개변수로 받으면 안된다.
- View에 종속적인 코드가 없어야 한다. (=View가 변경되어도 Service는 재사용이 가능하도록 개발해야 한다.)
Model 단은 View와 Controller 단의 어떠한 정보도 가지고 있으면 안된다.
- View?
- 사용자 인터페이스 (=사용자에게 보여지는 부분)
Controller를 통해 Model 내 데이터에 대한 시각화
Model이 가진 정보를 저장하면 안되며, Model, Controller의 구성 요소를 알아서는 안된다.
- Controller?
View에게 받은 요청을 가공(정제)하여 Model(Service 단)에게 전달
Model로 부터 받은 결과를 View로 전송
Controller는 모든 요청 및 모델 에러를 처리하고, View와 Model에 대한 정보를 알고 있어야 한다.
- 소스를 분리하여 목적을 명확하게 함으로 유지보수성을 높일 수 있다.
🚓동작 과정
