스프링 부트

황규혁·2023년 8월 13일

Spring 원리

목록 보기
4/5

1. 스프링 부트와 웹 서버

스프링 부트를 사용하는 이유는 다음과 같다

  • 내장 톰캣을 사용해서 빌드와 배포를 편리하게 한다.
  • 빌드시 하나의 jar를 사용하면서, 동시에 Fat jar 문제도 해결한다.
  • 내장 톰캣 서버를 실행하기 위환 복잡한 과정을 모두 자동으로 처리해준다.

2.실행 과정

  • 스프링 부트를 실행 할 때는 자바 main() 메서드에서 SpringApplication.run()을 호출해주면 된다.
  • 여기에 메인 설정 정보를 넘겨주는 데, 보통 @SpringBootApplication 애노테이션이 있는 현재 클래스를 지정해주면 된다.
  • 이 애노테이션 안에는 컴포넌트 스캔을 포함한 여러 기능이 설정되어 있다. 기본 설정은 현재 패키지와 그 하위 패키지 모두를 컴포넌트 스캔한다.

3. 스프링 부트 실행 가능 Jar

Fat Jar는 하나의 Jar 파일에 라이브러리의 클래스와 리소스를 모두 포함해였다. 그래서 실행에 필요한 모든 내용을 하나의 JAR로 만들어서 배포하는 것이 가능하지만 다음과 같은 문제를 가지고 있다.

  • 어떤 라이브러리가 포함되어 있는지 확인하기 어려움
  • 파일명 중복을 해결할 수 없음

실행 가능 Jar
스프링 부트는 이런 문제를 해결하기 위해 jar 내부에 jar를 포함할 수 있는 특별한 구조의 jar를 만들고 동시에 만든 jar 내부 jar를 포함해서 실행할 수 있게 한다. 이것을 실행 가능 jar라고 한다.
이를 통해

  • jar 내부에 jar를 포함하기 때문에 어떤 라이브러리가 포함되어 있는지 쉽게 확인할 수 있음
  • jar 내부에 jar를 포함하기 때문에 a.jar, b.jar 내부에 같은 경로의 파일이 있어도 둘 다 인식할 수 있음

Fat Jar의 문제를 해결하였다.

4. 스프링 부트 라이브러리 버전 관리

스프링 부트는 개발자 대신에 수많은 라이브러리의 버전을 직접 관리해준다. 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전은 생략해도 된다. 그러면 스프링 부트가 버전에 맞춘 최적화된 라이브러리 버전을 선택해 준다.

  • 버전 관리 기능을 사용하려면 io.spring.dependenty-management 플러그인을 사용해야 한다.

5. 스프링 부트 스타터

웹프로젝트를 하나 실행하려면 생각보다 수많은 라이브러리가 필요하기에 개발자는 일반적으로 많이 사용하는 대중적인 라이브러리들을 포함해서 간단하게 시작하고 싶어한다.
스프링 부트는 이런 문제를 해결하기 위해 프로젝트를 시작하는데 필요한 관련 라이브러리를 모아둔 스프링 부트 스타터를 제공한다.

  • 스프링 부트 스타터 덕분에 누구나 쉽고 편리하게 프로젝트를 시작할 수 있다.

6. 스프링 부트의 자동 구성

스프링 부트는 자동 구성(Auto Configuration)이라는 기능을 제공하는데, 일반적으로 자주 사용하는 수많은 빈들을 자동으로 등록해주는 기능이다. 이러한 자동 구성 덕분에 개발자는 반복적이고 복잡한 빈 등록과 설정을 최소화하고 애플리케이션 개발을 빠르게 시작할 수 있다.

  • @AutoConfiguration : 자동 구성을 사용하려면 이 애노테이션을 등록해야한다.
  • @Import : 스프링에서 자바 설정을 추가할 때 사용한다.

자동 설정 vs 자동 구성

  • 자동 설정 : Configuration이라는 단어가 컴퓨터 용어에서는 환결 설정, 설정이라는 뜻으로 자주 사용된다. Auto Configuration은 크게 보면 빈들을 자동으로 등록해서 스프링이 동자갛는 환경을 자동으로 설정해주기 때문에 자동 설정이라는 용어도 맞다.

  • 자동 구성 : Configuration이라는 단어는 구성, 배치라는 뜻도 있다. 스프링도 스프링 실행에 필요한 빈들을 적절하게 배치해야 한다. 자동 구성은 스프링 실행에 필요한 빈들을 자동으로 배치해주는 것이다.

자동 설정, 자동 구성 모두 맞는 말이다. 자동 설정은 넓게 사용되는 의미이고, 자동 구성은 실행에 필요한 컴포넌트 조각을 자동으로 배치한다는 더 좁은 의미에 가깝다.

7. 외부 설정 - 스프링 통합

하나의 애플리케이션을 여러 다른 환경에서 사용해야할 때가 있다. 대표적으로 개발이 잘 진행되고 있는지 내부에서 확인하는 용도의 개발 환경, 그리고 실제 고객에게 서비스하는 운영 환경이 있다.
문제는 각각의 환경에 따라서 서로 다른 설정값이 존재한다는 점이다.
이 문제를 해결하는 가장 단순한 방법은 각각의 환경에 맞게 애플리케이케이션을 빌드하는 것이다. 하지만 이는 환경에 따라서 빌드를 여러버 해야 하고 개발 버전과 운영버전의 빌드 결과물이 다르고 유연성이 떨어지기에 빌드는 한 번만 하고 각 환경에 맞추어 실행 시점에 외부 설정값을 주입해야 한다.

  • 외부 설정 값이 어디에 위치하든 상관 없이 일관성 있고, 편리하게 key=value 형식의 외부 설정값을 읽을 수 있으면 사용하는 개발자 입장에서 더 편리하고 또 외부 설정값을 설정하는 방법도 더 유연해질 수 있다.

스프링은 이 문제를 Environment와 PropertySource라는 추상화를 통해서 해결한다.

  • 덕분에 자바 시스템 속성을 사용하다가 만약 커맨드 라인 옵션 인수를 사용하도록 읽는 방법이 변경되어도, 개발 소스 코드는 전혀 변경하지 않아도 된다.
profile
백엔드 개발자를 꿈꾸는 대학생입니다

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기