스프링부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 서브 프로젝트로, 복잡한 설정 없이 빠르고 간편하게 스프링 애플리케이션을 개발할 수 있도록 도와줍니다. 내장 웹 서버를 제공하여 최소한의 설정으로 웹 애플리케이션을 실행할 수 있으며, 반복적인 설정 작업을 줄여 개발 생산성을 높여줍니다.

본론

1. 스프링부트란?

스프링부트는 스프링 프레임워크의 복잡한 설정을 간소화하여 독립 실행형 애플리케이션을 쉽게 만들 수 있도록 설계되었습니다. 내장 웹 서버를 통해 별도의 서버 설정 없이 애플리케이션을 실행할 수 있으며, 최소한의 스프링 설정으로 빠르게 개발을 시작할 수 있습니다.

2. 스프링부트의 장점

  • 간편한 설정: 복잡한 XML 설정 파일 작성 없이, 어노테이션과 기본 설정으로 애플리케이션을 구성할 수 있습니다.
  • 내장 웹 서버 제공: Tomcat, Jetty 등의 웹 서버를 내장하고 있어, 별도의 서버 설치 없이 애플리케이션을 실행할 수 있습니다.
  • 다양한 스타터 패키지 제공: 웹, 데이터베이스, 시큐리티 등 다양한 기능을 손쉽게 추가할 수 있는 스타터 패키지를 제공합니다.
  • 자동 구성 기능: 스프링부트는 애플리케이션의 의존성을 분석하여 자동으로 필요한 빈(bean)을 구성해줍니다.

3. 스프링부트 프로젝트 생성하기

스프링부트 프로젝트를 생성하는 방법은 여러 가지가 있지만, 그 중 가장 간편한 방법은 스프링 이니셜라이저(Spring Initializr)를 이용하는 것입니다.

3.1 스프링 이니셜라이저 사용

  1. 스프링 이니셜라이저 접속: https://start.spring.io/에 접속합니다.
  2. 프로젝트 설정:
    • Project: Maven Project 또는 Gradle Project 중 선택합니다.
    • Language: Java를 선택합니다.
    • Spring Boot: 최신 버전을 선택합니다.
    • Project Metadata:
      • Group: 예: com.example
      • Artifact: 예: demo
    • Dependencies: ‘Add Dependencies’ 버튼을 클릭하여 필요한 의존성을 추가합니다. 예를 들어, ‘Spring Web’을 선택합니다.
  3. 프로젝트 생성: ‘Generate’ 버튼을 클릭하여 프로젝트를 생성하고, 다운로드된 ZIP 파일을 압축 해제합니다.

3.2 IDE를 통한 프로젝트 임포트

압축을 해제한 프로젝트를 사용 중인 IDE(예: IntelliJ IDEA, Eclipse)에서 임포트합니다.

  • IntelliJ IDEA:

    1. 프로젝트 열기: ‘Open’을 클릭하여 프로젝트 폴더를 선택합니다.
    2. 빌드 도구 선택: Maven 또는 Gradle을 선택합니다.
    3. 프로젝트 구조 설정: 필요에 따라 JDK 버전 등을 설정합니다.
  • Eclipse:

    1. 프로젝트 임포트: ‘File’ > ‘Import’ > ‘Existing Maven Projects’를 선택합니다.
    2. 프로젝트 선택: 프로젝트 폴더를 선택하고 ‘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’ 버튼을 클릭하여 애플리케이션을 실행합니다.
  • 명령어로 실행:
    1. 빌드: 프로젝트 폴더에서 터미널을 열고, ./mvnw clean package 명령어를 실행하여 JAR 파일을 생성합니다.
    2. 실행: 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"); // 대기열 크기 설정
            });
        };
    }
}

이 설정 파일은 프로그래밍 방식으로 톰캣의 포트, 컨텍스트 경로, 쓰레드 수를 설정합니다.

참고자료

댓글남기기