> 스프링 프레임워크 (Spring Framework)
스프링(Spring) 이란?
자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
- 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공
- 전자정부 표준 프레임워크의 기반 기술로서 쓰이고 있다
스프링의 특징
˙ 경량 컨테이너로서 자바 객체를 직접 관리한다
˙ POJO(Plain Old Java Object) 방식의 프레임워크
- POJO : 단순하고 가벼운 자바 객체(우리가 자바에서 개발하는 지극히 평범한 객체)
˙ IoC(Inversion of Control; 제어 반전) 지원
- 필요에 따라 컨트롤의 제어권을 사용자가 갖지 않고 스프링에서 사용자의 코드를 호출
˙ DI(Dependency injection; 의존성 주입)를 통한 객체 간의 관계 구성
스프링의 3대 기반 기술에서 자세히 설명할 예정
˙ AOP(Aspect-Oriented Programming; 관점 지향 프로그래밍) 지원
스프링의 3대 기반 기술에서 자세히 설명할 예정
˙ 영속성과 관련한 다양한 서비스 지원
- iBATIS, 하이버네이트 등 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스 제공
˙ 확장성이 높다
- 수많은 라이브러리가 스프링에서 지원되고 있기 때문에 사용에도 라이브러리를 별도로 분리하기도 용이하다
스프링의 3대 기반 기술
1. DI (Dependency Injection; 의존성 주입)
[DI를 사용하지 않은 클래스 간 강한 결합]
❗ Customer A, B의 InsuranceManager가 InsuranceManagerB로 바뀌어야 한다면?
: A, B의 모든 매니저 객체를 바꿔야 하기에, 모든 Client class에 수정이 발생한다 (고객이 100000명이라도 된다면??T^T)
[DI를 사용한 클래스 간 느슨한 결합]
- IoC Container : Spring application이 구동될 때, 사용되는 class 들의 객체를 사전에 생성하여 필요한 곳에 적재적소에 제공
- IoC Container가 매니저 객체를 생성해서 Customer A, B에게 주입
❗ Customer A, B의 보험 매니저가 매니저 B로 바뀐다면?
: IoC Container에서 매니저 객체를 InsuranceMaganerB로 변경 (단 한번의 변경 😎)
2. AOP(Aspect Oriented Programming; 관점(관심) 지향 프로그래밍)
- 개발자가 비즈니스 로직과 관련한 핵심 관심 기능들(ex. 할일 등록/조회/삭제)의 개발에만 집중할 수 있게 해준다
- Logging, Security, Transaction과 같은 Application 전반에 공통적인 관심 기능(부가적인 관심 기능)을 별도로 불리하여 Springdl 대신 처리한다
3. 서비스 추상화
: 하위 서비스의 공통점을 추출해서 분리하는 것 (일반화)
- Client는 어떤 DB인지 알 필요없이 DB Connection을 얻을 수 있다
> Spring MVC 구조
간단하게 정리한 Spring MVC 구조입니다 🙋♀️
> Spring Boot
Spring Framework의 복잡한 구성 작업
- web.xml 설정
- Dispatcher Servlet 설정
- 프로젝트 의존성 관리 (Maven, Gradle 사용)
- Spring MVC 등의 기능에 대한 명시적인 XML, 자바 구성
👉👉👉 Spring boot의 핵심 : 비즈니스 로직을 제외한 Spring 구성은 Spring에게 맡겨버리자!
Spring Boot의 핵심 기능
1. 스타터 의존성
Spring-boot-starter-web 의존성 추가
→ 일일이 라이브러리에 대한 의존성을 추가하지 않아도 된다 (web.xml에서)
→ Spring MVC 사용을 위한 추가 구성을 하지 않아도 된다
(Spring MVC 사용을 위해서는 Tomcat이 필요한데, Spring boot에 내장되어 있다!)
2. 자동 구성
3. Spring Boot CLI
Command Line에서 Spring 조작/배포가 가능한 명령어들
4. Actuator
Spring boot application을 모니터링 할 수 있는 기능
📚 references
'Programming > Spring' 카테고리의 다른 글
[Spring] 의존성 주입(DI, Dependency Injection)의 세가지 방법 (0) | 2022.05.29 |
---|---|
[Spring] 스프링 AOP 개념 이해 및 적용 방법 (0) | 2022.05.29 |
[스프링부트 (1)] 스프링부트 시작하기 (SpringBoot 프로젝트 설정 방법) (0) | 2022.05.29 |
[스프링부트 (12)] SpringBoot 에러 페이지 설정(Custom Error Page) (0) | 2022.05.29 |
[스프링부트 (11)] SpringBoot YAML 적용하기(properties vs yaml) (0) | 2022.05.29 |