[Spring]그림으로 배우는 스프링 6 - 10장 스프링 부트

Gaeng·2024년 11월 20일

[Spring] 공부

목록 보기
10/21

책의 내용 기반으로 내용을 정리하고 더하였음.

스프링 부트

스프링부트는 프레임워크가 나오고 약 10년이 지난 2014년에 등장한 프로젝트.

10.1 스프링 부트 라이브러리 설명

스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 애플리케이션을 간편하고 빠르게 개발할 수 있도록 설계된 프레임워크입니다. 스프링 부트는 설정의 복잡성을 줄이고, 기본 설정을 제공하여 생산성을 높이며, 확장성과 유연성을 제공합니다.

  1. Spring Boot Starter

    • spring-boot-starter: 기본적으로 필요한 종속성을 포함한 핵심 스타터.
    • 역할: 특정 기능을 쉽게 사용할 수 있도록 관련 라이브러리를 자동으로 포함.
    • 예: spring-boot-starter-web은 웹 애플리케이션에 필요한 Spring MVC, Embedded Tomcat 등을 포함.
  2. Spring Boot Actuator

    • 의존성: spring-boot-starter-actuator
    • 역할:
      • 애플리케이션의 상태를 모니터링하고 관리.
      • 다양한 엔드포인트 제공(/health, /metrics 등).
    • 개발/운영 환경에서 유용한 진단 및 모니터링 기능 제공.
  3. Spring Boot DevTools

    • 의존성: spring-boot-devtools
    • 역할:
      • 개발 편의성을 위한 기능 제공.
      • 코드 변경 시 애플리케이션 자동 재시작.
      • 브라우저 자동 리로드 지원.
  4. Spring Boot Starter Web

    • 의존성: spring-boot-starter-web
    • 역할:
      • 웹 애플리케이션 개발을 위한 라이브러리 제공.
      • Spring MVC, REST API, 내장형 웹 서버(Tomcat, Jetty 등) 포함.
  5. Spring Boot Starter Data JPA

    • 의존성: spring-boot-starter-data-jpa
    • 역할:
      • 데이터베이스와 상호작용을 위한 ORM (JPA, Hibernate 등) 지원.
      • Repository 인터페이스를 통해 간단한 데이터 접근 구현.
  6. Spring Boot Starter Security

    • 의존성: spring-boot-starter-security
    • 역할:
      • 애플리케이션 보안을 쉽게 설정.
      • 인증 및 권한 부여(Authorization) 기능 포함.
      • 기본 사용자 인증 및 암호화된 비밀번호 제공.
  7. Spring Boot Starter Thymeleaf

    • 의존성: spring-boot-starter-thymeleaf
    • 역할:
      • 템플릿 엔진 Thymeleaf와의 통합.
      • 서버 사이드 렌더링(View)을 쉽게 구성.
  8. Spring Boot Starter Test

    • 의존성: spring-boot-starter-test
    • 역할:
      • 테스트 환경 구성.
      • JUnit, Mockito, AssertJ 등과 통합.
  9. Spring Boot Starter Validation

    • 의존성: spring-boot-starter-validation
    • 역할:
      • 입력 값 검증(BEAN Validation) 기능 제공.
      • @Valid, @NotNull, @Size 등의 애너테이션 지원.
  10. Spring Boot Starter Logging

    • 의존성: spring-boot-starter-logging
    • 역할:
      • 기본 로깅 시스템으로 SLF4J와 Logback 사용.
      • 애플리케이션의 로그를 효율적으로 관리.

10.2 스프링 부트의 특징

  1. 스타터 의존성:
    • 다양한 기술(웹, 데이터베이스, 보안 등)에 대한 간단한 설정 제공.
    • 의존성 선언만으로 관련 라이브러리를 자동으로 구성.
  2. 내장형 서버 지원:
    • Tomcat, Jetty, Undertow 등의 웹 서버가 내장되어 있어 독립 실행형 애플리케이션 개발 가능.
  3. 자동 설정(Auto Configuration):
    • 개발자가 설정을 추가하지 않아도, 필요한 기본 설정을 자동으로 구성.
  4. Spring Boot CLI:
    • 명령줄 도구로 간단한 애플리케이션 개발 가능.
  5. Production-Ready:
    • Actuator를 통해 모니터링 및 관리 기능 제공.
    • 운영 환경에서 바로 사용할 수 있는 기능 포함.

Spring Boot 주요 활용

  • RESTful API 개발: 간단한 설정만으로 REST API 개발.
  • 마이크로서비스: 경량화된 애플리케이션 설계 가능.
  • 템플릿 기반 웹 애플리케이션: Thymeleaf와 같은 템플릿 엔진 지원.
  • 백엔드 개발: 데이터베이스 연동, 보안 설정, 트랜잭션 관리 등.

10.3 자동 설정

자동 설정은 이름에서 알듯이 자동으로 설정해주는 기능. 구체적으로는 라이브러리가 제공하는 구상 클래스와 Bean 정의와 스프링이 제공하는 각종 기능의 활성화를 자동으로 설정.

예를 들어 @EnableTransactionManagemnet를 사용해야 트랜잭션이 활성화가 되었지만, 자동설정을 하게 되면, 자동으로 DI 컨테이너가 생성하게 되면서 DI 컨테이너에 Bean이 등록.

10.3.1 자동 설정의 메커니즘.

1번 JavaConfig 클래스 불러오기. 제공되는 클래스 안에는 꼭 사용하지 않아도 되는 구성도 포함되어 있어서, DI 컨테이너 안에 쓰지 않을 Bean이 많이 등록되어 생성하는데 시간이 걸리거나 메모리를 많이 소모하게 된다. 2번 스프링부트는 애플리케이션 특성에 따라 필요한 설정과 불필요한 설정을 판단하여, 불필요한 설정은 불러오지 않도록 설정. 필요 여부를 판단에는 여러 방법이 있지만, 사용한느 라이브러리를 파악하여 JavaConfig클래스르 판단

10.3.2 자동 설정의 프로퍼티

자동 설정되는 항목에 대해 커스터마이징이 가능. 대표적인 방법은 application.properties 파일로 지정하는 방법이나 YAML 파일로 지정하는 방법이 있음.

  • application.properties와 application.yml은 Spring Boot 애플리케이션의 기본 설정 파일입니다. 둘 중 하나를 사용하면 됩니다.
  • YAML은 계층형 데이터를 직관적으로 표현하기 좋아 복잡한 설정 시 선호되지만, 간단한 설정의 경우 properties 형식이 더 간단합니다.

application.properties 과 application.yaml 예시

	# 서버 포트 설정
    server.port=8081
    # 애플리케이션 이름
    spring.application.name=my-spring-app
    # 데이터베이스 설정
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=1234
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    # Hibernate JPA 설정
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    # 로그 레벨 설정
    logging.level.org.springframework=INFO
    logging.level.com.example=DEBUG
server:
  port: 8081

spring:
  application:
    name: my-spring-app
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

logging:
  level:
    org.springframework: INFO
    com.example: DEBUG

10.3 내장 AP 서버

기존과 SpringBoot는 기본적으로 내장AP서버를 가지고 있어, 애플리케이션 프로그램 안에서 AP서버를 실행하게 됨. 그 결과 애플리케이션이 AP 서버를 라이브러리로 내장하고, AP 서버를 실행하는 메서드를 애플리케이션에서 호출하는 방식을 따름.

10.4 스프링 부트를 사용 할 때 DI를 하는 방법.

프레임워크에서는 AnnotationConfig ApplicationContext 클래스를 사용하는 방법을 사용했는데, 스프링 부트는 SpringApplication클래스에서 run메소드를 사용하면 됨.

@SpringBootApplication -> @SpringBootConfiguration + @EnableAutoConfiguration + @CompentScan

@SpringBootApplication의 동작
위 세 가지 애너테이션을 조합하여 다음과 같은 역할을 수행합니다:

  • 애플리케이션 설정 (@SpringBootConfiguration)
    설정 클래스를 정의하고 Bean을 등록
  • 자동 구성 (@EnableAutoConfiguration)
    클래스패스를 스캔하고, 필요에 따라 Spring 설정을 자동으로 구성
    개발자가 수동으로 설정할 필요 없이 대부분의 설정이 자동으로 이루어짐
  • 컴포넌트 스캔 (@ComponentScan)
    애플리케이션의 패키지 구조를 기준으로 컴포넌트를 탐색하고 등록
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MySpringBootApplication {

    public static void main(String[] args) {
        // 애플리케이션 실행
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

10.5 스프링 부트에서 오해하기 쉬운 내용?

  • 스프링부트는 프레임워크에 비해 설정 속도가 빠르지만, 애플리케이션의 고유부분을 만들어주지 않기에, 획기적인으로 개발 기간이 줄어드는 것은 아님.
특징Spring BootSpring Framework
개념Spring Framework를 기반으로 한 확장된 프레임워크로, 간소화된 설정과 자동 구성을 제공.Java 기반의 핵심 애플리케이션 개발 프레임워크로, 유연하고 다양한 설정 가능.
설정 방식자동 설정 (@EnableAutoConfiguration) 사용, 기본 설정 제공.수동 설정 요구, XML 또는 Java Config 사용.
배포 형태내장된 서버(Tomcat, Jetty) 포함으로 독립 실행 가능 (jar).외부 서버(Tomcat 등) 필요, 전통적인 WAR 배포 방식 사용.
복잡성설정이 간소화되어 빠르게 개발 가능, 초보자에게 적합.높은 유연성 제공, 복잡한 대규모 프로젝트에 적합.
생산성빠른 개발과 배포를 지원하며 "관례보다 설정" 접근 방식 제공.더 많은 설정 작업이 필요하며 초기 개발 속도가 느림.
의존성 관리spring-boot-starter 의존성을 통해 간편하게 관리.의존성을 직접 추가하고 관리해야 함.
내장 서버 지원✅ 제공 (Tomcat, Jetty, Undertow).❌ 제공되지 않음, 별도 서버 설정 필요.
초기 설정간단, 최소 설정만으로 애플리케이션 실행 가능.설정 작업이 복잡하며 XML 또는 Java Config 요구.
사용 사례소규모부터 중규모 프로젝트, 독립 실행 가능한 애플리케이션, 마이크로서비스.대규모 모놀리식 애플리케이션, 복잡한 비즈니스 로직이 있는 프로젝트.
테스트내장된 테스트 유틸리티로 간편한 테스트 가능.Spring Test Framework 제공, 하지만 더 많은 설정 필요.
profile
문제를 해결하면서 나온 문제를 기록하는 노트

0개의 댓글