๐Ÿ“‚ ์Šคํ”„๋ง/๊ธฐ๋ณธ ๊ฐœ๋…

    [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..