Spring Boot는 Java 기반의 웹 애플리케이션을 빠르고 간편하게 개발할 수 있는 프레임워크입니다.
이번 포스트에서는 Spring Boot를 사용하여 간단한 웹 애플리케이션을 설정하고 실행하는 방법에 대해 상세히 설명합니다.
이 예제에서는 WebConfig
, TestVO
, HomeController
등을 활용하여 Spring Boot 프로젝트를 구성하고,
타임리프(Thymeleaf)를 사용한 템플릿 렌더링까지 다룹니다.
1. Spring Boot 프로젝트 설정
WebConfig.java
- 스프링 설정 파일
WebConfig.java
는 Spring의 설정 파일로, 스프링 빈을 등록하고 프로퍼티 값을 주입받을 수 있는 역할을 합니다. 또한, @Value
애노테이션을 사용하여 application.properties
또는 외부 프로퍼티 파일에서 설정된 값을 가져올 수 있습니다.
package cohttp://m.simple.basic.config;
import cohttp://m.simple.basic.command.TestVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration // 이 클래스는 Spring 설정 파일임을 나타냅니다.
@PropertySource("classpath:/hello.properties") // hello.properties 파일을 참조합니다.
public class WebConfig implements WebMvcConfigurer {
@Value("${server.port}") // application.properties 파일의 server.port 값을 주입받습니다.
String port;
@Value("${hello}") // hello.properties 파일의 hello 값을 주입받습니다.
String hello;
@Value("${bye}") // hello.properties 파일의 bye 값을 주입받습니다.
String bye;
@Autowired
ApplicationContext applicationContext; // 스프링의 ApplicationContext를 주입받습니다.
@Bean // 이 메서드를 실행해서 반환하는 객체를 스프링 빈으로 등록합니다.
public void test() {
TestVO vo = applicationContext.getBean(TestVO.class); // TestVO 빈을 가져옵니다.
System.out.println("context 안에 TestVO 빈: " + vo);
System.out.println("application.properties의 server.port 값: " + port);
System.out.println("hello의 키값: " + hello);
System.out.println("bye의 키값: " + bye);
}
}
hello.properties
- 프로퍼티 파일
hello.properties
파일은 애플리케이션의 설정 값을 외부에서 관리할 수 있도록 해주는 프로퍼티 파일입니다. 아래 예시에서는 서버 포트, 애플리케이션 이름, 그리고 간단한 텍스트 값을 설정했습니다.
spring.application.name=BootBasic # 애플리케이션 이름
server.port=8181 # 서버 포트 번호
spring.devtools.livereload.enabled=true # 개발 중 라이브 리로드 활성화
spring.devtools.restart.enabled=true # 애플리케이션 재시작 활성화
hello=hello world # hello 메시지
bye=bye world # bye 메시지
TestVO.java
- 데이터 객체
TestVO.java
는 데이터 객체(Data Object)로, 롬복(Lombok)을 사용하여 클래스에 필요한 기본적인 메서드들(생성자, getter, setter 등)을 자동으로 생성하는 예제입니다.
package cohttp://m.simple.basic.command;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor // 모든 멤버 변수를 받는 생성자 생성
@NoArgsConstructor // 기본 생성자 생성
@Data // getter, setter, toString을 자동으로 생성
public class TestVO {
private String name; // 이름
private int age; // 나이
private String addr; // 주소
}
HomeController.java
- 컨트롤러 클래스
HomeController.java
는 Spring MVC에서 웹 요청을 처리하는 컨트롤러 클래스입니다. @GetMapping("/")
애노테이션을 사용하여 루트 경로(/
)로 들어오는 GET 요청을 처리하고, index.html
템플릿을 반환합니다.
package cohttp://m.simple.basic.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller // 이 클래스가 컨트롤러 역할을 함을 명시
public class HomeController {
@GetMapping("/") // 루트 경로로 GET 요청이 오면 실행됩니다.
public String home() {
return "index"; // src/main/resources/templates/index.html 파일을 반환합니다.
}
}
build.gradle
- Gradle 빌드 스크립트
Gradle을 사용하여 의존성을 관리합니다. build.gradle
파일에는 Spring Boot, Thymeleaf, Lombok, 그리고 테스트 의존성 등이 포함되어 있습니다.
plugins {
id 'org.springframework.boot' version '2.7.18' // Spring Boot 플러그인
id 'io.spring.dependency-management' version '1.1.6' // 의존성 관리 플러그인
id 'java' // Java 플러그인
}
group = 'com.example' // 그룹 아이디
version = '0.0.1-SNAPSHOT' // 버전
sourceCompatibility = '11' // Java 버전
repositories {
mavenCentral() // 중앙 Maven 저장소
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // 타임리프
implementation 'org.springframework.boot:spring-boot-starter-web' // 웹 모듈
compileOnly 'org.projectlombok:lombok' // Lombok
developmentOnly 'org.springframework.boot:spring-boot-devtools' // 개발 도구
annotationProcessor 'org.projectlombok:lombok' // Lombok 어노테이션 프로세서
testImplementation 'org.springframework.boot:spring-boot-starter-test' // 테스트 모듈
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // JUnit 플랫폼 런처
}
test {
useJUnitPlatform() // JUnit 플랫폼 사용
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11) // JDK 버전 설정
}
}
2. 타임리프(Thymeleaf) 설정 및 사용
Spring Boot에서는 타임리프(Thymeleaf)를 템플릿 엔진으로 사용하여 HTML 파일을 뷰로 렌더링할 수 있습니다. 타임리프는 서버 사이드에서 HTML을 렌더링할 수 있게 해주며, Spring Boot와 잘 통합됩니다.
타임리프 의존성 추가
build.gradle
파일에 이미 타임리프 의존성이 추가되어 있습니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // 타임리프 뷰
implementation 'org.springframework.boot:spring-boot-starter-web' // 부트 웹 모듈
// 나머지 의존성
}
타임리프 템플릿 파일 작성
타임리프 템플릿 파일은 src/main/resources/templates
폴더에 위치해야 하며, index.html
템플릿 파일을 작성해봅니다.
src/main/resources/templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>타임리프를 사용한 뷰 렌더링</h1>
<p>Spring Boot와 Thymeleaf를 통합하여 만든 예제입니다.</p>
</body>
</html>
컨트롤러 수정
컨트롤러에서 타임리프 템플릿을 반환하도록 설정합니다. 이전에 작성한 HomeController
에서 루트 경로로 들어오는 요청에 대해 index.html
을 반환하도록 합니다.
package cohttp://m.simple.basic.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller // 이 클래스가 컨트롤러 역할을 함을 명시
public class HomeController {
@GetMapping("/") // 루트 경로로 GET 요청이 오면 실행됩니다.
public String home() {
return "index"; // src/main/resources/templates/index.html 파일을 반환합니다.
}
}
3. 애플리케이션 실행
애플리케이션을 실행하고, 브라우저에서 http://localhost:8181/
로 접속하면, 타임리프가 렌더링한 index.html
템플릿이 출력됩니다.
실행 방법
Gradle을 통한 실행:
./gradlew bootRun
IDE (IntelliJ IDEA, Eclipse 등):
HomeController
가 정의된 프로젝트를 실행하면, 자동으로 내장 Tomcat 서버가 시작됩니다.
브라우저에서 http://localhost:8181/
에 접
속하면, 타임리프 템플릿이 렌더링된 결과를 확인할 수 있습니다.
이번 포스트에서는 Spring Boot를 사용하여 간단한 웹 애플리케이션을 설정하는 방법을 배웠습니다.
이 예제에서는 기본적인 Spring Boot 설정, 프로퍼티 파일 관리,
컨트롤러 작성 및 타임리프를 통한 뷰 렌더링까지 다양한 개념을 다뤘습니다.
이와 같은 설정을 통해 빠르게 웹 애플리케이션을 개발할 수 있습니다.
'🗄️ Backend > Spring' 카테고리의 다른 글
HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화 (1) | 2024.11.10 |
---|---|
스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현 (8) | 2024.11.09 |
스프링 프레임워크(Spring Framework) 기본 개념과 활용 (3) | 2024.11.09 |