๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/WEB

[๊ฐ•์˜ ์ •๋ฆฌ] ์Šคํ”„๋ง MVC ์„ค์ •(2)

by syLim___ 2024. 2. 21.
728x90

๊ฐ•์˜ ์ถœ์ฒ˜: https://www.inflearn.com/course/%EC%9B%B9-mvc/dashboard

 

์Šคํ”„๋ง ์›น MVC ๊ฐ•์˜ - ์ธํ”„๋Ÿฐ

์ด ๊ฐ•์˜๋Š” ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ(Servlet) ๊ธฐ๋ฐ˜์˜ MVC ํ”„๋ ˆ์ž„์›Œํฌ์ธ ์Šคํ”„๋ง ์›น MVC์— ๋Œ€ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์›ํ• ํ•œ ํ•™์Šต์„ ์œ„ํ•ด์„œ ใ€Š์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ธฐ์ˆ ใ€‹ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•ด์ฃผ์„ธ์š”., ์Šคํ”„๋ง ์›น MVC์˜ ํ•ต์‹ฌ ์›

www.inflearn.com


 

๐Ÿ‘ฉ‍๐Ÿ’ป WebMvcConfigurer

 

โœ… Formatter

 - ์–ด๋– ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ์–ด๋– ํ•œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

 - Formatter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, http ์š”์ฒญ ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค

 - Printer : Locale ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅํ•ด ์ค„ ๊ฒƒ์ธ์ง€ ์ •์˜

 - Parser : Locale ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ, ์–ด๋–ค ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜

 

 

๐Ÿฅ Formatter ๊ตฌํ˜„

@GetMapping("/hello/{name}")
public String hello(@PathVariable("name") Person person){ }

 - ํŒŒ๋ผ๋ฏธํ„ฐ name์„ Person ๊ฐ์ฒด๋กœ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ, formatter ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ

 - PathVariable ๋ฟ๋งŒ์•„๋‹ˆ๋ผ RequestParam์ด์–ด๋„ formatter ์ ์šฉ๋จ

 

public class PersonFormatter implements Formatter<Person> {

	// ๋ฌธ์ž์—ด -> ๊ฐ์ฒด
	@Override
	public Person parse(String text, Locale locale) throws ParseException {
    	Person person = new Person();
        person.setName(text);
        return person;
	}
    
	// ๊ฐ์ฒด -> ๋ฌธ์ž์—ด
	@Override
	public String print(Person object, Locale locale) {
		return object.toString();
	}
}

 

 

๊ตฌํ˜„ํ•œ formatter ์ ์šฉ๋ฒ•: ํ”„๋กœ์ ํŠธ์˜ WebConfig ํด๋ž˜์Šค WebMvcConfigurer์„ ๊ตฌํ˜„๋ฐ›๋„๋ก ํ•˜๊ณ ,

    `void addFormatters(FormatterRegistry registry);` ๋ฅผ ๊ตฌํ˜„

 

FormatterRegistry์—๋Š” formatter๋ฟ๋งŒ์•„๋‹ˆ๋ผ converter๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

Converter: ๋ฌธ์ž์—ด ์•„๋‹Œ ๊ฐ์ฒด -> ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ์ข€ ๋” ์ผ๋ฐ˜์ ์ธ ๋ฒ”์œ„ ๋‹ค๋ฃธ ใ…‡ใ…‡

 

 

 

์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ๋Š” Formatter๋ฅผ ๋นˆ์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด,

addFormatters() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ ์šฉ๋œ๋‹ค.

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ

 - spring data jpa๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์Šคํ”„๋ง mvc์šฉ ๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ

 - ๊ทธ๋ž˜์„œ ๋„๋ฉ”์ธ์„ ํฌ๋งคํŒ… ๋˜๋Š” ์ปจ๋ฒ„ํŒ… ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํฌ๋งคํ„ฐ๋ฅผ ๋”ฐ๋กœ ์ •์˜, ์„ค์ •ํ•˜์ง€๋Š” ์•Š์•„๋„ ๋œ๋‹ค.

 - ์ปจ๋ฒ„ํŒ…์„ ์œ„ํ•ด์„œ๋Š” JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํ•ธ๋“ค๋Ÿฌ ์ธํ„ฐ์…‰ํ„ฐ

 - ํ•ธ๋“ค๋Ÿฌ ์ธํ„ฐ์…‰ํ„ฐ๋กœ ํ•ธ๋“ค๋Ÿฌ ๋งตํ•‘์— ์–ด๋– ํ•œ ์„ค์ •์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 - ํ•ธ๋“ค๋Ÿฌ ๋งตํ•‘์€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ฐพ์•„์„œ, ๊ทธ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ ์šฉํ•ด์ค€๋‹ค

 - ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ ํ›„ ๋žœ๋”๋ง ํ•˜๊ธฐ ์ „, ๋žœ๋”๋ง๊นŒ์ง€ ๋๋‚œ ์ดํ›„ ์‹œ์ ์—  ์‚ฌ์šฉํ•œ๋‹ค.

preHandle -> ์š”์ฒญ ์ฒ˜๋ฆฌ -> postHandler -> ๋ทฐ ๋žœ๋”๋ง -> afterCompletion

 

 

โœ… preHandle

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		return true;
	}

 

 - ์‹คํ–‰ ์‹œ์ : ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์—์„œ ํ•ธ๋“ค๋Ÿฌ ์ฐพ์€ ํ›„, ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „

 - ๋ฆฌํ„ด๊ฐ’: ๊ณ„์† ๋‹ค์Œ ์ธํ„ฐ์…‰ํ„ฐ ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ „๋‹ฌํ• ์ง€(true), ์‘๋‹ต์ฒ˜๋ฆฌ๊ฐ€ ์ด๊ณณ์—์„œ ๋๋‚ฌ๋Š”์ง€(false) ์•Œ๋ฆผ

 

โœ… postHandle

default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
	}

 

 - ์‹คํ–‰ ์‹œ์ : ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰์ด ๋๋‚œ ์ดํ›„, ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๋ทฐ๋ฅผ ๋žœ๋”๋ง ํ•˜๊ธฐ ์ด์ „

 - ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ModelAndView ๋ฅผ ๋ฐ›์œผ๋‹ˆ๊นŒ, postHandle์—์„œ ModelAndView๋ฅผ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 - ๋ชจ๋ธ์— ์ถ”๊ฐ€ ์ •๋ณด ์ ๋Š”๋‹ค๊ฑฐ๋‚˜, ๋ทฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ์— ๊ณตํ†ต์ ์ธ ๋ชจ๋ธ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

 

 - ํ•ธ๋“ค๋Ÿฌ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ์—ญ์ˆœ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.


๋งŒ์•ฝ interceptor1 -> interceptor2 -> interceptor3 ์ˆœ์œผ๋กœ ์ฒด์ด๋‹ ๋˜์–ด ์žˆ๋‹ค๋ฉด

interceptor1.preHandle() -> interceptor2.preHandle() -> interceptor3.preHandle() -> handler -> interceptor3.postHandle() -> interceptor2.postHandle() -> interceptor1.postHandle() ์ˆœ์œผ๋กœ ํ˜ธ์ถœ๋จ

 

 

 - ๋น„๋™๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ์‹œ์—๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

โœ… afterCompletion

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
	}

 

 

 - ์‹คํ–‰ ์‹œ์ : ๋ทฐ ๋žœ๋”๋ง ์ด ๋๋‚œ ์ดํ›„

 - ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ, ์—ญ์ˆœ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

 - ๋น„๋™๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ์—๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

โœ… ์„œ๋ธ”๋ฆฟํ•„ํ„ฐ์™€์˜ ์ฐจ์ด์ ?

 

 - ํ•ธ๋“ค๋Ÿฌ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์ธ ์ •๋ณด(ํ•ธ๋“ค๋Ÿฌ ๊ฐ์ฒด, ๋ชจ๋ธ์•ค๋ทฐ)๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 - ์Šคํ”„๋ง์— ํŠนํ™”๋œ ์ •๋ณด(ํ•ธ๋“ค๋Ÿฌ ๋“ฑ)์™€ ์•„๋ฌด๋Ÿฐ ๊ด€๋ จ์ด ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์€ ์„œ๋ธ”๋ฆฟํ•„ํ„ฐ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค

    - ์˜ˆ๋ฅผ๋“ค๋ฉด xss(cross-site scripting) ์ฐจ๋‹จ๊ธฐ๋Šฅ

 

 - ์ฐธ๊ณ ๋กœ ์„œ๋ธ”๋ฆฟํ•„ํ„ฐ ์„ค์ • : web.xml ๋˜๋Š” WebAppInitializer์—

 

โœ… ๊ตฌํ˜„ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์„ค์ •

 - WebConfig ํŒŒ์ผ์— ์„ค์ •

 - ๋ณ„๋„ ์„ค์ • ์—†์œผ๋ฉด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒด์ด๋‹๋œ๋‹ค.

 

 - ๋ช…์‹œ์ ์œผ๋กœ ์ˆœ์„œ ์ง€์ •ํ•ด์ฃผ๋Š”๋ฒ•:

registry.addInterceptor(new GreetingInterceptor()).order(-1);
registry.addInterceptor(new AnotherInterceptor()).order(2);

 

    - order ๊ฐ’์˜ ์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋จผ์ € ํ˜ธ์ถœ๋œ๋‹ค.

 

 

 - ์›ํ•˜๋Š” ํŠน์ • ํŒจํ„ด์—๋งŒ ์ ์šฉํ•˜๋Š”๋ฒ•: .addPathPatterns("ํŒจํ„ด")

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋Ÿฌ

 

โœ… ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋Ÿฌ

 - ์ •์ ์ธ ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€, JS, CSS, HTML, ํŒŒ์ผ ๋“ฑ)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ

 - ํ•ธ๋“ค๋Ÿฌ๋“ค ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์Œ

 

 

โœ… Default Servlet

 - ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธ”๋ฆฟ

 - ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•จ

 - ํ†ฐ์บฃ์€ ์ด default servlet์— ์ •์ ์ธ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ์œ„์ž„ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ ์ธ ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋Ÿฌ์˜ ์บ์‹ฑ์„ ์ œ๊ณต: resources/static ๋””๋ ‰ํ† ๋ฆฌ

 

 

 

โœ… ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋Ÿฌ ์„ค์ • (์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋Ÿฌ)

 

 

์ด๊ฑฐ ๋“ฃ๋‹ค๊ฐ€ ์บ์‹œ ๊ด€๋ จ ๋‚ด์šฉ ๊ณต๋ถ€๋„ ํ–ˆ์Œ - https://catromi.tistory.com/323

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ

 

 - @RequestBody์—์„œ ์š”์ฒญ ๋ณธ๋ฌธ์„ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ€ ๋•Œ, ๊ทธ๋ฆฌ๊ณ  @ResponseBody์—์„œ ๊ฐ์ฒด๋ฅผ ์š”์ฒญ ๋ณธ๋ฌธ์— ๋„ฃ์–ด์ค„ ๋•Œ

    HTTP ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

 - ์Šคํ”„๋ง์ด 4๊ฐœ์˜ ๊ธฐ๋ณธ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•œ ๋‹ค์Œ, Classpath๋ฅผ ๋ณด๊ณ  ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋“ค์„ ๋“ฑ๋กํ•ด์ค€๋‹ค

 - ์–ด๋–ค ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” ์š”์ฒญ ํ—ค๋”์˜ Content-type์„ ๋ณด๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค

 

 

โœ…  WebConfig ์„ค์ •

 

 - configureMessageConverters ์˜ค๋ฒ„๋ผ์ด๋”ฉ

    - ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ฉด, 4๊ฐœ์˜ ๊ธฐ๋ณธ ์ปจ๋ฒ„ํ„ฐ๋“ค์€ ๋“ฑ๋ก๋˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

 

 - 4๊ฐœ์˜ ๊ธฐ๋ณธ ์ปจ๋ฒ„ํ„ฐ๋„ ์‚ฌ์šฉํ•˜๊ณ , ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋ผ๋ฉด

    extendMessageConverters ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผํ•œ๋‹ค.

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป  JSON์šฉ http ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ

 

WebMvcConfigurationSupport์—์„œ

 

ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋งŒ ๋“ฑ๋กํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ 

 

 

๊ธฐ๋ณธ 4๊ฐœ ์ปจ๋ฒ„ํ„ฐ ์ด์™ธ์˜ ๋‚˜๋จธ์ง€ ์ปจ๋ฒ„ํ„ฐ๋“ค์€

ํ•„์š”ํ•˜๋ฉด ๋“ฑ๋กํ•ด์ค€๋‹ค

 

 

๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋Š” ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ์™€ ํ•จ๊ป˜ ๋“ฑ๋ก๋˜๋Š” ObjectMapper๋ฅผ ์‚ฌ์šฉํ•ด์„œ `http ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ <-> ์ž๋ฐ”` ๊ฐ์ฒด ๊ฐ„ ๋ณ€ํ™˜ ํ•ด์ค€๋‹ค.

 

์š”์ฒญ ํ—ค๋” Content-type ์ด json์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋‹ˆ

์ด๊ฑธ ๋ณด๊ณ  json converter๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๊ทธ ์™ธ WebMvcConfigurer ์„ค์ •

 

โœ… ArgumentResolver 

 - ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ด์ฃผ๋Š” argument ์™ธ์˜ ์ธ์ž๋“ค๋„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•ด์„œ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

 - Argument๋“ค์„ ์–ด๋–ป๊ฒŒ ์ธ์‹, ์ฒ˜๋ฆฌํ• ์ง€ ์Šคํ”„๋ง์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด์„œ argumentResolver ์ถ”๊ฐ€

 

โœ… ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ 

 - ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„, ๋‹จ์ˆœํ•˜๊ฒŒ ์š”์ฒญ URL์„ ํŠน์ • ๋ทฐ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ์Šคํ”„๋ง MVC ์„ค์ • ์ตœ์ข… ์ •๋ฆฌ

 - ์Šคํ”„๋ง MVC ์„ค์ •์€ ๊ฒฐ๊ตญ DispatcherServlet์ด ์‚ฌ์šฉํ•  ๋ชจ๋“  ๋นˆ๋“ค์„ ApplicationContext์— ๋“ฑ๋ก, ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


@EnableWebMVC

 - ํ•˜๋‚˜ํ•˜๋‚˜ ๋“ฑ๋ก ๋ฐ ์„ค์ •ํ•˜์ž๋‹ˆ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กœ์›Œ์„œ , ์Šคํ”„๋ง MVC ์„ค์ •์„ ๊ฐ„ํŽธํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ

 - ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์Šคํ”„๋ง ์›น MVC ์„ค์ •์„ ๋„์™€์คŒ

 - WebMvcConfigurer ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„ค์ •์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์“ด๋‹ค๋ฉด

 - ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ์ž๋™ ์„ค์ •์„ ํ†ตํ•ด, ์•„๋ฌด๋Ÿฐ ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง MVC ๊ธฐ๋Šฅ์„ ์ œ๊ณต

 - ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์—์„œ @EnableWebMvc๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์Šคํ”„๋ง๋ถ€ํŠธ ์ž๋™ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 - ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” application.properties๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง MVC ์„ค์ •์„ ํ•œ๋‹ค.

- ๋˜๋Š” WebMvcConfigurer ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์„ค์ •ํ•œ๋‹ค

 

 

 

728x90