S E P H ' S

[Spring] 1. 스프링(Spring)이란? 본문

Programing & Coding/Spring

[Spring] 1. 스프링(Spring)이란?

yoseph0310 2022. 2. 7. 16:19

Spring

스프링은 자바 기반의 웹 애플리케이션을 만들 수 있는 프레임워크입니다. spring.io 사이트에서는 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 애플리케이션을 위한 프로그래밍 및 Configuration Model을 제공한다라고 언급하고 있습니다.

 

Python을 이용한 Django, Ruby를 이용한 Ruby on Rails, JavaScript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java 개발자들은 Spring을 사용하여 웹 서비스를 만들 수 있습니다. Spring은 수많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용되고 있습니다. Java 백엔드 개발자는 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용합니다. 스프링은 아래와 같은 구조로 이뤄져 있습니다.

Spring의 특징

1. Spring은 자바 객체와 라이브러리들을 관리하며, 톰캣과 같은 WAS(Web Application Server)가 내장되어 있어 자바 웹 애플리케이션을 구동할 수 있습니다. 

2. Spring은 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리합니다. 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용합니다.

3. Spring의 가장 큰 특징으로 IOC와 DI가 많이 언급됩니다. 

 

 제어의 역전 (IOC, Inversion Of Control)        

 

ㆍ일반적으로 Java 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했습니다. 즉, 모든 작업을 사용자가 제어하는 구조입니다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에 생성하고 메소드를 호출해야 합니다.

       

ㆍ하지만 IOC가 적용된 경우라면, 객체의 생성을 특별한 관리 위임 주체에 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에 넘기는 것을 IOC(제어의 역전)라고 합니다.

       

ㆍ요약하면 Spring의 IOC란  클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출 이 아닌,  스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조입니다. 스프링에서는 모든 의존성 객체를 스프링이 실행될 때 만들어주고 필요한 곳에 주입해줍니다.

 

 의존성 주입 (DI, Dependency Injection) 

 

ㆍ어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는 것이 아닌 객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시키는 방식입니다. 사용하는 주체(A)가 사용하려는 객체(B)를 직접 생성하는 경우 의존성(변경사항이 있는 경우 서로에게 영향을 많이 준다)이 높아지게 됩니다. 하지만, 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어듭니다.

 

Spring Boot

 

스프링 부트(Spring Boot) 는 스프링(Spring)을 더 쉽게 이용하기 위한 도구라고 볼 수 있습니다. 스프링 이용하여 개발을 할 때, 세팅을 해야할 요소들이 많습니다. Spring Boot 는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 합니다.

 

User는 스프링을 사용하기 위해서 다양한 설정을 직접 해야한다는 문제점이 있습니다. 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 시간이 소요됩니다. 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 Spring Boot을 이용하여 개발을 진행하고 있습니다.