TIL - 20251104

juni·2025년 11월 4일

TIL

목록 보기
169/317

1104 Spring Boot 입문: Spring과의 차이점과 핵심 원리


✅ 1. Spring Boot란 무엇인가? (왜 필요한가?)

  • Spring Boot는 기존의 Spring 프레임워크를 더 쉽고, 더 빠르게 사용할 수 있도록 만들어주는 프로젝트입니다. Spring Boot는 새로운 프레임워크가 아니라, Spring을 사용하기 위한 "발판(Booster)" 또는 "도구 모음"에 가깝습니다.

  • Spring의 문제점: Spring 프레임워크 자체는 매우 강력하지만, 애플리케이션을 개발하기 위해 수많은 XML 설정, 라이브러리 버전 호환성 체크, WAS(Web Application Server) 설정 등 복잡하고 반복적인 초기 설정이 필요했습니다.

  • Spring Boot의 해결책: 이러한 복잡한 설정을 자동화하고, 개발자가 비즈니스 로직에만 집중할 수 있는 환경을 제공하는 것을 목표로 합니다.

    • 비유: Spring이 모든 종류의 부품이 담긴 "레고 통"이라면, Spring Boot는 특정 모델을 만들기 위한 부품과 설명서가 모두 포함된 "레고 모델 키트"와 같습니다.

✅ 2. Spring Boot의 3대 핵심 원리

  • Spring Boot의 "마법"처럼 보이는 편리함은 아래의 3가지 핵심 원리를 기반으로 동작합니다.

➕ 2-1. 자동 구성 (Auto-configuration)

  • 개념: Spring Boot의 가장 핵심적인 기능으로, 개발자가 추가한 라이브러리(JAR 의존성)를 기반으로, 애플리케이션에 필요한 설정들을 자동으로 구성해줍니다.
  • 동작 방식: 클래스패스(classpath)를 분석하여, 만약 spring-boot-starter-web이 있다면 "아, 이건 웹 애플리케이션이구나!"라고 판단하고, 내장 톰캣(Tomcat), 디스패처 서블릿(DispatcherServlet), Jackson(JSON 변환 라이브러리) 등을 자동으로 설정하고 Bean으로 등록해줍니다.
  • 시작점: @SpringBootApplication 어노테이션이 바로 이 자동 구성을 활성화하는 스위치 역할을 합니다.

➕ 2-2. 규약 중심의 기본 설정 (Opinionated Defaults)

  • 개념: Spring Boot는 "어떻게 설정하는 것이 가장 좋을지"에 대한 "의견(Opinion)"을 가지고, 수많은 설정을 가장 일반적이고 합리적인 기본값으로 미리 정해두었습니다.
  • 예시:
    • 웹 애플리케이션은 기본적으로 8080 포트에서 실행됩니다.
    • Thymeleaf 템플릿 엔진을 사용하면, 템플릿 파일은 src/main/resources/templates 경로에서 찾습니다.
  • 장점: 개발자는 모든 설정을 일일이 명시할 필요 없이, 기본값과 다른 부분만 application.propertiesapplication.yml 파일에 재정의하면 됩니다.

➕ 2-3. 독립 실행 가능성 (Standalone)

  • 개념: Spring Boot 애플리케이션은 별도의 외부 웹 서버(Tomcat 등)를 설치하고 배포할 필요 없이, 내장(Embedded) 웹 서버를 포함하고 있어 JAR 파일 하나만으로 독립적으로 실행될 수 있습니다.
  • 동작 방식: spring-boot-starter-web 의존성을 추가하면, Tomcat이 라이브러리 형태로 프로젝트에 포함됩니다. 애플리케이션을 실행하면 이 내장 톰캣이 함께 구동됩니다.
  • 실행: java -jar my-application.jar 명령어 하나만으로 어디서든 애플리케이션을 실행할 수 있어, 배포가 매우 간편해집니다.

✅ 3. 의존성 관리의 혁신: spring-boot-starter

  • 문제점 (의존성 지옥): Spring 개발 시, 수많은 라이브러리(spring-core, spring-webmvc, jackson, hibernate 등)를 추가해야 하며, 이들 간의 버전 호환성을 맞추는 것은 매우 어렵고 시간이 많이 걸리는 작업이었습니다.

  • starter의 역할: spring-boot-starter는 특정 목적에 필요한 관련 의존성들의 묶음입니다.

  • 예시: spring-boot-starter-web이라는 의존성 하나만 추가하면, Spring MVC, 내장 Tomcat, Jackson 등 웹 애플리케이션 개발에 필요한 수십 개의 라이브러리들이 호환성이 검증된 버전으로 한 번에 추가됩니다.

  • 장점: 개발자는 더 이상 개별 라이브러리의 버전을 신경 쓸 필요 없이, "나는 웹 개발을 할 거야"(starter-web), "나는 JPA를 쓸 거야"(starter-data-jpa)와 같이 목적에 맞는 starter만 선택하면 됩니다.


✅ 4. 외부 설정 (Externalized Configuration)

  • Spring Boot는 코드와 설정을 분리하는 원칙을 강력하게 지원합니다.
  • src/main/resources 경로에 있는 application.properties 또는 application.yml 파일을 사용하여, 데이터베이스 연결 정보, 서버 포트, 로깅 레벨 등 애플리케이션의 모든 설정을 외부에서 관리할 수 있습니다.
  • 프로파일(Profiles) 기능을 통해 application-dev.yml(개발용), application-prod.yml(운영용)과 같이 환경별로 다른 설정 파일을 쉽게 관리하고 전환할 수 있습니다.

📌 요약

  • Spring Boot는 복잡한 Spring 설정을 자동화하여 개발자가 비즈니스 로직에 집중할 수 있게 해주는 프레임워크입니다.
  • 자동 구성, 규약 중심의 기본 설정, 독립 실행 가능성이 Spring Boot의 3대 핵심 원리입니다.
  • spring-boot-starter 의존성을 통해 복잡한 라이브러리 관리가 매우 간편해졌습니다.
  • application.yml과 같은 외부 설정 파일을 통해 코드의 변경 없이 애플리케이션의 동작을 유연하게 제어할 수 있습니다.

0개의 댓글