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

๐Ÿ“– Java & Spring & Kotlin20

[ Spring ] CascadeType.REMOVE์™€ orphanRemoval=true, ์ž˜๋ชป ์“ฐ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค!! ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ•์˜๋ฅผ ๋“ฃ๋‹ค๊ฐ€ Cascade์™€ orphanRemoval์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์™”๋‹ค. ์ฒ˜์Œ์—๋Š” "์•„~ ์ด๋Ÿฐ ๊ฑฐ๊ตฌ๋‚˜" ํ•˜๊ณ  ๋ฌด์‹ฌ์ฝ” ๋„˜์–ด๊ฐ€๋ ค ํ–ˆ์ง€๋งŒ, ๊ฐ•์˜๊ฐ€ ์ง„ํ–‰๋ ์ˆ˜๋ก ๋จธ๋ฆฟ์†์— ๋ฌผ์Œํ‘œ๊ฐ€ ๊ฐ€๋“ ์ฐจ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค."Cascade๊ฐ€ ๋ญ์ง€? ์ด๊ฑธ ์–ธ์ œ ์จ์•ผ ํ•˜์ง€?", "orphanRemoval์€ ๋˜ ๋ญ”๋ฐ...?๋ผ๋Š” ์ƒ๊ฐ์ด ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ์—ˆ๋‹ค.๊ฒฐ๊ตญ, ๊ฐ•์˜๋ฅผ ๋“ฃ๋Š” ๋‚ด๋‚ด ์ •ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ฑ„๋กœ ๋ฉํ•˜๋‹ˆ ์ง€๋‚˜๊ฐ€๊ณ  ๋ง์•˜๋‹ค."์ด๋Œ€๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋‚˜์ค‘์— ๋˜ ๋ง‰ํž ๊ฑฐ์•ผ"๋ผ๋Š” ์ƒ๊ฐ์ด ๋จธ๋ฆฌ๋ฅผ ์Šค์ณค๊ณ , ์ด๋ ‡๊ฒŒ ๋œ ๊น€์— ๊ฐœ๋…์„ ์ œ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด์ž๋Š” ๋งˆ์Œ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.Cascade์™€ orphanRemoval์€ JPA์—์„œ ๊ฝค ์ค‘์š”ํ•œ ๊ฐœ๋…์ด์ง€๋งŒ, ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ๋Š๋‚€ ๊ฑด "๋ง์€ ์‰ฌ์›Œ ๋ณด์ด๋Š”๋ฐ, ๋ง‰์ƒ ์ดํ•ดํ•˜๋ ค๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žก.. 2025. 1. 17.
[ Spring ] AOP๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ๋ณด์ž! ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ, ํŒ€์›์ด AOP(Aspect-Oriented Programming)๋ฅผ ํ™œ์šฉํ•ด ๊ถŒํ•œ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” AOP๋ฅผ ์ด์šฉํ•ด ๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ์Šต์ด ๋†€๋ผ์› ๊ณ , ๋™์‹œ์— ๋‚ด๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ์—” ์–ด๋ ต๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒ€์›์˜ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋ถ„์„ํ•˜๋ฉฐ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์—์„œ, "๋‚˜๋„ ๋…ธ๋ ฅํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ AOP๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค"๋Š” ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค.์ดํ›„, AOP์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์—ด์ •์ด ์ƒ๊ฒผ๊ณ , ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋ฉฐ ํ•™์Šต์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด๋ฒˆ ๊ฒฝํ—˜์€ ๋‹จ์ˆœํžˆ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋‚ด๊ฐ€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋ฐ”๋กœ ๊ฐ€๋…์„ฑ.. 2025. 1. 15.
[ Spring ] ํŠธ๋žœ์žญ์…˜.. ๋‹ค๊ฐ€๊ฐˆ์ˆ˜๋ก ๋ฉ€๊ฒŒ ๋Š๊ปด์ง€๋Š” ์นœ๊ตฌ ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๊ณผ์—ฐ ๋ฌด์—‡์ผ๊นŒ??ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค!์ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ACID ์†์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค! (๋ฉด์ ‘์—์„œ ๋‚˜์˜ค๋Š” ํ•„์ˆ˜ ์งˆ๋ฌธ์ด๋‹ค!!)์›์ž์„ฑ (Atomicity)์ž‘์—…์ด ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๋ฅผ ๋กค๋ฐฑํ•œ๋‹ค.ex) ์†ก๊ธˆ ์‹œ, ๋ˆ์ด A ๊ณ„์ขŒ์—์„œ ๋น ์กŒ์ง€๋งŒ B ๊ณ„์ขŒ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์œผ๋ฉด ๋กค๋ฐฑํ•œ๋‹ค.์ผ๊ด€์„ฑ (Consistency)์ž‘์—… ์ „ํ›„์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๊ฐ€ ํ•ญ์ƒ ์œ ํšจํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.๊ฒฉ๋ฆฌ์„ฑ (Isolation)ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.์˜ต์…˜์— ๋”ฐ๋ผ์„œ ์„ค์ •์„ ์ด๋ฆฌ์ €๋ฆฌ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.์ง€์†์„ฑ (Durability)ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋œ๋‹ค.โ–ถ MySQL์„ ๋งŒ๋“ค ๋•Œ ์ด ์›์น™์„ ๋ชจ๋‘ ๊ณ ์ˆ˜ํ•ด์„œ ๋งŒ๋“ค์–ด ๋†จ๋‹ค. ์•ž์œผ.. 2025. 1. 5.
Java ๊ธฐ๋ณธํŽธ ๊ฐ•์˜_๋‹คํ˜•์„ฑ1 ๋‹คํ˜•์„ฑ 1 ๋‹คํ˜•์„ฑ ์‹œ์ž‘๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋Œ€ํ‘œ์ ์ธ ํŠน์ง•์œผ๋กœ๋Š” ์บก์Šํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ์ด ์žˆ๋‹ค. ๊ทธ์ค‘์—์„œ ๋‹คํ˜•์„ฑ์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฝƒ์ด๋ผ ๋ถˆ๋ฆฐ๋‹ค.์•ž์„œ ํ•™์Šตํ–ˆ๋˜ ์บก์Šํ™”๋‚˜ ์ƒ์†์€ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋ฐ˜๋ฉด์— ๋‹คํ˜•์„ฑ์€ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ๋„ ์–ด๋ ต๊ณ , ์ž˜ ํ™œ์šฉํ•˜๊ธฐ๋Š” ๋” ์–ด๋ ต๋‹ค. ํ•˜์ง€๋งŒ ์ข‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹คํ˜•์„ฑ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜๋‹ค.๋‹คํ˜•์„ฑ(Polymorphism)์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ "๋‹ค์–‘ํ•œ ํ˜•ํƒœ", "์—ฌ๋Ÿฌ ํ˜•ํƒœ"๋ฅผ ๋œปํ•œ๋‹ค.ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹คํ˜•์„ฑ์€ ํ•œ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋œปํ•œ๋‹ค. ๋ณดํ†ต ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋‹คํ˜•์„ฑ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ํ•ต์‹ฌ ์ด๋ก ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.๋‹คํ˜•์  ์ฐธ์กฐ๋ฉ”์„œ๋“œ .. 2024. 12. 2.
Java ๊ธฐ๋ณธํŽธ ๊ฐ•์˜_์ƒ์† ์ƒ์† ์ƒ์† - ์‹œ์ž‘package extends1.ex1;public class ElectricCar { public void move() { System.out.println("์ฐจ๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค."); } public void charge() { System.out.println("์ถฉ์ „ํ•ฉ๋‹ˆ๋‹ค."); }}package extends1.ex1;public class GasCar { public void move() { System.out.println("์ฐจ๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค."); } public void fillUp() { System.out.println("๊ธฐ๋ฆ„์„ ์ฃผ์œ ํ•ฉ๋‹ˆ๋‹ค."); }}package extends1.ex.. 2024. 12. 1.
Java ๊ธฐ๋ณธํŽธ ๊ฐ•์˜_final final final ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜final ํ‚ค์›Œ๋“œ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋! ์ด๋ผ๋Š” ๋œป์ด๋‹ค.๋ณ€์ˆ˜์— final ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์œผ๋ฉด ๋”๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.์ฐธ๊ณ ๋กœ final์€ class, method๋ฅผ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๊ณณ์— ๋ถ™์„ ์ˆ˜ ์žˆ๋‹ค.final - ์ง€์—ญ ๋ณ€์ˆ˜package final1;public class FinalLocalMain { public static void main(String[] args) { // final ์ง€์—ญ ๋ณ€์ˆ˜ final int data1; data1 = 10; // ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ํ• ๋‹น ๊ฐ€๋Šฅ //data1 = 20; // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ // final ์ง€์—ญ ๋ณ€์ˆ˜ 2 final int data2 = 10; .. 2024. 11. 28.