🗄️ Backend/Spring

Spring Boot 기초: 웹 애플리케이션 설정

hjwjo 2024. 11. 10. 13:35

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 설정, 프로퍼티 파일 관리,
컨트롤러 작성타임리프를 통한 뷰 렌더링까지 다양한 개념을 다뤘습니다.
이와 같은 설정을 통해 빠르게 웹 애플리케이션을 개발할 수 있습니다.