1. LazyInitializationException โ€” fetch join์œผ๋กœ ํ•ด๊ฒฐ

๋ฌธ์ œ : ์˜ˆ์•ฝ ๋ชฉ๋ก, ํšŒ์ฐจ ๋ชฉ๋ก ์กฐํšŒ ์‹œ ์—ฐ๊ด€ ์—”ํ‹ฐํ‹ฐ ์ ‘๊ทผ ์‹œ ์˜ˆ์™ธ ๋ฐœ์ƒ

์›์ธ : JPA ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading) ์„ค์ •์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ ํ›„ ํ”„๋ก์‹œ ๊ฐ์ฒด์— ์ ‘๊ทผ ์‹œ ์„ธ์…˜์ด ์—†์–ด ์ดˆ๊ธฐํ™” ๋ถˆ๊ฐ€

ํ•ด๊ฒฐ : Repository์— fetch join ์ฟผ๋ฆฌ ์ถ”๊ฐ€

@Query("SELECT r FROM Reservation r JOIN FETCH r.seat JOIN FETCH r.user WHERE r.user.id = :userId")
List<Reservation> findByUserId(@Param("userId") Long userId);

๋ฐฐ์šด ์  : ์—ฐ๊ด€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ fetch join์œผ๋กœ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•ด์•ผ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋ฐ–์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ


2. Redis TTL ๋งŒ๋ฃŒ ํ›„ DB ์ƒํƒœ ๋ฏธ๋ฐ˜์˜

๋ฌธ์ œ : Redis TTL์ด ๋งŒ๋ฃŒ๋˜์–ด๋„ DB์˜ ์ขŒ์„ ์ƒํƒœ๊ฐ€ PENDING์œผ๋กœ ์œ ์ง€

์›์ธ : Redis TTL ๋งŒ๋ฃŒ๋Š” Redis์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋˜๊ณ  DB์—๋Š” ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ

ํ•ด๊ฒฐ : Spring Scheduler๋กœ 30์ดˆ๋งˆ๋‹ค expiresAt์ด ์ง€๋‚œ PENDING ์˜ˆ์•ฝ์„ ์กฐํšŒํ•ด CANCELLED๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ขŒ์„ ์ƒํƒœ๋ฅผ AVAILABLE๋กœ ๋ณต๊ตฌ

๋ฐฐ์šด ์  : Redis TTL๊ณผ DB ์ƒํƒœ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ๋ณ„๋„์˜ ์ •ํ•ฉ์„ฑ ์œ ์ง€ ๋กœ์ง์ด ํ•„์š”ํ•จ


3. CORS ์—๋Ÿฌ

๋ฌธ์ œ : ํ”„๋ก ํŠธ(5173)์—์„œ ๋ฐฑ์—”๋“œ(8080) ์š”์ฒญ ์‹œ CORS ์ฐจ๋‹จ

์›์ธ : Spring Security ์„ค์ •์— ํ—ˆ์šฉ Origin ๋ฏธ๋“ฑ๋ก

ํ•ด๊ฒฐ : SecurityConfig์— CorsConfigurationSource ๋นˆ ๋“ฑ๋ก, ๋ฐฐํฌ ํ™˜๊ฒฝ Origin์€ application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด ์ฝ”๋“œ์— ๋…ธ์ถœ ๋ฐฉ์ง€