★ PART · REST

비동기 댓글

Spring 기초
SMHRD

학습 목표

1. 문제

댓글 하나 달 때마다 새로고침되는 v6 — 사용자 경험이 답답.

2. 새 도구

새 테이블 + FK + Ajax: myreply 테이블 신설 (ON DELETE CASCADE), Reply 도메인 추가, fetch 로 비동기 등록 후 응답 JSON 을 DOM 에 직접 추가.

3. 코드

-- DB: 새 테이블 + FK CREATE TABLE myreply ( num INT PRIMARY KEY AUTO_INCREMENT, content VARCHAR(500) NOT NULL, boardnum INT NOT NULL, writer VARCHAR(50) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (boardnum) REFERENCES myboard(num) ON DELETE CASCADE ); // 도메인 (com.smhrd.domain.Reply) @Data @AllArgsConstructor @NoArgsConstructor public class Reply { private int num; private String content; private int boardnum; private String writer; private LocalDateTime createdAt; } // 서버 (com.smhrd.controller) @RestController @RequestMapping("/api/replies") public class ReplyApiController { @GetMapping public List<Reply> list(@RequestParam int boardnum) { return service.list(boardnum); } @PostMapping public Reply add(@RequestBody Reply r, HttpSession s) { Member u = (Member) s.getAttribute("loginUser"); r.setWriter(u.getId()); return service.add(r); } } // 클라이언트 JS async function addReply(boardnum, content) { const res = await fetch('/api/replies', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({boardnum, content}) }); const newReply = await res.json(); document.querySelector('#replyList').innerHTML += ` <div>${newReply.writer}: ${newReply.content}</div> `; }

4. 정리

5. Before / After

전 차시

댓글 하나 달 때마다 새로고침되는 v6 — 사용자 경험이 답답.

이번 차시

새로고침 없이 댓글이 화면에 즉시 추가된다. v9.

학습 확인 체크리스트