@RequestMapping ๋์ @PostMapping @GetMapping ์ฐ๋ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค. ๊ตฌ๊ธ๋ง์ผ๋ก ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ดค์ง๋ง "์ฝ๋๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ"์ด๋ผ๋ ์งค๋งํ ๋ต๋ณ์ด ๋๋ถ๋ถ์ด์๋ค. @RequestMapping(value="๊ฒฝ๋ก", method=RequestMethod.GET) @RequestMapping(value="๊ฒฝ๋ก", method=RequestMethod.POST) ์ด๋ ๊ฒ ๊ธด ์ฝ๋๊ฐ @GetMapping("๊ฒฝ๋ก") @PostMapping("๊ฒฝ๋ก") ์ด๋ ๊ฒ ์งง์์ง๋ค๋ ์ค๋ช
์ด๋ค. ์ฐธ๊ณ ๋ก @GetMapping๊ณผ @PostMapping ์ด๋
ธํ
์ด์
์ @PutMapping, @DeleteMapping, @PatchMapping๊ณผ ํจ๊ป ์คํ๋ง 4.3๋ถํฐ ๋ฑ์ฅํ๋ค. ํ๋ฆฐ ๋ง์ ์๋์ง๋ง ์ด๊ฑด ์ง๋ฌธ..
Backend๐ฑ

1. REST๋? "ํ๋์ URI๋ ํ๋์ ๊ณ ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ํํ๋๋ก ์ค๊ณ๋๋ค." REST(Representational State Transfer) ๋ ์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ ์์์ ํํ๊ณผ ์ํ(์ ๋ณด) ์ ๋ฌ์ ํ๋ ๊ฒ URI๋ฅผ ํตํด ์์์ ๋ช
์ํ๊ณ , HTTP Method(GET, POST, DELETE, PUT...)๋ฅผ ํตํด ์์์ ๋ํ ํ์(CRUD Operation)๋ฅผ ์ ์ฉํ๊ณ ์์์ JSON, XML, TEXT ... ๋ค ์ฌ๋ฌ ํํ์ ํํ์ผ๋ก ๋ํ๋ด์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. CRUD Operation Create : ์์ฑ(POST) Read : ์กฐํ(GET) Update : ์์ (PUT, PATCH) Delete : ์ญ์ (DE..

๊ฐ๋ฐ ๋์ค API ์ Request, Response ์ฒ๋ฆฌ๋ฅผ ํ ๋๋ ๋ค๋ฅธ ๊ณ์ธต์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธธ ๋ ๋ณ๋์ DTO ๋ฅผ ์์ฑํด์ผ ํ๋ ๊ณ ๋ฏผ์ ํ๊ธฐ๋ ํ๋ค. ๋ํ, ๊ฐ๋ฐ์๋ง๋ค ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ํน์ ๊ธฐ์กด ์์ค์์ ํ์ธํด๋ณด๋ฉด DTO ์ VO ๋ ๋ค๋ฅธ ๊ฐ๋
์ด์ง๋ง ์ข
์ข
๊ฐ์ ๊ฐ๋
์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค. ๋ํ, Entity ์ DTO ๋ ํ ํด๋์ค๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ์ด๊ฒ์ด ๋ฌด์กฐ๊ฑด? ํ๋ ธ๋ค๋ผ๊ณค ํ ์๋ ์๊ฒ ์ง๋ง, ๊ฐ๊ฐ์ ์ญํ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ์ญํ ์ ๋ง๊ฒ ์ฌ์ฉํ์ฌ์ผ ํ๊ณ ์ด๊ฒ์ด ์ข์ ์ฝ๋๋ก ์ด์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ด๋ฒ ๊ธ์์๋ ๊ฐ Entity, DTO, VO ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ณ ์ ํ๋ค. 1. Entity ์ค์ DB ํ
์ด๋ธ๊ณผ ๋งคํ๋๋ ํต์ฌ ํด๋์ค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ค์ ํ๋๋ก..
https://www.inflearn.com/questions/347511/dto-vs-class DTO vs Class - ์ธํ๋ฐ | ์ง๋ฌธ & ๋ต๋ณ ์๋
ํ์ธ์! ๊ฐ์ฌ๋์ ๊ฐ NestJS+ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ ์ง ๋ฌธ ๋๋ฆฝ๋๋ค.DTO๋ฅผ ํตํด์ ํ์
์ ์ง์ ํด์ฃผ๋ ๊ฒ๊ณผ Class๋ฅผ ์ง์ ์ง์ ํด์ฃผ๋ ๊ฒ์ ์ฐจ์ด๋ ์ด๋ค ์ ์ด ์์๊น์?Create www.inflearn.com Q ) DTO vs Class (์ํฐํฐ) A ) ์ํฐํฐ๋ฅผ ์กฐํํ๊ฒ ๋๋ฉด ํด๋น ์ํฐํฐ์ ๋ชจ๋ ํ๋๋ฅผ ์กฐํํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์์ ํ์ํ ํ๋๋ง ์ฐ์ด์ ์กฐํํ๋ ๊ฒ๊ณผ ๋น๊ตํด์ ํ๋๊ฐ ๋ง๋ค๋ฉด ์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ํฉ์ ๋ฐ๋ผ DTO๋ก ์ง์ ์กฐํํ๋ ๋ฐฉ์์ด ๋ ๋จ์ํ ๊ฒฝ์ฐ๋ ๋ง์ต๋๋ค. ์ ์ด..
long์ ์์ ํ์
(Primitive Type), Long์ ์ฐธ์กฐ ํ์
(Reference Type)์ด๋ค ๐ฑ์์ ํ์
(Primitive Type) ์ ์, ์ค์, ๋ฌธ์, ๋
ผ๋ฆฌ ๋ฆฌํฐ๋ด ๋ฑ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ๊ฐ์ ์ง์ ์ ์ฅํ๋ ํ์
์ผ๋ก์ boolean, char, byte, short, int, long, float, double๋ฅผ ๋งํ๋ค. ๐ฑ์ฐธ์กฐ ํ์
(Reference Type) ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํ์
์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ํ์
์ผ๋ก์ ์์ ํ์
์ ์ ์ธํ ๋ฌธ์์ด, ๋ฐฐ์ด, enum, ํด๋์ค, ์ธํฐํ์ด์ค๋ฅผ ๋งํ๋ค. ์์ ํ์
(Primitive Type)์ null ํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค ์์ ํ์
๊ณผ ์ฐธ์กฐ ํ์
์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ค ํ๋๋ ์์ ํ์
์ null๋ก ์ง์ ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ฐธ์กฐ ..

์คํ๋ง MVC์์๋ MultipartResolver๋ฅผ ์ค์ ํ๋ฉด ์ดํ๋ฆฌ์ผ์ด์
๋ค์ด์ค๋ Multipart ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ํ์ผ ์
๋ก๋๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค. ์คํ๋ง ๋ถํธ์์๋ ๊ธฐ๋ณธ ๋น์ผ๋ก ๋ฑ๋ก๋์ด์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฑ๋กํด ์ค ํ์๊ฐ ์๋ค! ์
๋ก๋ 1. application.properties ์์ฑ spring.servlet.multipart.max-file-size=1MB spring.servlet.multipart.max-request-size=10MB file.dir=D:/test/ max-file-size : ํ์ผ ํ๋์ ์ต๋์ฌ์ด์ฆ ์ค์ , ์๋ฌด๋ฐ ์ค์ ์ ์ํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ด 1MB์ด๋ค. max-request-size : Multipart ์์ฒญ ํ๋์ ์ฌ๋ฌ ํ์ผ์ ์
๋ก๋ ํ ์ ์๋๋ฐ, ๊ทธ ์ ์ฒด ํฉ์ ํฌ๊ธฐ๋ฅผ ..
# ์์ฝ ์๋ฃํ์ด String์ผ ๊ฒฝ์ฐ remove(String๊ฐ) ์
๋ ฅ์ ๊ฐ์ผ๋ก ์ญ์ ๊ฐ ๊ฐ๋ฅํ๊ณ remove(์ ์๊ฐ) ์
๋ ฅ์ ์ธ๋ฑ์ค๋ก ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค ๊ทธ๋ ๋ค๋ฉด ์๋ฃํ์ด Integer์ผ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ๋๋๊ฐ? remove(Integer๊ฐ) ์
๋ ฅ์ ์ธ๋ฑ์ค ์ญ์ ๋ก ์ธ์ํ๋ค ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ผ๋ก ์ด๋ป๊ฒ ์ญ์ ํ๋๊ฐ?! list.remove(list.indexOf(๊ฐ)) ์ ์
๋ ฅํ๋ฉด ์ต์ด์ "๊ฐ"์ด ๋์ค๋ ์์น์์ ์ญ์ ๊ฐ ๋๋ค ๋ด ํฌ์คํ
์ฐธ์กฐ : https://jaewonna.tistory.com/180 ArrayList.remove() - ์ธ๋ฑ์ค remove() ๋ฉ์๋์ ์ง์ ๋ ์์น(์ธ๋ฑ์ค)๋ฅผ ์ ๋ฌํฉ๋๋ค. ํด๋น ์์น์ ์๋ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์๋ ์์๋ ์ผ์ชฝ์ผ๋ก ์ด๋ํฉ๋๋ค. remove() ๋ฉ์๋๋ ์ญ์ ๋ ์์๋ฅผ ..

Entity์ Boolean ํ์
์ ์ธ @Column(columnDefinition = "tinyint(1) default 1") private boolean status; Entity์ Boolean ํ์
์ ์ ์ธ ํ @Getter๋ฅผ ์ด์ฉํ์ฌ ๋ค๋ฅธ ํ์
์ฒ๋ผ get์ ์ฌ์ฉํ๋ ์ค๋ฅ๊ฐ ๋ฌ์ต๋๋ค. ์๋์ ๊ฐ์ด ๋กฌ๋ณต ๋ฌธ์๋ฅผ ๋ฐ๋ฅด๋ฉด, A default getter simply returns the field, and is named getFoo if the field is called foo (or isFoo if the field's type is boolean). https://projectlombok.org/features/GetterSetter boolean ํ์
์ผ ๊ฒฝ์ฐ is๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ๋์์์ต๋๋ค. g..
Java ์ฝ๋๋ฅผ ์ง๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ํ๋ ์๋ฌ๋ ๋ฌด์์ผ๊น?? ๋ฐ๋ก NullPointException ์
๋๋ค. ์ด Exception์ ์ต๋ํ ์ค์ผ ์ ์๋ Optional์ ๋ํด์ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. Java 8๋ถํฐ Null์ฒ๋ฆฌ๋ก Optional์ด ๋์๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๋ค์ด ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ๋ง๋ค์ด์ ธ ๋ง์ด ๋ง์๋ค.... NullPointException๋ฅผ ์๋ฒฝํ๊ฒ ๋ฐฉ์ดํด๋ผ ๊ฒ์ด๋ผ๋ ์์๊ณผ๋ ๋ค๋ฅด๊ฒ ๊ตฌ๋ฉ์ด ์๋ ๊ธฐ๋ฅ์ด๋ค. Optional์ get()๊ฐ์.. ๊ทธ๋์ ์ฃผ์์ฌํญ์ด 26๊ฐ์ง๊ฐ ๋๋ค. ์ด ๊ธ์์๋ ์ฃผ์์ฌํญ์ ๋ค๋ฃจ๊ธฐ ์ ์ Optional์ด ๋ฌด์์ธ์ง, ์ด๋ค ๋ฉ์๋๊ฐ ์๋์ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๐ฑOptional์ด๋? T ํ์
์ ๊ฐ์ฒด๋ฅผ Wrapperํ๋ Wrapper ํด๋์ค์
๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด..
Spring Data JPA ์ฌ์ฉ ์ ๋ ํ์งํ ๋ฆฌ์ ๋ฆฌํด ํ์
์ Optional๋ก ์ค์ .โ ifPresent๋ฅผ ํตํด null์ฒดํฌ๋ฅผ ํจ์ผ๋ก ์ธํด ์ฝ๋์์ ์ค์ด๊ณ ์ข ๋ ์ง๊ด์ ์ผ๋ก ์์ค๋ฅผ ๋ณผ ์ ์๋ค. 1. isEmpty() ์ฌ์ฉ Optional test = testRepository.findById("์์ด๋"); if(!test.isEmpty()){ //test๊ฐ null์ด ์๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค }); 2. ifPresent ์ฌ์ฉ Optional test = testRepository.findById("์์ด๋"); test.ifPresent(a->{ //test๊ฐ null์ด ์๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค });