โ ย IDE ์ธํ : IntelliJ ์ฌ์ฉ๐๐ป IntelliJ download & settingโ ย ํ๋ก์ ํธ ์์ฑspring initializr๋ฅผ ํ์ฉํด์ ์๋ ์์กด์ฑ๋ค์ ํฌํจ์์ผ์ ํ๋ก์ ํธ๋ฅผ ์์ฑ๐๐ป Spring Initializrโ ย ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ MySQL ์ค
IntelliJ ๋ค์ด๋ก๋ ํ์ด์งhttps://www.jetbrains.com/ko-kr/idea/download/Next๋ก ์งํํ๋ค๊ฐํ์ผ > ์๋ก ๋ง๋ค๊ธฐ > ๋ฒ์ ๊ด๋ฆฌ์ ์๋ ํ๋ก์ ํธ ์์ ๋ด๋ ค๋ฐ๊ธฐํ๊ธ๋ฒ์ ์ค์นshift ๋๋ฒ ์ฐํ ํ plugins ๊ฒ์ (kor
URI๋ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋๋ฐ ์ฌ์ฉ๋๋ค.๐ ์ผ๊ด์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ์ ์ง๋๋ถ๋ถ์ ์น ์๋ฒ ๋ฐ ํ๋ ์์ํฌ๋ URL์ ์๋ฌธ์๋ก ๊ฐ์ ๋ณํํ๋๋ก ๊ตฌํ๋์ด ์๋ค. ์ด๋ URL์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ์๋ฒ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ผ๊ด์ฑ ์๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.private_produ
Basic Auth๋ฅผ ์ฌ์ฉํ์ง ๋ง๊ณ ํ์ค ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ์ธ์. (์๋ก, JWT, OAuth ๋ฑ)BA๊ฐ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๋จ์ํ ํํ์ ์ธ์ฆ ๋ฐฉ์์ด์ด์ ๊ตฌ์ฑํ๊ธด ๊ฐํธํฉ๋๋ค. ์ฌ์ฉ์ ID์ PW๋ฅผ HTTP Header์ Base64 ์ธ์ฝ๋ฉ ํํ๋ก ๋ฃ์ด์ ์ธ์ฆ์ ์์ฒญํ๊ณ ,
๐ฉ๐ปโ๐ฆฐ ์ต๋ช ๊ฒ์ํ ์ ์. ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ํ์ ์์!URL, Http Method๋ฅผ ํ์ฉํ ๊ธฐ๋ณธ ๋ผ์ฐํ ๋ฐฉ๋ฒ ํ์ตRequest Body, Query Params, Path Params ์ฌ์ฉํด๋ณด๊ธฐORM ์ฌ์ฉ์ํฐํฐ(ํ ์ด๋ธ) ์์ฑ๊ธฐ๋ณธ์ ์ธ CRUD ํ์ฉ์์ฒญ๋ถํฐ
์๋ก์ด ์์ฒญ ์์ฑ์์ฒญ ๋ฉ์๋ ๋ฐ URL ์ค์ ์์ฒญ ๋ฉ์๋ (GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ์ ํhttp://url:port/์์ฒญ ํค๋ ๋ฐ ๋ฐ๋ ์ค์ "Content-Type"์ "application/json"์ผ๋ก ์ค์ "Body" ํญ์ ์ ํํ๊ณ "
@Controller + @ResponsBody๊ธฐ์กด์ Controller ์ด๋ ธํ ์ด์ ์ Return ๊ฐ์ ResponseBody๋ฅผ ์ ์ฉํ ๊ฒ์ผ๋ก json์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๊ธฐ์กด์ Controller๋ View(ํ๋ฉด)์ ๋ฆฌํดํ๊ณ json ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ๋ @Respo
๊ฒ์๊ธ ์ ์ฒด ์กฐํ API๋ฅผ ์ฌ์ฉํ๋ ํ ๋ฒ์ ๋ ๋ผ์ค๋ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋๋ฌด ๋ง์ ์๋ต์๋๊ฐ ๋๋ฆฝ๋๋ค. ์กฐํ ์ ๊ฐ์ ์ ํ(limit)์ด ํ์ํด์. ์ ๋ ฌ ๊ธฐ๋ฅ ์ถ๊ฐ ๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ createdAt ์ปฌ๋ผ์ ์ด์ฉํด์ฃผ์ธ์. โ ๋ชฉํ ๊ฒ์๊ธ ์์ฑ ๊ธฐ๋ฅ ๊ฒ์๊ธ์ ์์ฑ ์๊ฐ
Audit์ ์ฌ์ ์ ์๋ฏธ๋ก ๊ฐ์ฌํ๋ค, ์ฌ์ฌํ๋ค ๋ฑ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ํฐํฐ๊ฐ ์์ฑ๋๊ณ , ๋ณ๊ฒฝ๋๋ ๊ทธ ์์ ์ ๊ฐ์งํ์ฌ ์์ฑ์๊ฐ, ์์ ์๊ฐ, ์์ฑํ ์ฌ๋, ์์ ํ ์ฌ๋์ ๊ธฐ๋กํ ์ ์๋ค.Application ํด๋์ค์์ @EnableJpaAuditing ์ด๋ ธํ ์ด์ ์ ์ฌ
๐ฉ๐ปโ๐ฆฐ ์ ํจ์ฑ ๊ฒ์ฌ / ์์ธ ์ฒ๋ฆฌ โ ๋ชฉํ ๊ฒ์๊ธ ์์ฑ, ์์ ๊ธฐ๋ฅ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ํ์ ํฌํจ โ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๊ณต๋ฐฑ์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ์๋ ์๋ค. โ ์ ๋ชฉ์ 1๊ธ์ ์ด์ 30๊ธ์ ์ดํ โ ๋ด์ฉ์ 1๊ธ์ ์ด์ 1000๊ธ์ ์ดํ โ ํน์ ๊ฒ์๊ธ ์กฐํ,
HandlerExceptionResolver ์คํ๋ง ํ๋ ์์ํฌ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์ฆํ ์ ์๋ ์ธํฐํ์ด์ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ํน์ ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ๋์์ค๋๋ค. HandlerExceptionResolver๋ฅผ ๊ตฌํํ๋
@Valid๋ ์๋ฐ ํ์ค ์คํ์ด๊ณ @Validated๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.@Valid๋ MethodArgumentNotValidException ์์ธ๋ฅผ @Validated๋ ConstraintViolationException ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.์คํ๋ง(s
๐ฉ๐ปโ๐ฆฐ JWT๋ฅผ ํ์ฉ - ์ธ์ฆ, ์ธ๊ฐ ๊ตฌํ ํ์๊ฐ์ โ ๋ก๊ทธ์ธ โ ๋ด ์ ๋ณด ์กฐํํ์๊ฐ์ ์์ฒญ : ์ด๋ฉ์ผ, ํจ์ค์๋ / DB์ ์ด๋ฉ์ผ, ํจ์ค์๋, ํ์ ๊ฐ์ ์๊ฐ์ ์ ์ฅid(PK, primary key) : Auto-increment โ์ด๋ฉ์ผ : \- @ ํฌํจ
์น์ฌ์ดํธ์์ ์ฌ์ฉ์๊ฐ ๋จธ๋ฌด๋ฅด๋ ๊ธฐ๊ฐ ๋๋ ํ ๋ช ์ ์ฌ์ฉ์์ ํ๋ฒ์ ๋ฐฉ๋ฌธ์ ์๋ฏธํ๋ค. Cookie์ ๋ค๋ฅด๊ฒ ๊ฐ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ ๊ฐ์ ์น์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ Server์ ์ ์ฅ๋๊ฑฐ๋ ์น๋ธ๋ผ์ฐ์ ์ ์บ์์ ์ ์ฅ๋์ด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๊ฑฐ๋ ์๋ฒ์์ ์ญ์ ์ ์ฌ๋ผ์ง๋ค.์ฌ์ฉ์ ์ ๋ณด๋ฅผ
(Json Web Token)์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ํต์ ์ ๊ถํ ์ธ๊ฐ(Authorization)์ ์ํด ์ฌ์ฉํ๋ ํ ํฐ์ด๋ค.๋ ๊ฐ์ฒด ์ฌ์ด์์ ์์ ์ฑ์๊ฒ ์ ๋ณด๋ฅผ ๊ตํํ๊ธฐ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.๐ก JWT๋ ์๋ช ๋ ํ ํฐ์ด๋ค!๋จผ์ ํ ํฐ์ ๋ํด์ ์์๋ณด์!์ด ์ ์ฅ๊ถ์ ํตํด์ ์
์คํ๋ง๋ถํฐ 3.0 ๋ถํฐ ์ํ๋ฆฌํฐ ์ค์ ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.(Springย security 6.0 ๋ฒ์ ๋ถํฐ)ํ์ฌ ํ๋ก์ ํธ : v 5.7.8์ฃผ๋ก ์ฌ์ฉํ๋ Bean์ข ๋ฅ์์กด์ฑ ์ถ๊ฐ ์ ๋ชจ๋ ๊ฒฝ๋ก์์ ๋ก๊ทธ์ธํ๋ฉด์ด ๋ณด์ด๊ฒ ๋๋ค.โ Application Class์ ์ถ๊ฐํ๋ฉด Se