๐Ÿ›ก๏ธ Validation

Q1. @Valid์™€ @Validated์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
๋˜ ์–ด๋–ค ์ƒํ™ฉ์—์„œ BindingResult๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์„ ์–ธ๋˜์–ด์•ผ ํ•˜๋‚˜์š”?

โ†’ Valid ๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•  ๊ฐ์ฒด ์•ž์— ๋ถ™์ด๊ณ , Validated ๋Š” ๊ทธ๋ฃน ์ง€์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. BindingResult ๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด๋กœ, ๊ฒฐ๊ณผ๋‚˜ ์—๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.


โš ๏ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

Q2. @ControllerAdvice๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ, @ExceptionHandler ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์กฐ๊ฑด์—์„œ ํ˜ธ์ถœ๋˜๋Š”์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

โ†’ ์Šคํ”„๋ง์—์„œ ์ „์—ญ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” Runtime Exception์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ, Controller ๋‚˜ Service ์•ˆ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ์™€ ๋งคํ•‘๋  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.


Q3. ๋‹ค์Œ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์„ ์ฐพ์•„๋ณด์„ธ์š”:

@ExceptionHandler(Exception.class)
public String handleAll(Exception ex) {
	return "error"; 
}

โ†’ Exception.class ๋Š” ๋„ˆ๋ฌด ๋ฒ”์šฉ์ ์ด๋ผ, ๋‹ค๋ฅธ ์„ธ๋ถ€ ์˜ˆ์™ธ๋“ค์˜ ํ•ธ๋“ค๋Ÿฌ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋บ์„ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”— Interceptor

Q4. Interceptor์™€ Filter์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ฐ๊ฐ์˜ ๋™์ž‘ ์‹œ์ ๊ณผ ํ™œ์šฉ ๋ชฉ์ ์„ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

โ†’ Filter ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ตœ์ƒ๋‹จ์—์„œ ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์ธ DispatcherServlet ์˜ ์ „/ํ›„๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, Spring MVC์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , Interceptor ๋Š” ์Šคํ”„๋ง ๋ฒ”์œ„ ๋‚ด์ธ Controller ์˜ ํ˜ธ์ถœ ์ „/ํ›„ ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  • Filter ๋Š” โ€œHTTP ๊ธฐ๋ฐ˜ ์ „์ฒด ํ๋ฆ„โ€ ์—์„œ ์‚ฌ์šฉ
  • Interceptor ๋Š” ์„ธ์…˜ ์ฒดํฌ, ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๊ฒ€์ฆ ๋“ฑ โ€œ์ปจํŠธ๋กค๋Ÿฌโ€ ๋‹จ์—์„œ ์‚ฌ์šฉ

Q5. HandlerInterceptor์˜ preHandle() ๋ฉ”์„œ๋“œ์—์„œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”?

โ†’ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญ์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ. โ†’ ์ดํ›„ PostHandle() ๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ โ†’ ๋ณดํ†ต ์ธ์ฆ ์‹คํŒจ, ์š”์ฒญ ์ฐจ๋‹จ ๋“ฑ์— ์‚ฌ์šฉ