728x90
목차
|
1. Spring Framework란?
- 오픈소스 프레임워크
- 모든 종류의 배포 플랫폼에서 Java 기반 엔터프라이즈 애플리케이션을 개발하기 위한 포괄적인 프로그래밍 및 구성 모델을 제공하는 경량화된 솔루션
- enterprise application: 기업이 다양한 영업 기능과 관련된 영업 과정을 지탱하기 위해서 기업(조직) 사이의 데이터를 통합하는 소프트웨어. 미리 정의된 수많은 비즈니스 프로세스를 근간으로 만들어지며, 복잡하다.
- 앤터프라이즈 애플리케이션의 "plumbing"에 중점을 두어 팀이 특정 배포 환경에 불필요하게 연결하지 않고 애플리케이션 수준의 비즈니스 논리에 집중할 수 있도록 한다.
- 경량 컨테이너로, 자바 객체를 담고 직접 관리함.
- 객체의 생성 및 소멸 그리고 생명주기를 관리하며, 언제든 Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있음(IoC)
- spring에서는 객체를 Bean이라고 부름
- 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련돤 작업을 자동적으로 수행함.
- Bean 컨테이너: spring에서 객체가 생성되는 곳
2. spring을 써야하는 이유
- JSP, Servlet, PHP 등으로 개발하기엔 앤터프라이즈 시스템 개발이 너무 복잡함.
- 시스템 개발 시 비즈니스 로직 이외에도 고려해야할 사항이 많음(타 시스템과의 연계, 분산 트랜잭션 지원, 보안 등)
- 개발이 진행됨에 따라 비즈니스 로직이 점점 복잡해지고 잦은 변경이 요구됨
- spring은 복잡함을 해결하기 위해 다양한 특징을 가지고 있다.
- AOP, DI, PSA 등
3. Spring의 특징
3-1. IoC(제어의 역전)
Spring Framework는 IOC기반이다.
- Inversion of Control(제어의 역전)이란
- 프로그램의 흐름(객체의 생성, 생명주기)을 개발자가 직접 제어하는 것이 아닌 외부에서 제어 및 관리해주는 것
- 기존 방식: ① 객체 생성 ② 의존성 객체 생성(클래스 내부) ③ 의존성 객체 메서드 호출
스프링: ① 객체 생성 ② 의존성 객체 주입(스프링이 만들어 놓은 객체 주입) ③ 의존성 객체 메서드 호출 - 스프링이 모든 의존성 객체를 실행될 때 만들어주고 필요한 곳에 주입 -> Bean들은 싱글턴 패턴의 특징을 가짐
- spring framework에서는 애플리케이션을 구성하는 Bean을 관리하기 위해 IoC개념을 이용한다.
- Spring IoC Container가 객체의 관리, 의존관계의 결정 및 설정 등의 역할을 하고 객체를 관리한다 - DI, AOP가 가능해지게 됨.
- Strategy design pattern, Service Locator pattern, Factory pattern, Dependency Injection (DI) 와 같은 다양한 매커니즘을 통해 IoC를 달성할 수 있다.
- 장점:
- 객체 간의 결합도를 줄이고
- 유연한 코드를 작성할 수 있게 됨
- 기독성
- 코드중복 제거
■ DI(Dependency Injection, 의존성 주입)
- 객체를 직접 생성하는 게 아니라 외부(IOC 컨테이너)에서 생성한 후 주입시켜주는 방식
- 직접 생성하지 않고 setter 혹은 생성자를 통해 사용한다.
- 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
3-2. AOP(Aspect Oriented Programming)
- AOP(관점 지향 프로그래밍)
- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것
- 모듈화: 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
- 관심사는 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것
- 스프링 AOP의 특징
- 프록시 패턴 기반의 AOP 구현체
- 스프링 bean에만 AOP를 적용가능
- 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 앤터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 등)에 대한 해결책을 지원하는 것이 목적
3-3. PSA(Portable Service Abstraction)
- 서비스 추상화: 추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것
- PSA(Portable Service Abstraction): 하나의 추상화로 여러 서비스를 묶어둔 것
- ex) DB에 접근하는 여러가지 방법(Jdbc, JPA)을 하나의 추상화로 묶은 @Transactional 어노테이션
정리
스프링 프레임워크는 자바 기반 앤터프라이즈 애플리케이션을 개발하기 위한 경량화된 개발 프레임워크이다.
스프링을 써야하는 이유는 JSP, Servlet, PHP등으로 개발하기엔 앤터프라이즈 시스템이 너무 복잡하고 고려해야할 사항이 많기 때문이다.
스프링은 복잡함을 해결하기 위한 IoC, AOP, PSA 와 같은 다양한 특징이 있다.
IoC 제어의 역전은 객체의 생성, 생명주기와 같은 프로그램의 흐름을 외부에서 제어 및 관리해주는 것이다.
IoC를 사용하면 객체 간의 결합도를 줄이고, 가독성이 높아질 수 있으며, 유연한 코드를 작성할 수 있다. DI 의존성 주입 등으로 IoC를 달성할 수 있음.
AOP 관점지향 프로그래밍은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠서 보고 그 관점을 기준으로 모듈화하는 것이다. 관심사를 모듈화 함으로써 핵심적인 비즈니스 로직에서 분리하고, 재사용할 수 있음.
PSA Portable Service Abstraction은 하나의 추상화로 여러 서비스를 묶어둔 것으로, 개발자에게 편의성을 제공해주기 위해 추상화 계층을 사용한다.
참고
- :https://spring.io/projects/spring-framework
- https://blog.naver.com/ndb796/220627116264
- https://velog.io/@dplo1514/Spring-IOC%EC%A0%9C%EC%96%B4%EC%9D%98-%EC%97%AD%EC%A0%84-DI-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85
- https://junu0516.github.io/posts/%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%9D%98_di%EC%99%80_ioc/
- https://velog.io/@gillog/Spring-DIDependency-Injection
- https://galid1.tistory.com/493?category=769011
- https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
- https://engkimbs.tistory.com/746
- https://sabarada.tistory.com/127
728x90
'Backend > Spring' 카테고리의 다른 글
SDK 17 is not compatible with the source version 17 (4) | 2023.01.09 |
---|---|
maven이란? (1) | 2023.01.09 |
springboot H2 데이터베이스 사용 에러: Failed to load ApplicationContext (2) | 2022.10.02 |
Spring Boot Devtools 사용하기 (2) | 2022.10.01 |
intelliJ Cause: error: invalid source release: 17 해결 (2) | 2022.10.01 |