Server/SpringBoot

[์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring] 3์ฃผ์ฐจ ๊ฐœ๋ฐœ์ผ์ง€(1) - Timeline Service ์„œ๋ฒ„

meeeeejin 2021. 7. 13. 15:02

 

3์ฃผ์ฐจ์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์™„์„ฑํ•ด๋ดค๋‹ค. ์™„์„ฑํ•œ ํ”„๋กœ์ ํŠธ๋Š” Timeline Service๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ด๋‹ค. ํŠน์ดํ•œ ์ ์€, ์ž‘์„ฑํ•œ ์ง€ 24์‹œ๊ฐ„์ด ์ง€๋‚œ ๋ฉ”๋ชจ๋“ค์€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. 

 

์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ ํ™”๋ฉด

 

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  1. API ์„ค๊ณ„ํ•˜๊ธฐ
  2. Repository, Service, Controller ๋งŒ๋“ค๊ธฐ
  3. ํด๋ผ์ด์–ธํŠธ ์„ค๊ณ„ํ•˜๊ธฐ
  4. ํด๋ผ์ด์–ธํŠธ ์™„์„ฑํ•˜๊ธฐ

์ค‘๊ฐ„์— 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 ๋งŒ๋“ค๊ธฐ

  1. ํ”„๋กœ์ ํŠธ์— domain ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ
  2. Memo ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
    - ๋ฉ”๋ชจ๋Š” 1) username, 2) contents๋กœ ์ด๋ฃจ์–ด์ง
    - username์€ ๋ฉ”๋ชจ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์ต๋ช…์˜ id์ž„
    - Timestamped ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ƒ์† ๋ฐ›๊ธฐ
  3. MemoRepository ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ๋“ค๊ธฐ
    - JpaRepsitory๋ฅผ ์ƒ์†๋ฐ›๊ณ  ID๊ฐ€ Long ํƒ€์ž…์ธ MemoRepository๋ฅผ ์ƒ์„ฑ
  4. MemoRequestDto ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ

 

 

๐Ÿ’ก Service ๋งŒ๋“ค๊ธฐ

  1. ํ”„๋กœ์ ํŠธ์— service ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ
  2. MemoService ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
    - Annotation์œผ๋กœ Service์ž„์„ ๋ช…์‹œํ•ด์•ผ ํ•จ
    - MemoRepository๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์•ผ ํ•จ
  3. MemoService ํด๋ž˜์Šค์— update ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ
    - id์™€ requestDto์„ ๋ฐ›์•„์„œ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  id๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ
  4. Memo ํด๋ž˜์Šค์— update ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ

 

 

๐Ÿ’ก Controller ๋งŒ๋“ค๊ธฐ

  1. ํ”„๋กœ์ ํŠธ์— controller ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ
  2. MemoController ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
    - Annotation์œผ๋กœ RestController์ž„์„ ๋ช…์‹œํ•ด์•ผ ํ•จ
    - Create, Read, Delete๋ฅผ ์œ„ํ•ด MemoRepository๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์•ผ ํ•จ
    - Update๋ฅผ ์œ„ํ•ด MemoService๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์•ผ ํ•จ
  3. 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

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

 

 

๐Ÿ’ก ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ ํ™•์ธ

https://github.com/mjmjmj9840/Sparta-Spring-Basic/tree/main/week03

 

mjmjmj9840/Sparta-Spring-Basic

์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ์—์„œ ์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. . Contribute to mjmjmj9840/Sparta-Spring-Basic development by creating an account on GitHub.

github.com

 

 

 

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ ์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring 3์ฃผ์ฐจ ๊ฐ•์˜์ž๋ฃŒ

 

 

 

728x90