[SpringBoot] SpringBoot 란?

🌈 M1naWorld ·2022년 7월 10일
0
post-thumbnail

🍀 스프링(Spring)

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

* 엔터프라이즈급 개발이란? 기업 환경을 대상으로 하는 개발. 대규모 데이터를 처리하는 환경을 엔터프라이즈 환경이라고 부름. 스프링은 이 환경에 알맞게 설계돼 있어 개발자는 애플리케이션을 개발할 때 많은 요소를 프레임워크에 위임하고 비즈니스 로직을 구현하는데 집중할 수 있음.

❗️스프링의 핵심가치
"애플리케이션 개발에 필요한 기반을 제공 해 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것"


스프링 특징과 구조

📍 제어 역전(IoC, Inversion of Control)

일반적인 자바 개발의 경우 객체를 사용하기 위해선 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용함. 즉, 객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조.
제어 역전(IoC)을 특징으로 하는 스프링은 기존 자바 개발 방식과는 다르게 동작함. IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 스프링 컨테이너 또는 IoC 컨테이너로 불리는 외부에 위임함. 객체의 관리를 컨테이너에 맡겨 제어권을 넘어간 것을 제어 역전이라고 부르며 제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP)등이 가능해짐.

📍 의존성 주입(DI, Dependency Injection)

의존성 주입(DI)이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미.

📍 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)

관점 지향 프로그래밍(AOP)은 스프링의 아주 중요한 특징이며, OOP(Object-Oriented Programming)과 구분되며 AOP는 OOP를 더욱 잘 사용하도록 돕는 개념으로 보는 것이 좋음. AOP는 관점을 기준으로 묶어 개발하는 방식을 의미. 여기서 관점이란, 어떤 기능을 구현할 때 그 기능을 '핵심 기능'과 '부가 기능'으로 구분해 각각의 관점으로 보는 것을 의미함.


✔️ 위의 개념들은 나중에 더욱 자세히 다룰 예정



🍀 스프링 부트(SpringBoot)

스프링 프레임워크는 기존 개발 방식의 문제와 한계를 극복하기 위해 다양한 기능을 제공함. 하지만 기능이 많은 만큼 설정이 복잡한 편. 이러한 문제를 해결하기 위해 등장한 것이 스프링 부트임!

스프링과 구분되는 스프링 부트 특징

📍 의존성 관리

스프링은 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했음. 또 호환되는 버전을 명시해야 정상 작동 했기에 애플리케이션에서 사용하는 스프링 프레임워크나 라이브러리의 버전을 올리는 상황에서는 연관된 다른 라이브러리 버전까지도 고려해야 했음.

But, 스프링부트는
'spring-boot-starter'라는 의존성을 제공함. spring-boot-starter의 의존성은 여러 종류가 있고, 각 라이브러리의 기능과 관련해서 자주 사용되고 호환되는 버전의 모듈 조합을 제공하여 이를 통해 개발자는 라이브러리 호환 문제를 쉽게 해결할 수 있음.

📍 자동설정

스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원함. 자동 설정은 애플리케이션에 추가된 라이브러리를 실해하는 데 필요한 환경 설정을 알아서 찾아줌. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해줌.

// 스프링 부트의 메인 애플리케이션 코드 

@SpringBootApplication
public class SpringBootApplication{
	
    public static void main(String[] args){
    	SpringApplication.run(SpringBootApplication.class, args);
    }

}

@SpringBootApplication 어노테이션은 여러 어노테이션을 합쳐 놓은 인터페이스지만 기능 위주로 보면 크게 @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan 세 개의 어노테이션을 합쳐놓은 구성임. 스프링 부트 애플리케이션이 실행되면 우선 @ComponentScan 어노테이션이 @Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈(Bean)을 등록함. 이후 @EnableAutoConfiguration 어노테이션을 통해 'spring-boot-autoconfigure'패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 일부 조건을 거쳐 적용되는 원리임. 이 파일엔 Auto Configure 항목이 존재하며 하단에 많은 자동 설정이 정의됨. 이 설정은 각 파일에 설정된 @Conditional의 조건을 충족할 경우 빈에 등록되고 애플리케이션에 자동 반영됨.

📍 내장 WAS

스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Server)가 존재. 웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 'spring-boot-starter-web'의 경우 톰캣을 내장하며, 스프링 부트의 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행 할 수 있음.

📍 모니터링

개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 함. 스프링 부트에는 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구가 있음


Ref. 출처
책: 스프링 부트 핵심가이드

profile
개발자로 사는 내 삶은 즐거워 👾

0개의 댓글