๐Ÿ“—Spring MVC Study [ HttpRequestHandler, ViewResolver ]

Caruhยท2025๋…„ 3์›” 19์ผ

Spring MVC

๋ชฉ๋ก ๋ณด๊ธฐ
11/17
post-thumbnail

HttpRequestHandler

  • HttpRequestHandlerํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๋Š” ์„œ๋ธ”๋ฆฟ๊ณผ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ํ•ธ๋“ค๋Ÿฌ์ด๋‹ค.
 public interface HttpRequestHandler {
 	void handleRequest(HttpServletRequest request, HttpServletResponse response)
 		throws ServletException, IOException;
 }

MyHttpRequestHandler

@Component("/springmvc/request-handler")
public class MyHttpRequestHandler implements HttpRequestHandler {
	@Override
	public void handleRequest(HttpServletRequest request, HttpServletResponse 
	response) throws ServletException, IOException {
 		System.out.println("MyHttpRequestHandler.handleRequest");
    }
}

1. ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ ์กฐํšŒ

  1. HandlerMapping ์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ด์„œ, ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. ์ด ๊ฒฝ์šฐ ๋นˆ ์ด๋ฆ„์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋นˆ ์ด๋ฆ„์œผ๋กœ ํ•ธ๋“œ๋Ÿฌ๋ฅผ ์ฐพ์•„์ฃผ๋Š” BeanNameUrlHandlerMapping๊ฐ€ ์‹คํ–‰์— ์„ฑ๊ณตํ•˜๊ณ  ํ•ธ๋“ค๋Ÿฌ์ธ MyHttpRequestHandler๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์กฐํšŒ

  1. HandlerAdapter์˜ supports()๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•œ๋‹ค.
  2. HttpRequestHandlerAdapter๊ฐ€ HttpRequestHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋Œ€์ƒ์ด ๋œ๋‹ค.

3. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์‹คํ–‰

  1. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์กฐํšŒํ•œ HttpRequestHandlerAdapter๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋„ ํ•จ๊ป˜ ๋„˜๊ฒจ์ค€๋‹ค.
  2. HttpRequestHandlerAdapter๋Š” ํ•ธ๋“ค๋Ÿฌ์ธ MyHttpRequestHandler๋ฅผ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ •๋ฆฌ

HttpRequestHandler ํ•ธ๋“ค๋Ÿฌ๋งคํ•‘, ์–ด๋Œ‘ํ„ฐ

  • MyHttpRequestHandler๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์‚ฌ์šฉ๋œ ๊ฐ์ฒด
    • HandlerMapping = BeanUrlHandlerMapping
    • HandlerAdapter = HttpRequestHandlerAdapter

๋ทฐ ๋ฆฌ์กธ๋ฒ„

  • ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” InternalResourceViewResolver๋ผ๋Š” ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜๋Š”๋ฐ, ์ด๋•Œ application.properties์— ๋“ฑ๋กํ•œ spring.mvc.view.prefix, spring.mvc.view.suffix ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋“ฑ๋กํ•œ๋‹ค.
  • ์ฐธ๊ณ ๋กœ ๊ถŒ์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ „์ฒด๊ฒฝ๋กœ๋กœ ์ฃผ์–ด๋„ ๋™์ž‘ํ•˜๊ธฐ๋Š” ํ•œ๋‹ค.
    • return new ModelAndView("/WEB-INF/views/new-form.jsp");

1BeanNameViewResolver : ๋นˆ ์ด๋ฆ„์œผ๋กœ ๋ทฐ๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (ex : excel ํŒŒ์ผ ์ƒ์„ฑ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ)
2InternalResourceViewResolver : JSP๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

1. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ํ˜ธ์ถœ

  • ํ•ธ๋“ค๋Ÿฌ ์–ด๋ฐทํ„ฐ๋ฅผ ํ†ตํ•ด new-form์ด๋ผ๋Š” ๋…ผ๋ฆฌ ๋ทฐ ์ด๋ฆ„์„ ํš๋“

2. ViewResolver ํ˜ธ์ถœ

  • new-form์ด๋ผ๋Š” ๋ทฐ ์ด๋ฆ„์œผ๋กœ viewResolver๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ
  • BeanNameViewResolver๋Š” new-form์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กœ๊ณ ๋”˜ ๋ทฐ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ ์—†์Œ.
  • InternalResourceViewResolver๊ฐ€ ํ˜ธ์ถœ

3. InternalResourceViewResolver

  • ์œ„์˜ ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋Š” InternalResourceView๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

4. ๋ทฐ - InternalResourceView

  • InternalResourceView๋Š” JSP์ฒ˜๋Ÿผ ํฌ์›Œ๋“œ foward()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

5. view.render()

  • view.render()๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  InternalResourceView๋Š” foward()๋ฅผ ์‚ฌ์šฉํ•ด์„œ JSP๋ฅผ ์‹คํ–‰

์ฐธ๊ณ 

  • InternalResourceViewResolver ๋Š” ๋งŒ์•ฝ JSTL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด InternalResourceView๋ฅผ ์ƒ์†๋ฐ›์€ JstlView๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. JstlView๋Š” JSTL ํƒœ๊ทธ ์‚ฌ์šฉ์‹œ ์–‘๊ฐ„์˜ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ๋‹ค.

  • ๋‹ค๋ฅธ ๋ทฐ๋Š” ์‹ค์ œ ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•˜์ง€๋งŒ, JSP์˜ ๊ฒฝ์šฐ forward() ํ†ตํ•ด์„œ ํ•ด๋‹น JSP๋กœ ์ด๋™(์‹คํ–‰)ํ•ด์•ผ ๋ Œ๋”๋ง์ด ๋œ๋‹ค.
  • JSP๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ทฐ ํ…œํ”Œ๋ฆฟ๋“ค์€ foward() ๊ณผ์ •์—†์ด ๋ฐ”๋กœ ๋ Œ๋”๋ง ๋œ๋‹ค.

  • Thymeleaf ๋ทฐ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ThymeleafViewResolver๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.
  • ์ตœ๊ทผ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ด๋Ÿฐ ์ž‘์—…๋“ค๋„ ๋ชจ๋‘ ์ž๋™ํ™”ํ•ด์ค€๋‹ค.

๐Ÿ“ญ Reference

profile
Backend Developer

0๊ฐœ์˜ ๋Œ“๊ธ€