스프링 부트(spring boot)
| topics | 300-백엔드개발 301 Spring |
| types | 이론 도구 |
| tags | #springboot #starter #autoconfiguration |
스프링을 보다 빠르고 간편하게 사용가능하게 만들어줌
장점
- 단독 실행 가능
- 내장 웹 서버 탑재
- tomcat, jetty, undertow같은 웹서버를 내장하고 있다
- 기본 값: tomcat, 다른 웹서버를 선택 가능
- 스프링부트 서버 역활과 특징
- jar 파일 하나로 배포
- JAR 파일은 "Java ARchive"의 약자로, 여러 개의 자바 클래스 파일(.class), 이미지, 텍스트 등 다양한 리소스 파일, 그리고 메타데이터(설정 정보 등)를 하나로 묶어서 압축한 파일 형식
- tomcat, jetty, undertow같은 웹서버를 내장하고 있다
- 내장 웹 서버 탑재
- 바로 실행 가능
- 자동 설정
- 포함된 라이브러리와 환경을 분석해서 필요한 설정을 자동 적용
- 예시
- db 라이브러리 추가 시
- 자동연결설정
- 웹 라이브러리 추가
- 내장 서버와 스프링 MVC 설정을 자동으로 구성함
- db 라이브러리 추가 시
- starter 의존성 제공
- 목적별로 미리 조합된 의존성 묶음(starter)을 제공함
spring-boot-starter-web,spring-boot-starter-data-jpa
- 설정 파일 최소화
- 복잡한 XML 설정 없이,
application.properties또는application.yml파일만으로 환경 설정이 가능 - 기본값으로도 바로 실행 가능
- 복잡한 XML 설정 없이,
- 자동 설정
- 상용화 가능한 수준의 지원
- 프로덕션 준비기능 내장
- 모니터링, 헬스 체크, 메트릭, 외부 설정 등 상용 서비스 운영에 필요한 기능을 기본 제공(Actuator 등)한다
- 스프링부트 서버 역활과 특징
- 보안, 테스트 , 환경별 설정 지원
- 기본적인 보안 설정, 테스트 라이브러리, 로컬/운영 등 환경별 설정 프로파일 관리 기능도 내장되어 있다
- 프로덕션 준비기능 내장
- 개발 생산성 향상
- 비즈니스 로직에 집중
- 빠른 프로토타이핑과 마이크로 서비스에 적합
- 독립적 실행, 배포 가능
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 버튼을 클릭해 프로젝트를 생성 및 패키징 하고 프로젝트를 내 컴퓨터의 선택한 디렉토리에 다운로드 하면 된다.
- Spring Boot DevTools : Spring Boot 애플리케이션을 개발하고 디버깅을 하는데 도움을 주는 도구 모음이다.
프로젝트 구조
src/main/java
클래스, 인터페이스 등 Java 관련 파일이 위치하는 디렉터리이다
- @SpringBootApplication
[플젝명]Application.java파일에 있음- 스프링 어플리케이션을 실행하는 역할
- 프로젝트 최상단에 위치해야함(여기서부터 읽음)
- 아래의 3 어노테이션을 한번에 처리함
- @SpringBootConfiguration
- 빈을 생성하는 configuration파일임을 명시함
- 싱글톤으로 빈이 등록될 수 있도록 도와줌
- @EnableAutoConfiguration
- 메타파일을 읽고 정의된 설정을 자동 구성함
- @ComponentScan
- @Component, @Configuration @Repository @Service @RestController
- @SpringBootConfiguration
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가 추가되어 있는 모습을 볼 수 있음