본문 바로가기
Programming/Spring

Spring / Spring Boot 차이점 / IoC(제어의 역전), DI(의존성 삽입), AOP(관점 지향 프로그래밍)

by with chu 2021. 3. 31.
728x90

Spring 과 Spring Boot 차이점


 

1. Spring

 

<Spring의 특징 세 가지>

 

1) 제어의 역전(IoC)

제어의 역전은 의존성 주입의 상위 개념이다.
개발자가 직접 new 연산자를 통해 객체를 생성하고, 객체의 의존성을 맺어주고, 초기화를 해주는게 아니라
xml파일 또는 어노테이션 방식으로 스프링 컨테이너에 Bean(객체)를 등록하기만 하면, 스프링 웹 애플리케이션 컨테이너가 Bean의 생명주기를 대신 관리해준다.

 

2) 의존성 주입(DI)

어떤 객체에 스프링 컨테이너가 또 다른 객체와 의존성을 맺어주는 행위이다
필요한(의존하는) 클래스를 직접 생성하는 것이 아닌, 주입해줌으로써 객체 간의 결합도를 줄이고 좀 더 유연한 코드를 작성할 수 있다

 

3) 관점 지향 프로그래밍(AOP)

핵심관점(비즈니스 로직) + 횡단관점(트랜잭션, 로그, 권한 체크, 인증, 예외 처리 등)으로 관심의 분리를 실현한다
예) 핵심 기능(계좌이체, 입출금)을 만들고, 공통적인 관심 기능(로깅, 보안, 트랜잭션)을 처리하는 모듈을 만들어서, 필요한 시점에 자동으로 공통적인 관심 기능이 삽입되도록 하는것이다

 

 

 

<스프링 컨테이너에 빈(Bean)을 등록하고 설정하는 방법 두 가지>

 

1) XML 설정을 통한 DI

생성되는 모든 Bean을 XML에서 확인할 수 있다는 장점이 있으나 Bean의 개수가 많아지면 XML 파일을 관리하기 번거로울 수 있다.

 

2) 어노테이션(Annotations)을 이용한 DI

Bean으로 사용될 클래스에 특별한 어노테이션(Annotation)을 부여해주면 이런 클래스를 자동으로 찾아서 Bean으로 등록한다.
애플리케이션에 등록될 Bean이 어떤것들이 있고, 의존관계가 어떻게 되는지를 한눈에 파악할수 없다는 단점이 있다.

 

 

단점) Spring MVC를 사용하기 위한 설정뿐만 아니라 사용해야 할 dependency를 설정해야 하며 호환되는 버전도 선택해야 한다. 

예시:

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.2.2.RELEASE</version>
</dependency>

 

 

 

 


2. Spring Boot

Spring Framework는 기능이 많은만큼 환경설정이 복잡한 편이지만, Spring Boot는 Spring 설정의 많은 부분을 자동화하였다.

 

<Spring Boot의 특징>


1) Auto Configuration 자동 실행

Spring Boot가 spring.factories 파일에 사전에 정의한 AutoConfiguration 내용에 의해 bean 생성이 진행된다.


2) 쉬운 의존성 관리

스프링 부트 starter 디펜던시만 추가해주면 바로 API를 정의하고, 심지어 스프링 홈페이지의 이니셜라이저를 사용하면 바로 실행 가능한 코드를 만들어준다. 
spring-boot-starter-web을 사용하면 종속된 모든 라이브러리를 알맞게 찾아서 함께 가져오기 때문에 종속성이나 호환 버전, 실행환경, 의존성 관리에 대해 신경 쓸 필요가 없다.


3) 내장 서버

스프링 부트는 내장형 톰캣을 가지고 있기 때문에 별도의 톰캣을 설정할 필요가 없어졌으며, 내장된 탐캣이나 제티로 웹 애플리케이션 서버를 실행할 수 있다. 따라서 독립적으로 실행 가능한 jar로 손쉽게 배포가 가능해졌다

 






 

 

참고

[Lotts Blog]

[HelloWorld]

juwonkim.log

gil.log

effortDev

 

728x90

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

Java / Spring / Comparable과 Comparator  (0) 2021.03.09

댓글