PostRequest์ Post๊ฐ ์ ์ฌํ๊ฒ ์๊ฒผ๋๋ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ Post๊ฐ์ฒด ๊ทธ๋๋ก ์์ฒญ ๋ฐ์์ Post๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ๋ฉด ํธํ๊ณ ๊ด๋ฆฌํ ํด๋์ค๋ ์ ์ด์ง์ง ์์๊น์?
์ฐ์ Entity์ DTO์ ์ ์๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Entity๋ DB ํ ์ด๋ธ์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ค์ ํ๋๋ก ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ ๋ปํฉ๋๋ค. (์ฆ, Entity๋ DB ํ ์ด๋ธ ์ค๊ณ์ ๋์ผํ ๋ชจ์ต์ ํ๊ณ ์๊ฒ ์ฃ .) Entity๋ DB ํ ์ด๋ธ๊ณผ 1:1 ๋์์ด๋ฉฐ, ํ ์ด๋ธ์ ๊ฐ์ง์ง ์๋ ์ปฌ๋ผ์ ํ๋๋ก ๊ฐ์ง ์์ต๋๋ค.
DTO๋ Data Transfer Object์ ์ค๋ง๋ก ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต์ ์ค๊ฐ ๋(transfer) ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๋๋ค. DTO๋ ๋ก์ง์ ๊ฐ์ง ์๋ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด์ด๋ฉฐ, getter/setter ๋ฉ์๋๋ง์ ๊ฐ์ง๋๋ค.
Entity์ DTO๋ฅผ ๊ตฌ๋ถ์ง์ด ์ฌ์ฉํ๋ ์ด์ ๋ '๊ฐ ๋ ์ด์ด๊ฐ์ ์์กด๋๋ฅผ ์ค์ด๊ธฐ ์ํจ'์ ๋๋ค. ๋ ์ฝ๊ฒ ์์๋ฅผ ๋ค์ด๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- Post์ Tag๋ฅผ ๊ฐ๊ฐ ์ ์ฅํ๋๋ก ํ
์ด๋ธ์ ๋ณ๋๋ก ์ค๊ณํ๋ค๊ณ ํด๋ด
์๋ค.
- ํ์ฌ ์ฐ๋ฆฌ ์ฝ๋์์๋ Post์ Tag๋ฅผ ๊ฐ์ด ์ ์ฅํ๋๋ก ํ์ง๋ง, Tag์ ๋ด์ฉ์ด ๋ง์ Post์ Tag๋ฅผ ๊ฐ๊ฐ ์ ์ฅํ๋๋ก ์ค๊ณ๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. Post์ Tag์ ํ ์ด๋ธ์ ๋ถ๋ฆฌํ์ง๋ง ๋ณดํต ์ฐ๋ฆฌ๊ฐ ๊ฒ์๊ธ์ ์์ฑํ ๋ ํ๊ทธ๋ ํจ๊ป ์์ฑํ๋ Request Body๋ Post์ Tag๋ฅผ ํ ๋ฒ์ ๋ฐ์์ผ ์ข๊ฒ ์ฃ . Post ํด๋์ค ํ๋๋ก ์์ฒญ๊ณผ DB ์ ์ฅ์ ๋ชจ๋ ์ฒ๋ฆฌํ๋ค๋ฉด ์์ ๊ฐ์ ์ํฉ ๋์ฒ๊ฐ ์ด๋ ค์ ์ํ ๋ฐ Post์ PostRequest๊ฐ ๋๋์ด ์์ผ๋ ์์ฒญ์ ํ์ฌ PostRequest๊ฐ ๋ฐ๋๋๋ก ๊ฒ์๊ธ ๋ด์ฉ๊ณผ Tag๋ฅผ ํจ๊ป ๋ฐ๊ณ ์ ์ฅํ ๋ Post์ Tag ์ํฐํฐ๋ก ์ ์ฅํ๋ฉด ์์ ๊ฐ์ ์ํฉ์ ๋์ฒ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
- ๊ธฐํ์๊ฐ ๊ฒ์๊ธ ์์ฑ๊ณผ ๊ด๋ จํ ๊ธฐํ์ ๋ณ๊ฒฝํ ์ํฉ์ ๊ฐ์ ํด๋ด
์๋ค.
- ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ์ ์ธ์ ๋ ์ถ๊ฐ/๋ณ๊ฒฝ/์ญ์ ๊ฐ ์๊น๋๋ค. ๊ทธ๋ผ ์์ฒญ์ ๋ฐ์์ผํ๋ ๊ฐ์ฒด์ ํ๋์๋ ์ถ๊ฐ/๋ณ๊ฒฝ/์ญ์ ๊ฐ ์ธ์ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. PostRequest๊ฐ ์์๋ค๋ฉด, Post ํด๋์ค์ ํ๋๊ฐ ์์๋ก ๋ณ๊ฒฝ๋์ด DB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฅ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. (์๋ ํ๋๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ๋ค๋์ง ๋ฑ๋ฑ)
http://localhost:8080 ์ด๋ผ๋ url์ด ์๋ค๊ณ ํฉ์๋ค.
Origin์ host๋ถ๋ถ์ธ localhost์ ํฌํธ์ธ 8080์ ๋ชจ๋ ํฉ์น ๊ฒ์ ๋งํฉ๋๋ค. http://localhost:9090์ ํฌํธ๊ฐ ๋ค๋ฅด๋ Origin์ด ๊ฐ๋ค๊ณ ํ ์ ์์ฃ . ์๋ฒ๊ฐ ์ด๋ฏธ http://localhost:8080์์ ๋๊ณ ์์ผ๋, ํ๋ก ํธ ํ๋ก๊ทธ๋จ์ 8080ํฌํธ๊ฐ ์๋ ๋ค๋ฅธ ํฌํธ(์๋ฅผ๋ค๋ฉด 9090)์์ ๋๊ฒ ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ณด์์์ ์ด์ ๋ก SOP(Same Origin Policy) ์ ์ฑ ์ ์๊ตฌํ๊ณ ์์ต๋๋ค. ํ๋ก ํธ์์ api๋ฅผ ํตํด ์ ๋ณด๋ฅผ ์ป์ด์์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ณด๋ฅผ ์์ฒญํ ์ชฝ(http://localhost:9090)๊ณผ ์ ๋ณด๋ฅผ ์ค ์ชฝ(http://localhost:8080)์ Origin์ด ๋ฌ๋ผ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์จ ์๋ต์ ๊ฑฐ์ ํฉ๋๋ค.
ํ์ง๋ง ์์ฒ๋ผ ์๋ก ๋ค๋ฅธ Origin๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผํ๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์์ธ ์ฌํญ์ ๋์์ต๋๋ค. CORS๊ฐ ๋ฐ๋ก ์ด ์์ธ์ํฉ์ ํด๋นํฉ๋๋ค. CORS(Cross Origin Resource Sharing)๋ ๋ค๋ฅธ Origin์ผ๋ก ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ง์ผ์ผํ๋ ์ ์ฑ ์ผ๋ก, ์๋๋๋ก๋ผ๋ฉด SOP์ ์ํด ๋งํ๊ฒ ๋ ์์ฒญ์ ํ์ด์ฃผ๋ ์ ์ฑ ์ ๋๋ค. WebMvcConfig์์ CORS๋ฅผ ์ํด ์ถ๊ฐํ ํ์ผ์ด๋ผ๊ณ ์์์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค!(ํ๋ก ํธ ์์ ์ ์ํด ์ถ๊ฐํ ์ค์ ํ์ผ) - โ๏ธํ๋ก ํธ์๋ ์์ ํ๋ ค๋ฉด ํด๋น ํ์ผ์ด ํ์์ด๋ ํ๋ก ํธ์๋ ์์ ์ ๊น์ง ๋ฐ๋์ pullํ๊ธฐโ๏ธ
๊ธ์์จ๊ฐ ์์ด ๊ฐ๋จํ ์ ์์ง๋ง, ํ ์ดํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด ์ ๋ง ์์ฃผ ๋ง์ฃผ์น๋ ๋ฌธ์ ์ค ํ๋๊ฐ CORS์ ๋๋ค!!! ๊ธฐ๋ณธ์ ์ธ ์ง์์ด๊ธฐ๋ ํ๋ ์๊ฐ๋์ค ๋ ์๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ์ด๋ณด์ ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค