REST API
๋์ค์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ธํฐํ์ด์ค
์ด ์ธํฐํ์ด์ค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ๊ทผํ๊ณ ์์์ ์กฐ์ํ ์ ์์
REST ๋ ?
"Representational State Transfer"์ ์ฝ์๋ก, ์๋ ์์ด๋ ์น(WWW)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ํคํ ์ฒ์ ํ ํ์
์ฃผ๊ณ ๋ฐ๋ ์์(Resource)์ ์ด๋ฆ์ ๊ท์ ํ๊ณ URI์ ๋ช ์ํด HTTP ๋ฉ์๋ (GET, POST, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธ
REST API ๋ ?
API : Application Programming Interface, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธ
- API๋ฅผ ํตํด ์๋ฒ ๋๋ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ ์ ์์
- โ
์ฆ, REST API๋ REST ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ
/ ์ ํ๋ฆฌ์ผ์ด์
์ธํฐํ์ด์ค๋ผ๊ณ ๋ณผ ์ ์์
- REST ์ํคํ
์ฒ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ RESTfulํ๋ค
๋ผ๊ณ ํํ
REST์ ํน์ง
- ์ ๋ํผ ์ธํฐํ์ด์ค
์ผ๊ด๋ ์ธํฐํ์ด์ค
๋ฅผ ์๋ฏธ- โ ์ฆ, REST ์๋ฒ๋ HTTP ํ์ค ์ ์ก ๊ท์ฝ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋ค์ด์ก๋๋์ ์๊ด์์ด ํ๋ซํผ ๋ฐ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ํ ์ธ์ด, ํ๋ซํผ, ๊ธฐ์ ๋ฑ๊ณผ ํธํํด ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ
๋ฌด์ํ์ฑ(Stateless)
- ์๋ฒ์ ์ํ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๋ณด๊ดํ๊ฑฐ๋ ๊ด๋ฆฌํ์ง ์๋๋ค๋ ์๋ฏธ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ๋ํด ์ธ์ ์ด๋ ์ฟ ํค ์ ๋ณด๋ฅผ ๋ณ๋๋ก ๋ณด๊ดํ์ง ์์ โ ํ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ด๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ๊ฐ ํ๋์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์๋ฒ๊ฐ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์ผ๋ฏ๋ก ๋น์ง๋์ค ๋ก์ง์ ์์ ๋๊ฐ ๋๊ณ ์ค๊ณ๊ฐ ๋จ์ํจ
์บ์ ๊ฐ๋ฅ์ฑ
- REST๋ HTTP ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก HTTP์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์์
- ์ด ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธฐ ์ํด์๋ ์๋ต๊ณผ ์์ฒญ์ด ๋ชจ๋ ์บ์ฑ ๊ฐ๋ฅํ์ง(Cacheable) ๋ช ์๊ฐ ํ์ํ๋ฉฐ, ์บ์ฑ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์์ ์บ์์ ์ ์ฅํด๋๊ณ ๊ฐ์ ์์ฒญ์ ๋ํด์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํจ
- ์ฌ์ฉํ๋ฉด, ์๋ฒ์ ํธ๋์ญ์ ๋ถํ๊ฐ ์ค์ด ํจ์จ์ ์ด๋ฉฐ ์ฌ์ฉ์ ์ ์ฅ์์ ์ฑ๋ฅ์ด ๊ฐ์ ๋จ
๋ ์ด์ด ์์คํ
- REST ์๋ฒ๋ ๋คํธ์ํฌ ์์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์(Layered System)
- ๊ทธ๋ฌ๋ ์๋ฒ์ ๋ณต์ก๋์ ๊ด๊ณ์์ด ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ฐ๊ฒฐ๋๋ ํฌ์ธํธ๋ง ์๋ฉด ๋จ
ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ณ
- REST ์๋ฒ๋ API๋ฅผ ์ ๊ณตํ๊ณ ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌํด ์ค๊ณํจ
- ์ด ๊ตฌ์ฑ์ ์๋ก์ ๋ํ ์์กด์ฑ์ ๋ฎ์ถ๋ ๊ธฐ๋ฅ์ ํจ
Rest์ URI ์ค๊ณ ๊ท์น
URI ๊ท์น
URI์ ๋ง์ง๋ง์๋ '/'๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.
- ์ณ์ ์) http://localhost.com/product
- ์๋ชป๋ ์) http://localhost.com/product/
์ธ๋๋ฐ(_)๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋์ ํ์ดํ(-)์ ์ด์ฉ
- ์ณ์ ์) http://localhost.com/provider-company-name
- ์๋ชป๋ ์) http://localhost.com/provider_company_name
URL์๋ ํ์(๋์ฌ)๊ฐ ์๋ ๊ฒฐ๊ณผ(๋ช ์ฌ)๋ฅผ ํฌํจ
- ์ณ์ ์) http://localhost.com/product/123
- ์๋ชป๋ ์) http://localhost.com/delete-product/123
- ํ์๋ HTTP ๋ฉ์๋๋ก ํํํ ์ ์์ด์ผ ํจ
URI๋ ์๋ฌธ์๋ก ์์ฑ
- URI ๋ฆฌ์์ค ๊ฒฝ๋ก์๋ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ๋ ๊ฒ์ด ์ข์
- ์ผ๋ถ ์น ์๋ฒ๋ ์ด์์ฒด์ ๋ ๋ฆฌ์์ค ๊ฒฝ๋ก ๋ถ๋ถ์ ๋์๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ. ์ด๋ฌํ ์ด์ ๋ก RFC3986์ URI ๋ฌธ๋ฒ ํ์์ ์ ์ํ๊ณ ์๋๋ฐ, ํธ์คํธ์ ๊ตฌ์ฑ์์๋ฅผ ์ ์ธํ๊ณ URI์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํด์ ์ ์ํ๊ณ ์์
ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์์
- HTTP์์ ์ ๊ณตํ๋ Accept ํค๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Retry (0) | 2023.03.04 |
---|---|
์น ์๋ฒ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ (0) | 2022.10.20 |
๊ธฐ์ด ์ง์ - 1 (0) | 2022.09.01 |
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP) (0) | 2022.09.01 |
์์กด์ฑ ์ฃผ์ ( DI ) (0) | 2022.09.01 |