[์น๊ฐ๋ฐ์ ๋ด, Spring] 3์ฃผ์ฐจ ๊ฐ๋ฐ์ผ์ง(1) - Timeline Service ์๋ฒ
3์ฃผ์ฐจ์์๋ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์์ฑํด๋ดค๋ค. ์์ฑํ ํ๋ก์ ํธ๋ Timeline Service๋ก, ์ฌ์ฉ์๊ฐ ๊ฐ๋จํ ๋ฉ๋ชจ๋ฅผ ์์ฑ, ์์ , ์ญ์ ํ ์ ์๋ ์๋น์ค์ด๋ค. ํน์ดํ ์ ์, ์์ฑํ ์ง 24์๊ฐ์ด ์ง๋ ๋ฉ๋ชจ๋ค์ ์๋์ผ๋ก ์ญ์ ๋๋ค๋ ์ ์ด๋ค.
ํ๋ก์ ํธ ์งํ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- API ์ค๊ณํ๊ธฐ
- Repository, Service, Controller ๋ง๋ค๊ธฐ
- ํด๋ผ์ด์ธํธ ์ค๊ณํ๊ธฐ
- ํด๋ผ์ด์ธํธ ์์ฑํ๊ธฐ
์ค๊ฐ์ HTML, CSS, Javascript, jQuery์ ๊ดํ ๋ด์ฉ์ ํ์ตํ์ง๋ง, ์ด ๋ถ๋ถ์ ์์ด๋ณด ์์๋ฐ ๊ฐ์ ๋ด์ฉ๊ณผ ๊ฒน์น๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๋ฆฌํ์ง ์๊ฒ ๋ค.
์๋ฒ์ ๊ด๋ จ๋ 1, 2๋ฒ๊ณผ ํด๋ผ์ด์ธํธ์ ๊ด๋ จ๋ 3, 4๋ฒ์ ๋๋ ์ ํฌ์คํ ์ ์์ฑํ๋ คํ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์๋ฒ ๊ด๋ จ ๋ด์ฉ์ ์ ์ด๋ณด๊ฒ ๋ค๐
API ์ค๊ณ ๋ฐ ๊ตฌํ
๐ก API ์ค๊ณ
๊ธฐ๋ฅ | Method | URL | Return |
๋ฉ๋ชจ ์์ฑํ๊ธฐ | POST | /api/memos | Memo |
๋ฉ๋ชจ ์กฐํํ๊ธฐ | GET | /api/memos | List<Memo> |
๋ฉ๋ชจ ๋ณ๊ฒฝํ๊ธฐ | PUT | /api/memos/{id} | Long |
๋ฉ๋ชจ ์ญ์ ํ๊ธฐ | DELETE | /api/memos/{id} | Long |
๐ก Repository ๋ง๋ค๊ธฐ
- ํ๋ก์ ํธ์ domain ํจํค์ง ๋ง๋ค๊ธฐ
- Memo ํด๋์ค ๋ง๋ค๊ธฐ
- ๋ฉ๋ชจ๋ 1) username, 2) contents๋ก ์ด๋ฃจ์ด์ง
- username์ ๋ฉ๋ชจ๋ฅผ ์์ฑํ ๋ ์๋์ผ๋ก ์ฃผ์ด์ง๋ ์ต๋ช ์ id์
- Timestamped ํด๋์ค๋ฅผ ์์ฑํด์ ์์ ๋ฐ๊ธฐ - MemoRepository ์ธํฐํ์ด์ค ๋ง๋ค๊ธฐ
- JpaRepsitory๋ฅผ ์์๋ฐ๊ณ ID๊ฐ Long ํ์ ์ธ MemoRepository๋ฅผ ์์ฑ - MemoRequestDto ํด๋์ค ๋ง๋ค๊ธฐ
๐ก Service ๋ง๋ค๊ธฐ
- ํ๋ก์ ํธ์ service ํจํค์ง ๋ง๋ค๊ธฐ
- MemoService ํด๋์ค ๋ง๋ค๊ธฐ
- Annotation์ผ๋ก Service์์ ๋ช ์ํด์ผ ํจ
- MemoRepository๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ ธ์ผ ํจ - MemoService ํด๋์ค์ update ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ
- id์ requestDto์ ๋ฐ์์ ํด๋น ๋ฉ๋ชจ๋ฅผ ์์ ํ๊ณ id๋ฅผ ๋ฐํํ๋ ๋ฉ์๋ ์์ฑ - Memo ํด๋์ค์ update ๋ฉ์๋ ์ถ๊ฐํ๊ธฐ
๐ก Controller ๋ง๋ค๊ธฐ
- ํ๋ก์ ํธ์ controller ํจํค์ง ๋ง๋ค๊ธฐ
- MemoController ํด๋์ค ๋ง๋ค๊ธฐ
- Annotation์ผ๋ก RestController์์ ๋ช ์ํด์ผ ํจ
- Create, Read, Delete๋ฅผ ์ํด MemoRepository๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ ธ์ผ ํจ
- Update๋ฅผ ์ํด MemoService๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ ธ์ผ ํจ - url ๋งคํ์ ํตํด CRUD ๋ฉ์๋ ์์ฑํ๊ธฐ
๐ก Memo ๋ชฉ๋ก ์กฐํ ์์ ํ๊ธฐ
Timeline Service์์๋ 24์๊ฐ ์ด๋ด์ ์์ฑ ๋๋ ์์ ๋ ๋ฉ๋ชจ๋ง ๋ณด์ฌ์ฃผ๋๋ก ํ๊ณ ์๋ค. ๋ฐ๋ผ์ MemoRepository์์ ๋ฉ๋ชจ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ถ๋ถ์ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
- MemoRepository.java
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);
}
- MemoController.java์ getMemos()
@GetMapping("/api/memos")
public List<Memo> getMemos() {
LocalDateTime start = LocalDateTime.now().minusDays(1);
LocalDateTime end = LocalDateTime.now();
return memoRepository.findAllByModifiedAtBetweenOrderByModifiedAtDesc(start, end);
}
์๋ ์ฌ์ดํธ์์ JPA query์ ๋ํ ๋ด์ฉ์ ์ฐธ๊ณ ํ ์ ์๋ค.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
๐ก ์ ์ฒด ์์ค ์ฝ๋ ํ์ธ
https://github.com/mjmjmj9840/Sparta-Spring-Basic/tree/main/week03
์ฐธ๊ณ ์๋ฃ: ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ ์น๊ฐ๋ฐ์ ๋ด, Spring 3์ฃผ์ฐจ ๊ฐ์์๋ฃ