Search
Duplicate

Spring MVC

MVC νŒ¨ν„΄

μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό Model-View-Controller μ£Όμš” κ΅¬μ„±μš”μ†Œλ‘œ λΆ„λ¦¬ν•˜μ—¬ κ°œλ°œν•˜λŠ” 방법둠
β€’
Model : 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄λ‹Ή
β€’
View : μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν‘œν˜„
β€’
Controller : λͺ¨λΈκ³Ό λ·°λ₯Ό μ œμ–΄ν•˜λŠ” μ—­ν• 

μ›Ήκ°œλ°œμ—μ„œμ˜ MVC νŒ¨ν„΄

β€’
Model: λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έ μž‘μš©ν•˜μ—¬ 데이터λ₯Ό κ°€μ Έμ˜€κ³  μ €μž₯ν•˜λŠ” λΆ€λΆ„
β—¦
Service
β—¦
DTO
β—¦
DAO
β€’
View: μ›Ή νŽ˜μ΄μ§€λ₯Ό ν‘œν˜„ν•˜λ©°, μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” λΆ€λΆ„
β—¦
jsp
β—¦
html
β€’
Controller: HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³ , μ μ ˆν•œ λͺ¨λΈμ„ ν˜ΈμΆœν•˜μ—¬ 데이터λ₯Ό κ°€μ Έμ˜€κ³ , μ μ ˆν•œ λ·°λ₯Ό μ„ νƒν•˜μ—¬, λ°˜ν™˜ν•˜λŠ” λΆ€λΆ„

Spring MVC ꡬ쑰

Spring Web MVC κ΅¬μ„±μš”μ†Œ

1.
Dispatcher Servlet:
β€’
μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ 받아듀이고 μ²˜λ¦¬ν•˜λŠ” 핡심 μ„œλΈ”λ¦Ώμž…λ‹ˆλ‹€.
2.
Handler Mapping:
β€’
ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•  ν•Έλ“€λŸ¬(컨트둀러)λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•œ κ·œμΉ™μ„ μ •μ˜ν•©λ‹ˆλ‹€.
3.
Handler Adapter:
β€’
μ„ νƒλœ ν•Έλ“€λŸ¬(컨트둀러)κ°€ μ‹€μ œ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 방법을 κ²°μ •ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.
4.
View Resolver:
β€’
ν•Έλ“€λŸ¬(컨트둀러)μ—μ„œ μ„ νƒλœ λ·° 이름을 뷰둜 λ³€ν™˜ν•˜κ³  μƒμ„±ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ— λ°˜ν™˜ν•©λ‹ˆλ‹€.
5.
Controller:
β€’
ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ 받아듀이고 μ²˜λ¦¬ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.
6.
Model:
β€’
μ»¨νŠΈλ‘€λŸ¬κ°€ μƒμ„±ν•œ 데이터λ₯Ό μ €μž₯ν•˜κ³  뷰에 μ „λ‹¬ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.
7.
View:
β€’
λ·° ν…œν”Œλ¦Ώ(예: JSP, Thymeleaf)을 μ‚¬μš©ν•˜μ—¬ λͺ¨λΈ 데이터λ₯Ό 기반으둜 μ‹€μ œ 응닡(HTML νŽ˜μ΄μ§€)을 μƒμ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.
8.
Service:
β€’
λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³  μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ λ ˆμ΄μ–΄μ˜ μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.
9.
Repository:
β€’
λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” 데이터 μ•‘μ„ΈμŠ€ λ ˆμ΄μ–΄μ˜ μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ 연동 및 데이터 관리λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

MVC νŒ¨ν„΄ λ™μž‘ μˆœμ„œ

1.
ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ ν•˜λ©΄, Front controller인 DispatcherServlet ν΄λž˜μŠ€κ°€ μš”μ²­μ„ λ°›λŠ”λ‹€.
2.
DispatcherServlet은 ν”„λ‘œμ νŠΈ 파일 λ‚΄μ˜ servlet-context.xml 파일의 @Controller 인자λ₯Ό 톡해 λ“±λ‘ν•œ μš”μ²­ μœ„μž„ 컨트둀러λ₯Ό μ°Ύμ•„ λ©”ν•‘(mapping)된 μ»¨νŠΈλ‘€λŸ¬κ°€ μ‘΄μž¬ν•˜λ©΄ @RequestMapping을 톡해 μš”μ²­μ„ μ²˜λ¦¬ν•  λ©”μ†Œλ“œλ‘œ μ΄λ™ν•œλ‹€.
3.
μ»¨νŠΈλ‘€λŸ¬λŠ” ν•΄λ‹Ή μš”μ²­μ„ μ²˜λ¦¬ν•œ Service λ₯Ό λ°›μ•„ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ„œλΉ„μŠ€μ—κ²Œ μœ„μž„ν•œλ‹€.
4.
Service λŠ” μš”μ²­μ— ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³ , μš”μ²­μ— λŒ€ν•΄ DB에 μ ‘κ·Όν•΄μ•Όν•œλ‹€λ©΄ DAO에 μš”μ²­ν•˜μ—¬ 처리λ₯Ό μœ„μž„ν•œλ‹€.
5.
DAOλŠ” DB정보λ₯Ό DTOλ₯Ό 톡해 λ°›μ•„ μ„œλΉ„μŠ€μ—κ²Œ μ „λ‹¬ν•œλ‹€.
6.
μ„œλΉ„μŠ€λŠ” 전달받은 데이터λ₯Ό μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ μ „λ‹¬ν•œλ‹€.
7.
μ»¨νŠΈλ‘€λŸ¬λŠ” Model(λͺ¨λΈ) κ°μ²΄μ—κ²Œ μš”μ²­μ— λ§žλŠ” View(λ·°) 정보λ₯Ό λ‹΄μ•„ DispatcherServletμ—κ²Œ μ „μ†‘ν•œλ‹€.
8.
DispatcherServlet은 ViewResolverμ—κ²Œ 전달받은 View 정보λ₯Ό μ „λ‹¬ν•œλ‹€.
9.
ViewResolverλŠ” 응닡할 View에 λŒ€ν•œ JSPλ₯Ό μ°Ύμ•„ DispatcherServletμ—κ²Œ μ „λ‹¬ν•œλ‹€.
10.
DispatcherServlet은 응닡할 뷰의 λ Œλ”λ§λ₯Ό μ§€μ‹œν•˜κ³  λ·°λŠ” λ‘œμ§μ„ μ²˜λ¦¬ν•œλ‹€.
11.
DispatcherServlet은 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ Œλ”λ§λœ λ·°λ₯Ό μ‘λ‹΅ν•˜λ©° μš”μ²­μ„ λ§ˆμΉœλ‹€.

Front Controller λ””μžμΈ νŒ¨ν„΄

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž…μ μ„ ν•˜λ‚˜λ‘œ ν†΅μΌν•˜κ³ , μš”μ²­μ„ 쀑앙 μ§‘μ€‘μ μœΌλ‘œ μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰와 흐름을 λ‹¨μˆœν™”ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄

DispatcherServlet κ³Ό Front Controller

Spring Framework의 DispatcherServlet은 Front Controller νŒ¨ν„΄μ„ κ΅¬ν˜„ν•˜λŠ” λŒ€ν‘œμ μΈ μ˜ˆμž…λ‹ˆλ‹€. DispatcherServlet λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ 받아듀이고, μ μ ˆν•œ ν•Έλ“€λŸ¬(컨트둀러)λ₯Ό μ„ νƒν•˜μ—¬ μš”μ²­μ„ μ²˜λ¦¬ν•˜λ©°, λ·°(View)λ₯Ό λ Œλ”λ§ν•˜μ—¬ 응닡을 μƒμ„±ν•©λ‹ˆλ‹€.