# ์›น



# ์Šคํ”„๋ง


# ์Šคํ”„๋ง์ด ๋ญ”์ง€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

์Šคํ”„๋ง์€ ์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” SE๋กœ ๋œ ์ž๋ฐ” ๊ฐ์ฒด POJO๋ฅผ ์ž๋ฐ” EE์— ์˜์กด์ ์ด์ง€ ์•Š๊ฒŒ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์˜ ํŠน์ง•์œผ๋กœ๋Š” ํฌ๊ธฐ์™€ ๋ถ€ํ•˜ ์ธก๋ฉด์—์„œ ๊ฒฝ๋Ÿ‰ ์‹œํ‚จ ๊ฒƒ๊ณผ, IOC ๊ธฐ์ˆ ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋„๋ชจ์‹œํ‚จ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.



# ์Šคํ”„๋ง์ด๋ž‘ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ฐจ์ด์ ์ด ๋ญ”๊ฐ€์š”?

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์…‹์—…ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ธŒ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž„๋ฒ ๋””๋“œ ํ†ฐ์ผ“์ด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๊ตฌ์š”. ์ž„๋ฒ ๋””๋“œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ์—๋Š” ๋‹ค์†Œ ๋ถˆ์•ˆ์ „ํ•ด์„œ ํฐ ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.



# MVCํŒจํ„ด์ด๋ž€?

MVC ํŒจํ„ด์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์— ์œ ์šฉํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๋Š” ํšจ๊ณผ์ ์ธ ์„ค๊ณ„ ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ๋กœ๋Š” Model, View, Controller๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ๋ชจ๋ธ์€ ํ•ต์‹ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด๊ณ , ๋ทฐ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์—์„œ ์ •๋ณด ๊ตํ™˜์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.



# MVC1์ด๋ž‘ MVC2 ํŒจํ„ด ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ชจ๋ธ1์€ JSPํŽ˜์ด์ง€ ์•ˆ์—์„œ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์˜ค๋ฉด, ์ง์ ‘ ์ž๋ฐ”๋นˆ์ด๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค. ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•œ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, JSP ๋‚ด์—์„œ html ์ฝ”๋“œ์™€ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋ฉด์„œ ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šด ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ2๋Š” ์ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ JSP์—์„œ๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋ธ”๋ฆฟ์„ ๋งŒ๋“ค์–ด ์—ญํ•  ๋ถ„๋‹ด์„ ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ทฐ๋งŒ JSP๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ , ํ๋ฆ„์„ ์ œ์–ดํ•ด์ฃผ๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํ•ด๋‹นํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์„ ์„œ๋ธ”๋ฆฟ์ด ๋‹ด๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์—ญํ• ์„ ๋ถ„๋‹ดํ•˜๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง€๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์Šต๋“ํ•˜๊ธฐ ํž˜๋“ค๊ณ  ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.



# ์Šคํ”„๋ง MVC ๊ตฌ์กฐ ํ๋ฆ„์— ๋Œ€ํ•ด ๊ณผ์ •๋Œ€๋กœ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์šฐ์„ , ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ์ด๋ฅผ ์š”์ฒญํ•  ํ•ธ๋“ค๋Ÿฌ ์ด๋ฆ„์„ ์•Œ๊ธฐ ์œ„ํ•ด ํ•ธ๋“ค๋Ÿฌ๋งตํ•‘์—๊ฒŒ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ๋งตํ•‘์€ ์š”์ฒญ url์„ ๋ณด๊ณ  ํ•ธ๋“ค๋Ÿฌ ์ด๋ฆ„์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ด๋•Œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „/ํ›„์— ์ฒ˜๋ฆฌํ•  ๊ฒƒ๋“ค์„ ์ธํ„ฐ์…‰ํ„ฐ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๊ณ , ์ด ํ•ธ๋“ค๋Ÿฌ๋Š” ์‘๋‹ต์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ๋ทฐ ์ด๋ฆ„์„ ํŒ๋‹จํ•˜์—ฌ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ์ „์†กํ•ด์ค๋‹ˆ๋‹ค.

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๋ฐ›์€ ๋ทฐ ์ด๋ฆ„์„ ๋ทฐ ๋ฆฌ์กธ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•ด ์‘๋‹ต์— ํ•„์š”ํ•œ ๋ทฐ๋ฅผ ๋งŒ๋“ค๋ผ๊ณ  ๋ช…๋ นํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ํ•ด๋‹นํ•˜๋Š” ๋ทฐ๋Š” ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์—๊ฒŒ ๋ฐ›์€ ๋ชจ๋ธ๊ณผ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ™œ์šฉํ•ด ์›ํ•˜๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•ด์„œ ๋‹ค์‹œ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๋ทฐ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒƒ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•ด์ค๋‹ˆ๋‹ค.



# ์Šคํ”„๋ง ํ•„ํ„ฐ๋ž‘ ์ธํ„ฐ์…‰ํ„ฐ์˜ ์ฐจ์ด์ ์€ ๋ญ”๊ฐ€์š”?

ํ•„ํ„ฐ์™€ ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์‹คํ–‰๋˜๋Š” ์‹œ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋“ฑ๋ก์„ ํ•˜๊ณ , ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง์˜ context์— ๋“ฑ๋ก์„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํŠธ๋กค๋Ÿฌ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต์ ์ด ์žˆ์ง€๋งŒ, ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.



# IOC๋ž€?

IOC๋ž€, ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ€์‹  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์˜ ์ œ์–ด๋ฅผ ์„œ๋ธ”๋ฆฟ๊ณผ ๊ฐ™์€ bean์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.



# Dispatcher-Servlet์ด๋ž€?

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ œ์ผ ์•ž์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์„œ๋ฒ„๊ฐ€ ๋ฐ›๊ธฐ ์ „์—, ๊ณตํ†ต์ฒ˜๋ฆฌ ์ž‘์—…์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ์ ์ ˆํ•œ ์„ธ๋ถ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ž‘์—…์„ ์œ„์ž„ํ•ด์ค๋‹ˆ๋‹ค.

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•˜๋Š” url ํŒจํ„ด์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” .mvc์™€ ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ผ๊ณ  ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ธํ•ด web.xml์ด ๊ฐ€์ง„ ์—ญํ• ์ด ์ƒ๋‹นํžˆ ์ถ•์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์„ url ๋งคํ•‘ ํ™œ์šฉ์„ ์œ„ํ•ด ๋ชจ๋‘ web.xml์— ๋“ฑ๋กํ•ด ์ฃผ์—ˆ์ง€๋งŒ, ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๊ทธ ์ „์— ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•ด์ฃผ๋ฉด์„œ ์ž‘์—…์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด MVC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›น ๊ฐœ๋ฐœ ์‹œ ํฐ ์žฅ์ ์„ ๊ฐ€์ ธ๋‹ค ์ค๋‹ˆ๋‹ค.



# DI(Dependency Injection)๋ž€?

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์›ํ•˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํด๋ž˜์Šค ์‚ฌ์ด์— ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ Bean ์„ค์ • ์ •๋ณด ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ์ง์ ‘ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง€๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.



# AOP(Aspect Oriented Programming)๋ž€?

๊ณตํ†ต์˜ ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด ๊ด€๊ณ„์˜ ๋ณต์žก์„ฑ๊ณผ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ•ด์†Œํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•œ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์˜์กด๊ด€๊ณ„๋ฅผ ๊ฐ–๊ธฐ ๋ณด๋‹จ, Aspect๋ฅผ ์ด์šฉํ•ด ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ๊ฐ ํด๋ž˜์Šค์— ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์„ค์ •๋งŒ์œผ๋กœ๋„ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์œผ๋ฉฐ ํ•ต์‹ฌ ๋กœ์ง ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ, ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์€ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ AOP๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



# AOP ์šฉ์–ด๋“ค์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

Advice : ์–ธ์ œ ๊ณตํ†ต ๊ด€์‹ฌ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋กœ์ง์— ์ ์šฉํ• ์ง€ ์ •์˜

Joinpoint : Advice๋ฅผ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ง€์ ์„ ์˜๋ฏธ (before, after ๋“ฑ๋“ฑ)

Pointcut : Joinpoint์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ, ์‹ค์ œ๋กœ Advice๊ฐ€ ์ ์šฉ๋˜๋Š” Joinpoint๋ฅผ ๋‚˜ํƒ€๋ƒ„

Weaving : Advice๋ฅผ ํ•ต์‹ฌ ๋กœ์ง์ฝ”๋“œ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ

Aspect : ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๋งํ•จ. ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋ณด์•ˆ ๋“ฑ์ด Aspect์˜ ์ข‹์€ ์˜ˆ



# DAO(Data Access Object)๋ž€?

DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ „๋‹ดํ•ฉ๋‹ˆ๋‹ค.

Mybatis๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š”, mapper.xml์— ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ mapper ํด๋ž˜์Šค์—์„œ ๋ฐ›์•„์™€ DAO์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.



# Annotation์ด๋ž€?

์†Œ์Šค์ฝ”๋“œ์— @์–ด๋…ธํ…Œ์ด์…˜์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ํด๋ž˜์Šค, ํ•„๋“œ, ๋ฉ”์†Œ๋“œ์˜ ์„ ์–ธ๋ถ€์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ •๊ธฐ๋Šฅ์ด ๋ถ€์—ฌ๋œ ํ‘œํ˜„๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก, xml ํ™˜๊ฒฝ์„ค์ •์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง€๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์–ด๋ ค์›€์„ ๊ฐœ์„ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ž๋ฐ” ํŒŒ์ผ์— ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ • ํŒŒ์ผ ์ž‘์—…์„ ํ•  ๋•Œ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๊ณ , ์ปดํŒŒ์ผ ํƒ€์ž„์˜ ์ฒดํฌ๋ฟ ์•„๋‹ˆ๋ผ ์–ด๋…ธํ…Œ์ด์…˜ API๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๋„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

  • @Controller : dispatcher-servlet.xml์—์„œ bean ํƒœ๊ทธ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ.
  • @RequestMapping : ํŠน์ • ๋ฉ”์†Œ๋“œ์—์„œ ์š”์ฒญ๋˜๋Š” URL๊ณผ ๋งค์นญ์‹œํ‚ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜
  • @Autowired : ์ž๋™์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜
  • @Service : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค ํด๋ž˜์Šค์— ๋“ฑ๋ก
  • @Repository : DAO์— ๋“ฑ๋ก



# Spring JDBC๋ž€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ, ์ž๋ฐ” ๊ฐ์ฒด ์‚ฌ์ด์˜ ๋‹จ์ˆœํ•œ ๋งคํ•‘์„ ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

๊ธฐ์กด์˜ JDBC์—์„œ๋Š” ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋กœ์ง๋งˆ๋‹ค ํ•„์š”ํ•œ SQL๋ฌธ์ด ๋ชจ๋‘ ๋‹ฌ๋ž๊ณ , ์ด์— ํ•„์š”ํ•œ Connection, PrepareStatement, ResultSet ๋“ฑ์„ ์ƒ์„ฑํ•˜๊ณ  Exception ์ฒ˜๋ฆฌ๋„ ๋ชจ๋‘ ํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Spring์—์„œ๋Š” JDBC์™€ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ชจ๋‘ ๋‹ค ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.



# MyBatis๋ž€?

๊ฐ์ฒด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, Mapper ์ž์ฒด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ , DTO์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„๊ณผ SQL ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ๋งคํ•‘ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•จ

๊ธฐ์กด์—๋Š” DAO์— ๋ชจ๋‘ SQL๋ฌธ์ด ์ž๋ฐ” ์†Œ์Šค์ƒ์— ์œ„์น˜ํ–ˆ์œผ๋‚˜, MyBatis๋ฅผ ํ†ตํ•ด SQL์€ XML ์„ค์ • ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด, ์ˆ˜์ •ํ•  ๋•Œ ์„ค์ •ํŒŒ์ผ๋งŒ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์— ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ ๋งคํ•‘๋˜๋Š” ๋ชจ๋“  DTO์— ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋„ ๋ชจ๋‘ ์„ค์ •ํŒŒ์ผ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.



์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM