Spring Boot로 블로그 만들기: Thymeleaf + 게시판 구현 가이드
복잡한 CMS 대신, 내 손으로 만드는 가볍고 빠른 블로그! 스프링부트와 타임리프를 이용해 게시판 기반 블로그를 직접 구축해봅니다.
안녕하세요, 개발자 여러분! 오늘은 Java 백엔드 개발자라면 한 번쯤 꿈꿔본 Spring Boot로 블로그 만들기 프로젝트를 소개하려 합니다. 실제 운영 가능한 게시판 기반의 블로그를 구축하며, Thymeleaf 템플릿, JPA 기반 게시글 CRUD, 그리고 정적 페이지 구성까지 함께 배워봅니다. 실무에 적용할 수 있는 수준으로 구성했으니, 꼭 끝까지 따라와 주세요!
📌 바로가기 목차
| 집중력 있게 작업 중인 Spring Boot 남성 개발자 대표 썸네일 이미지 |
1. 프로젝트 생성 및 환경 설정
Spring Initializr(start.spring.io)에서 Spring Boot + Gradle + Java 17 기반 프로젝트를 생성합니다. 필수로 추가할 의존성은 다음과 같습니다.
| 의존성 항목 | 설명 |
|---|---|
| Spring Web | REST 컨트롤러 및 MVC 기반 웹 개발 |
| Thymeleaf | 서버 템플릿 엔진, HTML 렌더링용 |
| Spring Data JPA | DB와의 매핑 처리 (ORM) |
| H2 Database | 로컬 테스트용 인메모리 DB |
Spring Initializr에서 Spring Boot 프로젝트를 생성하고 필요한 의존성을 설정합니다. 다음은 build.gradle에 의존성을 추가하는 예시입니다.
// build.gradle 설정 예시
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
2. 게시글 엔티티 및 JPA 설정
기본적인 게시글 테이블은 `title`, `content`, `author`, `createdDate` 등의 필드로 구성합니다. 엔티티 클래스는 다음과 같이 구성합니다.
@Entity
public class Post {
@Id @GeneratedValue
private Long id;
private String title;
private String content;
private String author;
@CreationTimestamp
private LocalDateTime createdDate;
// Getter, Setter, Constructor
}
JPA를 활용해 게시글 정보를 담을 Entity 클래스를 생성합니다. 기본적으로 id, 제목, 내용, 작성자, 작성일을 포함합니다.
// Post.java
package com.example.blog.domain;
import jakarta.persistence.*;
import java.time.LocalDateTime;
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
private String author;
private LocalDateTime createdDate = LocalDateTime.now();
public Post() {}
public Post(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
// Getter, Setter 생략
}
3. Thymeleaf로 페이지 구성하기
템플릿 엔진인 Thymeleaf는 HTML5와 완전히 호환되는 뷰 템플릿으로, 동적 콘텐츠를 깔끔하게 처리할 수 있습니다. 주요 파일은 아래처럼 구성합니다.
- index.html: 메인 페이지
- post-list.html: 게시글 목록
- post-detail.html: 게시글 상세 보기
Spring Data JPA의 기능을 활용해 Post 엔티티를 관리할 Repository 인터페이스를 구성합니다.
// PostRepository.java
package com.example.blog.repository;
import com.example.blog.domain.Post;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository {
// 기본적인 CRUD는 JpaRepository가 자동 구현합니다.
}
![]() |
| Spring Boot 블로그 만들기 – 게시판 기능을 설명하는 20대 여성 개발자 인포그래픽 |
4. 게시판 CRUD 컨트롤러 만들기
Controller에서는 게시글 등록, 수정, 삭제, 조회 기능을 각각의 요청 URL과 연결합니다. 간단한 CRUD 매핑은 다음과 같습니다.
| HTTP Method | URI | 설명 |
|---|---|---|
| GET | /posts | 게시글 목록 조회 |
| GET | /posts/{id} | 게시글 상세 보기 |
| POST | /posts | 게시글 등록 |
| PUT | /posts/{id} | 게시글 수정 |
| DELETE | /posts/{id} | 게시글 삭제 |
CRUD 요청을 처리하는 게시판 컨트롤러 예시입니다. 게시글 목록 조회 및 상세보기, 등록을 포함합니다.
// PostController.java
package com.example.blog.controller;
import com.example.blog.domain.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
public class PostController {
private final PostRepository repository;
public PostController(PostRepository repository) {
this.repository = repository;
}
@GetMapping("/posts")
public String list(Model model) {
model.addAttribute("posts", repository.findAll());
return "post-list";
}
@GetMapping("/posts/new")
public String createForm() {
return "post-form";
}
@PostMapping("/posts")
public String save(Post post) {
repository.save(post);
return "redirect:/posts";
}
}
5. 예외 처리와 유효성 검사
예외 상황(없는 게시글 ID 접근, 폼 입력 오류 등)에 대한 전역 처리와 입력값 검증은 사용자 경험 향상에 필수입니다. 대표적으로 아래와 같은 방식으로 구성합니다.
- @Valid + BindingResult를 사용하여 유효성 체크
- @ControllerAdvice + @ExceptionHandler로 에러 핸들링
- 필수 입력값 누락 시 사용자에게 명확한 메시지 표시
게시글 목록을 보여주는 Thymeleaf 템플릿 예시입니다. 아래 코드는 HTML에 특수문자를 이스케이프 처리하여 블로그스팟에서 올바르게 렌더링되도록 구성하였습니다.
<!-- post-list.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>게시글 목록</title>
</head>
<body>
<h1>📚 게시글 목록</h1>
<a href="/posts/new">➕ 새 글 작성</a>
<ul>
<li th:each="post : ${posts}">
<a th:href="@{'/posts/' + ${post.id}}" th:text="${post.title}"></a>
<span th:text="|작성자: ${post.author}|"></span>
</li>
</ul>
</body>
</html>
| Thymeleaf 기반 블로그를 직접 만드는 여성 개발자 – 썸네일 이미지 |
6. 로컬 테스트 및 배포 전략
작성한 블로그는 로컬환경에서 테스트 후 Docker 또는 AWS EC2 환경에 배포할 수 있습니다. 주요 전략은 다음과 같습니다.
- Gradle로 JAR 파일 빌드 후 `java -jar` 실행
- `application.properties`에 포트, DB 정보 환경별 분리
- EC2에 Dockerfile 작성하여 컨테이너 배포
Spring Boot 실행 시 테스트 데이터를 삽입하기 위한 CommandLineRunner 사용 예시입니다.
// BlogApplication.java
package com.example.blog;
import com.example.blog.domain.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
@Bean
CommandLineRunner init(PostRepository repository) {
return args -> {
repository.save(new Post("첫 글입니다", "내용입니다.", "관리자"));
repository.save(new Post("두 번째 글", "설명 추가", "홍길동"));
};
}
}
![]() |
| Java와 Spring Boot를 활용한 블로그 구축 – 남성 전문 개발자 인포그래픽 |
7. 자주 묻는 질문 (FAQ)
네, 가능합니다. JSP, Mustache, React 같은 다양한 뷰 템플릿 또는 프론트엔드 프레임워크를 사용할 수 있습니다. 다만, 서버 사이드 렌더링이 필요하다면 Thymeleaf가 가장 많이 사용됩니다.
JPA는 생산성이 높고 코드량이 적어 빠르게 개발할 수 있습니다. 복잡한 SQL 처리나 성능 최적화가 중요할 경우엔 MyBatis가 유리합니다. 이번 프로젝트처럼 CRUD 위주라면 JPA가 효율적입니다.
아니요. H2는 테스트나 개발 단계에서만 사용하는 인메모리 DB입니다. 상용 환경에서는 MySQL, PostgreSQL, MariaDB 등을 사용합니다.
충분합니다. 대부분의 블로그는 게시글 목록, 글쓰기, 수정, 삭제 기능만으로도 운영 가능합니다. 추가로 카테고리나 댓글 기능을 붙이면 확장성도 높일 수 있습니다.
터미널에 출력되는 로그 외에도, Logback 설정을 통해 파일로 로그를 남기거나, Spring Boot Actuator + 로그 모니터링 툴을 함께 사용하면 보다 안정적인 운영이 가능합니다.
8. 마무리 요약
✅ Spring Boot로 나만의 블로그를 만들자
복잡한 CMS 없이도 자바 기반의 완성도 높은 블로그를 만들 수 있습니다.
게시판 CRUD를 기반으로 글을 작성하고, Thymeleaf 템플릿을 활용해 깔끔한 인터페이스를 제공하며,
JPA와 예외처리를 통해 안정적인 데이터 관리를 구현할 수 있습니다.
개발자라면 한 번쯤 도전해볼 만한 가치가 충분한 프로젝트입니다.
직접 블로그를 만들며 실력을 키워보세요!


댓글
댓글 쓰기