[ @PostMapping์ผ๋ก ๋๋คํ ์ซ์ 6๊ฐ ์ ๋ฐ์ดํธํ๊ธฐ ]
๋๊ธ์ ์ ์ฅํ์ฌ
์ต๊ทผ ๋๊ธ 10๊ฐ๋ง ํ๋ฉด์ ์ถ๋ ฅ๋๋ค.
1. ๋์ํ๋ฉด๊ณผ ์ ์ฒด์ฝ๋
๋์ํ๋ฉด
์ ์ฒด์ฝ๋
2. ์ด๋ป๊ฒ ๋ง๋ค์ง ์๊ฐํ๊ธฐ ๐จ๐ป๐ป
+ ์ด๊ฒ์ ๊ฒ ์๋ํด๋ณด๋ฉด์ ๋ง๋ ๊ฑฐ๋ผ, DI๋ ํด๋ฆฐ์ฝ๋๋ฅผ ์งํค์ง ๋ชปํ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ค. ๊ทธ๋์ ๊ฐ๋จํ ๋๊ธ์ฐฝ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
โก ๋๊ธ์ ๊ฐ์ฅ ์ต์ ์ธ 10๊ฐ๋ง ์ถ๋ ฅ๋๋ค.
โป ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊บผ๋ผ๋ DESC๋ฅผ ์ฌ์ฉํ์ฌ 10๊ฐ๋ง ๋ณด์ด๋๋ก ํ๋ค.
โก 25์ ์ด์์ ์ด๊ณผํ์ง ์๋๋ก ํ๋ค.
โป ๊ธ์ด 1์ ์ด์ 25์ ์ดํ๋ก ์ ์ฅ๋๊ฒ ์กฐ๊ฑด์ ์ ์ํ๋ค.
โก repository(DB)์ ์ฐ๊ฒฐํ entity, Controller, ๋๊ธ์ ์ฒ๋ฆฌํ Service๋ฅผ ๋ง๋ค๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
3. ํ๋ฉด ๋ง๋ค๊ธฐ
โก ๋๊ธ์ ์ ๋ ฅํ ๊ณต๊ฐ ๋ง๋ค๊ธฐ.
<form th:action="@{/save}" method="get">
<input class="write" type="text" name="content"
placeholder ="์งง์ ๋๊ธ ๋จ๊ธฐ๊ธฐ (25์์ด๋ด)" maxlength="25">
<button class="save" type="submit"> ์ ์ฅ </button>
</form>
input ํ๊ทธ๋ ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ๋ฐ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค. type์ ์ฌ๋ฌ๊ฐ์ง ์๋ค. text, password, radio ๋ฑ ์๊ณ ๊ทธ ์ค ๊ฐ๋จํ ๋๊ธ์ ์ ์ฅํ๋ ์์ฑ์ text๋ก ํด์คฌ๋ค. placeholder๋ ์ฌ์ฉ์๊ฐ ์ฐฝ์ ์ฌ์ฉํ๊ธฐ ์ ์๋์ฒ๋ผ ๊ธ์๊ฐ ๋ณด์ด๋๋ก ํด์ค๋ค.
input์ ๋ด๊ธด ๋ด์ฉ์ content๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋ด์ง๊ฒ ๋๋ค. form์ด ๋ณด๋ด๋ ์ญํ ์ ํ๋๋ฐ action์ ์ ์ save๊ฐ ์๋ ๊ณณ์ผ๋ก(์ปจํธ๋กค๋ฌ) ์ ์กํ๊ฒ ๋๋ค.
โก ๋๊ธ์ด ๋ณด์ฌ์ง๋ ๊ณต๊ฐ ๋ง๋ค๊ธฐ.
<div class="commentBox">
<li class="font" th:each="comment : ${comments}" th:text="${comment.content}">
comment
</li>
</div>
li ํ๊ทธ๋ HTML ๋ฆฌ์คํธ์ ํฌํจ๋๋ ์์ดํ ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค. ๊ฒ์์ ์์ ์์ด ํ์๋๋ค${comment.contetn)๋ก ํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ๊ฐ์ ธ์๋ค. ์ด ๋ด์ฉ์ ์ด 10๊ฐ ๋๊ธ๋ค์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, each ๋ฐ๋ณต๋ฌธ์ ํตํด ํ๋ฉด์ ์ฐจ๋ก๋ก ์ถ๋ ฅํด์ค๋ค.
4. ๊ตฌ์กฐ ์ค๋ช
๊ถ๊ทน์ ์ผ๋ก ๋๊ธ์ ์์ฑํ๋ฉด ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฅ์ด ๋๋๋ก ๋ง๋ค๊ณ ์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ฅ๋ ๋๊ธ์ ๋ฐ์ ๋ ํฌ์งํ ๋ฆฌ๊น์ง ์ ์ฅํด์ค controller๊ฐ ํ์ํ๋ค. controller๋ save๋ผ๋ ์ค๋ํฌ์ธํธ๋ก ๋๊ธ์ ๋ฐ์ ๊ฒ์ด๋ค. ๋๊ธ์๋ ์กฐ๊ฑด์ด ์์๋ค. 1์ ์ด์ 25์ ์ดํ๋ผ๋ ์กฐ๊ฑด์ด์๋ค. ๊ทธ๋ ๊ธฐ์ ์ด ๋ถ๋ถ์ service๋ฅผ ํตํด ๊ด๋ฆฌํ ๊ฒ์ด๋ค. service์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๋น ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฅ์ด ๋๋๋กํ๋ค.
๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฅ๋ ๋๊ธ 10๊ฐ๋ฅผ ๊บผ๋ด ํ๋ฉด์ ์ถ๋ ฅํ ๊ฒ์ด๋ค. ๋๊ธ 10๊ฐ์ ์กฐ๊ฑด์ ๊ฐ์ฅ ์ต์ ์ ์์ฑ๋ ๊ฒ๋ถํฐ ์ฐจ๋ก๋ก 10๊ฐ๋ผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์กฐ๊ฑด ์ค ๊ฐ์ฅ ์ต์ ์ ์์ฑ๋ ๊ฒ์ด๋ผ๋ ์กฐ๊ฑด์ ๋ง์ถฐ ๋ ํฌ์งํ ๋ฆฌ์ ๋ฉ์๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ค.(๋ด๋ฆผ์ฐจ์ DESC๋ก) ๋๋จธ์ง ์กฐ๊ฑด์ผ๋ก 10๊ฐ๋ง ์ถ๋ ฅ๋๋ ๊ฒ์ด ๋จ์์๋ค. 10๊ฐ๋ง ์ถ๋ ฅ์ํค๊ธฐ ์ํด์ page๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ์ด ๋ฉ์๋๋ service์ ์์ฑํ๋ค. service์ return ๊ฐ์ ๋ ํฌ์งํ ๋ฆฌ์์ ๋ฐ์(๋ด๋ฆผ์ฐจ์) 10๊ฐ๋ง ์ถ๋ ฅ์ํค๋ ๊ฒ์ด๋ค. ๊ทธ ํ controller์ model์ ํตํด ๋ฐ์ ํ๋ฉด์ ์ถ๋ ฅ๋๋๋ก ํ ๊ฒ์ด๋ค.
5. Entity์ Repository ์์ฑํ๊ธฐ.
โก Repository
package com.LottoWeb.LuckyLotto.DB;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface BoardRepository extends JpaRepository<Comment, Long> {
Page<Comment> findAllByOrderByIdDesc(Pageable pageable);
}
Jpa๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ํ ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ํด๋น ํ๋ก์ ํธ์์ ์ด์ฉํ Jpa๊ธฐ๋ฅ์ ๋๊ธ์ ์ ์ฅํด์ฃผ๋ save์ ๋๊ธ์ ์กฐํํ๋ page ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ํตํด CRUD ์ง์์ด ์๋ค.
์ฌ๊ธฐ์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ findAllByOrderByIdDesc๋ก, ๋ชจ๋ ๊ฒ์ ์กฐํํ๊ณ ๊ธฐ์ค์ ์์ด๋๋ก ํ๋ฉฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ดํ๋ค ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ Page<Comment> ํํ๋ก ๋ฐํํ๋ค.
โก Entity
package com.LottoWeb.LuckyLotto.DB;
import jakarta.persistence.*;
import lombok.*;
@Entity //๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํํ๋ค.
@Getter
@NoArgsConstructor (access = AccessLevel.PROTECTED) //ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๋ํดํธ ์์ฑ์ ์์ฑ
@Table(name = "Comment_List")
public class Comment {
@Id //์ํฐํฐ์ ์ฃผ์ ์๋ณ์
@GeneratedValue(strategy = GenerationType.IDENTITY) //์ํฐํฐ์ ์๋ณ์์ ๊ฐ์ ์๋์ผ๋ก ์์ฑ
private Long id;
// ํด๋น ์ํฐํฐ ํ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ผ์ ๋งคํ๋ ๋ ์ ์ฝ์ ๊ฑธ์๋ค.
// 25์ ๊ธธ์ด!
@Column(length = 25)
private String content;
// ๋๊ธ content๋ก ๋ฐ์์จ ๊ฒ์ ํ๋์ ๋๊ธฐ๋ ์์ฑ์.
public Comment(String content) {
this.content = content;
}
/*
@Builder
public Comment(Long id, String content) {
this.id = id;
this.content = content;
}
*/
}
์ํฐํฐ๋ฅผ ์์ฑํ๋ค. ์ํฐํฐ๋ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก ์ด๋ค ์ ๋ณด๋ค์ธ ์ธ์คํด์ค(๋๊ธ์ด ํ๋๋ฉด ์ํฐํฐ ์ฑ๋ฆฝ ๋ถ๊ฐ)๊ฐ ๋ ๊ฐ ์ด์์ด ๋์ด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผํ ์๋ณ์๊ฐ ์์ด์ผํ๋ค. ๋ฐ๋์ ์์ฑ์ ํฌํจํด์ผํ๋ค. ์ฌ๊ธฐ์ ์ ์ผํ ์๋ณ์๋ก Id๋ฅผ ๋ถ์ฌํ๋ค. ์ด๋ ์ค๋ณต๋ ์ ์๋ ๊ฒ์ ์๋ณ์๋ก ๊ณจ๋ผ์ผํ๋ค. ์ด๋ฆ์ด๋, ๋๊ธ์ ์๋ณ์๋ก ๊ณ ๋ฅด๋ฉด ์ค๋ณต๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฑ์ผ๋ก content๋ฅผ ๋ฃ์๋ค. ์ฆ Comment ์ํฐํฐ์ content์ธ ๋๊ธ ์์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
ํด๋น ์ฝ๋๋ ์์ฃผ ๊ฐ๋จํ๊ณ ์ฌ์ด ์ฝ๋๋ค. ๊ทธ์ ๋๊ธ์ ๊บผ๋ด ์กฐํ๋ง ํ๊ธฐ ๋๋ฌธ์ @setter๋ @Builder๋ ์ฌ์ฉํ์ง ์์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ JPA๋ฅผ ์์ํ๊ธฐ๋๋ฌธ์ JPA ๋ฆฌํ๋ ์ ์ฌ์ฉํ์ฌ ๋๊ธ์ ์กฐํํ๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋๊ธ์ ์์ ํ๊ฑฐ๋, ๋ ๋ค์ํ ์์ฑ์ด ์์ฑ๋๋ค๋ฉด @Builder๋ก ๊ด๋ฆฌํด์ฃผ๋ฉด ์ข๋ค. @setter๋ ์์ ์ด ๋ฌด๋ถ๋ณํ๊ฒ ์ผ์ด๋ ์ ์์ด์ ์ถ์ฒํ์ง ์๋๋ค๊ณ ํ๋ค.
6. ๋๊ธ ์ ์ฅํ๊ธฐ
โก Controller ์์ฑํ๊ธฐ.
@GetMapping("/save")
public String saveComment(@RequestParam("content") String content) {
boardService.saveComment(content);
return "redirect:/board";
}
save ์๋ํฌ์ธํธ๋ฅผ ํตํด saveComment ๋ฉ์๋์ ์ฐ๊ฒฐํด์ฃผ์๋ค. ์๊น html์ ์์ฑํ์๋, ๋๊ธ์ content๋ก ๋ณด๋๋ค. ์ด content๋ฅผ ๋ฐ์์ boardService๋ก ๋ณด๋ด๋ ์ญํ ์ ํ๋ ๊ฒ์ด @RequestParam์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. @RequestParam์ ๋๊ธ content๋ฅผ ๋ฐ๊ณ String ํ์ ์ content์ ๋ฃ์ด boardService ํด๋์ค์ saveComment ๋ฉ์๋๋ก ๋ณด๋ธ๋ค. ์ค์ ๋ก ๋ฐ์์ค๋ ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ ("content")๋ ์๋ต๊ฐ๋ฅํ๋ค.
@RequestParam์ ์ฌ์ฉํ๋ฉด HttpServletRequest์ request.getParameter๋ก ๋ฐ์์ค์ผํ๋ ๊ฒ์ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ @RequestParam์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด...?
@GetMapping("/save")
public saveComment(HttpServletRequest request) {
String content = request.getParameter("content");
boardService.saveComment(content);
return "redirect:/board";
}
ํ์ฌ ํ๋ก์ ํธ์์ ํ๋ผ๋ฏธํฐ๊ฐ ํ๋ ๋ฐ์ ์์ง๋ง, ๋ง์ฝ ์ฌ๋ฌ๊ฐ์ ๊ฒฝ์ฐ @RequestParam์ด ์์ฒญ ํจ์จ์ ์ผ ๊ฒ์ด๋ค.
โก Service ์์ฑํ๊ธฐ.
public void saveComment(String content) {
if( content.length() >= 1 && content.length() <= 25 )
boardRepository.save(new Comment(content));
}
๋๊ธ์ด ๋ ํฌ์งํ ๋ฆฌ๋ก ์ ์ฅ๋๊ธฐ ์ , ์กฐ๊ฑด์ ๋ง๋์ง ํ์ธํ๋ค. if๋ฌธ์ ์ฌ์ฉํ์ฌ content์ ๊ธธ์ด๊ฐ 1 ์ด์ 25 ์ดํ๋ฉด Comment ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ content๋ฅผ ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฅํ๋๋ก ์์ฑํ๋ค. ์์์ Entity์ธ Comment ํด๋์ค๋ฅผ ๋ง๋ค์ด๋๋ค. Comment ํด๋์ค์ ์์ฑ์๊ฐ content(๋๊ธ)๋ฅผ ์ธ์๋ก ๋ฐ์ ํ๋์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งคํํ๋ค.
7. ๋๊ธ ์กฐํํ๊ธฐ.
โก Service ์์ฑํ๊ธฐ.
public Page<Comment> get10Comments() {
Pageable pageable = PageRequest.of(0,10);
return boardRepository.findAllByOrderByIdDesc(pageable);
}
Jpa์์ ์ ๊ณตํ๋ ํจ์ pageable๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธ์ ๋ํ๋ผ ๊ฒ์ด๋ค. ๋ฉ์๋ ์ด๋ฆ์ get10Comments, ๋ฐํํ์ ์ Page<Comment>๊ฐ ๋๋ค. ํ ํ์ด์ง์ ๋๊ธ 10๊ฐ๋ง ๋ํ๋ด๋๋ก ํ ๊ฑฐ๋๊น PageRequest.of(int page, int size)๋ก page๊ฐ ๊ฐ์ ธ์ฌ ํ์ด์ง ๊ทธ๋ฆฌ๊ณ ํ ํ์ด์ง์ ํฌํจ๋ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค. ํ์ฌ ์ฝ๋์์ ๋ฐํํ์ ์ Page๋ก ์ค์ ํ๋ค. ๊ทธ๋ฐ๋ฐ ํด๋น ํ๋ก์ ํธ๋ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ List ํ์ ์ ๋ฐํํด๋ ์๊ด์๋ค. (์์ pageable์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.)
โก Controller ์์ฑํ๊ธฐ.
@GetMapping("/board")
public String boardPage(Model model) {
model.addAttribute("comments", boardService.get10Comments());
return "board";
}
์ฒซ ํ๋ฉด์ด ๋ค์ด๊ฐ๋ฉด ์ ์ฅํ ๋๊ธ์ด ๋ํ๋๋๋ก ๋ง๋ค๊ธฐ ์ํด ํ์๋ฆฌํ์ Model์ ํตํด ๋๊ธ์ ๋ฐ์์ฌ ๊ฒ์ด๋ค. ๋ฐฉ๊ธ Service ํด๋์ค์ get10Comments( ) ๋ฉ์๋๋ฅผ ์ ์ํ๋ค. ๋ฉ์๋๋ก ๋ฐ์์จ ๊ฐ(๋ฐ์ดํฐ) comments๋ฅผ ๋ทฐ์ธ ํ์๋ฆฌํ๋ก ์ ๋ฌํ๋ค.
@GetMapping("/save")
public String saveComment(@RequestParam("content") String content) {
boardService.saveComment(content);
return "redirect:/board";
}
๋๊ธ์ด ์ ์ฅ๋์๋ง์ ํ๋ฉด์ ๋ฐ๋ก ๋ณด์ด๋๋ก ํ๊ณ ์ถ๋ค. ๊ทธ๋ฌ๋ฉด redirect:๋ฅผ ์ฌ์ฉํ์ฌ /board๋ก ์๋ํฌ์ธํธ๋ฅผ ๋ณด๋ด๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ฝ๋ @GetMapping("/board")๋ก ์ค๋ํฌ์ธํธ๋ฅผ ๋ฐ์ ์๋ก์ด comments๋ฅผ ๋ฐ์ ํ์๋ฆฌํ๋ก ์ ๋ฌํ๊ฒํ๋ค.
โก html ์ดํผ๊ธฐ.
<div class="commentBox">
<li class="font" th:each="comment : ${comments}" th:text="${comment.content}">
comment
</li>
</div>
board.html ์ฝ๋๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ๋ค. ๋๊ธ์ ์กฐํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ comments๋ก ๋ณด๋๊ณ , comments์ ์ฌ๋ฌ ๋๊ธ์ each ํจ์๋ฅผ ํตํด comment๋ผ๋ ๋ณ์๋ก ๊ฐ ํญ๋ชฉ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ th:text="${comment.content}"๊ฐ ์๋ค. comment ํด๋์ค์ ์๋ content ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
์ข ๋ ์ฝ๊ฒ ์ค๋ช ํด๊ฒ ๋ค. comments๋ 10๊ฐ์ ๋ญํ ์ด ๋๊ธ์ด๋ค. ๊ทธ๊ฑธ comment ๋ณ์๋ก 1comment 2comment... ์ด๋ ๊ฒ ๋ถ์ฌ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋์ด๋ ๊ฒ๋ค ์์ ์ค์ ๋๊ธ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด๋ค. ๋น์ ๋ฅผ ๋ค์๋ฉด comments๊ฐ ์ข์ ํ ์ค์ด ๋๊ณ , comment๋ ์ข์ ํ๋ ํ๋์ ์๋ ์ฌ๋์ด ๋๊ณ , comment.content๋ ๊ทธ ์ฌ๋์ ์ด๋ฆํ ํน์ ์ธ์ ์ฌํญ์ด ๋๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ์ฌ์ธ ๊ฒ ๊ฐ๋ค. ์ผ๋จ ๋๋ ๊ทธ๋ ๊ฒ ์ดํดํ๋ค.
[ ๋ฐ์ดํฐ๋ฒ ์ด์ค H2 ์ค์น ๋ฐ ์ฐ๋, JPA ์ฐ๋ํ๊ธฐ ]
๐ชฝ
"ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค."
[ ๋ธ๋ก๊ทธ์ ์ด ๋ด์ฉ๋ค์ ์ถ์ฒ๋ ์๋์ ์ ์ด๋ํ ๋
๋ค์ด๊ฐ์ ์ฝ์ด๋ณด์๋ฉด ๋์ฑ ๋์์ด ๋์ค ๋ฏ ํฉ๋๋ค ]
- findAllByOrderByIdDesc ์ถ์ฒ