REST API와 마무리 — 읽기 자료
댓글 하나 달 때마다 새로고침되는 v6 — 사용자 경험이 답답.
myreply 테이블 신설(ON DELETE CASCADE FK), Reply 도메인 추가, fetch 로 비동기 전송 후 응답 JSON 을 DOM 에 직접 추가.
-- 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)
@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>
`;
}
댓글 하나 달 때마다 새로고침되는 v6 — 사용자 경험이 답답.
새로고침 없이 댓글이 화면에 즉시 추가된다. v9.