๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ199

[ TIL ] JPA ์‹ฌํ™”_Day 4 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ํ•„์ˆ˜ ๊ณผ์ œ ์‹œ์ž‘Level 1@Transactional์˜ ์ดํ•ดํ˜„์žฌ ๊ธฐ๋ณธ์ ์œผ๋กœ TodoService์˜ ๋ชจ๋“  ๋กœ์ง์ด @Transactional(readOnly = true)๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.๊ทธ๋ž˜์„œ saveTodo( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋„ ๊ฐ™์€ ์„ค์ •์ด ๋“ค์–ด๊ฐ€์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.DB๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋กœ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.JWT์˜ ์ดํ•ด๊ถ๊ธˆํ–ˆ๋˜ ๋‚ด์šฉ๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ ์œ„์— ๋”ฐ๋กœ @Transactional์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ์™œ ์ „์ฒด ์ ์šฉ์„ ํ•˜๋Š” ๊ฑฐ์ง€??@Transactional(readOnly = true)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํšŒ์šฉ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์„ฑ๋Šฅ์ƒ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•ด์„œ DB์— ๋ฐ์ดํ„ฐ์˜ ์ผ.. 2025. 1. 17.
[ Spring ] CascadeType.REMOVE์™€ orphanRemoval=true, ์ž˜๋ชป ์“ฐ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค!! ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ•์˜๋ฅผ ๋“ฃ๋‹ค๊ฐ€ Cascade์™€ orphanRemoval์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์™”๋‹ค. ์ฒ˜์Œ์—๋Š” "์•„~ ์ด๋Ÿฐ ๊ฑฐ๊ตฌ๋‚˜" ํ•˜๊ณ  ๋ฌด์‹ฌ์ฝ” ๋„˜์–ด๊ฐ€๋ ค ํ–ˆ์ง€๋งŒ, ๊ฐ•์˜๊ฐ€ ์ง„ํ–‰๋ ์ˆ˜๋ก ๋จธ๋ฆฟ์†์— ๋ฌผ์Œํ‘œ๊ฐ€ ๊ฐ€๋“ ์ฐจ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค."Cascade๊ฐ€ ๋ญ์ง€? ์ด๊ฑธ ์–ธ์ œ ์จ์•ผ ํ•˜์ง€?", "orphanRemoval์€ ๋˜ ๋ญ”๋ฐ...?๋ผ๋Š” ์ƒ๊ฐ์ด ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ์—ˆ๋‹ค.๊ฒฐ๊ตญ, ๊ฐ•์˜๋ฅผ ๋“ฃ๋Š” ๋‚ด๋‚ด ์ •ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ฑ„๋กœ ๋ฉํ•˜๋‹ˆ ์ง€๋‚˜๊ฐ€๊ณ  ๋ง์•˜๋‹ค."์ด๋Œ€๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋‚˜์ค‘์— ๋˜ ๋ง‰ํž ๊ฑฐ์•ผ"๋ผ๋Š” ์ƒ๊ฐ์ด ๋จธ๋ฆฌ๋ฅผ ์Šค์ณค๊ณ , ์ด๋ ‡๊ฒŒ ๋œ ๊น€์— ๊ฐœ๋…์„ ์ œ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด์ž๋Š” ๋งˆ์Œ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.Cascade์™€ orphanRemoval์€ JPA์—์„œ ๊ฝค ์ค‘์š”ํ•œ ๊ฐœ๋…์ด์ง€๋งŒ, ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ๋Š๋‚€ ๊ฑด "๋ง์€ ์‰ฌ์›Œ ๋ณด์ด๋Š”๋ฐ, ๋ง‰์ƒ ์ดํ•ดํ•˜๋ ค๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žก.. 2025. 1. 17.
[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ๋ง์น ํ•˜๊ธฐ ๋ฌธ์ œ ์„ค๋ช…https://school.programmers.co.kr/learn/courses/30/lessons/161989?language=java ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr์–ด๋Š ํ•™๊ต์— ํŽ˜์ธํŠธ๊ฐ€ ์น ํ•ด์ง„ ๊ธธ์ด๊ฐ€ n๋ฏธํ„ฐ์ธ ๋ฒฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒฝ์— ๋™์•„๋ฆฌ · ํ•™ํšŒ ํ™๋ณด๋‚˜ ํšŒ์‚ฌ ์ฑ„์šฉ ๊ณต๊ณ  ํฌ์Šคํ„ฐ ๋“ฑ์„ ๊ฒŒ์‹œํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ดํ”„๋กœ ๋ถ™์˜€๋‹ค๊ฐ€ ์ฒ ๊ฑฐํ•  ๋•Œ ๋–ผ๋Š” ์ผ์ด ๋งŽ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ํŽ˜์ธํŠธ๊ฐ€ ๋ฒ—๊ฒจ์ง€๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ธํŠธ๊ฐ€ ๋ฒ—๊ฒจ์ง„ ๋ฒฝ์ด ๋ณด๊ธฐ ํ‰ํ•ด์ ธ ํ•™๊ต๋Š” ๋ฒฝ์— ํŽ˜์ธํŠธ๋ฅผ ๋ง์น ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.๋„“์€ ๋ฒฝ ์ „์ฒด์— ํŽ˜์ธํŠธ๋ฅผ ์ƒˆ๋กœ ์น ํ•˜๋Š” ๋Œ€์‹ , ๊ตฌ์—ญ์„ ๋‚˜๋ˆ„์–ด ์ผ๋ถ€๋งŒ ํŽ˜์ธํŠธ๋ฅผ ์ƒˆ๋กœ ์น  ํ•จ์œผ๋กœ์จ ์˜ˆ์‚ฐ์„ ์•„๋ผ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ .. 2025. 1. 17.
[ TIL ] JPA ์‹ฌํ™”_Day 3 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง JPA ์‹ฌํ™” 4, 5์ฃผ์ฐจ ๊ฐ•์˜Cascade (์˜์†์„ฑ ์ „์ด)์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ ๋ฐ˜๋Œ€ํŽธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.@OneToMany ๋˜๋Š” @OneToOne์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.์–‘์ชฝ Entity์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋น„์Šทํ•ด์•ผ ํ•œ๋‹ค.์˜ต์…˜ ์ข…๋ฅ˜ALL: ์ „์ฒด ์ƒํƒœ ์ „์ดPERSIST: ์ €์žฅ ์ƒํƒœ ์ „์ดREMOVE: ์‚ญ์ œ ์ƒํƒœ ์ „์ด → ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์ด ๊ฐ™์ด ์‚ญ์ œ๋˜์–ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. MERGE: ์—…๋ฐ์ดํŠธ ์ƒํƒœ ์ „์ด REFRESH: ๊ฐฑ์‹  ์ƒํƒœ ์ „์ดDETACH: ๋น„์˜์†์„ฑ ์ƒํƒœ ์ „์ดorphanRemoval (๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ)@OneToMany ๋˜๋Š” @OneToOne์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. (๋ถ€๋ชจ Entity)Cascade.REMOVE์™€ ๋น„์Šทํ•œ ์šฉ๋„๋กœ ์‚ญ์ œ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.๋ถ€๋ชจ ๊ฐ์ฒด์—์„œ ๋ฆฌ์ŠคํŠธ.. 2025. 1. 16.
[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ์†Œ์ˆ˜ ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ ์„ค๋ช…https://school.programmers.co.kr/learn/courses/30/lessons/12977 ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr ์ฃผ์–ด์ง„ ์ˆซ์ž ์ค‘ 3๊ฐœ์˜ ์ˆ˜๋ฅผ ๋”ํ–ˆ์„ ๋•Œ ์†Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋“ค์ด ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด nums๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, nums์— ์žˆ๋Š” ์ˆซ์ž๋“ค ์ค‘ ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ๋ฅผ ๊ณจ๋ผ ๋”ํ–ˆ์„ ๋•Œ ์†Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.์ œํ•œ ์‚ฌํ•ญnums์— ๋“ค์–ด ์žˆ๋Š” ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ ์ด์ƒ 50๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.nums์˜ ๊ฐ ์›์†Œ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์žˆ.. 2025. 1. 16.
[ Spring ] AOP๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ๋ณด์ž! ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ, ํŒ€์›์ด AOP(Aspect-Oriented Programming)๋ฅผ ํ™œ์šฉํ•ด ๊ถŒํ•œ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” AOP๋ฅผ ์ด์šฉํ•ด ๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ์Šต์ด ๋†€๋ผ์› ๊ณ , ๋™์‹œ์— ๋‚ด๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ์—” ์–ด๋ ต๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒ€์›์˜ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋ถ„์„ํ•˜๋ฉฐ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์—์„œ, "๋‚˜๋„ ๋…ธ๋ ฅํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ AOP๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค"๋Š” ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค.์ดํ›„, AOP์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์—ด์ •์ด ์ƒ๊ฒผ๊ณ , ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋ฉฐ ํ•™์Šต์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด๋ฒˆ ๊ฒฝํ—˜์€ ๋‹จ์ˆœํžˆ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋‚ด๊ฐ€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋ฐ”๋กœ ๊ฐ€๋…์„ฑ.. 2025. 1. 15.