coding log
반응형

스프링 프레임워크

자바에서 가장 많이 사용하는 프레임워크

자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케이션 프레임워크'

'전자정부 표준 프레임워크'의 기반 기술로 채택되어 공공기관 웹 서비스 개발시 사용

 

 

스프링의 핵심 가치

애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게 끔 하는 것

 


엔터프라이즈급 개발 : 기업 환경을 대상으로 하는 개발
엔터프라이즈 환경 : 네이버나 카카오톡같은 대규모 데이터를 처리하는 환경

스프링은 이 환경에 알맞게 설계되있어 개발자는 애플리케이션을 개발할 때 많은 요소를 프레임워크에 위임하고 비즈니스 로직을 구현하는데 집중할 수 있다.

 

 

Container

  • 인스턴스의 생명주기를 관리한다
  • 생성된 인스턴스들에게 추가적인 기능을 제공한다

 

 

IoC 제어의 역전

  • Inversion of Control

 

개발자는 프로그램의 흐름을 제어하는 코드를 작성한다.

이 흐름의 제어를 개발자가 하는것이 아니라 다른 프로그램이 그 흐름을 제어하는 것을 IoC라고 한다.

 

일반적인 자바 개발의 경우 객체를 사용하기위해, 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다.

즉, 객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조 

하지만 스프링의 제어 역전 특징은 IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지않고, 객체의 생명주기 관리를 '외부'에 위임한다. (* 외부란 스프링 컨테이너 또는 IoC컨테이너를 의미)

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간것을 말하고, 제어 역전을 통해 의존성 주입 (DI), 관점 지향 프로그래밍 등이 가능해진다.

스프링을 사용하면 객체의 제어권을 컨테이너로 넘기기때문에 개발자는 비즈니스 로직을 작성하는데 더 집중할 수 있다. 

 

 

Dependency Injection 의존성 주입

  • Dependency Injection
  • 클래스 사이의 의존관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
  • 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식

 

 

스프링의 의존성 주입 방법

  1. 생성자를 통한 의존성 주입
  2. 필드 객체 선언을 통한 의존성 주입
  3. setter 메서드를 통한 의존성 주입

 

스프링은 @Autowired 라는 어노테이션을 통해 의존성을 주입할 수 있다. 

스프링 4.3 이후 버전은 생성자를 통해 의존성을 주입할때, @Autowired 라는 어노테이션을 생략할 수 있다.

(스프링을 처음 다룰때는 가독성을 위해 어노테이션을 명시하자.)

 

 

 DI가 적용되지 않은 예시 (개발자가 직접 인스턴스 생성) 

class 엔진 {
}

class 자동차 {
	엔진 v5 = new 엔진();
}

 

 Spring DI가 적용된 예시 

@Component
class 엔진{
}

@Component
class 자동차{
	
    @Autowired
    엔진 v5;
}

 

 

 Spring에서 제공하는 IoC/DI 컨테이너 

  • BeanFactory : IoC/DI에 대한 기본적인 기능을 가지고있다
  • ApplicationContext : BeanFactory의 모든 기능을 포함, 일반적으로 BeanFactory보다 추천된다. (BeanFactory는 너무 간단한 기능만 갖고있기때문에) 트랜잭션처리, AOP등에 대한 처리를 할 수 있다. BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고, 국제화처리, 어플리케이션 이벤트 등을 처리할 수 있다.
반응형

'Backend > Spring' 카테고리의 다른 글

[Spring] Springboot Controller  (0) 2023.07.09
[Spring] Spring boot Libraries  (0) 2023.07.02
[Spring] Spring JDBC  (0) 2023.06.25
[Spring] Spring Framework  (0) 2023.06.22
[spring] Spring 프로젝트 생성, 프로젝트 환경설정  (0) 2023.06.11
profile

coding log

@iian

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!