"์ œ๋ฐœ ํฌ๋กฌ ์ฐฝ 3๊ฐœ ์ข€ ๊ทธ๋งŒ ์ผœ๊ฒŒ ํ•ด์ฃผ์„ธ์š”" - ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒŒ์ž„ ์‹œ์ž‘ ์ •์ฑ…์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
๋ฌธ์ œ ์ƒํ™ฉ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ตœ์†Œ 3๋ช…์˜ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด ๊ทœ์น™์€ GameRoom์ด ๊ฒ€์ฆํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค.GameRoom.java public synchronized void start() { ... if (players.size() ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ฒŒ์ž„ ํ๋ฆ„์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œ 3๊ฐœ์˜ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ด๊ณ , ๊ฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ–ˆ๋‹ค. ์ด ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜์–ด ํ…Œ์ŠคํŠธ ์ค€๋น„๊ฐ€ ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•˜๋‹ค.ํŠนํžˆ ๊ฒŒ์ž„์˜ ์ „์ฒด ํ๋ฆ„์„ ์ž์ฃผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์—์„œ๋Š” ๊ฐ™์€ ์ค€๋น„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ–ˆ๊ณ , ์ด๋Š” ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ์›์ธ์ด ๋˜์—ˆ๋‹ค.๋”ฐ๋ผ์„œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ตœ์†Œ 3๋ช… ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด 1๋ช…๋งŒ์œผ๋กœ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด..
์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์—์„œ ์ฟ ํ‚ค๊ฐ€ ์—†์–ด ๋ณด์˜€๋˜ ์ด์œ 
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
์ƒํ™ฉ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋˜ ์ค‘ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์›์—๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜๋‹ค.์š”์ฒญ ํ—ค๋”์— ์ฟ ํ‚ค๊ฐ€ ์—†๋Š”๋ฐ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋˜๊ณ , ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋„ ์ž˜ ๋ณด๋‚ด์ง€๋„ค?๋ฌด์Šจ ๋ง์ด์ง€? ์›น์†Œ์ผ“์— ๊ธฐ๋ฐ˜ํ•œ ์ฑ„ํŒ…์€ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ† ํฐ์„ ํ†ตํ•œ ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ์ด๋•Œ ํ† ํฐ์€ ์ฟ ํ‚ค์— ๋‹ด๊ฒจ ์š”์ฒญ ํ—ค๋”์— ์‹ค๋ฆฐ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ํ•˜๋˜ ์ค‘ ์ฟ ํ‚ค๊ฐ€ ์—†๋Š”๋ฐ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜๊ณ , ๋ฉ”์‹œ์ง€๋„ ์ž˜ ๋ณด๋‚ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์›น์†Œ์ผ“ ์ธ์ฆ ํ๋ฆ„ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์˜ HandshakeInterceptor๊ฐ€ ์š”์ฒญ์— ๋‹ด๊ฒจ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ๊บผ๋‚ด์–ด ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์ง„ํ–‰ํ•œ๋‹ค. ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋งŒ๋ฃŒ๋œ ํ† ํฐ์ด๋ผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ† ํฐ์ด..
๋”ฐ๋‹ฅ ํด๋ฆญ๋งŒ ๋ง‰์œผ๋ฉด ๋๋‚  ์ค„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
๋™์‹œ ์‚ฝ์ž… ์ด์Šˆ(๋”ฐ๋‹ฅ ์ด์Šˆ)๊ฐœ๋… ๋ฐ ๋ฌธ์ œ์ ๋”ฐ๋‹ฅ ์ด์Šˆ๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ฒˆ ํด๋ฆญํ•ด์„œ ๋™์ผํ•œ API ์š”์ฒญ์ด ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์ค‘๋ณต์œผ๋กœ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค.์ค‘๋ณต ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ •์ฑ…์—์„œ ๋”ฐ๋‹ฅ ์ด์Šˆ๋กœ ์ธํ•œ ์ค‘๋ณต ์‚ฝ์ž…์€ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.์ด๋•Œ ์„œ๋ฒ„์—์„œ๋Š” ๊ฐ ์š”์ฒญ์ด ๋…๋ฆฝ์ ์ธ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฒ€์ฆ๋งŒ์œผ๋กœ๋Š” ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋ฌธ์ œ ์ƒํ™ฉํ˜„์žฌ ๋ฉ˜ํ† ๋ง ์˜ˆ์•ฝ์˜ ์ •์ฑ…์€ ํ•œ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ๋ฉ˜ํ† ๋ง์„ ์ค‘๋ณต ์˜ˆ์•ฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ •์ฑ…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ ์ƒํ™ฉ์€ ๋”ฐ๋‹ฅ ์š”์ฒญ์œผ๋กœ ์ธํ•œ ์ค‘๋ณต ์‚ฝ์ž…์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.๋‘ ๊ฐœ์˜ ์š”์ฒญ์ด ๊ฑฐ์˜ ๋™์‹œ์— ๋“ค์–ด์™€ ๋ชจ๋‘ ์•„์ง ์˜ˆ์•ฝ์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•œ ๋’ค ๊ฐ๊ฐ ์˜ˆ์•ฝ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.๊ทธ ๊ฒฐ๊ณผ, ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๋ฉ˜ํ† ๋ง์— ๋Œ€..
2025๋…„ ์ •๋ฆฌํ•˜๊ธฐ
ยท
์ผ์ƒ
์›๋ž˜๋Š” 25๋…„์ด ๋๋‚˜๊ธฐ ์ „์— ์™„์„ฑํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๊ทธ๋Ÿฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.. ์–ด์ฐŒ ๋˜์—ˆ๊ฑด, ์ €๋„ 1๋…„๊ฐ„์˜ ํ–‰์ ์„ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ 2025๋…„ ์ •๋ฆฌํ•˜๊ธฐ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋งค๋…„ ํšŒ๊ณ ๋ฅผ ์ž‘์„ฑํ•ด ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์•ผ ํ•  ๋ง์ด ๋งŽ์œผ๋‹ˆ ์•„๋ž˜๋ถ€ํ„ฐ๋Š” ๋ง์„ ํŽธํ•˜๊ฒŒ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.ํšŒ๊ณ ๋ฅผ ํ•˜๋Š” ์ด์œ ๋‚˜๋Š” 2024๋…„, ์ •ํ™•ํžˆ๋Š” 2024๋…„ 11์›”๋ถ€ํ„ฐ ๋ธ”๋กœ๊ทธ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. ์‹œ์ž‘์€ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ์˜€๋‹ค.์šฐํ…Œ์ฝ”๋ฅผ ์ง€์›ํ•  ๋‹น์‹œ์— ๋‚˜์˜ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๋ชฉ๋ก์€ 1์ฃผ ์ฐจ ํšŒ๊ณ , 2 ์ฃผ์ฐจ ํšŒ๊ณ ,... n ์ฃผ์ฐจ ํšŒ๊ณ  ๋“ค๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์—ˆ๋‹ค.์ˆ˜๋งŽ์€ ํšŒ๊ณ ๊ธ€์„ ๋ณด๋ฉด์„œ ๋А๋‚€ ์ ์€ ๋‘ ๊ฐ€์ง€์˜€๋‹ค.์ € ๋งŽ์€ ๋‚ด์šฉ์„ ์ ๊ธฐ ์œ„ํ•ด์„œ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ ธ์„๊นŒ?์ง„์งœ ํšŒ๊ณ ๊ฐ€ ๋„์›€์ด ๋ ๊นŒ?๋А๋‚€ ์  ๋ณด๋‹จ ์˜๋ฌธ์ ์— ๊ฐ€๊น์ง€๋งŒ ์–ด์ฐŒ ๋˜์—ˆ๊ฑด ์šฐํ…Œ์ฝ”์— ์ง€์›ํ–ˆ๋‹ค๋Š” ๊ณผ์ •์„ "๊ธฐ๋ก"ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๋งˆ์Œ๊ณผ ํ•จ๊ป˜ "๋‚˜๋„ ํ•ด๋ด์•ผ์ง€" ํ•˜๋Š” ..
์ง€์—ฐ๋กœ๋”ฉ์€ ์กฐ์‹ฌํžˆ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
๋ฌธ์ œ/kakako/callback API์˜ ์‘๋‹ต์„ ํ…Œ์ŠคํŠธํ•˜๋‹ค๊ฐ€ LazyInitializationException ์„ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค.์ด์œ ์˜ˆ์™ธ ๋กœ๊ทธ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ง€์—ฐ๋กœ๋”ฉ๋œ Member ์—”ํ‹ฐํ‹ฐ์— ์ ‘๊ทผํ•˜๋‹ค๊ฐ€ LazyInitializationException ์ด ๋ฐœ์ƒํ–ˆ๋‹ค./kakao/callback ๋กœ์ง ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด์ž.์นด์นด์˜ค ์ฝœ๋ฐฑ ๋กœ์ง ํ๋ฆ„์นด์นด์˜ค ์ฝœ๋ฐฑ์˜ ํ๋ฆ„์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.์นด์นด์˜ค ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›์•„์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ `/kakao/callback` ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ ํ•œ๋‹ค.ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—๊ฒŒ `/kakao/callback` ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ์นด์นด์˜ค ์„œ๋ฒ„์—๊ฒŒ ํ† ํฐ์„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต๋ฐ›๋Š”๋‹ค.์„œ๋ฒ„์˜ `kakaoCallBack()`์€ ์นด์นด์˜ค์—๊ฒŒ ์‘๋‹ต..
RestAssured์˜ Jackson ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ(feat. Spring Boot 4.0.0)
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
RestAssured ๊ธฐ๋ฐ˜์˜ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘ ์œ„์™€๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.JSON ์ง๋ ฌํ™”๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์œผ๋กœ ํ•ด์„๋œ๋‹ค. ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€? ํ”„๋กœ์ ํŠธ์˜ ํ™˜๊ฒฝ์œผ๋กœ Spring Boot 4.0.0 ๋ฒ„์ „์„ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋‹ค.๊ธฐ์กด์˜ Spring Boot 3.x ๋ฒ„์ „์—์„œ Spring Boot 4.x ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด์„œ Jackson ๋ฒ„์ „๋„ 2.x ๋ฒ„์ „์—์„œ 3.x ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ณ€๊ฒฝ ์ „๋ณ€๊ฒฝ ํ›„์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฒ„์ „Spring Boot 3.xSpring Boot 4.xJackson ๋ฒ„์ „Jackson 2.xJackson 3.x ์ง๋ ฌํ™”๊ฐ€ ์•ˆ๋˜๋Š” ๋ฒ”์œ„๋Š” ์–ด๋””๊นŒ์ง€ ์ธ๊ฐ€?์ง๋ ฌํ™”๊ฐ€ ์•ˆ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ์‹ค์ œ Http ์š”์ฒญ์„ ํ…Œ์ŠคํŠธํ•ด๋ดค๋‹ค.ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ, ์ •์ƒ๋™์ž‘ ํ•˜๋Š”๊ฒƒ์„ ํ™•์ธ..
Spring Boot ํ…Œ์ŠคํŠธ์—์„œ ์ปค๋„ฅ์…˜ ๊ณ ๊ฐˆ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
๋ณธ ๊ธ€์€ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ์—์„œ ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ์ ์˜ ์›์ธ์„ ์ฐพ๊ณ , ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •, ๊ทธ ๊ณผ์ •์—์„œ ๋ฐฐ์šด์ ๋“ค์„ ๊ธฐ๋กํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.๋ฌธ์ œ ์ƒํ™ฉci๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š”๋‹ค.๊ธฐ๋Šฅ๊ฐœ๋ฐœ ํ›„, pr์„ ๋จธ์ง€ํ–ˆ์„๋•Œ ci๋ฅผ ์‹คํ–‰ํ•˜๋˜ ์ค‘ ci๊ฐ€ ๋๋‚˜์ง€ ์•Š๊ณ , ๊ณ„์†ํ•ด์„œ ๋กœ๋”ฉ๋˜์—ˆ๋‹ค.์›์ธ ์ฐพ๊ธฐCI Report ํ™•์ธ์œ„์—์„œ ์‹คํŒจํ•œ ci๋Š” featrue(๊ธฐ๋Šฅ) ๋ธŒ๋žœ์น˜์—์„œ develop(๊ฐœ๋ฐœ)๋ธŒ๋žœ์น˜๋กœ PR์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ci ๋‹ค.๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ํ†ต๊ณผํ•˜๋”๋ผ๋„ github action์—์„œ ์‹คํ–‰ํ•˜๋Š” ci ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ci ์Šคํฌ๋ฆฝํŠธ์— ํ…Œ์ŠคํŠธ ์‹คํŒจ์‹œ ์‹คํŒจ ๋กœ๊ทธ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š” report ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.report๋ฅผ ํ™•์ธ ํ–ˆ์„ ๋•Œ ๋ช‡๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์—ˆ๋‹ค.์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ๋Š” ..
QueryDSL์˜ hibernate ๋ฒ„์ „ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ์˜ˆ์™ธ ๋ฐœ์ƒ
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
๋ฌธ์ œ ์ƒํ™ฉ๋ฉ˜ํ† ๋ง ๋ชฉ๋ก์„ ์˜คํ”„์…‹ ๊ธฐ๋ฐ˜์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด QueryDSL์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.์ด์œ ๋Š” ๋ฉ˜ํ† ๋ง์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ˜ํ† ๋ง์นดํ…Œ๊ณ ๋ฆฌ (์˜ˆ: ๋ฉ˜ํ† ๋ง1 -> {๊ทผ๋ ฅ์ฆ์ง„, ์ž์„ธ๊ต์ •, ์ฒด๋ ฅ์ฆ๊ฐ€})์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋ฉ˜ํ† ๋ง์— ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ๋ฅผ ์‘๋‹ต์— ํฌํ•จ์‹œ์ผœ์•ผ ํ–ˆ๋‹ค. ์ฒ˜์Œ์—” ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋‚˜ projection์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์ƒ๊ฐ๋ณด๋‹ค ๋กœ์ง์ด ๋ณต์žกํ•ด์ ธ์„œ ๋‚˜์ค‘์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ณ ,์ด์ „์— QueryDSL์„ ๋„์ž…ํ•˜์—ฌ ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— QueryDSL์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.์ตœ์ข…์ ์œผ๋กœ ์ด๋Ÿฐ ๋ชจ์Šต์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ ๋ดค๋‹ค.๊ทธ๋ฆฌ๊ณ  ์œ„์™€๊ฐ™์€ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ,์˜ˆ์™ธ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋ฉด NoSuchMethodError ์˜ˆ์™ธ๋ผ๊ณ  ํ•˜..
Hibernate ddl-auto: validate๋Š” ๋ฌด์—‡์„ ๊ฒ€์ฆํ• ๊นŒ?
ยท
๊ฐœ๋ฐœ/๊ธฐ์ˆ 
DB์—๋Š” ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์—†๋Š”๋ฐ ์™œ ์˜ˆ์™ธ๊ฐ€ ์•ˆ ๋‚˜์ง€?validate์˜ ์ง„์งœ ์˜๋ฏธ๊ทธ๋™์•ˆ validate๋ฅผ DB์™€ ์—”ํ‹ฐํ‹ฐ ์ „์ฒด ์ผ์น˜ ๊ฒ€์ฆ์œผ๋กœ ์˜คํ•ดํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ, Hibernate๋Š” ์‹ค์ œ๋กœ "์—”ํ‹ฐํ‹ฐ ๊ธฐ์ค€"์œผ๋กœ๋งŒ ๊ฒ€์‚ฌํ•œ๋‹ค.Hibernate์˜ ๊ฒ€์ฆ ์ˆœ์„œHibernate๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๊ฒ€์ฆํ•˜๊ฒŒ ๋œ๋‹ค.@Entity๋กœ ๋“ฑ๋ก๋œ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ์Šค์บ”ํ•œ๋‹ค.๊ฐ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋งคํ•‘๋œ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์ฐพ๋Š”๋‹ค.DB์—์„œ ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ด ์ปฌ๋Ÿผ, ํƒ€์ž…, ์ œ์•ฝ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.๋ถˆ์ผ์น˜ ์‹œ ์˜ˆ์™ธ(SchemaValidationException) ๋ฐœ์ƒHibernate๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์€ ๊ฒ€์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค ์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๊ธฐDB์—๋Š” category, chat_message ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•จ์ฝ”๋“œ์—๋Š” ChatMessag..
์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค ๋ ˆ๋ฒจ 3 ํšŒ๊ณ  -ํ˜‘์—…-
ยท
๊ฐœ๋ฐœ/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
๋ ˆ๋ฒจ 2 ํšŒ๊ณ ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„์„œ ์ด๋ฒˆ ๋ ˆ๋ฒจ 3 ํšŒ๊ณ ๋Š” ๊ผญ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ์ด์œ ์•ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ์šฐํ…Œ์ฝ”์˜ ์ ˆ๋ฐ˜์ด ์ง€๋‚ฌ๊ธฐ๋„ ํ–ˆ๊ณ , ํ•˜๊ณ  ์‹ถ์€ ๋ง์ด ๋งŽ๊ธฐ๋„ ํ–ˆ๋‹ค. ์ด๋ฒˆ ํšŒ๊ณ ์—์„œ ์–˜๊ธฐํ•  ์ฃผ์ œ๋Š” ํ˜‘์—…์ด๋‹ค.ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๋А๋‚€ ๊ฐ์ •๋“ค์„ ๊ธฐ๋กํ•˜์ง€๋งŒ, ์ด ๊ธ€์ด ๋‚˜์™€ ๋น„์Šทํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.ํ˜‘์—…? ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์€๋ฐ?"์šฐํ…Œ์ฝ” ์‚ฌ๋žŒ๋“ค๊ณผ ํ˜‘์—…์„ ํ•˜๋ฉด, ์ •๋ง ์ œ๋Œ€๋กœ ๋œ ํ˜‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒ ๊ตฌ๋‚˜!"๊ฒฐ๋ก ์ ์œผ๋กœ, ๊ธฐ๋Œ€์ฒ˜๋Ÿผ ์ •๋ง ์ œ๋Œ€๋กœ ๋œ ํ˜‘์—…์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ, ๊ณผ์ •์ด ์ƒ๊ฐ๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ฌ๋ž๋‹ค. ํ˜‘์—…๋„ ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜์š”?๊ฐœ๋ฐœ์ž๋กœ์„œ ์ œ๋Œ€๋กœ ํ˜‘์—…์„ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์—†์—ˆ๋‹ค. ๊ทธ ๋ง์€ ๊ณง, ํ˜‘์—…์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ๋œป์ด๊ธฐ๋„ ํ–ˆ๋‹ค.์‚ฌ์‹ค ํฌ๊ฒŒ ๊นŠ์ด ์ƒ๊ฐํ•˜์ง„ ์•Š์•˜๋‹ค. ํ˜‘์—…์— ํŠน๋ณ„ํ•œ ๋งค๋‰ด์–ผ์ด ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ ,..