๐ ์คํ๋ง/๊ธฐ๋ณธ ๊ฐ๋

[Spring] ๊ฒ์ฆ(Validation) - Validator
1. Validator ๐ฉ ์ด์ ๊น์ง ๊ฒ์ฆ ๊ธฐ๋ฅ๋ค์ ์ปจํธ๋กค๋ฌ ์์ ์์๋ค. ๋น์ฐํ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ณ๋์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ญํ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค. ๊ธฐ์กด ์ฝ๋๋ฅผ ๋จผ์ ์ดํด๋ณด๊ณ , ItemValidator๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ด๋ป๊ฒ ๋ณ๋์ ํด๋์ค๋ก ๊ฒ์ฆ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์๋์ง ์์๋ณด์. // ๊ธฐ์กด ์ฝ๋ @Slf4j @Controller @RequiredArgsConstructor public class ValidationController3 { private final ItemRepository itemRepository; @PostMapping("/add") public String addItem(@ModelAttribute Item item, BindingResult bindingResult, Redire..

[Spring] ๊ฒ์ฆ(Validation) - bindingResult.rejectValue(), binding.reject()
์ด๋ฒ ๊ธ์ ํตํด ์ด์ ๊ธ์์ BindingResult, FieldError, ObjectError๋ฅผ ํตํด ๋ง๋ค์ด๋ณด์๋ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ง๋ค์ด๋ณด๊ณ ์ ํ๋ค. 1. rejectValue() & reject() ๐ฃ FieldError์ ObjectError๋ ๋๋ฌด ๋ณต์กํ๋ค. BindingResult์ rejectValue์ reject๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ๊ฒ์ฆ์ ์งํํ ์ ์๋ค. ์ด์ ๊ธ์์ BindingResult๋ ํญ์ ๊ฒ์ฆํด์ผ ํ ๊ฐ์ฒด ๋ฐ๋ก ๋ค์ ์ด์ด์ ์์ฑํด์ผ ํ๋ค๊ณ ๋งํ ์ ์ด ์๋ค. ์ด๋ BindingResult๊ฐ ๊ฒ์ฆํด์ผ ํ ๊ฐ์ฒด๋ฅผ ์ด๋ฏธ ์๊ณ ์๋ ๊ฒ์ด๋ค. ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ ๋ด์ฉ๋ค์ ๊ณ์ํด์ ์ดํด๋ณด์. rejectValue์ reject์ ์์ฑ์๋ ๋ค์๊ณผ ๊ฐ๋ค. void r..

[Spring] ๊ฒ์ฆ(Validation) - BindingResult, FieldError, ObjectError
์ด๋ฒ ๊ธ์ ํตํด BindingResult๋ฅผ ํ์ฉํ ๊ฒ์ฆ(Validation)์ ์์๋ณด๊ณ ์ ํ๋ค. ๊ธ์ ์์๋ ์๋ฒ์์ ๊ฒ์ฆ์ด ํ์ํ ์ด์ ์ ์๋ฒ์์ ๊ฒ์ฆ์ ์ถ๊ฐ์ ์ผ๋ก ํด์ผ ํ๋๊ฐ? BindingResult BindingResult๋ฅผ ํ์ฉํ์ฌ ๊ฒ์ฆ์ ์ํํ๋ ๋ฐฉ๋ฒ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ ์ ์ง ๋ฐฉ๋ฒ ๋ฐ์ธ๋ฉ์ ํ์ง ๋ชปํ ์ํฉ์์๋ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ์ผ๋ก ์งํํ๊ฒ ๋ค. 1. ์๋ฒ์์ ๊ฒ์ฆ์ด ํ์ํ ์ด์ ๐งฒ ์ปจํธ๋กค๋ฌ์ ์ค์ํ ์ญํ ์ค ํ๋๋ HTTP ์์ฒญ์ด ์ ์์ธ์ง ๊ฒ์ฆํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ์์ ๊ฒ์ฆ์ ํ๊ณ ์๋ฒ์์๋ ๊ฒ์ฆ๋ ๊ฐ์ ๊ทธ๋ฅ ์ฐ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์๋์ ๊ฐ์ ์ด์ ๋ก ์ธํด์ ์๋ฒ์์๋ ๊ฒ์ฆ์ ์ํํด์ผ ํ๋ค. ํด๋ผ์ด์ธํธ ๊ฒ์ฆ์ ์กฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ณด์์ ์ทจ์ฝ..

์คํ๋ง ์ธํฐ์ ํฐ(Spring Interceptor)
์๋ธ๋ฆฟ ํํฐ์ ๊ฐ์ด ์คํ๋ง ์ธํฐ์ ํฐ(Spring Interceptor) ๋ํ ์น๊ณผ ๊ด๋ จ๋ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ธฐ์ ์ด๋ค. ์ด๋ฒ ๊ธ์ ํตํด '์คํ๋ง ์ธํฐ์ ํฐ์ ๊ฐ๋ '์ ์์๋ณด๊ณ , '์์ฒญ ๋ก๊ทธ ์์ '์ '์ธ์ฆ ์ฒดํฌ ์์ '๋ฅผ ํตํด์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ์. 1. ๊ฐ๋ ๐ ๐ 1. ์คํ๋ง ์ธํฐ์ ํฐ ํ๋ฆ ์คํ๋ง ์ธํฐ์ ํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ ๊ฐ์ง๋ค. HTTP ์์ฒญ → WAS → ํํฐ → ์๋ธ๋ฆฟ(Dispatcher Servlet) → ์คํ๋ง ์ธํฐ์ ํฐ → ์ปจํธ๋กค๋ฌ ์คํ๋ง ์ธํฐ์ ํฐ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ๊ณผ ์ปจํธ๋กค๋ฌ ์ฌ์ด์์ ์ปจํธ๋กค๋ฌ ํธ์ถ ์ง์ ์ ํธ์ถ๋๋ค. ๐ 2. ์คํ๋ง ์ธํฐ์ ํฐ ์ ํ ์๋ธ๋ฆฟ ํํฐ์ ๊ฐ์ด ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์ ์ ๊ทผ๊ณผ ๊ฐ์ '์ ์ ํ์ง ์์ ์์ฒญ'์ ๋ํ์ฌ ํ๋จํ๊ณ ๊ฑฐ..

์๋ธ๋ฆฟ ํํฐ(Servlet Filter)
์ด๋ฒ ๊ธ์์๋ ์๋ธ๋ฆฟ ํํฐ(Servlet Filter)์ ๊ฐ๋ ์ ๋ํด์ ์์๋ณด๊ณ , '์์ฒญ ๋ก๊ทธ ์์ '์ '์ธ์ฆ ์ฒดํฌ ์์ '๋ฅผ ํตํด์ ์ด๋ป๊ฒ ํํฐ๋ฅผ ์ฌ์ฉํ๋์ง ์์๋ณด๊ณ ์ ํ๋ค. 1. ๊ฐ๋ ๐ ๐ 1. ํํฐ ํ๋ฆ ํํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ ๊ฐ์ง๋ค. HTTP ์์ฒญ → WAS → ํํฐ → ์๋ธ๋ฆฟ(Dispatcher Servlet) → ์ปจํธ๋กค๋ฌ ํํฐ๋ฅผ ์ ์ฉํ๋ฉด ํํฐ๊ฐ ํธ์ถ๋๊ณ ๊ทธ๋ฆฌ๊ณ ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ค. ์ฆ, ์๋ธ๋ฆฟ์ด ํธ์ถ๋๊ธฐ ์ ์ ํํฐ๊ฐ ํธ์ถ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฌธ์ ๋ชจ๋ ๊ณ ๊ฐ์ ์์ฒญ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ฑฐ๋ ์ธ์ฆ ์ฒดํฌ(๋ก๊ทธ์ธ ์ฌ๋ถ ๋ฑ)๋ฑ์ ํ์๋ฅผ ํํฐ๋ฅผ ์ด์ฉํด์ ํ ์ ์๋ค. ๐ 2. ํํฐ ์ ํ ํํฐ์์๋ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์ ์ ๊ทผ๊ณผ ๊ฐ์ด ์ ์ ํ์ง ์์ ์์ฒญ์ ๋ํ์ฌ ํ๋จํ๊ณ ๊ฑฐ๊ธฐ์์ ๋์ ๋ผ ์ ์๋ค...

๋ฉ์์ง & ๊ตญ์ ํ (Message & Internationalization)
1. ๊ฐ๋ ๐ 1. ๋ฉ์์ง (Message) ํ๋ฉด์ ๋ณด์ด๋ '์ํ๋ช '์ด๋ผ๋ ๋จ์ด๋ฅผ '์ํ์ด๋ฆ'์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๊ฐ๋จํ๊ฒ๋ item.html์์ ํด๋น ๋จ์ด๋ฅผ ๋ฐ๊พธ๋ฉด ๋๋ค. ํ์ง๋ง ์ํ๋ช ์ด๋ผ๋ ๋จ์ด๊ฐ item.html, addItem.html, updateItem.html, deleteItem.html, ... ์์ ์ฌ์ฉ๋๊ณ ์๋ค๋ฉด ๋ชจ๋ ํ์ผ์ ๊ณ ์ณ์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ ๊ฒ HTML ํ์ผ์ ๋ฉ์์ง๋ฅผ ํ๋์ฝ๋ฉ๋์ด ์๋๋ก ํ๋ ๊ฒ ์๋๋ผ, ๋ฉ์์ง๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋๋ก ํ ์ ์๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก ๋ฉ์์ง ๊ธฐ๋ฅ์ด๋ค. 2. ๊ตญ์ ํ (Internationalization) ํ๊ตญ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ๋ '์ํ๋ช ', ์์ด๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ๋ 'Item Name'์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ ์ ํ๋ค. ์ด๋ฅผ ..

HTTP ์๋ต(์ ์ ๋ฆฌ์์ค, ๋ทฐ ํ ํ๋ฆฟ, HTTP ๋ฉ์์ง) ์ฒ๋ฆฌ
์คํ๋ง(์๋ฒ)์์ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค. ์ ์ ๋ฆฌ์์ค ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ ์ธ HTML, CSS, JS๋ฅผ ์ ๊ณตํ ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋ทฐ ํ ํ๋ฆฟ ์ฌ์ฉ ์น ๋ธ๋ผ์ฐ์ ์ ๋์ ์ธ HTML์ ์ ๊ณตํ ๋ ๋ทฐ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ค. HTTP ๋ฉ์์ง ์ฌ์ฉ HTTP API๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ์๋ HTML์ด ์๋๋ผ HTTP ๋ฉ์์ง ๋ฐ๋์ JSON ๊ฐ์ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. ํ๋์ฉ ์์ธํ ์์๋ณด์. 1. ์ ์ ๋ฆฌ์์ค ๐ฅช ์ ์ ๋ฆฌ์์ค๋ ํด๋น ํ์ผ์ ๋ณ๊ฒฝ ์์ด ๊ทธ๋๋ก ์๋น์คํ๋ ๊ฒ์ ๋งํ๋ค. ์คํ๋ง ๋ถํธ๋ ํด๋์คํจ์ค์ ์๋์ ๋๋ ํ ๋ฆฌ์ ์๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ค. /static /public /resources /META-INF/resources src/main/resources๊ฐ ํด๋์คํจ์ค์ ..

HTTP ์์ฒญ(ํค๋, ํ๋ผ๋ฏธํฐ, ๋ฉ์์ง) ์ฒ๋ฆฌ
์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์คํ๋ง ์ปจํธ๋กค๋ฌ๋ ๋ค์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ๋ค. ํค๋ ์ ๋ณด ์กฐํ ์์ฒญ ํ๋ผ๋ฏธํฐ ์กฐํ (1) ์์ฒญ ํ๋ผ๋ฏธํฐ ์ง์ ์กฐํ(@RequestParam) (2) ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์กฐํ(@ModelAttribute) ์์ฒญ ๋ฉ์์ง ์กฐํ (1) ๋จ์ ํ ์คํธ (@RequestBody) (2) JSON ํ๋์ฉ ์์ธํ ์์๋ณด์. 1. ํค๋ ์ ๋ณด ์กฐํ ๐ HTTP ํค๋ ์ ๋ณด๋ฅผ ์๋์ ๊ฐ์ด ์กฐํํ ์ ์๋ค. @RequestMapping("/headers") public String headers(HttpServletRequest request, HttpServletRequest response, HttpMethod httpMethod, Locale locale, @RequestHeader MultiValueMap h..

์คํ๋ง MVC
1. ๊ฐ๋ ๐ป ์คํ๋ง MVC์ ๋ฐฐ์ฐ๊ธฐ ์ ์ MVC ํจํด์ ๋จผ์ ์ค๋ช ํ์๋ฉด ์๋์ ๊ฐ๋ค. MVC ํจํด์ด๋ Model, View, Controller๋ผ๋ ์์ญ์ผ๋ก ์๋ก ์ญํ ์ ๋๋ ๊ฒ์ ๋งํ๋ค. Controller HTTP ์์ฒญ์ ๋ฐ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ทฐ์ ์ ๋ฌํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ๋ชจ๋ธ์ ๋ด๋๋ค. Model ๋ทฐ์ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๋ค. ๋ทฐ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ชจ๋ธ์ ๋ด์์ ์ ๋ฌํด ์ฃผ๋ ๋๋ถ์ ๋ทฐ๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ชฐ๋ผ๋ ๋๊ณ , ํ๋ฉด์ ๋ ๋๋ง ํ๋ ์ผ์ ์ง์คํ ์ ์๋ค. View ๋ชจ๋ธ์ ๋ด๊ฒจ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค. MVC ํจํด์ ๋ฌธ์ ์ ์ ๊ณตํต ์ฒ๋ฆฌ๊ฐ ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค. ๊ธฐ๋ฅ์ด ๋ณต์กํด์ง์๋ก ์ปจํธ๋กค๋ฌ์์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ถ๋ถ์ด ์ ์ ..

์์กด์ฑ ์ฃผ์ - DI(Dependency Injection)
1. ๊ฐ๋ ๐ฆ DI(Dependency Injection = ์์กด์ฑ ์ฃผ์ = ์์กด๊ด๊ณ ์ฃผ์ )๋ฅผ ์๊ธฐ ์ํด์๋ ์ฐ์ IoC(Inversion of Control = ์ ์ด์ ์ญ์ )๋ฅผ ์์์ผ ํ๋ค. IoC๋ ๋ฉ์๋๋ ๊ฐ์ฒด์ ํธ์ถ ์์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋ ์ธ๋ถ์์ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ธ๋ถ๋ Spring Framework๋ฅผ ๋ปํ๋ค. // ๊ธฐ์กด public class DictionaryService { KoreanDictionary koreanDictionary = new KoreanDictionary(); } // IoC ์ ์ฉ public class DictionaryService { Dictionary dictionary; } ๊ธฐ์กด์๋ ๊ฐ์ฒด๋ฅผ ํด๋์ค ๋ด๋ถ์์ ์์ฑํ๊ณ ์ฌ์ฉํ์ง๋ง IoC๋ฅผ ์ ์ฉํ๋ฉด..

๋ก๊น (SLF4J, Logback)
1. ๊ฐ๋ ๐ฎโ๏ธ ์คํ๋ง ๋ถํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๋ถํธ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํจ๊ป ํฌํจ๋๋ค. โโ springmvc โ โโ Dependencies โ โโ org.springframework.boot:spring-boot-starter-thymeleaf โ โโ org.springframework.boot:spring-boot-starter โ โโ org.springframework.boot:spring-boot-starter-logging โ โโ ch.qos.logback:logback-classic โ โโ org.apache.logging.log4j:log4j-toslf4j โ โโ org.slf4j:jul-to-slf4j ๊ธฐ๋ณธ์ ์ผ๋ก SLF4J์ Logback ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ..

์์ฑ์ ์ฃผ์ ์ ์ ํํ๋ผ!
์ด์ ๊ธ์ ํตํด ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ 4๊ฐ์ง ๋ฐฉ๋ฒ(์์ฑ์ ์ฃผ์ , ์์ ์ ์ฃผ์ , ํ๋ ์ฃผ์ , ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์ )์ ์ดํด๋ณด์๋ค. ์ด๋ฒ ๊ธ์์๋ 4๊ฐ์ง ๋ฐฉ๋ฒ ์ค ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค. 3๊ฐ์ง ์ด์ (๋ถ๋ณ, ๋๋ฝ ๋ฐฉ์ง, final ํค์๋ ์ฌ์ฉ ๊ฐ๋ฅ)๋ฅผ ๊ทผ๊ฑฐ๋ก ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ฅผ ์์๋ณด์. (๋ค์ด๊ฐ๊ธฐ์ ์์ ์์ฑ์ ์ฃผ์ ์ด๋ ์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.) @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Aut..