
이 글은 2026년 05월 29일 작성된 글입니다.
오늘은 Next.js 프론트엔드와 Spring Boot REST API를 연동하여 게시글과 댓글의 CRUD 기능을 구현했다. 또한 DTO 설계 원칙과 API 응답 구조에 대해 학습했다.
기존 GET 요청만 처리하던 apiFetch 함수를 확장하여 POST 요청도 처리할 수 있도록 개선했다.
await apiFetch("/api/v1/posts", {
method: "POST",
body: JSON.stringify(data),
});
게시글 작성 후 성공 메시지를 출력하고 상세 페이지로 이동하도록 구현했다.
router.replace(`/posts/${id}`);
게시글 삭제 API와 연동하고 사용자 확인 절차를 추가했다.
if (confirm("정말 삭제하시겠습니까?")) {
// 삭제 요청
}
수정 페이지를 구현하고 기존 데이터를 불러와 수정 API와 연동했다.
setTitle(post.title);
setContent(post.content);
댓글 다건 조회 API를 연동하고 로딩 상태를 처리했다.
const [comments, setComments] = useState<PostCommentDto[] | null>(null);
const [comments, setComments] = useState<PostCommentDto[] | null>(null);
초기값을 빈 배열로 두면 로딩 중인지 데이터가 없는지 구분할 수 없다.
댓글 삭제 후 상태값을 직접 수정하여 화면에 즉시 반영되도록 구현했다.
setComments(
comments.filter(comment => comment.id !== id)
);
댓글 작성 폼을 구현하고 등록 즉시 화면에 반영되도록 처리했다.
setComments([...comments, newComment]);
DTO에는 꼭 필요한 데이터만 포함해야 한다.
좋은 예시
{
"id": 4,
"authorName": "유저3",
"content": "댓글 2-1"
}
좋지 않은 예시
{
"author": {
...
},
"post": {
...
}
}
게시글과 댓글에 작성자 정보를 추가했다.
@ManyToOne
private Member author;