Skip to content

[๐ŸŒฑ JPA ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๋Œ€๊ธฐ] ํ‹ฐ๋ชจ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#582

Open
Yoonhojoon wants to merge 70 commits into
woowacourse:mainfrom
Yoonhojoon:refactor/to-jpa
Open

[๐ŸŒฑ JPA ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๋Œ€๊ธฐ] ํ‹ฐ๋ชจ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#582
Yoonhojoon wants to merge 70 commits into
woowacourse:mainfrom
Yoonhojoon:refactor/to-jpa

Conversation

@Yoonhojoon

@Yoonhojoon Yoonhojoon commented Jun 18, 2026

Copy link
Copy Markdown

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

๋ฒ ์ด์Šค ์ฝ”๋“œ ์„ ํƒ ์ฒดํฌ

  • ์ด์ „ ๋ฏธ์…˜์˜ ๋‚ด ์ฝ”๋“œ์—์„œ ์‹œ์ž‘
  • ์ด์ „ ๋ฏธ์…˜์˜ ํŽ˜์–ด์˜ ์ฝ”๋“œ์—์„œ ์‹œ์ž‘

์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

๋‹จ๊ณ„๋ณ„ ๋„๋‹ฌ ์ง€์ 

  1. JDBC ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋ฅผ JPA ์ €์žฅ์†Œ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

    • Reservation, Theme, ThemeSlot, Time์„ JPA Entity๋กœ ๋งคํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ReservationStatusConverter๋ฅผ ์ถ”๊ฐ€ํ•ด ์ƒํƒœ ๊ฐ์ฒด๋ฅผ DB ๋ฌธ์ž์—ด ์ปฌ๋Ÿผ๊ณผ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํ™•์ • ์˜ˆ์•ฝ ์ค‘๋ณต์„ DB ๋ ˆ๋ฒจ์—์„œ๋„ ๋ง‰๊ธฐ ์œ„ํ•ด confirmed_theme_slot_id ์ƒ์„ฑ ์ปฌ๋Ÿผ๊ณผ unique ์ œ์•ฝ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. JPA ์ „ํ™˜ ์ดํ›„ ์˜ˆ์•ฝ ํ๋ฆ„์˜ ๋™์‹œ์„ฑ ์ง€์ ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์•ฝ ์ƒ์„ฑ/์ทจ์†Œ/๋ณ€๊ฒฝ ์‹œ ThemeSlot ๋˜๋Š” Reservation์„ ๋น„๊ด€์  ๋ฝ์œผ๋กœ ์กฐํšŒํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์•ฝ ๋ณ€๊ฒฝ์ฒ˜๋Ÿผ ๋‘ ์Šฌ๋กฏ์„ ๋™์‹œ์— ๋‹ค๋ฃจ๋Š” ํ๋ฆ„์—์„œ๋Š” ID ์ˆœ์„œ๋Œ€๋กœ ์Šฌ๋กฏ์„ ์ž ๊ฐ€ ๋ฐ๋“œ๋ฝ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
    • ์ƒํƒœ ๋ณ€๊ฒฝ์€ ๊ธฐ๋Œ€ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•ด ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์˜ˆ์•ฝ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ์˜ˆ์•ฝ ๋Œ€๊ธฐ๋ฅผ Reservation(PENDING)์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„ Waiting ๋„๋ฉ”์ธ์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

    • ๋Œ€๊ธฐ ์‹ ์ฒญ/์ทจ์†Œ API๋ฅผ /waitings๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋‚ด ์˜ˆ์•ฝ ์กฐํšŒ์—์„œ ์˜ˆ์•ฝ ๋ชฉ๋ก๊ณผ ๋Œ€๊ธฐ ๋ชฉ๋ก์„ ๋‚˜๋ˆ„์–ด ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํ™•์ • ์˜ˆ์•ฝ ์ทจ์†Œ/์‚ญ์ œ/๋ณ€๊ฒฝ์œผ๋กœ ์Šฌ๋กฏ์ด ๋น„๋ฉด ์ฒซ ๋ฒˆ์งธ Waiting์„ Reservation(CONFIRMED)์œผ๋กœ ์Šน๊ฒฉํ•˜๊ณ , ํ•ด๋‹น Waiting์€ ์‚ญ์ œํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. ์–ด๋“œ๋ฏผ ๋Œ€๊ธฐ ๊ด€๋ฆฌ API๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

    • GET /admin/waitings๋กœ ์ „์ฒด ๋Œ€๊ธฐ ๋ชฉ๋ก์„ ์ˆœ๋ฒˆ๊ณผ ํ•จ๊ป˜ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
    • DELETE /admin/waitings/{id}๋กœ ๊ด€๋ฆฌ์ž๊ฐ€ ์†Œ์œ ์ž ๊ฒ€์ฆ ์—†์ด ๋Œ€๊ธฐ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐœํ–‰ SQL ๋ฐœ์ทŒ

ํ™•์ • ์˜ˆ์•ฝ์€ ํ•œ ์Šฌ๋กฏ์— ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ƒ์„ฑ ์ปฌ๋Ÿผ๊ณผ unique ์ œ์•ฝ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

confirmed_theme_slot_id BIGINT GENERATED ALWAYS AS (
    CASE WHEN status = 'CONFIRMED' THEN theme_slot_id ELSE NULL END
),
UNIQUE (confirmed_theme_slot_id)

์ทจ์†Œ/๋ณ€๊ฒฝ ๋Œ€์ƒ ์˜ˆ์•ฝ์€ ๋จผ์ € row lock์„ ์žก๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

SELECT id
FROM reservation
WHERE id = :reservationId
FOR UPDATE

๋Œ€๊ธฐ ์ˆœ๋ฒˆ์€ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒ ์‹œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

SELECT new roomescape.domain.WaitingWithRank(
    w,
    (SELECT COUNT(w2) + 1
     FROM Waiting w2
     WHERE w2.theme = w.theme
     AND w2.date = w.date
     AND w2.time = w.time
     AND w2.id < w.id)
)
FROM Waiting w
WHERE w.memberName = :memberName
ORDER BY w.id

JPA dirty checking ๊ด€์ฐฐ์—์„œ๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ํ›„ flush ์‹œ์ ์— ๋‹ค์Œ UPDATE๊ฐ€ ๋ฐœํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

update reservation
set name=?, status=?, theme_slot_id=?
where id=?

๋ง์„ค์ธ ๊ฒฐ์ •

์ฒซ ๋ฒˆ์งธ๋Š” ๋Œ€๊ธฐ๋ฅผ Reservation(PENDING)์œผ๋กœ ์œ ์ง€ํ• ์ง€, ๋ณ„๋„ Waiting ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ• ์ง€์˜€์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์˜ˆ์•ฝ ์ƒํƒœ๋งŒ์œผ๋กœ ๋Œ€๊ธฐ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ดค์ง€๋งŒ, ์‹ค์ œ ์˜ˆ์•ฝ๊ณผ ๋Œ€๊ธฐ๋Š” ์†Œ์œ ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค. ๋Œ€๊ธฐ๋Š” ์•„์ง ์Šฌ๋กฏ์„ ์ ์œ ํ•˜์ง€ ์•Š๊ณ , ์ˆœ๋ฒˆ๊ณผ ์Šน๊ฒฉ ๋Œ€์ƒ์ด๋ผ๋Š” ์„ฑ๊ฒฉ์ด ๋” ๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Waiting์„ ๋ณ„๋„ ๋„๋ฉ”์ธ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์Šน๊ฒฉ ์‹œ ์ƒˆ Reservation(CONFIRMED)์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ๋Š” ์˜ˆ์•ฝ ์ทจ์†Œ์™€ ์ž๋™ ์Šน์ธ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์„์ง€์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ง์ ‘ ์š”์ฒญ์€ ์ทจ์†Œ์ด๊ณ  ์ž๋™ ์Šน์ธ์€ ํ›„์† ์ฒ˜๋ฆฌ๋กœ ๋ณผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋ฒˆ ๊ตฌํ˜„์—์„œ๋Š” ์Šฌ๋กฏ ์ ์œ  ์ƒํƒœ์˜ ์ผ๊ด€์„ฑ์„ ๋” ์šฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ทจ์†Œ, ์ฒซ ๋Œ€๊ธฐ ์Šน๊ฒฉ, ๋Œ€๊ธฐ ์‚ญ์ œ, ์Šฌ๋กฏ ํ•ด์ œ๊ฐ€ ํ•จ๊ป˜ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ํ•จ๊ป˜ ๋กค๋ฐฑ๋˜๋„๋ก ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์•ˆ์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”๋“ค๋ฆฐ ํ•œ ์žฅ๋ฉด

๊ฐ€์žฅ ํ”๋“ค๋ ธ๋˜ ์ง€์ ์€ ํ™•์ • ์˜ˆ์•ฝ์„ ์ทจ์†Œํ•œ ๋’ค ์ฒซ ๋Œ€๊ธฐ ์Šน๊ฒฉ์„ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๋Š” ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ๋‹น์—ฐํžˆ, ์ทจ์†Œ์™€ ์Šน๊ฒฉ์„ ๊ฐ™์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•˜๋‹ค๊ณ  ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

Uechann and others added 30 commits May 26, 2026 14:30
1. ํ•ด๋‹น themeSlot์˜ ์˜ˆ์•ฝ์ด ์กด์žฌํ•œ๋‹ค๋ฉด PENDING ์ƒํƒœ๋กœ ์˜ˆ์•ฝ์„ ๋‘๊ณ  ์ €์žฅํ•œ๋‹ค.
2. ํ•ด๋‹น themeSlot์˜ ์˜ˆ์•ฝ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด themeSlot์„ ์˜ˆ์•ฝ๋จ์œผ๋กœ ๋ณ€๊ฒฝํ›„, ReservationStatus๋ฅผ Confirm์œผ๋กœ ๋ณ€๊ฒฝ ํ›„ ์ €์žฅํ•œ๋‹ค.
PENDING ์ƒํƒœ์ธ ์˜ˆ์•ฝ์˜ ๊ฒฝ์šฐ ๋Œ€๊ธฐ์ค‘์ธ ๋ชจ๋“  ์˜ˆ์•ฝ์„ ์กฐํšŒํ›„์— ๋Œ€๊ธฐ ์ˆœ๋ฒˆ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

1. PENDING ์ƒํƒœ์ธ ์˜ˆ์•ฝ์—๋Š” ๋Œ€๊ธฐ ์ˆœ๋ฒˆ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
2. PENDING ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์˜ˆ์•ฝ์€ ๊ธฐ์กด์˜ ์˜ˆ์•ฝ ์‘๋‹ต DTO๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
Yoonhojoon and others added 30 commits June 1, 2026 10:38
* feat: ์ด์ „ ์ฝ”๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

* docs: README.md 1๋‹จ๊ณ„ ์˜ˆ์•ฝ ๋Œ€๊ธฐ, ์ทจ์†Œ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ API ๋ช…์„ธ์„œ ์ž‘์„ฑ

* docs: Readme.md ์˜ˆ์•ฝ ์ทจ์†Œ ์‹œ ๋Œ€๊ธฐ ์Šน๊ฒฉ ํ๋ฆ„ ๋ฌธ์„œํ™”

* refactor: Reservation์— themeSlot ์™ธ๋ž˜ํ‚ค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ

* refactor(reservation): ์˜ˆ์•ฝ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์˜ˆ์•ฝ themeSlot์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์˜ˆ์•ฝ ์ƒํƒœ ๋ณ€๊ฒฝ

1. ํ•ด๋‹น themeSlot์˜ ์˜ˆ์•ฝ์ด ์กด์žฌํ•œ๋‹ค๋ฉด PENDING ์ƒํƒœ๋กœ ์˜ˆ์•ฝ์„ ๋‘๊ณ  ์ €์žฅํ•œ๋‹ค.
2. ํ•ด๋‹น themeSlot์˜ ์˜ˆ์•ฝ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด themeSlot์„ ์˜ˆ์•ฝ๋จ์œผ๋กœ ๋ณ€๊ฒฝํ›„, ReservationStatus๋ฅผ Confirm์œผ๋กœ ๋ณ€๊ฒฝ ํ›„ ์ €์žฅํ•œ๋‹ค.

* test: findByThemeSlotAndPending ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* feat: findByThemeSlotAndPending ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: findWaitingReservationWithOrder ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ตฌํ˜„

* feat: findWaitingReservationWithOrder ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ErrorCode ์ถ”๊ฐ€

* feat(reservation): ์˜ˆ์•ฝ ์ƒ์„ฑ์‹œ ๊ฐ™์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„์— ์˜ˆ์•ฝ ์‹œ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๊ฐ™์€ ํ…Œ๋งˆ ์Šฌ๋กฏ ์กฐ๊ฑด์˜ PENDING ์˜ˆ์•ฝ์„ ID์ˆœ์œผ๋กœ 1๊ฐœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat(Reservation): ์˜ˆ์•ฝ ์ทจ์†Œ ์‹œ PENDING ์ƒํƒœ์ผ ๊ฒฝ์šฐ, CANCEL๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* docs: README ์˜ˆ์•ฝ ์ทจ์†Œ ํ”Œ๋กœ์šฐ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ

* test(Reservation): ์ทจ์†Œ ๋Œ€์ƒ ์˜ˆ์•ฝ์ด confirm์ผ ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* test(Reservation): PENDING ์˜ˆ์•ฝ ์ทจ์†Œ ํ…Œ์ŠคํŠธ์‹œ ThemeSlot ๊ฒ€์ฆ ์ถ”๊ฐ€

* docs: README ์˜ˆ์•ฝ ์ƒํƒœ ๋ณ€ํ™˜ ํ๋ฆ„๋„ ์ถ”๊ฐ€

* test(ReservationServiceTest): ์ด๋ฏธ CANCELLEDํ•œ ์˜ˆ์•ฝ์ด๋‚˜ COMPLETEDํ•œ ์˜ˆ์•ฝ์„ ์ทจ์†Œ ์š”์ฒญ์‹œ ์˜ˆ์™ธ ๋˜์ง€๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* feat(ReservationService): ์ด๋ฏธ CANCELLEDํ•œ ์˜ˆ์•ฝ์ด๋‚˜ COMPLETEDํ•œ ์˜ˆ์•ฝ์„ ์ทจ์†Œ ์š”์ฒญ์‹œ ์˜ˆ์™ธ ๋˜์ง€๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* docs(README): ๋‚ด ์˜ˆ์•ฝ ์กฐํšŒ API ๋ช…์„ธ ์ž‘์„ฑ

* refactor(Reservation): ๋‚ด ์˜ˆ์•ฝ ์กฐํšŒ API ๊ธฐ๋Šฅ ์ˆ˜์ •

PENDING ์ƒํƒœ์ธ ์˜ˆ์•ฝ์˜ ๊ฒฝ์šฐ ๋Œ€๊ธฐ์ค‘์ธ ๋ชจ๋“  ์˜ˆ์•ฝ์„ ์กฐํšŒํ›„์— ๋Œ€๊ธฐ ์ˆœ๋ฒˆ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

1. PENDING ์ƒํƒœ์ธ ์˜ˆ์•ฝ์—๋Š” ๋Œ€๊ธฐ ์ˆœ๋ฒˆ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
2. PENDING ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์˜ˆ์•ฝ์€ ๊ธฐ์กด์˜ ์˜ˆ์•ฝ ์‘๋‹ต DTO๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

* test(Reservation): ๋‚ด ์˜ˆ์•ฝ ์กฐํšŒ์‹œ PENDING ์˜ˆ์•ฝ์˜ ๋Œ€๊ธฐ ์ˆœ๋ฒˆ ๊ฒ€์ฆ

* docs(README): API ๋ช…์„ธ์„œ ์ˆ˜์ •

* refactor: themeSlot ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„ ์กฐํšŒ ์‹œ์— themeSlot ์ƒ์„ฑ ์˜ค๋ฅ˜ ์ˆ˜์ •

* feat: data.sql ์ •๋ณด ์ถ”๊ฐ€

* refactor(ReservationService): ์˜ˆ์•ฝ ์ทจ์†Œ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ฐ„ํŽธํ™” ๋ฐ findBy ์ฟผ๋ฆฌ์— FOR UPDATE ์ถ”๊ฐ€

* feat(findWaitingReservationWithOrder): ๋Œ€๊ธฐ ์˜ˆ์•ฝ ์ˆœ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ฑ…์ž„์„ ์„œ๋น„์Šค์—์„œ Repository๋กœ ์ด๋™

* fix(ReservationService): ํ™•์ • ์˜ˆ์•ฝ ๋ณ€๊ฒฝ ์‹œ ๋Œ€๊ธฐ ์˜ˆ์•ฝ ์Šน๊ฒฉ

* fix(ReservationService): ์˜ˆ์•ฝ ์‚ญ์ œ ์‹œ ์Šฌ๋กฏ ์ƒํƒœ ๊ฐฑ์‹ 

* fix(Reservation): ์ทจ์†Œ ์˜ˆ์•ฝ ์ค‘๋ณต ๊ฒ€์‚ฌ ์ œ์™ธ

* refactor(ThemeSlot): ์˜ˆ์•ฝ ์ƒํƒœ ๋ณ€๊ฒฝ ์˜๋„ ๋ช…์‹œ

* fix(Theme): ์ธ๊ธฐ ํ…Œ๋งˆ ์ง‘๊ณ„ ์ƒํƒœ ์กฐ๊ฑด ์ถ”๊ฐ€

* test(Reservation): ๋Œ€๊ธฐ ํ๋ฆ„ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor(Reservation): ์Šฌ๋กฏ ๋ณ€๊ฒฝ ์—ฌ๋ถ€ ํŒ๋‹จ ์บก์Аํ™”

* refactor(ReservationService): ์˜ˆ์•ฝ ์Šฌ๋กฏ ์‹๋ณ„์ž ์กฐํšŒ ์บก์Аํ™”

* fix(ReservationService): ๋Œ€๊ธฐ ์˜ˆ์•ฝ ์Šฌ๋กฏ ๋ณ€๊ฒฝ ์‹œ ํ™•์ • ์ฒ˜๋ฆฌ

* fix(TimeService): ์กฐํšŒ ์‹œ ์Šฌ๋กฏ ์ž๋™ ์ƒ์„ฑ์„ ์ œ๊ฑฐ

* test(Reservation): ๋Œ€๊ธฐ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๋‚ ์งœ ์˜์กด ์ œ๊ฑฐ

* fix(Reservation): ์ทจ์†Œ ์™„๋ฃŒ ์˜ˆ์•ฝ ๋ณ€๊ฒฝ ์ œํ•œ

* fix(Reservation): ๋‚ด ์˜ˆ์•ฝ ๋Œ€๊ธฐ ์ˆœ๋ฒˆ ์กฐํšŒ ๊ฐœ์„ 

* fix(Reservation): ๋‚ด ์˜ˆ์•ฝ ์ทจ์†Œ ๊ถŒํ•œ ๊ฒ€์ฆ

* fix(Reservation): ์˜ˆ์•ฝ ์Šฌ๋กฏ ์ƒํƒœ ์ „์ด ๊ฐœ์„ 

* refactor: ๋ฏธ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* refactor: ์˜ˆ์•ฝ ์Šฌ๋กฏ ์ ์œ ๋ฅผ CONFIRMED๋กœ๋งŒ ์ •์ฑ… ๋ณ€๊ฒฝ

* refactor: ์Šฌ๋กฏ ์˜ˆ์•ฝ ์ƒํƒœ ๊ฐฑ์‹  ์ฑ…์ž„ ์ •๋ฆฌ

---------

Co-authored-by: ๋‚˜์˜์ฐฌ <cab07036@naver.com>
์˜ˆ์•ฝ ๋Œ€๊ธฐ ์Šน์ธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ธฐ๋Šฅ ๋ชฉ๋ก, API ๋ช…์„ธ, ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„ ๊ธฐ๋ก์œผ๋กœ ๋จผ์ € ๊ณ ์ •ํ•œ๋‹ค.

Constraint: ๊ตฌํ˜„ ์ „ README ๊ธฐ๋Šฅ ๋ชฉ๋ก๊ณผ ์ž๊ธฐ API ๋ช…์„ธ๋ฅผ ์ •๋ฆฌํ•ด์•ผ ํ•จ

Rejected: PR ๋ณธ๋ฌธ์—๋งŒ ๊ธฐ๋ก | README์™€ ํ…œํ”Œ๋ฆฟ์— ๋‚จ๊ฒจ ๊ตฌํ˜„ยท๋ฆฌ๋ทฐ ๊ธฐ์ค€์œผ๋กœ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ

Confidence: high

Scope-risk: narrow

Directive: ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„ ๋ณ€๊ฒฝ ์‹œ README์™€ PR ๋ณธ๋ฌธ ๊ธฐ๋ก์„ ํ•จ๊ป˜ ๊ฐฑ์‹ ํ•  ๊ฒƒ

Tested: GRADLE_USER_HOME=.gradle java -Dorg.gradle.appname=gradlew -classpath gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain test --no-daemon

Not-tested: ๋ธŒ๋ผ์šฐ์ € ์ˆ˜๋™ ํ™”๋ฉด ํ™•์ธ
ํ™•์ • ์˜ˆ์•ฝ ์ทจ์†Œ์™€ ๋Œ€๊ธฐ ์ทจ์†Œ ํ›„ ์‚ฌ์šฉ์ž ์กฐํšŒ ๊ฒฐ๊ณผ๋กœ ์Šน๊ฒฉ๊ณผ ์ˆœ๋ฒˆ ์žฌ์ •๋ ฌ์„ ๊ณ ์ •ํ•œ๋‹ค.

Constraint: ์ด๋ฒˆ ์‚ฌ์ดํด API ์š”๊ตฌ์‚ฌํ•ญ ํ…Œ์ŠคํŠธ์™€ ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ ํ•„์š”

Rejected: ์„œ๋น„์Šค ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋งŒ ์ถ”๊ฐ€ | HTTP ์‘๋‹ต๊ณผ ํ™”๋ฉด ๋ฐ์ดํ„ฐ ๊ณ„์•ฝ๊นŒ์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•จ

Confidence: high

Scope-risk: narrow

Directive: ๋Œ€๊ธฐ ์ˆœ๋ฒˆ ๊ธฐ์ค€์ด ๋ฐ”๋€Œ๋ฉด ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ๊ธฐ๋Œ€๊ฐ’๋ถ€ํ„ฐ ๊ฐฑ์‹ ํ•  ๊ฒƒ

Tested: GRADLE_USER_HOME=.gradle java -Dorg.gradle.appname=gradlew -classpath gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain test --no-daemon

Not-tested: ๋ธŒ๋ผ์šฐ์ € ์ˆ˜๋™ ํ™”๋ฉด ํ™•์ธ
๋Œ€๊ธฐ ์Šน๊ฒฉ ๊ธฐ์ค€ ์ด๋ฆ„์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์ฝ๊ธฐ ํŠธ๋žœ์žญ์…˜ ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ด๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž๋™ ์Šน๊ฒฉ๊ณผ ์ˆœ๋ฒˆ ์žฌ์ •๋ ฌ์„ ํ™•์ธํ•  ํ™”๋ฉด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

Constraint: API ๋ณ€๊ฒฝ๊ณผ ์‚ฌ์šฉ์ž ํ™”๋ฉด์„ ํ•จ๊ป˜ ์ง„ํ–‰ํ•ด์•ผ ํ•จ

Rejected: ๊ด€๋ฆฌ์ž ์ˆ˜๋™ ์Šน์ธ ํ™”๋ฉด | ํ˜„์žฌ ๊ถŒํ•œ ๋ชจ๋ธ์ด ์—†์–ด ๋ฒ”์œ„๊ฐ€ ์ปค์ง€๊ณ  ์ž๋™ ์ „ํ™˜ ์ •์ฑ…๊ณผ ๋งž์ง€ ์•Š์Œ

Confidence: high

Scope-risk: moderate

Directive: ํ™•์ • ์˜ˆ์•ฝ ์ทจ์†Œ ์ •์ฑ… ๋ณ€๊ฒฝ ์‹œ ํ™”๋ฉด ๋ฌธ๊ตฌ์™€ ์Šน๊ฒฉ ์กฐํšŒ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •ํ•  ๊ฒƒ

Tested: GRADLE_USER_HOME=.gradle java -Dorg.gradle.appname=gradlew -classpath gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain test --no-daemon

Not-tested: ๋ธŒ๋ผ์šฐ์ € ์ˆ˜๋™ ํ™”๋ฉด ํ™•์ธ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants