๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

25-03-17

๐Ÿ“Œ Daily Reportโ€‹

https://github.com/ssginc-be/DOKI/issues/111


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉโ€‹

์ƒ๊ฐ๋ณด๋‹ค Kibana๊ฐ€ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹œ๊ฐํ™”๋˜๊ณ  ์žˆ๋‹ค;

์ƒˆ๋ฒฝ์— ๋จธ๋ฆฌ ์‹ํž ๊ฒธ ์ฐจํŠธ ๋ช‡ ๊ฐœ ๋งŒ๋“ค์–ด๋ณด๋Š”๋ฐ ์žฌ๋ฐŒ๋”๋ผ...?

ํƒœ๋ธ”๋กœ ํ•œ๋ฒˆ ์จ๋ดค์–ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์•„๋‹˜ ํ‚ค๋ฐ”๋‚˜ ์ž์ฒด๊ฐ€ ๊ทธ๋งŒํผ ์“ฐ๊ธฐ ์‰ฝ๊ฒŒ ๋˜์–ด์žˆ๋Š”๊ฑด๊ฐ€ ใ…‹ใ…‹ใ…‹

์š”์ฆ˜ ๊ธฐ๋ถ„ ์™„์ „ ๋‹ค์šด์ธ๋ฐ ํ‚ค๋ฐ”๋‚˜๊ฐ€ ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ์„œ ํž๋ง๋œ๋‹ค ๐Ÿฅฐ๐Ÿ˜˜

๋‚ด๊ฐ€ ๋ถ™์ด๊ณ  ์‹ถ์—ˆ๋˜๊ฑฐ ์ž˜๋ผ์„œ ๋„ˆ๋ฌด ๊ธฐ๋ถ„ ์กฐ์•„!!


๐Ÿ“Œ @Transactional ์žŠ์ง€ ๋งˆ์„ธ์š”โ€‹

ํ˜„์žฌ์˜ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์—” ์ด์šฉ์ž ์ชฝ์— ํ•˜์ž๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค.

์ด์šฉ์ž๊ฐ€ ์˜ˆ์•ฝ์„ ํ•œ ํ›„, noti๋ฅผ subscribe ํ•˜๊ธฐ ์ „์— ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ€๋ฒ„๋ฆฌ๋ฉด ๊ทธ ์•Œ๋ฆผ์„ ๋ชป ๋ฐ›๊ณ  ์žˆ๋‹ค.

ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

์‚ฌ์‹ค ์šด์˜์ž ์ชฝ์—๋Š” ํŽ˜์ด์ง€ ๋กœ๋“œ๋งˆ๋‹ค ์ž”์—ฌ ์•Œ๋ฆผ ์ฝ์–ด์˜ค๋Š” API๋ฅผ ์—ฐ๊ฒฐํ•ด๋‘ฌ์„œ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ...

์ด์šฉ์ž๋Š” ๋”ฐ๋กœ ์•Œ๋ฆผ ์•„์ด์ฝ˜์œผ๋กœ dock์„ ํŽผ์น  ์ผ ์—†๋‹ค๋ณด๋‹ˆ ํ•„์š” ์—†๋Š” ์ค„ ์•Œ์•˜์ง€...

๊ทผ๋ฐ ๊ทธ๊ฒŒ ์•„๋‹ˆ์—ˆ์Œ ใ…‹


๐Ÿž@Transactional์˜ ์œ ๋ฌด๋Š” ๋งˆ์น˜ UB์™€๋„ ๊ฐ™์€..โ€‹

์ด์ƒํ•˜๊ฒŒ ์šด์˜์ž ์ชฝ์€ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž˜ ์ €์žฅ๋˜๋Š”๋ฐ ์ด์šฉ์ž ์ชฝ์„ ๊ณ ์น˜๋ ค ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ด์šฉ์ž ์ธก ๋ฉ”์‹œ์ง€๋Š” ํ…Œ์ด๋ธ”์— ์ €์žฅ์ด ์•ˆ๋˜๊ณ  ์žˆ์—ˆ๋‹ค. ์•„๋‹ˆ ์™œ?

์„ค๋งˆ? ํ•˜๊ณ  @Transactional์„ ๋ถ™์—ฌ๋ณด๋‹ˆ ๊ทธ์ œ์„œ์•ผ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

COMMIT์ด ์•ˆ๋˜์–ด์„œ ๊ทธ๋žฌ๋˜ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋˜์ง€๋งŒ, ์ •ํ™•ํžˆ ์™œ ์šด์˜์ž ์ชฝ์€ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

์–˜๋„ ์Šฌ์Šฌ ์ข€ ๋”ฅ๋‹ค์ด๋ธŒ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

NotificationService.java
/* [INTERNAL] ์˜ˆ์•ฝ ๊ฒฐ๊ณผ ์•Œ๋ฆผ - ์šด์˜์ž to ์ด์šฉ์ž */
// rid -> ์ด์šฉ์ž๊ฐ€ ์˜ˆ์•ฝ ์š”์ฒญํ•˜์—ฌ ์Šน์ธ ๋Œ€๊ธฐ์ค‘์ด๊ฑฐ๋‚˜
// -> ์šด์˜์ž๊ฐ€ ์Šน์ธ/๊ฑฐ์ ˆ/์ทจ์†Œํ•œ ์˜ˆ์•ฝ์˜ id
// ํŒ์—…์Šคํ† ์–ด id๊ฐ€ ์•„๋‹Œ ์˜ˆ์•ฝ id๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ๋งž์Œ
@Transactional
public void notifyReserveResultToMember(Long rid, String resultStatus) {
// ์ถ”ํ›„์— ์—๋Ÿฌํ•ธ๋“ค๋ง ํ•„์š”
Reservation reservation = rRepo.findById(rid).get();
Long memberCode = reservation.getMember().getMemberCode(); // ํ•ด๋‹น ์˜ˆ์•ฝ์˜ ์ด์šฉ์ž
...

๐Ÿž์ด๊ฑฐ ๋จธ์ž„?โ€‹

๋ญ๊ฐ€ ๋‹ค๋ฅธ...๊ฑฐ์ฃ ?

์–ต๊นŒ๋จธ์ž„

์•„. ์ฐพ์•„๋ณด๋‹ˆ๊นŒ ํƒ€์ž…์ด ๋‹ค๋ฅด๋”๋ผ. ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ ์ž˜๋ชป๋ผ์„œ ๋ฐ”๊พธ๋‹ค๊ฐ€ toString ๋นผ๋Š”๊ฑธ ๊นŒ๋จน์—ˆ์—ˆ๋‹ค.

Store store = storeOpt.get();
assertEquals("๋“ฑ๋ก๋œ ํŒ์—…์Šคํ† ์–ด์˜ ์ด๋ฆ„ ๋ถˆ์ผ์น˜", "๋ฆฌ๋ฝ์ฟ ๋งˆ ์ฝœ๋ผ๋ณด ์นดํŽ˜ in ๊ฐ•๋‚จ", store.getStoreName());
assertEquals("๋“ฑ๋ก๋œ ํŒ์—…์Šคํ† ์–ด์˜ ์ง€์  ๋ถˆ์ผ์น˜", "์‹ ์„ธ๊ณ„๋ฐฑํ™”์  ๊ฐ•๋‚จ์ ", store.getStoreBranch());
assertEquals("๋“ฑ๋ก๋œ ํŒ์—…์Šคํ† ์–ด์˜ ์‹œ์ž‘์ผ ๋ถˆ์ผ์น˜", LocalDate.of(2025, 3, 25), store.getStoreStartDate().toString());
assertEquals("๋“ฑ๋ก๋œ ํŒ์—…์Šคํ† ์–ด์˜ ์ข…๋ฃŒ์ผ ๋ถˆ์ผ์น˜", LocalDate.of(2025, 3, 27), store.getStoreEndDate().toString());
assertEquals("๋“ฑ๋ก๋œ ํŒ์—…์Šคํ† ์–ด์˜ ์˜ˆ์•ฝ ์ •์› ๋ถˆ์ผ์น˜", 20, store.getStoreCapacity().toString());