본문 바로가기
🛠️ IT 실전 가이드 (SW 도구)

2026 스프링 부트 게시판 만들기 ③: 데이터 쫙 불러오기! 글 목록(List) 구현

by 데브프리 2026. 6. 10.

안녕하세요, 여러분의 든든한 백엔드 길잡이 데브프리입니다.

 

지난 시간에는 사용자가 입력한 데이터를 데이터베이스(DB) 창고에 안전하게 저장하는 '글쓰기 기능'을 완성했습니다. 다들 H2 콘솔 창에서 데이터가 예쁘게 들어간 것을 확인하셨죠?

 

오늘은 창고에 쌓여있는 그 데이터들을 꺼내서, 웹 브라우저 화면에 표(Table) 형태로 깔끔하게 쫙 뿌려주는 '게시글 목록(List) 보기 기능'을 구현해 보겠습니다.

 

어려운 환경 설정은 1, 2탄에서 모두 끝났습니다. 오늘부터는 추가 설치나 복잡한 설정 없이 아주 매끄럽게 진행되니, 가벼운 마음으로 코드를 따라 쳐보세요!

👉 [이전 글 확인하기: 2026 스프링 부트 게시판 만들기 ②: 글쓰기 기능 완성]
https://devlog-tech.tistory.com/entry/spring-boot-board-write-controller-thymeleaf

 

2026 스프링 부트 게시판 만들기 ②: 글쓰기 기능 완성 (Lombok, Controller, Thymeleaf)

안녕하세요, 여러분의 든든한 백엔드 길잡이 데브프리입니다. 지난 시간에는 H2 데이터베이스를 연결하고 Board 엔티티를 만들어 데이터베이스에 게시판 테이블을 띄우는 것까지 성공했습니다.

devlog-tech.tistory.com

 

1. Controller 수정: DB에서 데이터 꺼내오기

사용자가 "게시판 목록 보여줘!"라고 요청하면, 컨트롤러는 DB에서 데이터들을 몽땅 꺼내온 뒤 HTML 화면으로 넘겨주어야 합니다.

 

이때 데이터를 담아서 화면으로 배달해 주는 바구니 역할을 하는 것이 바로 스프링의 Model입니다. 지난 시간에 만들었던 BoardController.java 파일을 열고, 아래 코드를 추가해 줍니다.

스프링 부트 Controller Model 데이터 전달
Model 객체는 컨트롤러에서 생성한 데이터를 HTML(타임리프) 화면으로 넘겨주는 아주 중요한 배달 바구니입니다.

Java
 
package com.데브프리.demo.controller;

import com.데브프리.demo.entity.Board;
import com.데브프리.demo.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; // ⭐️ Model 임포트 필수!
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class BoardController {

    @Autowired
    private BoardRepository boardRepository;

    // --- (지난 시간에 작성한 글쓰기 코드 2개는 그대로 둡니다) ---

    // 3. 게시글 목록을 보여주는 역할 (이번에 추가할 코드)
    @GetMapping("/board/list")
    public String boardList(Model model) {
        
        // boardRepository.findAll() : DB에 있는 Board 테이블의 모든 데이터를 리스트 형태로 가져옵니다.
        // 가져온 데이터를 "list"라는 이름표를 붙여서 model 바구니에 담습니다.
        model.addAttribute("list", boardRepository.findAll());
        
        return "boardlist"; // templates 폴더 안의 boardlist.html을 찾아가라는 뜻!
    }
}

 

2. Thymeleaf HTML 생성: 반복문으로 목록 띄우기

이제 컨트롤러가 넘겨준 "list" 바구니를 받아서 화면에 그려줄 HTML 파일을 만들 차례입니다. 데이터가 10개든 100개든 일일이 HTML을 작성할 필요 없이, 타임리프의 반복문(th:each)을 사용하면 코드를 단 몇 줄로 끝낼 수 있습니다.

  1. 좌측 탐색기에서 src > main > resources > templates 폴더를 우클릭합니다.
  2. [New] > [HTML File]을 클릭하고 파일 이름을 boardlist.html로 만듭니다.

타임리프 th:each 반복문 게시판 HTML
th:each 문법을 사용하면 리스트 안에 있는 데이터 개수만큼 테이블 행(tr)을 자동으로 생성해 줍니다.

HTML
 
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>게시글 목록</title>
    <style>
        body { font-family: sans-serif; padding: 50px; }
        .layout { width: 800px; margin: 0 auto; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ddd; padding: 12px; text-align: center; }
        th { background-color: #00ED64; color: black; }
        .btn { display: inline-block; margin-top: 20px; padding: 10px 20px; background-color: #00ED64; color: black; text-decoration: none; border-radius: 4px; font-weight: bold; }
    </style>
</head>
<body>
    <div class="layout">
        <h2>게시글 목록</h2>
        
        <table>
            <thead>
                <tr>
                    <th>글번호</th>
                    <th>제목</th>
                </tr>
            </thead>
            <tbody>
                <tr th:each="board : ${list}">
                    <td th:text="${board.id}">1</td>
                    <td th:text="${board.title}">여기에 제목이 들어갑니다</td>
                </tr>
            </tbody>
        </table>
        
        <a href="/board/write" class="btn">글쓰기</a>
    </div>
</body>
</html>

 

3. 실행 및 결과 확인!

모든 준비가 끝났습니다. 이번에는 오류 화면 없이 아주 시원하게 데이터가 출력될 것입니다.

  1. 메인 클래스를 실행하여 서버를 켭니다.
  2. 브라우저를 열고 http://localhost:8080/board/list 에 접속합니다.
  3. 2탄에서 열심히 테스트하며 작성해 두었던 글들이 깔끔한 표(Table) 형태로 쫙 출력되는 것을 확인합니다.
  4. 아래쪽의 [글쓰기] 버튼을 눌러 새 글을 하나 더 작성해 보고, 다시 리스트 주소로 돌아와서 목록이 갱신되는지 직접 테스트해 보세요!

스프링 부트 게시판 목록 조회 성공 화면
컨트롤러의 findAll() 메서드와 타임리프의 반복문이 만나, DB의 데이터를 웹 브라우저에 완벽하게 그려냈습니다.

 

마무리

오늘은 컨트롤러의 Model 객체를 통해 DB의 데이터를 화면으로 전달하고, 타임리프의 강력한 반복문(th:each)을 이용해 깔끔한 게시판 목록을 완성해 보았습니다.

 

데이터베이스에서 데이터를 꺼내와 화면에 뿌려주는 이 과정은 실무에서 '조회(Read)' 파트의 가장 기초이자 핵심이 되는 로직입니다.

 

이제 게시판의 구색이 거의 다 갖춰졌네요! 다음 4탄에서는 목록에서 특정 제목을 클릭했을 때, 해당 글의 '내용'을 자세히 볼 수 있는 상세 보기 페이지를 만들어보겠습니다.

 

점점 완성되어 가는 게시판을 보며 코딩의 재미를 느끼셨길 바랍니다. 지금까지 데브프리였습니다. 감사합니다!