Spring Framework
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다.
동적인 웹 사이트 개발을 위한 서비스 제공을 하고 있고, 대한민국 공공기관 웹 서비스 개발 시 사용 권장되는 전자정부 표준 프레임워크의 기반 기술로서 사용된다.
✔️ DI (Dependency Injection) 의존성 주입
- 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요 없다.
- 결합도를 느슨하게 낮출 수 있는 장점이 있다.
- 컨테이너가 객체를 관리하고 의존성 관계를 정리해주는 역할이다.
- spring에서는 설정 파일을 통해 읽어서 ApplicationContext 컨테이너가 객체들 간의 관계를 정리해주는 방식이다. (xml, java, @)
- 직접 new 키워드를 사용하지 않고 프레임워크로부터 필요한 객체를 주입받는다.
✔️ Spring AOP (Aspect Oridented Programming) 관점 지향 프로그래밍
- 트랜잭션, 로깅, 인증 보안 등 여러 모듈과 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리한다.
- 여러 서비스에 걸쳐져 있는 횡단 관심사를 추출해서 따로 관리하는 것이다.
- 유지보수가 용이해진다.
- 따라서 개발자는 비즈니스 로직에 집중할 수 있다.
✔️ POJO (Plain Old Java Object)
- "순수 예전 방식 자바 오브젝트" 라는 뜻이다. (일반 자바 클래스를 컨트롤러로 사용하고, 서비스를 일반 객체로 만들어서 사용한다.)
(cf. 서블릿 클래스를 상속하게 해야 서블릿이 되는 것처럼 프로그램이 무거워지는 경향이 있다.)
- 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어서 개발이 쉽다.
- 기존 라이브러리의 지원이 용이하다.
✔️ IOC (Inversion of Control) 제어 반전
- 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다.
- 객체의 생성부터 소멸까지 모든 생명 주기의 관리를 프레임워크가 주도하는 것이다.
- 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다.
✔️ Spring JDBC
- Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.
- JDBC를 쉽게 사용할 수 있도록 해주는 모듈
✔️ Spring MVC
- MVC 디자인 패턴을 통해 웹 애플리케이션의 Model, View,
- 스프링 통해서 MVC 구현할 수 있는 여러 모듈을 제공한다.
- 객체 간의 관계를 DI 를 통해서 관리하는 것이다.
✔️ PSA (Portable Service Abstraction)
- 추상화 레이어를 제공함으로써, 추상화 되어 있는 인터페이스를 사용해서 기술을 사용하고 일관된 방식으로 개발자에게 접근 환경을 제공해주는 것
- 개발자는 모듈의 의존 없이 프로그램에 집중할 수 있다.
- 실제 사용하던 기술, 구현체가 바뀌더라도 비즈니스 로직에 변화가 없는 것이다. (실제 만드는 프로그램의 코드에는 변화가 없다.)
(cf. log4j 사용할 때, SLF4J 를 활용하는 것과 같은 것)
Spring의 구성 모듈
Data 접근 계층
- JDBC나 DB에 연결하는 모듈이다.
- Data 트랜잭션에 해당하는 기능을 담당한다.
- 영속성 프레임워크의 연결을 담당한다.
Web 계층( MVC / Remoting )
웹 개발을 위한 영역으로써, 관련 모듈을 제공해준다.
AOP 계층
- 관점 지향 프로그래밍을 위한 모듈을 지원한다.
- 객체 간의 결합도를 낮춘다.
★ Core Container
- Spring의 핵심 부분으로써 위의 모든 스프링 관련 모듈들이 core 계층 위에서 동작하는 것이다.
- Ioc 기능을 지원하는 영역이다.
- BeanFactory 기반으로 Bean 클래스들을 제어하는 기능을 제공한다.
Spring의 동작 구조
▶ Spring 컨테이너
▷ Spring-context.xml
- Spring 컨테이너가 실행해야 하는 내용을 설정하는 파일
1. 관계 설정(DI) / 생성 -> Bean 객체
2. 중복 코드 관리(AOP) -> 공통 메소드 실행
3. 트랜잭션 관리 -> Database
- 프레임 워크에 어떤 객체를 어떤 방식으로 설정하고, 객체간의 관계를 어떻게 맺을 것인지, 프레임 워크에서 관리할 객체(bean 객체) 등을 기록해놓는 파일
▷ new GenericXmlApplicationContext()
- spring-context.xml 파일을 참조해서 실제 bean 객체를 만들고 관리한다.
▷ AbstractApplication 객체
Spring의 동작 방식
01. XML 파일
- Spring 컨테이너 구동 시, 한 개의 spring 환경 설정된 xml 파일을 불러온다.
- xml 파일에 bean, aop transaction 등 여러 사항을 작성하여 구동하는 방식이다.
- 최소한의 설정 방식이 javaconfig에 작성되어야 한다.
02. @Annotaion
- xml 파일에는 구동시킬 필수 요소만 작성하고,
- 소스코드에 Annotation으로 표시하여 구동하는 방식이다.
- <component-scan> 필수
03. Java(지향하는 방식)
'Programming > Framework' 카테고리의 다른 글
DAY 147. Spring DI(Dependency Injection) 의존성 주입 (0) | 2022.01.12 |
---|---|
DAY 146. Spring IOC(Inversion of Control) (0) | 2022.01.11 |
DAY 141. TDD 방식으로 게시글 상세조회 기능(댓글 포함) (0) | 2022.01.06 |
DAY 140. TDD 방식으로 게시판 페이징 기능 (0) | 2022.01.05 |
DAY 139. TDD 방식으로 게시판 필터 기능 만들기 (0) | 2022.01.04 |