스프링 부트(spring boot)

topics 300-백엔드개발 301 Spring
types 이론 도구
tags #springboot #starter #autoconfiguration

스프링을 보다 빠르고 간편하게 사용가능하게 만들어줌

장점

  • 단독 실행 가능
    • 내장 웹 서버 탑재
      • tomcat, jetty, undertow같은 웹서버를 내장하고 있다
      • jar 파일 하나로 배포
        • JAR 파일은 "Java ARchive"의 약자로, 여러 개의 자바 클래스 파일(.class), 이미지, 텍스트 등 다양한 리소스 파일, 그리고 메타데이터(설정 정보 등)를 하나로 묶어서 압축한 파일 형식
  • 바로 실행 가능
    • 자동 설정
      • 포함된 라이브러리와 환경을 분석해서 필요한 설정을 자동 적용
      • 예시
        • db 라이브러리 추가 시
          • 자동연결설정
        • 웹 라이브러리 추가
          • 내장 서버와 스프링 MVC 설정을 자동으로 구성함
    • starter 의존성 제공
      • 목적별로 미리 조합된 의존성 묶음(starter)을 제공함
      • spring-boot-starter-webspring-boot-starter-data-jpa
    • 설정 파일 최소화
      • 복잡한 XML 설정 없이, application.properties 또는 application.yml 파일만으로 환경 설정이 가능
      • 기본값으로도 바로 실행 가능
  • 상용화 가능한 수준의 지원
    • 프로덕션 준비기능 내장
    • 보안, 테스트 , 환경별 설정 지원
      • 기본적인 보안 설정, 테스트 라이브러리, 로컬/운영 등 환경별 설정 프로파일 관리 기능도 내장되어 있다
  • 개발 생산성 향상
    • 비즈니스 로직에 집중
    • 빠른 프로토타이핑과 마이크로 서비스에 적합
      • 독립적 실행, 배포 가능

Spring Initializr

Project Metadata - 프로젝트 메타데이터

  • Group : 기업 도메인 명
  • Artifact : 빌드 하고 나올 애플리케이션 결과물
  • Name : 프로젝트 명
  • Description : 애플리케이션 설명
  • Package name : 패키지 이름으로, Group과 Artifact를 설정하면 자동으로 만들어줌
  • Packaging : jar, war
    • jar 하면 별도 서버 설치 없이 실행가능
    • war : 이미 외장 was가 구축되어있거나 Java EE 를 반드시 사용해야할 때
  • Dependencies
    • Spring Boot DevTools : Spring Boot 애플리케이션을 개발하고 디버깅을 하는데 도움을 주는 도구 모음이다.
      • 개발 단계에서 자동으로 다시 로드되는 기능을 제공하여 개발자가 변경 사항을 신속하게 확인할 수 있도록 도움을 주며,라이브 리로딩, 프로퍼티 변경 감지 및 자동 재 시작 같은 기능도 제공한다.
    • Lombok : Java 라이브러리로 반복되는 getter , setter, toString 등의 메서드 작성 코드를 줄여주는 다이어트 라이브러리로, 코드 가독성을 향상시키고 개발 생산성을 높일 수 있다.
      • 사용 시 어노테이션을 사용해 코드를 간결하게 작성할 수 있고, 컴파일 시점에 필요한 코드를 자동으로 생산해주기 때문에 개발자는 더 적은 노력으로 효율적인 코드를 작성할 수 있다.
    • Spring Web : 스프링 기반의 웹 애플리케이션을 개발하는 데 필요한 라이브러리들이 자동으로 설정된다.
      • 내장 톰캣 뿐 아니라 Spring MVC 패턴을 구현하는 데에 필요한 대부분의 기능들이 포함되어 있다.
    • H2 Database : 자바 기반의 오픈소스 관계형 데이터베이스 관리 시스템(DBMS)이다.
      • 따로 설치가 필요 없으며, 용량이 매우 가볍고 웹용 콘솔을 제공하여 개발용 로컬 DB로 사용이 용이하다.
      • Spring Boot가 지원하는 인메모리 관계형 데이터베이스로, 애플리케이션을 재 가동시킬 때마다 초기화되기 때문에 로컬 환경이나 테스트 환경에서 많이 쓰인다.
    • Mustache : Mustache는 템플릿 엔진의 일종으로, 가독성이 좋고 간단한 문법을 제공하는 템플릿 언어다.
      • Spring Boot에서 Mustache를 사용하는 경우, Mustache 템플릿을 뷰 엔진으로 설정하여 HTML 템플릿을 렌더링할 수 있다.
      • 모두 다 설정했다면 GENERATE 버튼을 클릭해 프로젝트를 생성 및 패키징 하고 프로젝트를 내 컴퓨터의 선택한 디렉토리에 다운로드 하면 된다.

프로젝트 구조

src/main/java

클래스, 인터페이스 등 Java 관련 파일이 위치하는 디렉터리이다

  • @SpringBootApplication
    • [플젝명]Application.java 파일에 있음
    • 스프링 어플리케이션을 실행하는 역할
    • 프로젝트 최상단에 위치해야함(여기서부터 읽음)
    • 아래의 3 어노테이션을 한번에 처리함
      • @SpringBootConfiguration
        • 빈을 생성하는 configuration파일임을 명시함
        • 싱글톤으로 빈이 등록될 수 있도록 도와줌
      • @EnableAutoConfiguration
        • 메타파일을 읽고 정의된 설정을 자동 구성함
      • @ComponentScan
        • @Component, @Configuration @Repository @Service @RestController

src/main/resources

자바 파일을 제외한 HTML , CSS , Javascript, 환경 파일 등을 저장하는 공간

  • templates
    • templates 디렉토리에는 템플릿 파일을 저장
    • 템플릿 파일은 자바 코드를 삽입할 수 있는 HTML 형식의 파일로, 스프링 부트에서 생성한 자바 객체를 HTML 형태로 출력할 수 있다.
  • static
    • static 디렉터리에는 이미지 파일, CSS 파일, JavaScript파일 등을 저장
  • application.yml 또는 application.properties
    • properties로 하면 많이 못 담음 (계층 형성 못 하니까)
    • https://yaml.org/

src/test/java

프로젝트에서 작성한 모듈을 테스트하기 위한 테스트 코드를 작성하는 공간
JUnit 등의 테스트 라이브러리를 사용하여 서버를 실행하지 않은 상태에서 작성한 코드를 테스트할 수 있음

  • build.gradle
    • 프로젝트에 필요한 플러그인과 라이브러리들을 설치하기 위한 내용을 작성
    • gradle은 groovy(스크립트 언어)를 기반으로 만들어져 문법이 간결하고 가독성이 높음
    • build.gradle에는 spring Initializr에서 추가한 dependencies가 추가되어 있는 모습을 볼 수 있음