스프링부트 기본설정 및 내장톰켓 설정 방법
스프링부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 서브 프로젝트로, 복잡한 설정 없이 빠르고 간편하게 스프링 애플리케이션을 개발할 수 있도록 도와줍니다. 내장 웹 서버를 제공하여 최소한의 설정으로 웹 애플리케이션을 실행할 수 있으며, 반복적인 설정 작업을 줄여 개발 생산성을 높여줍니다.
본론
1. 스프링부트란?
스프링부트는 스프링 프레임워크의 복잡한 설정을 간소화하여 독립 실행형 애플리케이션을 쉽게 만들 수 있도록 설계되었습니다. 내장 웹 서버를 통해 별도의 서버 설정 없이 애플리케이션을 실행할 수 있으며, 최소한의 스프링 설정으로 빠르게 개발을 시작할 수 있습니다.
2. 스프링부트의 장점
- 간편한 설정: 복잡한 XML 설정 파일 작성 없이, 어노테이션과 기본 설정으로 애플리케이션을 구성할 수 있습니다.
- 내장 웹 서버 제공: Tomcat, Jetty 등의 웹 서버를 내장하고 있어, 별도의 서버 설치 없이 애플리케이션을 실행할 수 있습니다.
- 다양한 스타터 패키지 제공: 웹, 데이터베이스, 시큐리티 등 다양한 기능을 손쉽게 추가할 수 있는 스타터 패키지를 제공합니다.
- 자동 구성 기능: 스프링부트는 애플리케이션의 의존성을 분석하여 자동으로 필요한 빈(bean)을 구성해줍니다.
3. 스프링부트 프로젝트 생성하기
스프링부트 프로젝트를 생성하는 방법은 여러 가지가 있지만, 그 중 가장 간편한 방법은 스프링 이니셜라이저(Spring Initializr)를 이용하는 것입니다.
3.1 스프링 이니셜라이저 사용
- 스프링 이니셜라이저 접속: https://start.spring.io/에 접속합니다.
- 프로젝트 설정:
- Project: Maven Project 또는 Gradle Project 중 선택합니다.
- Language: Java를 선택합니다.
- Spring Boot: 최신 버전을 선택합니다.
- Project Metadata:
- Group: 예:
com.example
- Artifact: 예:
demo
- Group: 예:
- Dependencies: ‘Add Dependencies’ 버튼을 클릭하여 필요한 의존성을 추가합니다. 예를 들어, ‘Spring Web’을 선택합니다.
- 프로젝트 생성: ‘Generate’ 버튼을 클릭하여 프로젝트를 생성하고, 다운로드된 ZIP 파일을 압축 해제합니다.
3.2 IDE를 통한 프로젝트 임포트
압축을 해제한 프로젝트를 사용 중인 IDE(예: IntelliJ IDEA, Eclipse)에서 임포트합니다.
-
IntelliJ IDEA:
- 프로젝트 열기: ‘Open’을 클릭하여 프로젝트 폴더를 선택합니다.
- 빌드 도구 선택: Maven 또는 Gradle을 선택합니다.
- 프로젝트 구조 설정: 필요에 따라 JDK 버전 등을 설정합니다.
-
Eclipse:
- 프로젝트 임포트: ‘File’ > ‘Import’ > ‘Existing Maven Projects’를 선택합니다.
- 프로젝트 선택: 프로젝트 폴더를 선택하고 ‘Finish’를 클릭합니다.
4. 스프링부트 프로젝트 구조 이해
스프링부트 프로젝트는 다음과 같은 기본 구조를 가집니다:
demo
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com.example.demo
│ │ │ └── DemoApplication.java
│ │ └── resources
│ │ ├── static
│ │ ├── templates
│ │ └── application.properties
│ └── test
│ └── java
│ └── com.example.demo
│ └── DemoApplicationTests.java
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md
- DemoApplication.java: 애플리케이션의 진입점으로,
@SpringBootApplication
어노테이션이 적용되어 있습니다. - application.properties: 애플리케이션의 설정 파일로, 데이터베이스 연결 정보 등 다양한 설정을 정의합니다.
- static: 정적 자원(CSS, JS, 이미지 등)을 저장하는 폴더입니다.
- templates: Thymeleaf 등 템플릿 엔진을 사용하는 뷰 파일을 저장하는 폴더입니다.
5. 스프링부트 애플리케이션 실행하기
스프링부트 애플리케이션을 실행하는 방법은 다음과 같습니다:
- IDE에서 실행:
DemoApplication.java
파일을 열고, ‘Run’ 버튼을 클릭하여 애플리케이션을 실행합니다. - 명령어로 실행:
- 빌드: 프로젝트 폴더에서 터미널을 열고,
./mvnw clean package
명령어를 실행하여 JAR 파일을 생성합니다. - 실행:
java -jar target/demo-0.0.1-SNAPSHOT.jar
명령어를 사용해 애플리케이션을 실행합니다.
- 빌드: 프로젝트 폴더에서 터미널을 열고,
6. 스프링부트 설정과 활용
6.1 application.properties
예제
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=password
6.2 간단한 컨트롤러 작성
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
7. 내장 톰캣 설정하기
7.1 톰캣 포트 변경
기본적으로 스프링부트의 내장 톰캣은 포트 8080에서 실행됩니다. 이를 변경하려면 application.properties
파일에 다음 설정을 추가하면 됩니다.
application.properties
server.port=9090
application.yml
server:
port: 9090
위 설정으로 톰캣이 9090 포트에서 실행됩니다.
7.2 톰캣 쓰레드 설정
내장 톰캣은 쓰레드 풀을 사용하여 요청을 처리합니다. 최소 및 최대 쓰레드 수를 설정하여 성능을 최적화할 수 있습니다.
application.properties
server.tomcat.threads.min=10
server.tomcat.threads.max=200
application.yml
server:
tomcat:
threads:
min: 10
max: 200
7.3 톰캣 연결 시간 초과 설정
톰캣의 연결 시간 초과 설정은 다음과 같이 지정할 수 있습니다.
application.properties
server.tomcat.connection-timeout=30000
application.yml
server:
tomcat:
connection-timeout: 30000
위 설정은 연결 시간 초과를 30초(30,000밀리초)로 설정합니다.
7.4 톰캣 커넥터 설정
커넥터 설정은 HTTP, HTTPS, 압축, 버퍼 크기 등을 정의합니다.
application.properties
server.tomcat.max-http-header-size=8192
server.tomcat.max-connections=200
server.tomcat.accept-count=100
server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
server.compression.min-response-size=1024
max-http-header-size
: HTTP 헤더의 최대 크기max-connections
: 톰캣이 수용할 수 있는 최대 동시 연결 수accept-count
: 연결 대기열 크기compression.enabled
: HTTP 응답 압축 활성화compression.mime-types
: 압축할 MIME 유형compression.min-response-size
: 압축 활성화 최소 응답 크기
7.5 HTTPS 설정
내장 톰캣에서 HTTPS를 활성화하려면 SSL 인증서를 설정해야 합니다.
application.properties
server.port=8443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=yourpassword
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat
위 설정은 keystore.p12
파일을 사용하여 HTTPS를 활성화합니다.
application.yml
server:
port: 8443
ssl:
key-store: classpath:keystore.p12
key-store-password: yourpassword
key-store-type: PKCS12
key-alias: tomcat
7.6 톰캣 설정을 Java Config로 변경하기
Java Configuration으로 내장 톰캣 설정을 커스터마이징할 수도 있습니다.
TomcatCustomizer.java
import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatCustomizer {
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customTomcat() {
return factory -> {
factory.setPort(8081); // 포트 설정
factory.setContextPath("/api"); // 컨텍스트 경로 설정
factory.addConnectorCustomizers(connector -> {
connector.setProperty("maxThreads", "200"); // 최대 쓰레드 설정
connector.setProperty("acceptCount", "100"); // 대기열 크기 설정
});
};
}
}
이 설정 파일은 프로그래밍 방식으로 톰캣의 포트, 컨텍스트 경로, 쓰레드 수를 설정합니다.
참고자료
- 스프링부트 프로젝트 설정 방법 - https://goddaehee.tistory.com/238
- Spring Initializr - https://start.spring.io/
- 스프링부트 내장 톰캣 설정 - Spring Boot Reference Documentation
- HTTP/HTTPS 설정 가이드 - Baeldung
댓글남기기