스택큐힙리스트

자바 스프링으로 정적 게시판 만들기 본문

개발

자바 스프링으로 정적 게시판 만들기

스택큐힙리스트 2025. 7. 14. 20:54
반응형

1. 목표 & 준비

“데이터베이스 연결 없이 정적 데이터만으로 게시판을 띄우려면?”

  • 스프링 부트 + Thymeleaf만 있으면 끝!<br>
  • start.spring.io에서 Spring Web, Thymeleaf 두 가지만 선택해 프로젝트를 내려받는다.

IntelliJ·VS Code·STS 등 어떤 IDE든 OK. 생성-실행까지 1분이면 충분하다.


2. 도메인 모델 – Post

// src/main/java/com/example/board/Post.java
package com.example.board;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class Post {
    private Long id;
    private String title;
    private String writer;
    private String content;
}
  • Lombok를 쓰면 생성자·getter 작성 시간을 줄일 수 있다.
  • DB가 없으므로 @Entity·JPA 설정은 필요 없다.

3. 컨트롤러 – in-memory 게시글 목록

// src/main/java/com/example/board/PostController.java
package com.example.board;

import java.util.List;
import java.util.stream.LongStream;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
public class PostController {

    private final List<Post> posts =
            LongStream.rangeClosed(1, 5)
                      .mapToObj(i -> new Post(
                              i,
                              "샘플 글 " + i,
                              "관리자",
                              "여기에 본문을 적으세요 🚀"))
                      .toList();

    @GetMapping("/posts")
    String list(Model model) {
        model.addAttribute("posts", posts);
        return "posts";           // templates/posts.html
    }

    @GetMapping("/posts/{id}")
    String detail(@PathVariable Long id, Model model) {
        posts.stream()
             .filter(p -> p.getId().equals(id))
             .findFirst()
             .ifPresent(p -> model.addAttribute("post", p));
        return "post";            // templates/post.html
    }
}
  • List<Post>로 게시글을 메모리에 보관하므로 실행할 때마다 초기화된다.
  • /posts : 전체 목록, /posts/{id} : 상세 보기.

4. 뷰 – Thymeleaf 템플릿

src/main/resources/templates/posts.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>게시판</title></head>
<body>
<h1>게시판</h1>
<ul>
  <li th:each="p : ${posts}">
    <a th:href="@{|/posts/${p.id}|}" th:text="${p.title}">제목</a>
    <span th:text="${p.writer}"></span>
  </li>
</ul>
</body>
</html>

src/main/resources/templates/post.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title th:text="${post.title}">상세</title></head>
<body>
<h2 th:text="${post.title}">제목</h2>
<p><b th:text="${post.writer}">작성자</b></p>
<pre th:text="${post.content}">본문</pre>
<a href="/posts">← 목록으로</a>
</body>
</html>
  • th:each·th:text·th:href 등 기본 문법만으로 리스트·상세를 쉽게 그릴 수 있다.
  • 빌드 없이 Ctrl + F5로 브라우저 새로 고침하면 변경 사항이 즉시 반영된다.

5. 실행

./gradlew bootRun
# 또는
mvn spring-boot:run

http://localhost:8080/posts에 접속하면 게시글 5개가 보이고, 제목을 클릭하면 상세 페이지가 열린다.

 


6 요약

  • 정적 게시판은 JPA·DB 없이도 가능—컨트롤러 내부 List로 충분.
  • Thymeleaf는 스프링과 친화적이고, 코드-HTML 분리가 직관적.
  • 추후 DB·페이징·검색을 붙여 나가면 완전한 CRUD 게시판으로 진화한다.
반응형
Comments