스프링 프레임 워크란?
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
- 프레임워크에 종속적이지 않음 (non-intrusive)
- 원하는 기능만 끼워넣어서 사용가능 (modular)
- 비기능적 요구사항 개발시, 필요한 인프라 제공
- POJO를 통한 개발
- 특징
- 경량 컨테이너로 Spring Bean을 직접 관리
- Spring Bean : 스프링 프레임워크가 원하는 대로 짠 자바 객체
- Spring 객체 라이프 사이클 관리
- Container : Spring bean 객체의 생성,보관,제거에 관한 모든 일을 처리
- POJO 기반 프레임워크
- 특정 인터페이스 구현 및 상속을 받을 필요 없음
- 제어 역전(IoC : Inversion of Control)
- 컨트롤의 제어권이 프레임워크에 있어 Spring에서 사용자 코드를 호출
- 방법 중 하나로 DI(Dependency Injection)가 있음
- 관점지향 프로그래밍(AOP : Aspect Oriented Pro~)
- 문제 해결을 위한 집중 가능 (기능적/비기능적 요구사항에 맞춘 개발 가능)
- 영속성과 관련된 다양한 서비스 지원
- 높은 확장성 및 범용성
스프링 프레임워크 모듈들
- Core Container
- Spring Core : 핵심 유틸리티 포함
- Spring Context : ApplicationContext, 스케쥴링, AOP, Cache 관련 클래스 제공
- Spring beans : 스프링 빈과 관련된 클래스와 어노테이션 제공
- Spring expression : SpEL(Spring Expression Language) 관련 기능 제공
- AOP
- Spring-aop : 프록시
- Spring-aspects : AspectJ
- Data Access / Integration
- JDBC : DB 커넥터 제공
- ORM : 객체와 DB 테이블간의 관계 설정
- Web : 상대방 서버에 리소스를 GET
- Test : 테스트
- Web-Mvc : 내가 서버를 담당
스프링 프로젝트
- Spring Boot
- Spring application을 구현시, 스프링 프레임워크를 편하게 쓸 수 있도록 여러기능을 제공
- 스프링 코어를 기반으로 하여 여러기능을 추가한 것
- Spring Framework
- Spring Data
- JPA, MongoDB
- Spring Batch
- 대용량 데이터 처리 프레임워크
- Spring Security
- 인증, 인가
스프링 프레임워크 디펜던시
- BOM(Bill of Materials) : 자재 목록 - version 관리의 용이성
스프링 핵심기능(트라이앵글)
- DI (Dependency Injection)
- AOP (Aspect-oriented Programming)
- PSA (Portable Service Abstraction)
- 이것은 모두 POJO안에서 가동
자바의 다형성
- 자바의 객체는 부모클래스 타입의 참조변수나 구현한 인터페이스 변수에 담을 수 있음
- 메시지를 수신하는 객체의 클래스가 무엇인가에 따라 어떤 메서드가 실행되는지 결정됨
- Compile타임에서는 알 수 없고 Runtime 타임이 되어야 결정됨
IoC 제어역전
- 컨트롤의 제어권이 프레임워크에 있음을 의미 : 내가 만든 애플리케이션 코드를 호출
- 예시
- 흐름의 제어역전(template method 패턴)
- 추상 클래스에 탬플릿에 해당하는 메소드에서 실행의 흐름이 이미 결정
- 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
- 전체적으로 동일하지만 부분적으로 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할때 유용
- 객체 생성의 제어 역전
- 외부에서 생성된 객체를 사용하여 서비스 객체(실행 만함)에게 객체 생성의 책임이 없게함
- 서비스 - 객체간의 의존성 결합
ApplicationContext
- Spring IoC Container 를 나타낸다.
- configuration metadata를 읽어드려 Bean의 인스턴스화, 구성 및 조립을 담당한다
- 스프링 컨테이너를 통해 내가 짠 POJO와 configuration metadata를 조립(매칭)하여 Ready for use 상태가 된다.
Spring Bean
- an object managed by a Spring IoC Container
- Spring Bean은 name, type, object로 구성되어 있음
- 스프링 프레임워크에서 중요하게 관리되어야하는 객체
Bean Factory
- 스프링 IoC를 기반으로 둔 기능을 제공한다.
ApplicationContext
- Bean Factory의 기능에 더해 많은 기능을 제공
- 스프링 애플리케이션 내의 중앙 인터페이스로 애플리케이션의 구성 정보를 제공
- 기능
- Bean Factory 메소드 제공
- Resources를 load 하여 제공
- 이벤트를 관리하는 기능 제공
- 국제화를 지원하도록함
- 상위 컨텍스트에서 상속함
- 역할
- Spring Bean 생성
- Spring Bean 파기
- Spring Bean 주입
ClassPathXmlApplicationContext 를 사용하기 위해서는 설정.xml 파일을 src/main/resource 에 둔다.
Bean 객체의 생명 주기
- Bean Scope
- Singleton
- 스프링 컨테이너에서 단 하나만 존재하는 객체
- Prototype
- 사용하기 위해 생성된 시점 부터 동작하는 객체 (여러개 가능)
- Web-aware
- Callbacks - 초기화
- XML bean 설정에서 init-method를 통해 초기화 작업 가능 (POJO 유지)
- Callbacks - 소멸
- destroy-method를 통해 소멸 작업 가능
의존성(Dependency)
- 객체지향언어에서 두 클래스간의 관계를 말함
- 4가지 종류
- 의존관계(dependency) : 일시참조
- 연관관계(Association) : 클래스 필드로 가지고있음
- 집합관계(Aggregation) : 연관관계의 특수한 상황 (생명주기 일치 x)
- 합성관계(Composition) : 연관관계의 특수한 형태, 집합 관계보다 강결합 (생명주기 일치)
의존성 주입(Dependency Injection)
- IoC 패턴 중 하나 : 외부의 설정을 통해 구성요소간의 의존관계가 정의됨
- Object 간의 의존성을 낮추고 외부에서 객체를 생성하고 조달한다.
- 예시
- Factory Method 패턴
- 사용하고자 하는 클래스는 Application의 서브 클래스가 결정하도록 함
- Application에서 추상화된 메서드를 통해 실제 사용하는 곳에서 구현체를 정함
- 구체적인 클래스가 추상클래스에 종속되지 않음
- 방법(Bean wiring)
- Constructor Injection
- 생성자 주입
- XML : constructor-arg 속성
- Setter Injection
- setter 메서드 통해 주입
- XML : property 속성
- Field Injection(Autowired)
- XML : autowire 속성을 통해 주입
- byType : 클래스 타입으로 (only one)
- byName : 객체 이름으로 (setter 이름 변경 )
- constructor
'개발 > Spring' 카테고리의 다른 글
[Spring Cache] Spring boot 환경에서 Redis Cache 사용하기 (0) | 2023.02.15 |
---|---|
[Spring] Spring MVC 정리 (0) | 2022.12.23 |
[Spring] 스프링 코어 정리 2 - 어노테이션 (0) | 2022.10.31 |
[Spring] 스프링 컨테이너의 빈 조회 방법 (0) | 2022.08.25 |
[Spring] 스프링을 사용하는 이유? (0) | 2022.08.25 |