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

์ „์ฒด ๊ธ€

(71)
Spring์œผ๋กœ AOP ๊ตฌํ˜„ (Around Advice) ๋ณด์กฐ ์—…๋ฌด์˜ ์‚ฌ์šฉ์— ๋”ฐ๋ผ ์Šคํ”„๋ง์€ Before Advice, After returnning Advice, After throwing Advice, Around Advice ๋„ค ๊ฐ€์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ๋งŒ AOP๋ฅผ ๊ตฌํ˜„ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ Around Advice๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. (unounou.tistory.com/48) Program.java public class Program { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring/aop/setting.xml"); Exam proxy = (Exam) context.getBe..
์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ AOP ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ kor, eng, math, com ๋„ค ๊ณผ๋ชฉ์˜ ์ด์ ์„ ๊ณ„์‚ฐํ•ด ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ํ”„๋กœ๊ทธ๋žจ์ด ๋„ˆ๋ฌด ๋А๋ฆฌ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์„ ๋•Œ ๊ฐœ๋ฐœ์ž๋“ค์€ ์‹คํ–‰์— ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ณ , ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด ๊ณ„์‚ฐํ•˜๋Š” ์†Œ์Šค๋ฅผ ๋ผ์›Œ๋„ฃ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•„์š”์— ์˜ํ•ด ์‚ฝ์ž…ํ•œ ๋ถ€๋ถ„์ด๋‹ค. (=>๋ณด์กฐ ์—…๋ฌด) ** ์†Œ์Šค ๊ตฌ์„ฑ Exam์€ NewlecExam์˜ ์ธํ„ฐํŽ˜์ด์Šค Program.java public class Program { public static void main(String[] args) { Exam exam = new NewlecExam(1,1,1,1); System.out.printf("total is %d\n", exam.total(..
AOP(Aspect Oriented Programming)์˜ ๊ฐœ๋… ์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•  ๋•Œ DI์™€ ํ•จ๊ป˜ ํ•ญ์ƒ ๊ฑฐ๋ก ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ AOP์ด๋‹ค. AOP๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด AOP ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” Object Oriented Programming์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๊ณ  ์žˆ์—ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์›ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋ถ„์„ํ•ด์„œ ๊ทธ์— ๋Œ€ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์™”๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์™ธ์—๋„ ๊ฐœ๋ฐœ์ž ๋˜๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์„ ์œ„ํ•ด ํ•„์š”๋กœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ์ฃผ ์—…๋ฌด ๋กœ์ง ์™ธ์˜ ์ฝ”๋“œ์—๋„ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค. => ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ ์—…๋ฌด(์‚ฌ์šฉ์ž์˜ ๊ด€์ )์—์„œ ๋‹ค๋ฅธ ๊ด€์ (๋กœ๊ทธ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ ์ฒ˜๋ฆฌ, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ)์œผ๋กœ๋„ ๋‚ด์šฉ์ด ํ™•์žฅ๋œ๋‹ค. ์ด๋Ÿฐ ๋กœ์ง๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์•ž ๋’ค์— ์œ„์น˜ํ•˜๋Š” ๋ณด์กฐ ..
XML Configuration์„ Java Configuration์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ํ”„๋กœ๊ทธ๋žจ์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ-์ฃผ์ž…ํ•˜๋Š” ์„ค์ • ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ์˜ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋‘๋Š” ๊ฒƒ์ด ์œ ์ง€ ๋ณด์ˆ˜์— ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ๋„๋ฆฌ ์“ฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทธ ๋ฐฉ๋ฒ•๋งˆ์ €๋„ xml์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ ์š”์ฆ˜์—๋Š” ์ž๋ฐ” ์ฝ”๋“œ ์ž์ฒด์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ๋” ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ์‹์„ ํ†ต์ผํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค. ์•ž์„œ ์ž‘์„ฑํ•œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํ”„๋ง ์—†์ด DI, xml ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€, xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์‚ดํŽด๋ณด์•˜๋‹ค. ์ด์ œ๋ถ€ํ„ฐ๋Š” xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์„ ๋งˆ๋ฌด๋ฆฌ ์ง€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ์„ฑ์€ @Co..
์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ(@Component) ์ด์ „ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด DI๋ฅผ ํ•˜๋Š” ๊ณผ์ •์„ ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค. (unounou.tistory.com/44?category=1183877) ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ DI (@Autowired, @Qualifier) ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๊ด€๋ จํ•œ ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋†“์€ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ์†Œ์Šค์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์†Œ์Šค ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  xml์˜ ์„ค์ • ๋ถ€๋ถ„๋งŒ ์ˆ˜์ • unounou.tistory.com ๋นˆ์„ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์€ xml์— ์žˆ๊ณ  ์ž๋ฐ” ์†Œ์Šค์— @Autowired๋ฅผ ๋ถ™์—ฌ ์ƒ์„ฑ๋œ ๋นˆ์„ ์„ธํŒ…ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ๋นˆ ์ƒ์„ฑ ๊ณผ์ • ์—ญ์‹œ ์ž๋ฐ” ์†Œ์Šค์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. GridExamConsole.java @Component public..
์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ DI (@Autowired, @Qualifier) ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๊ด€๋ จํ•œ ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋†“์€ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ์†Œ์Šค์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์†Œ์Šค ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  xml์˜ ์„ค์ • ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์ด์ ์ด ์žˆ์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, B2๋ผ๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ B3์œผ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ๋œ๋‹ค๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด ๋ณด์ž. xml์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋นˆ ์ƒ์„ฑ ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์„ ๋•Œ, B2๋ฅผ B3๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. (์ˆ˜์ • ํ›„) ํ•˜์ง€๋งŒ ์ด ๊ณผ์ • ์—ญ์‹œ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ๊ณ , ์ฝ”๋“œ์— ์•„์˜ˆ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†์ด, @Componect๊ฐ€ ๋ถ™์€ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. => ์–ด๋…ธํ…Œ์ด์…˜ => ์„ค์ • ํŒŒ์ผ์„ ๋ฐ–์œผ๋กœ ๋นผ๋†“๋Š” xml ๋ฐฉ์‹์—์„œ, ์„ค์ •์„ ์•„์˜ˆ ์ฝ”๋“œ์— ์‹ฌ์–ด๋†“๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ Œ..
xml์„ ์ด์šฉํ•œ ์Šคํ”„๋ง DI ์ง€์‹œ์„œ ์ž‘์„ฑ(Spring Bean Configuration), IoC ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉํ•˜๊ธฐ ์•ž์„œ ์Šคํ”„๋ง ์—†์ด ์ง์ ‘ DI๋ฅผ ํ•ด๋ณธ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. Program.java public class Program { public static void main(String[] args) { /* ์Šคํ”„๋ง์—๊ฒŒ ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. Exam exam = new NewlecExam(); //์ƒ์„ฑ //ExamConsole console = new GridExamConsole(exam); //์ƒ์„ฑ์ž ์ด์šฉํ•œ ์กฐ๋ฆฝ ExamConsole console = new GridExamConsole(); console.setExam(exam); //setter๋ฅผ ํ†ตํ•œ ์กฐ๋ฆฝ(๊ฒฐํ•ฉ) */ ExamConsole console = ?; console.print(); } } ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ(new ์—ฐ์‚ฐ์ž ์ด์šฉ),..
์Šคํ”„๋ง ์—†์ด DI ํ•ด๋ณด๊ธฐ ** ์†Œ์Šค ๊ตฌ์„ฑ Exam์€ NewlecExam์˜ ์ธํ„ฐํŽ˜์ด์Šค ExamConsole์€ InlineExamConsole๊ณผ GridExamConsole์˜ ์ธํ„ฐํŽ˜์ด์Šค (์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋Š” www.newlecture.com/ ์ฐธ๊ณ ) public class Program { public static void main(String[] args) { Exam exam = new NewlecExam(); ExamConsole console = new InlineExamConsole(exam); //InlineExamConsole์ด exam ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ์žˆ๋‹ค => DI //ExamConsole console = new GridExamConsole(exam); console.print(); //์ด์ ์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜ } } ..