Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- springboot
- 쿠키로그인
- 회고
- 우테코
- 알고리즘
- llm
- 프로젝트
- OOM
- 게시판
- fastapi
- crud
- 프로그래머스
- 로그인
- 세션로그인
- Dockerfile
- Spring
- 코딩테스트
- 커밋 메시지
- cors
- Java
- docker
- 해외봉사
- LV2
- mysql
- spring boot
- 서버 꺼짐
- Lv.2
- 네팔
- openAI
- 부트스트랩
Archives
- Today
- Total
s00jin 님의 블로그
9. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 리스트 & 게시판 상세 페이지 구현하기 본문
프로젝트/하고 싶은거 다해보는 내 사이트
9. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 리스트 & 게시판 상세 페이지 구현하기
s00jin 2025. 8. 21. 16:06BoardController
게시판 관련 url을 매핑하기 위한 컨트롤러를 작성해줬다.
package org.mySite.webBoard.controller;
import lombok.RequiredArgsConstructor;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.repository.BoardRepository;
import org.mySite.webBoard.service.BoardService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@RequiredArgsConstructor
@Controller
public class BoardController {
private final BoardService boardService;
@GetMapping("/board/list")
public String list(Model model) {
List<Board> boardList = this.boardService.getList();
model.addAttribute("boardList", boardList);
return "board_list";
}
@GetMapping(value = "/board/detail/{id}")
public String detail(Model model, @PathVariable("id") Long id){
Board board = this.boardService.getBoard(id);
model.addAttribute("board", board);
return "board_detail";
}
}
- PathVariable 애너테이션으로 id 받아오기 GetMapping에 있는 id랑 PathBariable의 매개변수 이름이 같아야 함
- model 객체에 boardList라는 이름으로 boardList 저장
@RequiredArgsConstructor
- 롬복이 제공하는 애너테이션
- final이 붙은 속성을 포함하는 생성자를 자동으로 만들어 주는 역할
Model
- Model 객체에 값을 담아두면 템플릿에서 그 값을 사용할 수 있음
- 모델 객체는 따로 생성할 필요 없이 컨트롤러의 메서드에 매개변수로 지정하기만 하면 스프링 부트가 자동으로 객체 생성
BoardService
package org.mySite.webBoard.service;
import lombok.RequiredArgsConstructor;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.repository.BoardRepository;
import org.springframework.stereotype.Service;
import org.mySite.DataNotFoundException;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@Service
public class BoardService {
// todo : dto 만들어서 리팩토링하기
// todo : impl 만들어서 분리하기
private final BoardRepository boardRepository;
// 게시판 리스트
public List<Board> getList() {
return this.boardRepository.findAll();
}
// 게시판 상세 페이지
public Board getBoard(Long id){
// id로 게시판 조회
Optional<Board> board = this.boardRepository.findById(id);
// optional 객체이므로 if~else로 검사
if (board.isPresent()){
return board.get();
} else { // 없으면 예외처리
throw new DataNotFoundException("board not found");
}
}
}
findById의 결과가 null일 수도 있기에 Optional로 받아줬다.
board_list.html
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<table>
<thead>
<tr>
<th>제목</th>
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tr th:each="board : ${boardList}">
<td>
<a th:href="@{|/board/detail/${board.id}|}" th:text="${board.subject}"></a>
</td>
<td th:text="${board.createDate}"></td>
</tr>
</tbody>
</table>
- 제목 누르면 상세 페이지로 들어감
board_detail.html
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${board.subject}"></h1>
<div th:text="${board.content}"></div>
</body>
</html>
DataNotFoundException.java
package org.mySite;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "entity not found")
public class DataNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
public DataNotFoundException(String message) {
super(message);
}
}
코드를 다 작성하고 실행하면, 아래와 같은 실행 화면을 볼 수 있다.


- 없는 id 조회 시 404에러 반환
- 디자인은 뒤에 추가되는 블로그에서 추가
'프로젝트 > 하고 싶은거 다해보는 내 사이트' 카테고리의 다른 글
| 11. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 부트 스트랩 적용하기 (0) | 2025.08.21 |
|---|---|
| 10. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 댓글 기능 구현 (0) | 2025.08.21 |
| 8. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | Repository 생성 및 JUnit 테스트 (0) | 2025.08.21 |
| 7. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 엔티티 설계 및 구현 (0) | 2025.08.21 |
| 6. [로그인] JWT 인증 인가를 이용한 로그인 구현하기 | Spring Boot / JWT (1) | 2025.08.17 |