
: ์๋ฒ๋ Uniqueํ ID๋ฅผ ๊ฐ์ง๋ Resource๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ์ด๋ฌํ Resource์ ์์ฒญ์ ๋ณด๋ด๊ณ ์ด๋ฌํ Resource๋ URL์ ํด๋นํ๋ค.
ํด๋ผ์ด์ธํธ์์ ์์์ด ์๋ ์๋ฒ์ ์์์ ์์ฒญํ๋ ๊ตฌ์กฐ
REST Server: API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ
Client : ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด) ๋ฑ์ ์ง์ ๊ด๋ฆฌ
HTTP ํ๋กํ ์ฝ์ Stateless Protocol์ด๋ฏ๋ก REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ์
Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์์ -> ์ธ์ /์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋์ ๊ตฌํ์ด ๋จ์
Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌ -> ์ด์ ์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์๋จ
Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ณ ๋ถ๋ด์ด ์ค์ด๋ค๋ฉฐ, ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง
์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๊ธฐ์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉ ๊ฐ๋ฅ
Last-Modified ํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
์บ์ ์ฌ์ฉ์ ํตํด ์๋ต์๊ฐ์ด ๋นจ๋ผ์ง๊ณ REST Server ํธ๋์ญ์ ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๋ต์๊ฐ, ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ํฅ์ ๊ฐ๋ฅ
Cilent ๋ RESt Server๋ง ํธ์ถ -> REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ
API Server๋ ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ ๊ทธ ์๋จ์ ๋ณด์, ๋ก๋๋ฐธ๋ฐ์ฑ, ์ํธํ, ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ ๋ถ์ฌ + ๋ก๋๋ฐธ๋ฐ์ฑ, ๊ณต์ ์บ์๋ฑ์ ํตํด์ ํ์ฅ์ฑ๊ณผ ๋ณด์์ฑ์ ํฅ์ ๊ฐ๋ฅ
RROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ก๋๋ฐธ๋ฐ์ฑ : ์๋ฒ๊ฐ ์ฒ๋ฆฌํด์ผํ ์ ๋ฌด ํน์ ์์ฒญ(Load)๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ๋๋์ด (Balancing) ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธ
- PROXY('๋์ '์ ์๋ฏธ๋ฅผ ๊ฐ์ง): ์ค๊ณ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ -> ๋ณด์ ์์ ๋ฌธ์ ๋ก ์ง์ ํต์ ํ ์ ์์ ๋ ์ค๊ณํด์ฃผ๋ ์๋ฒ๋ฅผ ํ๋ก์ ์๋ฒ๋ผ๊ณ ๋ถ๋ฆ
- ๊ฒ์ดํธ์จ์ด : ํ ๋คํธ์ํฌ(segment)์์ ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ์ด๋ํ๊ธฐ ์ํ์ฌ ๊ฑฐ์ณ์ผ ํ๋ ์ง์ . ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ๋ฅผ ์ฐ๊ฒฐํจ
Server๋ก๋ถํฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์์ Cilent ์์ ์คํ
URI๋ก ์ง์ ํ Resource์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํ
HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์์
1) URI๋ ๋ช
์ฌ๋ฅผ ์ฌ์ฉ
2) ์ฌ๋์(/)๋ก ๊ณ์ธต ๊ด๊ณ๋ฅผ ํํ
3) URI์ ๋ง์ง๋ง์๋ ์ฌ๋์(/)๋ฅผ ๋ถ์ด์ง ์์
4) URI๋ ์๋ฌธ์๋ก๋ง ๊ตฌ์ฑ
5) ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ ํ์ดํ์ ์ฌ์ฉ
6) ๋๋ฌธ์์ ์๋ฌธ์๋ก URI๋ฅผ ์ ์ํ๋ฉด ๊ธฐ์ตํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ์๋ชป ์ ์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง
RESTful
- REST๋ผ๋ ์ํคํ ์ฒ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด
- ์ดํด์ ์ฌ์ฉ์ด ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ
: ์๋ฒ์ ํด๋ผ์ธํธ ๊ฐ์ ์์ฒญ์ด ๋
๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ ์๋ฏธ
-> ๊ฐ ์์ฒญ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ ์ด์ ์์ฒญ์ ์ํ์ ์์กด โ
์๋ฒ๋ ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์๋ฒ์ ์์ฒญ์ ๋ถ์ฐ์ํฌ ์ ์์
ํด๋ผ์ด์ธํธ๋ ๊ฐ ์์ฒญ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจ์์ผ์ผํ๋ฉฐ, ์๋ฒ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌ
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์ํ๋ฅผ ๊ด๋ฆฌํ ํ์์ฑ ์์ด์ง
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ด ๋ ๋ฆฝ์
ํด๋ผ์ด์ธํธ๋ ๊ฐ ์์ฒญ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํฌํจ
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฉฐ ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ
ํด๋ผ์ด์ธํธ๋ ๊ฐ ์์ฒญ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจ์์ผ์ผํ๋ฉฐ, ์๋ฒ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌ
Example.
https://domain-a.com ์์ ์ ๊ณต๋๋ ํ๋ก ํธ์๋JavaScript ์ฝ๋๊ฐ fetch()๋ฅผ ์ฌ์ฉํ์ฌ http://domain-b.com/data.json์ ์์ฒญํ๋ ๊ฒฝ์ฐ
1. ์๋ฒ์์ Access-Control-Allow-Origin ํค๋ ์ค์ -> ์๋ฝํ ์ถ์ฒ ๋ช
์์ ์ง์ ๊ฐ๋ฅ
'Access-Control-Allow-Origin': <origin> | * // ์ถ์ฒ์๊ด ์์ด ๋ฆฌ์์ค ์ ๊ทผ ๊ฐ๋ฅ
'Access-Control-Allow-Origin': <origin> | https://naver.com // ๋ค์ด๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ
2. ํ๋ฝ์ ์๋ฒ ์ฌ์ฉํ๊ธฐ
์ถ์ฒ
https://velog.io/@gomuzom/RESTful-Api
https://f-lab.kr/insight/understanding-restful-api-20240617
https://developer.mozilla.org/ko/docs/Web/HTTP/Guides/CORS
https://docs.tosspayments.com/resources/glossary/cors#%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-access-control-allow-origin-%EC%9D%91%EB%8B%B5-%ED%97%A4%EB%8D%94-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0