Language & Framework/Spring2023. 2. 12. 01:58[์Šคํ”„๋ง MVC] ๊ฒ€์ฆ(1) - Validation

์Šคํ”„๋ง MVC 2ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๊ฒ€์ฆ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ค‘์š”ํ•œ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” HTTP ์š”์ฒญ์ด ์ •์ƒ์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ ๊ฒ€์ฆ๋งŒ์œผ๋กœ๋Š” ์กฐ์ž‘์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๊ณ , ์„œ๋ฒ„๋งŒ์œผ๋กœ ๊ฒ€์ฆํ•˜๋ฉด ์ฆ‰๊ฐ์ ์ธ ๊ณ ๊ฐ ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋‘˜์„ ์ ์ ˆํžˆ ์„ž์–ด ์‚ฌ์šฉํ•˜๋˜ ์ตœ์ข…์ ์œผ๋กœ ์„œ๋ฒ„ ๊ฒ€์ฆ์„ ๊ฑฐ์น˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ๊ฒ€์ฆ ์ง์ ‘ ์ฒ˜๋ฆฌ ๋กœ์ง 1. Map errors = new HashMap();์„ ์„ ์–ธํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ด€ํ•  ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ๊ฒ€์ฆ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํ•„๋“œ๋ช…์„ key๋กœ, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ value๋กœ ์ €์žฅํ•œ๋‹ค.(์˜ค๋ฅ˜ ์›์ธ์ด ํŠน์ • ํ•„๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•„๋“œ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์˜ค๋ฅ˜๋ผ๋ฉด globalError๋ฅผ key๋กœ ์‚ฌ์šฉํ•œ๋‹ค.) ์ดํ›„ ๋ทฐ์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ..

Language & Framework/Spring2023. 2. 11. 07:18[์Šคํ”„๋ง MVC] ๋ฉ”์‹œ์ง€, ๊ตญ์ œํ™”

์Šคํ”„๋ง MVC 2ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ / ๊ตญ์ œํ™” ๋ฉ”์‹œ์ง€ ๊ธฐ๋Šฅ์€ ๋‹ค์–‘ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ผ์ปซ๋Š”๋‹ค. ์—ฌ๋Ÿฌ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ ๋“ฑ์„ ์ผ์ผ์ด ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ƒํ™ฉ์—์„œ ์ดํ›„์— ๋‹จ์–ด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ด€๋ จ๋œ ํŒŒ์ผ์„ ์ „๋ถ€ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋Œ€์‹  ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์šฉ ํŒŒ์ผ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•œ๋‹ค๋ฉด ๊ด€๋ฆฌ ํŒŒ์ผ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€ ํŒŒ์ผ์„ ๊ฐ ๋‚˜๋ผ์˜ ์–ธ์–ด๋ณ„๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์„œ๋น„์Šค๋ฅผ ๊ตญ์ œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. HTTP accept-language ํ—ค๋” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๋“ฑ ์ ‘๊ทผ ๊ตญ๊ฐ€๋ฅผ ์ธ์‹ํ•˜์—ฌ ํ•ด๋‹น ๊ตญ๊ฐ€์˜ ์–ธ์–ด๋กœ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค. ์Šคํ”„๋ง ๋ฉ”์‹œ์ง€ ์†Œ์Šค ์„ค์ • spring.messages.basename=..

Language & Framework/Spring2023. 2. 5. 02:59[์Šคํ”„๋ง MVC] ๊ธฐ๋ณธ ๊ธฐ๋Šฅ

์Šคํ”„๋ง MVC 1ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ์š”์ฒญ ๋งคํ•‘ ๋งคํ•‘ ์ •๋ณด ํด๋ž˜์Šค์— @Controller๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ ๊ฐ’์ด String์ด๋ฉด ๋ทฐ ์ด๋ฆ„์œผ๋กœ ์ธ์‹๋˜๋Š” ๋ฐ˜๋ฉด, @RestController์˜ ๊ฒฝ์šฐ ๋ทฐ ์ด๋ฆ„์ด ์•„๋‹Œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ HTTP ๋ฐ”๋””์— ๋ฐ”๋กœ ์ž…๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ๋”๋ถˆ์–ด @RequestMapping์„ ์ด์šฉํ•จ์œผ๋กœ์จ ํŠน์ • URL๊ณผ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ URL์„ ๋ฐฐ์—ด๋กœ ๋“ฑ๋กํ•จ์œผ๋กœ์จ ๋‹ค์ค‘ ์„ค์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. HTTP ๋ฉ”์„œ๋“œ @RequestMapping์— ๋ฉ”์„œ๋“œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”์„œ๋“œ์— ๊ด€๊ณ„์—†์ด ํ˜ธ์ถœ๋˜์ง€๋งŒ, @RequestMapping(value = "/mapping-get", method = RequestMethod.GET)์™€ ๊ฐ™์ด ์†์„ฑ์„ ์ง€์ •ํ•  ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ 40..

Language & Framework/Spring2023. 2. 3. 21:52[์Šคํ”„๋ง MVC] ์Šคํ”„๋ง MVC ๊ตฌ์กฐ ์ดํ•ด

์Šคํ”„๋ง MVC 1ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC ์ „์ฒด ๊ตฌ์กฐ ๊ตฌ์กฐ ์ด์ „์— ์ง์ ‘ ๋งŒ๋“ค์—ˆ๋˜ MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์กฐ์™€ ๊ฑฐ์˜ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์Šคํ”„๋ง MVC๋„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet)์ด๋‹ค. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ HttpServlet์„ ์ƒ์†๋ฐ›์œผ๋ฉฐ, ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋˜ํ•œ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ž๋™ ๋“ฑ๋กํ•จ๊ณผ ๋™์‹œ์— ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋งคํ•‘๋˜๋„๋ก ํ•œ๋‹ค. ์ด๋•Œ์˜ urlPatterns ์†์„ฑ ๊ฐ’์€ "/"์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€๊ฐ€์ ์œผ๋กœ ๋“ฑ๋กํ•œ ์„œ๋ธ”๋ฆฟ์ด ๋” ์ž์„ธํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ๋„ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋™์ž‘ ์ˆœ์„œ ์„œ๋ธ”๋ฆฟ์ด ํ˜ธ์ถœ๋˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ H..

Language & Framework/Spring2023. 1. 28. 16:38[์Šคํ”„๋ง MVC] MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ

์Šคํ”„๋ง MVC 1ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ธ”๋ฆฟ ํ•˜๋‚˜๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์€ ๋’ค, ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋น„์œ ํ•˜์ž๋ฉด ์ž…๊ตฌ๋ฅผ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ต ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ๊ณตํ†ต์ ์œผ๋กœ ๊ฑฐ์ณ๊ฐ€๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์Šคํ”„๋ง ์›น MVC ๋˜ํ•œ ํ•ด๋‹น ํŒจํ„ด์„ ์ฐจ์šฉํ•˜์—ฌ DispatcherServlet์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. v1. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋„์ž… ํ•˜์œ„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ธ”๋ฆฟ์—์„œ ์ผ์ฐจ์ ์œผ๋กœ ๋ฐ›๊ณ , URI๋ฅผ ์กฐํšŒํ•˜์—ฌ ์‹ค์ œ ํ˜ธ์ถœํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋•Œ ์—†์„ ๊ฒฝ์šฐ 404 ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ฐพ์•˜๋‹ค๋ฉด..

Language & Framework/Java2023. 1. 26. 16:49[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] List<Integer>๋ฅผ int Array๋กœ ๋ณ€ํ™˜

import java.util.*; import java.util.stream.Collectors; class Solution { public int[] solution(int[] numbers, String direction) { List nums = Arrays.stream(numbers) .boxed() .collect(Collectors.toList()); int removeValue = 0; if (direction.equals("right")) { removeValue = nums.get(nums.size() - 1); nums.remove(nums.size() - 1); nums.add(0, removeValue); } else { removeValue = nums.get(0); nums.r..

Language & Framework/Spring2023. 1. 23. 11:35[์Šคํ”„๋ง MVC] ์„œ๋ธ”๋ฆฟ/JSP/MVC ํŒจํ„ด

์Šคํ”„๋ง MVC 1ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ @Getter @Setter @NoArgsConstructor public class Member { private Long id; private String userName; private int age; public Member(String userName, int age) { this.userName = userName; this.age = age; } } ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํšŒ์› ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์•„์ด๋””๋Š” ์ €์žฅ์†Œ์—์„œ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ HttpServlet ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HttpServlet์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค. HttpServlet์—๋Š” service()๋ผ..

Language & Framework/Java2023. 1. 22. 08:51[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] int Array๋ฅผ List<Integer>๋กœ ๋ณ€ํ™˜

๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ’€์–ด๋ณด์•˜๋‹ค. import java.util.*; import java.util.stream.Collectors; class Solution { public int[] solution(int[] emergency) { List sorted = Arrays.stream(emergency) .sorted() .boxed() .collect(Collectors.toList()); int[] answer = new int[sorted.size()]; int idx = 0; Collections.reverse(sorted); for(int element : emergency) { answer[idx++] = sorted.indexOf(element) + 1; } return answer; ..

image