스프링부트 기본
스프링부트의 기본동작 요약
스프링부트는 내장된 Tomcat, Jetty, Undertow와 같은 웹 서버를 제공하여 웹 애플리케이션을 구동할 수 있다. 이를 이용하기 위해서는 다음과 같은 방법을 따른다.
STEP1. 스프링부트 웹 의존성 추가
: 스프링부트 웹 기능을 사용하기 위해, spring-boot-starter-web 의존성을 pom.xml 파일 또는 build.gradle 파일에 추가한다.
- <span style="color:green"><b>[메이븐] pom.xml 인 경우</b></span>
```xml
<!-- 중략 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 중략 -->
```
- <span style="color:green"><b>[그래들] build.gradle 인 경우</b></span>
```bash
## 중략
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test' # jUnit 전용
}
## 중략
```
STEP2. @SpringBootApplication 애노테이션 추가
: 스프링부트 어플리케이션의 메인 클래스에 @SpringBootApplication 애노테이션을 추가한다. 이 애노테이션은 @Configuration, @EnableAutoConfiguration, @ComponentScan 애노테이션을 조합한 것으로, 스프링부트 애플리케이션의 설정 정보를 나타낸다.
```java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
```
STEP3. 웹 애플리케이션 작성
: 웹 애플리케이션을 작성한다. 스프링부트에서는 기본적으로 src/main/resources/static 디렉터리에 정적 파일을 두고, src/main/resources/templates 디렉터리에 템플릿 파일을 둔다.
<!-- src/main/resources/templates/hello.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
STEP4. 애플리케이션 실행
: 애플리케이션을 실행하려면, 메인 클래스를 실행하면 된다. 스프링부트는 내장된 웹 서버를 이용하여 애플리케이션을 실행한다.
기타
기본적으로 내장된 웹 서버는 8080 포트를 사용한다.
스프링부트의 의존성 관리
(1). 스타터 의존성
기본적인 스프링 부트 프로젝트의 pom.xml 파일을 보면 의존성 설정이 spring-boot-starter-web과 spring-boot-starter-test 두 개 뿐이고 버전 또한 명시하지 않고 있지만 수 많은 라이브러리들을 알아서 가져온다.
- 스타터 의존성
- 스프링부트에서 제공하는 스타터 의존성은 특정 라이브러리를 사용하기 위해 필요한 다른 라이브러리들을 자동으로 관리해주는 의존성이다.
예를 들어, 스프링부트에서 웹 어플리케이션을 개발하기 위해 사용하는 spring-boot-starter-web 의존성을 추가하면, 내부적으로 Tomcat 웹 서버와 Spring MVC, Jackson 등과 같은 필요한 라이브러리들이 함께 추가된다.
- 메인에서 @SpringBootApplication 호출
- 내부에 @ComponentScan 구현 기능 호출 (conponent-scan 과 동일하다!)
- 내부에 @EnableAutoConfiguration 구현 기능 호출
- Spring Boot에서 Spring에서 많이 쓰는 스프링 빈들을 자동적으로 컨테이너에 등록하는 역할
- autoconfiguration기능을 사용하겠다는 설정
- component scan을 통해서 모든 component 들의 정보와 Spring Boot가 spring.factories 파일에 사전에 정의한 AutoConfiguration 내용에 의해 bean 생성이 진행된다.
- Spring Boot의 meta 파일(spring-boot-autoconfigure/META-INF/spring.factories)을 읽어서 미리 정의 되어있는 자바 설정 파일(@Configuration)들을 빈으로 등록하는 역할을 수행 한다
-
spring-boot-autoconfigure/META-INF/spring.factories
-
사용하는 경우 예시는 다음과 같다.
Spring Boot의 meta 파일(spring-boot-autoconfigure/META-INF/spring.factories)# Auto Configuration Import Listeners org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\ org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener # Auto Configuration Import Filters org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\ org.springframework.boot.autoconfigure.condition.OnBeanCondition,\ org.springframework.boot.autoconfigure.condition.OnClassCondition,\ org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ ....
(2). 의존성 관리 플러그인
- 의존성 관리 플러그인
- 스프링부트에서는 Maven과 Gradle 빌드 도구에서 사용할 수 있는 의존성 관리 플러그인을 제공한다 Maven에서는 spring-boot-maven-plugin을 사용하며, Gradle에서는 org.springframework.boot 플러그인을 사용 한다. 이 플러그인을 이용하면, 빌드 시 의존성을 자동으로 관리하고 실행 가능한 JAR 파일을 만들 수 있다.
- [메이븐] pom.xml 인 경우
<project> <dependencies> <!-- 중략 --> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
-
[그래들] build.gradle 인 경우
## 중략 plugins { id 'org.springframework.boot' version '2.6.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } ## 중략
- [메이븐] pom.xml 인 경우
(3). 직접 의존성 추가
- 직접 의존성 추가
- 스타터 의존성으로 제공되지 않는 라이브러리를 사용해야 할 때는, 직접 해당 라이브러리의 의존성을 추가해야 한다. 이를 위해 pom.xml 파일에서
태그를 추가하거나, Gradle에서는 build.gradle 파일에서 dependencies 블록 안에 필요한 라이브러리를 추가합니다. Spring Boot의 gradle 파일(그래들설치경로/build.gradle)
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.webjars:bootstrap:4.5.0' implementation 'org.webjars:jquery:3.5.1' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'mysql:mysql-connector-java' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } }
위와 같은 방법들을 통해 스프링부트는 의존성 관리를 간편하게 해주어 개발자가 더욱 편리하게 어플리케이션을 개발할 수 있도록 도와준다.
Leave a comment