์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๊ฒ์ฆ ์ปจํธ๋กค๋ฌ์ ์ค์ํ ์ญํ ์ค ํ๋๋ HTTP ์์ฒญ์ด ์ ์์ธ์ง ๊ฒ์ฆํ๋ ๊ฒ์ด๋ค. ํด๋ผ์ด์ธํธ ๊ฒ์ฆ๋ง์ผ๋ก๋ ์กฐ์์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ทจ์ฝํ๊ณ , ์๋ฒ๋ง์ผ๋ก ๊ฒ์ฆํ๋ฉด ์ฆ๊ฐ์ ์ธ ๊ณ ๊ฐ ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ค. ๋ฐ๋ผ์ ๋์ ์ ์ ํ ์์ด ์ฌ์ฉํ๋ ์ต์ข ์ ์ผ๋ก ์๋ฒ ๊ฒ์ฆ์ ๊ฑฐ์น๋๋ก ์ค๊ณํด์ผ ํ๋ค. ๊ฒ์ฆ ์ง์ ์ฒ๋ฆฌ ๋ก์ง 1. Map errors = new HashMap();์ ์ ์ธํ์ฌ ์ค๋ฅ๋ฅผ ๋ณด๊ดํ ๋ณ์๋ฅผ ์ง์ ํ๊ณ ๊ฒ์ฆ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋๋ช ์ key๋ก, ์ค๋ฅ ๋ฉ์์ง๋ฅผ value๋ก ์ ์ฅํ๋ค.(์ค๋ฅ ์์ธ์ด ํน์ ํ๋๊ฐ ์๋๋ผ ํ๋ ๋ฒ์๋ฅผ ๋์ด์๋ ์ค๋ฅ๋ผ๋ฉด globalError๋ฅผ key๋ก ์ฌ์ฉํ๋ค.) ์ดํ ๋ทฐ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉ์์๊ฒ..
์คํ๋ง MVC 2ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๋ฉ์์ง / ๊ตญ์ ํ ๋ฉ์์ง ๊ธฐ๋ฅ์ ๋ค์ํ ๋ฉ์์ง๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ผ์ปซ๋๋ค. ์ฌ๋ฌ ํ๋ฉด์ ๋ณด์ด๋ ์ํ๋ช , ๊ฐ๊ฒฉ ๋ฑ์ ์ผ์ผ์ด ํ๋์ฝ๋ฉํ ์ํฉ์์ ์ดํ์ ๋จ์ด๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ด๋ จ๋ ํ์ผ์ ์ ๋ถ ๊ณ ์ณ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ๋ค. ๋์ ๋ฉ์์ง ๊ด๋ฆฌ์ฉ ํ์ผ์ ๋ฉ์์ง๋ฅผ ์ ์ํ๊ณ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ฐฉ์์ ์ฑํํ๋ค๋ฉด ๊ด๋ฆฌ ํ์ผ๋ง ์์ ํ๋ฉด ๋๋ค. ์ด๋ฌํ ๋ฉ์์ง ํ์ผ์ ๊ฐ ๋๋ผ์ ์ธ์ด๋ณ๋ก ๊ด๋ฆฌํ๋ฉด ์๋น์ค๋ฅผ ๊ตญ์ ํํ ์ ์๋ค. HTTP accept-language ํค๋ ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ธ์ด๋ฅผ ์ ํํ๋ ๋ฑ ์ ๊ทผ ๊ตญ๊ฐ๋ฅผ ์ธ์ํ์ฌ ํด๋น ๊ตญ๊ฐ์ ์ธ์ด๋ก ์ ๊ณตํ๊ฒ ๋๋ค. ์คํ๋ง ๋ฉ์์ง ์์ค ์ค์ spring.messages.basename=..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์์ฒญ ๋งคํ ๋งคํ ์ ๋ณด ํด๋์ค์ @Controller๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ๋ฐํ ๊ฐ์ด String์ด๋ฉด ๋ทฐ ์ด๋ฆ์ผ๋ก ์ธ์๋๋ ๋ฐ๋ฉด, @RestController์ ๊ฒฝ์ฐ ๋ทฐ ์ด๋ฆ์ด ์๋ ํด๋น ๋ฌธ์์ด์ HTTP ๋ฐ๋์ ๋ฐ๋ก ์ ๋ ฅํ๊ฒ ๋๋ค. ๋๋ถ์ด @RequestMapping์ ์ด์ฉํจ์ผ๋ก์จ ํน์ URL๊ณผ ๋งคํ์ด ๊ฐ๋ฅํ๋ฐ, ์ฌ๋ฌ ๊ฐ์ URL์ ๋ฐฐ์ด๋ก ๋ฑ๋กํจ์ผ๋ก์จ ๋ค์ค ์ค์ ๋ ๊ฐ๋ฅํ๋ค. HTTP ๋ฉ์๋ @RequestMapping์ ๋ฉ์๋ ์์ฑ์ ์ถ๊ฐํ์ง ์์ผ๋ฉด ๋ฉ์๋์ ๊ด๊ณ์์ด ํธ์ถ๋์ง๋ง, @RequestMapping(value = "/mapping-get", method = RequestMethod.GET)์ ๊ฐ์ด ์์ฑ์ ์ง์ ํ ๊ฒฝ์ฐ ๋ฉ์๋๊ฐ ์ผ์นํ์ง ์์ ๋ 40..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์คํ๋ง MVC ์ ์ฒด ๊ตฌ์กฐ ๊ตฌ์กฐ ์ด์ ์ ์ง์ ๋ง๋ค์๋ MVC ํ๋ ์์ํฌ ๊ตฌ์กฐ์ ๊ฑฐ์ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์คํ๋ง MVC๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ผ๋ก ๊ตฌํ๋์ด ์๋๋ฐ, ์ฌ๊ธฐ์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(Dispatcher Servlet)์ด๋ค. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ HttpServlet์ ์์๋ฐ์ผ๋ฉฐ, ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค. ๋ํ ์คํ๋ง ๋ถํธ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ์ผ๋ก ์๋ ๋ฑ๋กํจ๊ณผ ๋์์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋งคํ๋๋๋ก ํ๋ค. ์ด๋์ urlPatterns ์์ฑ ๊ฐ์ "/"์ด๊ธฐ ๋๋ฌธ์, ๋ถ๊ฐ์ ์ผ๋ก ๋ฑ๋กํ ์๋ธ๋ฆฟ์ด ๋ ์์ธํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ฐ์ ์์์ ๋ฐ๋ผ์ ํด๋น ์๋ธ๋ฆฟ๋ ํจ๊ป ๋์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๋์ ์์ ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ฉด ๋ถ๋ชจ ํด๋์ค์ธ H..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ ํ๋๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ๋ค, ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ํธ์ถํ๋ ๋ฐฉ์์ด๋ค. ๋น์ ํ์๋ฉด ์ ๊ตฌ๋ฅผ ํ๋๋ก ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๊ณตํต์ ์ผ๋ก ๊ฑฐ์ณ๊ฐ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฟ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ์์๋ ์๋ธ๋ฆฟ์ ์ด์ฉํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค. ์คํ๋ง ์น MVC ๋ํ ํด๋น ํจํด์ ์ฐจ์ฉํ์ฌ DispatcherServlet์ ๊ตฌํํ์๋ค. v1. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ๋์ ํ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ์์ฒญ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ์์ ์ผ์ฐจ์ ์ผ๋ก ๋ฐ๊ณ , URI๋ฅผ ์กฐํํ์ฌ ์ค์ ํธ์ถํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๋๋ค. ์ด๋ ์์ ๊ฒฝ์ฐ 404 ์ํ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ , ์ฐพ์๋ค๋ฉด..
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..
์คํ๋ง 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()๋ผ..
๋ค์ ๋ฌธ์ ๋ฅผ ์๋์ ๊ฐ์ด ํ์ด๋ณด์๋ค. 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; ..