2022 01 15&22 - oneso123456789/2022 GitHub Wiki
controller ํจํค์ง์ SampleController ํด๋์ค์ @Log4j์ด๋
ธํ
์ด์
์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ๋ฐ์ org.apache.log4j.Logger cannot be resolved to a type
ํด๊ฒฐ๋ฐฉ๋ฒ pom.xml์ log4j๋ถ๋ถ ์ค์ฝํ ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํจ
</exclusions>
<!-- <scope>runtime</scope> -->
</dependency>
runtime ์ค์ฝํ๋ ์์กด๊ด๊ณ๊ฐ ์ปดํ์ผ์๋ ํ์ํ์ง ์์ง๋ง, ์คํ์ ํ์ํ๋ค๊ณ ๋ช
์ํ๋๊ฒ
๋ฐ๋ผ์ ์คํ ์์ ํ
์คํธ ํด๋์ค ํจ์ค์ ์ํ์ง๋ง, ์ปดํ์ผ ํด๋์ค ํจ์ค์ ์ํ์ง ์์
์ง๊ธ๊น์ง log4j๋ ํ
์คํธ ํด๋์ค ์์์๋ง ์ฌ์ฉํ์ง๋ง ์ด๋ฒ์ log4j๋ฅผ main์ชฝ์์ ํธ์ถํ๊ธฐ์
์ด๋ฐ ๋ฌธ์ ๊ฐ ์ผ๊ธฐ๋จ.
์ ๋งํฌ์ ์ค์ฝํ ๋ด์ฉ ๋ค ์์งํ๋๊ฒ ์ข์๋ณด์^์ค^
https://yjh5369.tistory.com/entry/Maven-Dependency%EC%97%90%EC%84%9C-scope%EC%9D%98-%EC%9D%98%EB%AF%B8
22์ผ ๋ณต๊ท ํ๊ณ๋ฅผ ์ข ๋ฐ์๋ฉด ํ๋์ ์ํ๊ณ ์ผ์ด ๋ง์์ ๊ณต๋ถ๊ฐ ์์กํ์ ๋ค์ ์ด์ฌํ ํด์ผ๊ฒ ์..
Data Transfer Object๋ฅผ ๋ปํ๋ฉฐ ๊ณ์ธต๊ฐ ์ด๋์ ์ํ ์๋ฐ bins๋ค
๊ณ์ธต๊ฐ์ด๋ Controller, View, Business Layer, Persistent Layer์ด๋ฉฐ
์ด ๊ณ์ธต๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก DTO๋ฉฐ VO๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๊ณ์ธต๊ตฌ์กฐ์ ์ค๋ช ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ https://postitforhooney.tistory.com/entry/Spring-MVC-%ED%8C%A8%ED%84%B4%EC%97%90%EC%84%9C%EC%9D%98-5%EA%B0%80%EC%A7%80-%EA%B3%84%EC%B8%B5%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%B3%B4-%ED%8D%BC%EC%98%B4
java arrays ๋ฑ ๊ธฐ๋ณธ์ ๋ค์ ๊ณต๋ถํ๋๊ฒ ์ข์๊บผ ๊ฐ์
๋ชจ๋ ๊ฒ์ ์์ ์์ง๋ง ์ค์ํ๊ฑด ๊ธฐ์ตํด์ผํจ
์คํ๋ง MVC๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ ์์ฑ๋๋ Controller๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์
- HttpServletRequest, HttpServletResponse๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ ํ์์์ด ํ์ํ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ค์ํ ํ์ ์ ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ, ๋ค์ํ ํ์ ์ ๋ฆฌํด ํ์ ์ฌ์ฉ๊ฐ๋ฅ
- GET ๋ฐฉ์, POST ๋ฐฉ์ ๋ฑ ์ ์ก ๋ฐฉ์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์/์ธํฐํ์ด์ค ๋ฐฉ์ ๋์ ์ ์ด๋ ธํ ์ด์ ๋ง์ผ๋ก๋ ํ์ํ ์ค์ ๊ฐ๋ฅ
๋ค๋ฅธ ํ๋ ์ ์ํฌ๋ ๋ค๋ฅด๊ฒ ์คํ๋ง MVC๋ ์ด๋
ธํ
์ด์
์ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์
์์ ์์ฑ์ ๊ฐ ์ด๋
ธํ
์ด์
์ ์๋ฏธ์ ๋ํ์ฌ ์ต๋ํ ์ดํดํ๋ฉด์ ํด์ผํจ
ํ๋ก์ ํธ๋ด com.crow.controller ํจํค์งํด๋์ SampleController๋ผ๋ ์ด๋ฆ์ ํด๋์ค ์์ฑ
SampleController์ ํด๋์ค ์ ์ธ๋ถ์๋ @Controller๋ผ๋ ์คํ๋ง MVC์์์ฌ์ฉํ๋ ์ด๋
ธํ
์ด์
์ ์ ์ฉํ๊ณ ์์.
์์ฑ๋ SampleController ํด๋์ค๋ ์๋์ผ๋ก ์คํ๋ง ๊ฐ์ฒด(Bean)์ผ๋ก ๋ฑ๋ก๋๋๋ฐ
servlet-context.xml์ context:component-scan์ด๋ผ๋ ํ๊ทธ๋ฅผ ์ด์ฉํด์ ์ง์ ๋
ํจํค์ง๋ฅผ ์ค์บํ๋๋ก ์ค์ ๋์ด์๊ธฐ ๋๋ฌธ์.
ํด๋น ํจํค์ง์ ์ ์ธ๋ ํด๋์ค๋ฅผ ์กฐ์ฌํ๋ฉด์ ์คํ๋ง์์ ๊ฐ์ฒด(Bean) ์ค์ ์ ์ฌ์ฉ๋๋
์ด๋
ธํ
์ด์
๋ค์ ๊ฐ์ง ํด๋์ค๋ค์ ํ์
ํ๊ณ ํ์ํ๋ค๋ฉด ์ด๋ฅผ ๊ฐ์ฒด๋ก ์์ฑํด์ ๊ด๋ฆฌํจ
<context:component-scan base-package="com.crow.controller" />
SampleController ํด๋์ค๊ฐ ์คํ๋ง์์ ๊ด๋ฆฌ๋๋ฉด ํด๋์ค ์์ ์๊ฒ 'S'๋ชจ์ ์์ด์ฝ์ด ์ถ๊ฐ๋จ
ํด๋์ค ์ ์ธ๋ถ์๋ @Controller์ ํจ๊ป @RequestMapping์ ๋ง์ด ์ฌ์ฉ
@RequestMapping์ ํ์ฌ ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๋ค์ ๊ธฐ๋ณธ์ ์ธ URL ๊ฒฝ๋ก๊ฐ ๋จ.
์๋ฅผ๋ค์ด SampleController ํด๋์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด '/sample/*'์ด๋ผ๋ ๊ฒฝ๋ก๋ฅผ
์ง์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ URL์ ๋ชจ๋ SampleController์์ ์ฒ๋ฆฌ๋จ.
- /sample/aaa
- /sample/bbb
๋ํ @RequestMapping ์ด๋ ธํ ์ด์ ์ ํด๋์ค์ ์ ์ธ๋ฟ๋ง ์๋๋ผ ๋ฉ์๋์ ์ ์ธ์๋ ์ฌ์ฉํ ์์์
SampleController๋ Lombok์ @Log4j๋ฅผ ์ฌ์ฉํจ
@Log4j๋ @Log๊ฐ java.util.Logging์ ์ด์ฉํ๋๋ฐ ๋ฐํด Log4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํจ
Spring LegacyProject๋ก ์์ฑํ ํ๋ก์ ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Log4j๊ฐ ์ถ๊ฐ๋์ด ์์ผ๋ฏ๋ก ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์์.
(์ ๋ด์ฉ์ ํ๋ฆฐ๋ด์ฉ๊ฐ์ @Log4j๋ฅผ Java Main์์ ์ฌ์ฉ์ pom.xml์ Log4j ๋ถ๋ถ์ ์ค์ฝํ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ฃผ์ ์ฒ๋ฆฌํด์ผํจ)
@Controller ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐ์ ์ธ ์์ฑ์ ์ง์ ํ ์ ์์ง๋ง, @RequestMapping์ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ ์ด ์ค์์๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์์ฑ์ด method ์์ฑ์, Method ์์ฑ์ ํํ GET ๋ฐฉ์, POST๋ฐฉ์์ ๊ตฌ๋ถํด์ ์ฌ์ฉํ ๋ ์ด์ฉํจ
์คํ๋ง์ 4.3๋ฒ์ ๋ถํฐ๋ ์ด๋ฌํ @RequestMapping์ ์ค์ฌ์ ์ฌ์ฉํ ์ ์๋ @GetMapping, @PostMapping์ด ๋ฑ์ฅํ๋๋ฐ
์ถ์ํ์ ํํ์ด๋ฏ๋ก, ์๋์ ๊ฐ์ด ๋น๊ตํด์ ํ์ตํ๋๊ฒ์ด ์ข์.
@RequestMapping์ GET, POST ๋ฐฉ์ ๋ชจ๋๋ฅผ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌํด์ ์ง์ ํ ์ ์์
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ง GET, POST ๋ฐฉ์๋ง์ ์ฌ์ฉํ์ง๋ง ์ต๊ทผ์๋ PUT, DELETE ๋ฐฉ์ ๋ฑ๋ ์ ์ ๋ง์ด ์ฌ์ฉํ๊ณ ์์
@GetMapping์ ๊ฒฝ์ฐ ์ค์ง GET ๋ฐฉ์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ๊ฐํธํ๊ธฐ๋ ํ์ง๋ง ๊ธฐ๋ฅ์ ๋ํ ์ ํ์ ๋ง์ํธ์
Controller๋ฅผ ์์ฑํ ๋ ๊ฐ์ฅ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋์ผ๋ก ์์ง๋๋๊ธฐ๋ฅ์
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋งค๋ฒ request.getParameter()๋ฅผ ์ด์ฉํ๋ ๋ถํธํจ์
์์จ์์์
์์ ๋ฅผ ์ํด์ com.crow.domain ํจํค์ง๋ฅผ ์์ฑํ๊ณ , SmapleDTOํด๋์ค๋์์ฑ
SampleDTO ํด๋์ค๋ lombok์ @Data ์ด๋
ธํ
์ด์
์ ์ด์ฉํด์ ์ฒ๋ฆฌํจ.
@Data ์ด๋
ธํ
์ด์
์ ์ด์ฉํ๋ฉด getter/setter, equals(), toString()
๋ฑ์ ๋ฉ์๋๋ฅผ ์๋ ์์ฑํ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํจ.
SampleController์ ๋ฉ์๋๊ฐ SampleDTO๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด
์๋์ผ๋ก setter ๋ฉ์๋๊ฐ ๋์ํ๋ฉด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์์งํ๊ฒ ๋จ
(์ด๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์ง์ set๋ฉ์๋๋ฅผ ์ ์ํ๊ณ set ๋ฉ์๋ ๋ด
๊ฐ๋จํ ๋ก๊ทธ๋ฑ์ ์ถ๋ ฅํด ๋ณด๋ฉด ํ์ธํ ์ ์์)
SampleController์ ๊ฒฝ๋ก๊ฐ '/sample/*'์ด๋ฏ๋ก ex01() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒฝ๋ก๋ '/sample/ex01'์ด ๋จ
๋ฉ์๋์๋ @GetMapping์ด ์ฌ์ฉ๋์์ผ๋ฏ๋ก, ํ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ URL๋ค์
'?name=AAA&age=10'๊ณผ ๊ฐ์ ํํ๋ก ์ถ๊ฐํด์ ํธ์ถํ ์ ์์
์คํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด SampleDTO ๊ฐ์ฒด ์์ name๊ณผ age ์์ฑ์ด ์ ๋๋ก ์์ง๋ ๊ฒ์ ๋ณผ ์ ์์
ํนํ ์ฃผ๋ชฉํ ์ ์ ์๋์ผ๋ก ํ์
์ ๋ณํํด์ ์ฒ๋ฆฌํจ
Controller๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์์งํ๋ ๋ฐฉ์์ ํ๋ผ๋ฏธํฐ ํ์
์ ๋ฐ๋ผ ์๋์ผ๋ก ๋ณํํ๋ ๋ฐฉ์์ ์ด์ฉ
์๋ฅผ ๋ค๋ฉด SampleDTO์ int ํ์
์ผ๋ก ์ ์ธ๋ age๊ฐ ์๋์ผ๋ก ์ซ์๋ก ๋ณํ ๋๋ ๊ฒ์ ๋ณผ ์ ์์
๋ง์ผ ๊ธฐ๋ณธ ์๋ฃํ์ด๋ ๋ฌธ์์ด ๋ฑ์ ์ด์ฉํ๋ค๋ฉด ํ๋ผ๋ฏธํฐ์ ํ์ ๋ง์ ๋ง๊ฒ ์ ์ธํด์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์์์
SampleController์ ex02()๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ค
ex02() ๋ฉ์๋๋ ํ๋ผ๋ฏธํฐ์ @RequestParam ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ ์์ฑํจ
@RequestParam์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ๋ ๋ณ์์ด๋ฆ๊ณผ ์ ๋ฌ๋๋ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ
์ฌ์ฉํจ
์ง๊ธ ์์ ์ ๊ฒฝ์ฐ ๋ณ์๋ช
๊ณผ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ด ๋์ผํ๊ธฐ๋๋ฌธ์ ์ฌ์ฉํ ํ์๋ ์์ง๋ง
@RequestParam ์๊ฐ ์ฐจ์์์ ์ฌ์ฉํ์
๋ธ๋ผ์ฐ์ ์์ 'http://localhost:8090/sample/ex02?name=AAA&age=10'ํธ์ถ์
ex01()๊ณผ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์์ง๋๊ฒ์ ๋ณผ ์ ์์.
๋์ผํ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ๋ฌ ๊ฐ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ์๋ ArrayList<> ๋ฑ์ ์ด์ฉํด์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
SampleController ํด๋์ค์ ex02List()๋ฉ์๋๋ฅผ ์ถ๊ฐํจ
์คํ๋ง์ ํ๋ผ๋ฏธํฐ ํ์
์ ๋ณด๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฏ๋ก ํ๋ผ๋ฏธํฐ ํ์
์ List<> ์
๊ฐ์ด ์ธํฐํ์ด์ค ํ์
์ด ์๋ ์ค์ ์ ์ธ ํด๋์ค ํ์
์ผ๋ก ์ง์ ํจ
์ ์ฝ๋์ ๊ฒฝ์ฐ 'ids'๋ผ๋ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ๋ฌ๊ฐ ์ ๋ฌ๋๋๋ผ๋ ArrayList์ด
์์ฑ๋์ด ์๋์ผ๋ก ์์ ๋จ
๋ธ๋ผ์ฐ์ ๋ฑ์ ์ด์ฉํด์ 'http://localhost:8090/sample/ex02List?ids=111&ids=222&ids=333'์
ํธ์ถํ๋ฉด ids : [111,222,333]๊ฐ์ด ๋ฆฌ์คํธ ํ์์ผ๋ก ์ถ๋ ฅ๋จ
๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ ๋์ผํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅํจ SampleController ํด๋์ค์ ex02array() ๋ฉ์๋ ์์ฑ