๋ชฉ๋ก๐ฑSPRING (31)
Coding Planet
์ผ๋ง์ ์ ์์ ๋ถํ๋ ์์ํฌ๋ฅผ ์ฃผ๊ดํ๊ณ ๊ด๋ฆฌํ๋ NIA์์ ์ ๊ท๋ฒ์ 4.2์ ์ฐ์ ํ์ฉ์ฌ๋ก์ ๋ํด Zoom์ผ๋ก ์ธ๋ฏธ๋๋ฅผ ์งํํ๋ค. ์ด๋ณด ๊ฐ๋ฐ์๋ก์ ์ดํดํ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์๋นํ์ง๋ง ํ์ฌ ์งํ์ค์ธ ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ๊ณ ๋ฏผํ๋ ์ฌํญ๊ณผ ๋ง๋ฟ์ ์๋ ์ฃผ์ ๊ฐ ์์ด์ ์ ๋ฆฌํ๋ค. 1. WebFluxSpring Framework 5์์ ์๋กญ๊ณ ์๊ฐ๋ ๋ชจ๋์ด๋ค. ๋น๋๊ธฐ์ ์ด๊ณ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ค๋ค. ์ ํต์ ์ธ ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ์คํ๋ง MVC์ ๋ฌ๋ฆฌ, WebFlux๋ Reactive Streams API๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ์ ๋ฐ์ํ ์ ์๋ I/O ์์ ์์ ์๋ฒ์ ์์ ํ์ฉ๋๋ฅผ ์ต๋ํํ๋ค. ๊ฐ๋จํ ๋งํด, WebFlux๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์ ์ค๋ ๋๊ฐ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ด์..
|Spring Security๋? Spring Security๋ Spring ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณ๋ ํ๋ ์์ํฌ์ด๋ค. ์ธ์ฆ(Authentication)๊ณผ ๊ถํ๋ถ์ฌ(Authorization)์ ์ํ ํฌ๊ด์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ค. Spring Security๋ ๋ฉ์๋ ์์ค, URL ์์ค์์ ๋ณด์ ๋ฑ ๋ณด์ ์์ค์ ์ค์ ํ ์๋ ์๋ค. Spring Security๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๊ฐ ๋ณด์ ๊ด๋ จ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๊ฐ๋จํ ์ฌ์ฉํ ์ ์๋๋ก ๊ณ ์๋์๋๋ฐ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ธ์ฆ: ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ๊ณผ์ . ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ณผ์ ์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค. ๊ถํ ๋ถ์ฌ: ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ํน์ ์์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ์ ์ํ..
1. @RequestBody์ ๊ธฐ๋ฅ @RequestBody๋ Spring Framework์์ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ์ผ๋ก, HTTP ์์ฒญ์ ๋ณธ๋ฌธ(body)์ ์๋ ๋ฐ์ดํฐ๋ฅผ Java ๊ฐ์ฒด๋ก ๋ณํํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ฃผ๋ก POST ๋๋ PUT ์์ฒญ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ JSON, XML ๋๋ ๋ค๋ฅธ ํ์์ ๋ฐ์ดํฐ๋ฅผ Java ๊ฐ์ฒด๋ก ๋ณํํ ๋ ์ฌ์ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ํ๋ํ๋ ๊ฐ์ฒด์ ์ธํ ํ์ง ์์๋ ๋๋ ๊ฒ์ด๋ค. (HTTP ์์ฒญ์ ๊ตฌ์กฐ๋ ์๋ ํฌ์คํธ ์ฐธ๊ณ ) https://sharonprogress.tistory.com/303#google_vignette 2. @RequestBody์ ์์ @RequestBody๋ฅผ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ์์ ์ฌ์ฉํ๋ฉด Spring์ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ HTTP ์์ฒญ์..
1. @Controller @Controller ์ด๋ ธํ ์ด์ ์ ์คํ๋ง ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ์ง์ ํด์ฃผ๊ธฐ์ํด ์ฌ์ฉ๋๋ค. HTML ๋ทฐ ํ ํ๋ฆฟ, JSP, Thymleaf๋ฑ๊ณผ ๊ฐ์ ๋ทฐ ๋ ๋๋ง์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ๋ฐํ๋๋ ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ ์ฃผ๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๋ทฐ ํ ํ๋ฆฟ์ผ๋ก ๋ ๋๋ง๋์ด ํด๋ผ์ด์ธํธ์๊ฒ HTML ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ค. MVC ํจํด์์ ์ฌ์ฉ์์ ์ ๋ ฅ์ฒ๋ฆฌ์ ํ๋ฆ ์ ์ด๋ฅผ ๋ด๋นํ๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ ํ ์๋ต ํ๋ฉด(๋ทฐ ํ ํ๋ฆฟ)์ ์ง์ ํ๋ค. @Controller public class MyController { @GetMapping("/hello") public String sayHello() { return "hello"; // "hel..
๊ฒ์ํ์ ๊ฒ์๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ํํฐ๋ง์ด ์๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด๊ฒ์ ๊ฒ ํด๋ณด๊ณ ์ฌ์ง์ด chatGPTํํ ๋ ๋ฌผ์ด๋ณด๊ณ ๋๋ฆฌ๋ฅผ ์ณค์ง๋ง ๊ทธ ์์ธ์ ์ ์ ์์๋ค. ํ๋ผ๋ฏธํฐ๋ค๋ ์ ์์ ์ผ๋ก ๋ค์ด์ค๊ณ ์์๊ธฐ ๋๋ฌธ์ sql์์ ํํฐ๋ง์ด ์๋๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์์ ์ฟผ๋ฆฌ๋ฌธ์ ์ ์ฌํ ๋ณด๋ ๋์ค test ์กฐ๊ฑด์ ๋ํ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๋ค. 1. ๊ธฐ์กด ์ฟผ๋ฆฌ: ํํฐ๋ง ์๋จ ๋ฌธ์ ์ ์์ธ์ ์กฐ๊ฑด์ ๋ฌธ์ ๊ฐ ์์๋ค. test ์ดํ ์กฐ๊ฑด์ ์์ ๋ฐ์ดํ(' ')๋ก ๊ฐ์ธ๊ณ ๋น๊ต๋์ ๋ฌธ์์ด์ ํฐ ๋ฐ์ดํ(" ")๋ก ๊ฐ์ธ์คฌ์ด์ผํ๋๋ฐ ๋ฐ๋๋ก ํ ๊ฒ์ด๋ค. select row_number() over (order by notice_board_no) as rownum, notice_board_no, notice_board_type, notice_board_su..
| PRG ํจํด ์น ๊ฐ๋ฐ์์ ์ฌ์ฉ๋๋ ํจํด์ผ๋ก ์ฌ์ฉ์๊ฐ ํผ์ ์ ์ถํ ํ ์๋ก ๊ณ ์นจ์ ๋๋ฅด๋ฉด ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ์ ์ถ๋๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ด๋ด ๊ฒฝ์ฐ ๋์ผ ๊ฒ์๋ฌผ์ด๋ ๊ฐ์ ์ฃผ๋ฌธ์ด ๋ฐ๋ณต๋์ด ์ด๋ฃจ์ด ์ง ์ ์๋ค. ์ด ํจํด์ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ๋์ํ๋ค. 1. POST: ์ฌ์ฉ์๊ฐ ์น ์์์ ์์ฑํ๊ณ ์ ์ถํ๋ฉด, ๋ฐ์ดํฐ๋ POST ์์ฒญ์ ํตํด ์๋ฒ๋ก ์ ์ก๋๋ค. 2. Redirect: ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ํ, ์ฌ์ฉ์๋ฅผ ๋ค๋ฅธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ(์: ์ฑ๊ณต ํ์ด์ง, ๋ฆฌ์คํธ ํ์ด์ง ๋ฑ)ํ๋ค. ์ด๋ ๋ฆฌ๋ค์ด๋ ํธ๋ GET ์์ฒญ์ ์ฌ์ฉํ๋ค. 3. GET: ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฆฌ๋ค์ด๋ ์ ์ง์์ ๋ฐ๋ผ GET ์์ฒญ์ ํ์ฌ ์ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ค. ์ด ํจํด์ ํต์ฌ์ POST ์์ฒญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์งํ์ ๋ธ๋ผ..
| View Resolver๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ์คํ๋ง MVC ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ค์ํ ์ปดํฌ๋ํธ ์ค ํ๋์ด๋ค. MVC ํจํด์์ ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ง์น ํ์ ์ด๋ค ๋ทฐ๋ก ์๋ต์ ์์ฑํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํ๋ค. | View Resolver์ ์ญํ ๋ทฐ ์ด๋ฆ์ ๋งคํ : ์ปจํธ๋กค๋ฌ๋ ํน์ ๋ทฐ๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ฌธ์์ด ํํ์ ๋ทฐ ์ด๋ฆ์ ๋ฐํํ๋ค. ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ์ด ์ด๋ฆ์ ์ค์ ๋ทฐ ํ ํ๋ฆฟ ํ์ผ๋ก ๋งคํํ๋ค. ์๋ฅผ ๋ค์ด ์ปจํธ๋กค๋ฌ๊ฐ "home"์ด๋ผ๋ ๋ทฐ ์ด๋ฆ์ ๋ฐํํ๋ฉด, ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ์ด๋ฅผ "home.jsp"๋ "home.html"๊ฐ์ ์ค์ ํ์ผ๋ก ๋ณํํ ์ ์๋ค. ๋ค์ํ ๋ทฐ ๊ธฐ์ ์ง์ : ์คํ๋ง MVC๋ ๋ค์ํ ๋ทฐ ๊ธฐ์ ์ ์ง์ํ๋ฉฐ ์ด๋ฅผ ์ํด ์ฌ๋ฌ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฌ๊ณตํ๋ค. JSP, Thymeleaf, FreeMarker ๋ฑ ๋ค์ํ ํ ํ๋ฆฟ..
์คํ๋ง๋ถํธ๊ฐ ์๋ ์คํ๋ง์ ๋ก๊ทธ๋ ๋ฒจ ์ค์ ์ ์ด ํฌ์คํธ๋ก! https://sharonprogress.tistory.com/198 1. ๋ก๊ทธ ๋ ๋ฒจ(Log level)์ด๋? ๋ก๊ทธ ๋ ๋ฒจ(Log Level)์ ๋ก๊ทธ ๋ฉ์์ง์ ์ค์๋๋ฅผ ๋ํ๋ด๋ ์์ค์ ์๋ฏธํ๋ค. ๋ก๊ทธ ๋ ๋ฒจ์ ๋ก๊น ์์คํ ์์ ์ฌ์ฉ๋๋ฉฐ, ๋ก๊ทธ ๋ฉ์์ง์ ์ค์๋์ ๋ฐ๋ผ ํด๋น ๋ฉ์์ง๋ฅผ ๊ธฐ๋กํ ์ง ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. 2. ๋ก๊ทธ๋ ๋ฒจ 1) TRACE ๊ฐ์ฅ ์์ธํ ๋ก๊ทธ ๋ ๋ฒจ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ํ๋ฆ๊ณผ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ์์ธํ ๊ธฐ๋กํ๋ค. ์ฃผ๋ก ๋๋ฒ๊น ์์ ์ฌ์ฉ๋๋ค. 2) DEBUG ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋ฐ ๋จ๊ณ์์ ์์ธํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ ๋์์ ์ดํดํ๊ณ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ ๋ฐ ๋์์ ์ค๋ค. 3) INFO ์ ๋ณด์ฑ ๋ฉ์์ง๋ฅผ ๊ธฐ๋กํ๋ค. ์ ํ๋ฆฌ์ผ์ด..
์ด์ ํฌ์คํธ(https://sharonprogress.tistory.com/231)์์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ ์ค์ธ ์ํ์ ํ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Spring Boot Actuator์ ๋ํด์ ์์๋ดค๋ค. ์ด ๊ฒฝ์ฐ endpoint์ ํตํด์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ํ๊ฐ ์์ด๋ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฐ ์ ์ ๋ณด์์ ์ข์ง ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณด์(Security)์ค์ ์ด ํ์ํ๋ค. ๋ค๋ง ์ด ํฌ์คํธ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๊ด๋ จ ํ๊ฒฝ ์ค์ ๋ง์ ์๋ ค์ค๋ค. 1. pom.xml์ dependency ์ถ๊ฐ org.springframework.boot spring-boot-starter-security 2. ๋ํดํธ ์์ด๋ ๋ฐ ๋น๋ฐ๋ฒํธ ํ์ธ 1) ID์ ํจ์ค์๋ ํ์ธํ๊ธฐ ์๋ํฌ์ธํธ์ ์ ๊ทผํ..
Spring Boot Actuator๋ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ ์ค์ธ ์ํ์ ํ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. | Spring Boot Actuator ์ ์ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋ค. ์ถ๊ฐ์ ์ธ ์ค์ ์ด๋ ์กฐ์ , ์์ ์์ด DevOps ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. POM ํ์ผ์ ์์กด์ฑ์ ๊ฐ๋จํ๊ฒ ์ถ๊ฐํจ์ผ๋ก์จ ์ฌ์ฉํ ์ ์๋ค. REST ์๋ํฌ์ธํธ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ผ๋ก ์ถ๊ฐ๋๋ค. | Spring Boot Actuator ์ค์ ํ๊ธฐ POM ํ์ผ์ ์์กด์ฑ์ ๊ฐ๋จํ๊ฒ ์ถ๊ฐํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก "/health"๋ง ์ค์ ๋์ด ์๋ค. ์๋ application.properties์์๋ /health, /info๋ฅผ ์ถ๊ฐํ๋ค. ๋ชจ๋ endpoints๋ฅผ..