본문 바로가기
[Spring Boot]

[Spring Boot] 스프링 부트 기초

by 북방바다코끼리표범 2023. 10. 5.

스프링(Spring) 이란?

- 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크

(spring.io 사이트에서 확인하면 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model 제공한다라고 언급중)

- Python을 이용한 Django, Ruby를 이용한 Ruby on Rails, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java 개발자들은 Spring을 사용하여 웹 서비스를 만들 수 있음

- Spring 은 수많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용

- 자바 백엔드 개발자는 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용

 

 

스프링의 구조

스프링의 특징

 

- 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 어플리케이션을 구동 가능

- 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리

- 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용

 

Spring의 가장 큰 특징으로 IOC와 DI가 많이 언급됨

 

IOC와 DI의 간단한 개념

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

- 일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했음 

(모든 작업을 사용자가 제어하는 구조)

예를 들어 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 을 처음 배우려는 사람들은 중도에 그만두는 경우가 많음

- Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할

스프링 부트의 구조

- User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점 존재

- 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요됨

- 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행중