ํ์ต ๊ณผ์ : ์๋ฒ(1, 2์ฃผ์ฐจ) โก๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค(3์ฃผ์ฐจ) โก๏ธ Backend Language(4์ฃผ์ฐจ, ํ์ฌ)
๋ชฉ์ฐจ
HTTP
- 2์ฃผ์ฐจ ์๋ฒ์์ ์ธ๊ธํ๋ HTTP๊ธฐ์ต ๋์๋์?
- HTTP๋ ์ปดํจํฐ๊ฐ ๋คํธ์ํฌ ํต์ ์ ์ํ ํ๋กํ ์ฝ(๊ท์ )์ ๋๋ค.
- ์ ์ก ๋จ์๋ ํจํท์ผ๋ก Header ์ Body๋ก ๋๋ ์ง๋๋ค.
- Header๋ ์์ ์์ IP ์ ๋ณด๋ฅผ, Body๋ ์ ์กํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
- ๋ํ์ ๋ฉ์๋๋ GET/ POST/ PATCH/ PUT/ DELETE ๋ก CRUD ๊ธฐ๋ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
REST API
- REST(Representational State Transfer) : ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๊ทธ ์์์ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ์์์ด ํฌ์ธํธ
- API(Application Programming Interface) : ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋ฒ ํ๋ก๊ทธ๋จ ํต์ ์ ์ฐ๊ฒฐํด์ฃผ๋ ์ธํฐํ์ด์ค(์ฐ๊ฒฐ์, ๊ฒฝ๊ณ๋ฉด)
- [์์1] ๊ธฐ์์ฒญ์๋ ๋ ์จ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ ๊ฒ์ด๋ค.
ใด ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๊ฐ์ ๊ฐ์ ธ์ ๋ ์จ๋ฅผ ์ดํ์์ ํ์ธํ ์ ์๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ด ๋ฐ๋ก API์ด๋ค!
- [์์2] ๋ํต๋ น์ด ํต์ ๋ฐ์ฌ ํ ์ ์๋ ๋ฒํผ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํด๋ณด์.
ใด ๋ํต๋ น์ ํด๋ผ์ด์ธํธ, ๋ฒํผ์ API, ํต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
ใด ๋ํต๋ น์ ๋ฒํผ์ ๋๋ฅด๊ธฐ๋ง ํ๋ฉด(์์ฒญ) ํต์ ๋ฐ์ฌํ ์ ์๋ค. ํต์ ๋ฐ์ฌํ๊ธฐ ๊น์ง ๋ณต์กํ ์ผ๋ จ ๊ณผ์ ์ ๋ชฐ๋ผ๋ ๋๋ค๋ ๋ง์ด๋ค.
- ๊ฒฐ๋ก ์ ์ผ๋ก REST API๋ HTTP๋ฅผ ๊ธฐ๋ฐํ์ฌ ์์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๊ท์ ํ ์ํคํ ์ฒ์ด๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก HTTP๋ฅผ ๊ธฐ๋ฐํ๊ณ ์์ผ๋ฏ๋ก ๋ฉ์๋ GET/ POST ๋ฑ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
Query String / Path variable
- Query String : ๋ฌผ์ํ(?) ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํด์ ์กฐํ/ํํฐ๋งํ ๋ฐ์ดํฐ์ ๋ํ ์ ํ ์ฌํญ(๋งค๊ฐ๋ณ์)์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ. ์ฌ๋ฌ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ ์ค๋(&) ๊ตฌ๋ถ์๋ฅผ ์ด์ฉํ์ฌ ์ด์ด๋ถ์ธ๋ค.
ex) /users?career=๊ฐ๋ฐ&age=25 ๊ฐ๋ฐ์ง๊ตฐ์ 25์ด ์ ์ ๋ค์ ์กฐํํ๋ End-Point(URL)
- Path Variable : URL์ Path ์ผ๋ถ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ธฐ์ํ ์์์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด๋ค. ์ค๋(&)์ฐ์ฐ์๊ฐ ์๋ Path๋ก ๊ตฌ์ฑ๋๋ ๊ฒ์ด ํน์ง์ด๋ค.
ex) /users/:id โก๏ธ /users/355 user id๊ฐ 355์ธ ์ ์ ๋ฅผ ํน์ ํ์ฌ ์กฐํ
๋์ฑ ์์ธํ ์ค๋ช ์ [๋ผ์ด์ง์บ ํ] 5์ฃผ์ฐจ ์ ๋ฆฌ ๊ธ์์ ํ์ธํ๊ธฐ ๋ฐ๋๋ค
RESTful
- REST API ์๋ฆฌ๋ฅผ ์ ์ง์ผ ์์ฑํ๋ค๋ ์๋ฏธ
- ๋๊ตฐ๊ฐ ๊ณต์์ ์ผ๋ก ๋ฐํ ๋ ๊ฒ์ด ์๋๋ค. ์ํํ ํต์ ์ ์ํด ์๋ฌต์ ์ผ๋ก ์ฝ์ํ ๊ฒ๋ค์ ์ ์ง์ผ ์์ฑํ๋ฉด Restfulํ๋ค๊ณ ๋งํ ์ ์๋ค
- ๋ชฉ์ ์ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํจ์ด๋ค.
- ์ฝ์๋ค์ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด์
ใด ์์์ ๋ณต์ํ์ผ๋ก ์์ฑํ๋ค. ex) /user (x) /users (o)
ใด ํ์๋ ๋ฉ์๋๋ก, URI๋ ์์์ ๊ธฐ์ค์ผ๋ก ์์ฑํ๋ค. ex) GET /user/create (x) -> (x) POST /users (o)
ใด URI ๊ตฌ๋ถ์๋ ์ธ๋๋ฐ(_)๋ ์นด๋ฉ์ผ์ด์ค(userId)๊ฐ ์๋ ํ์ดํ(-)์ผ๋ก ํ๋ค. ex) /sign-up (o) /signUp (x) /sign_up (x)
ใด etc...
GET vs POST PATCH vs PUT
- GET์ ์กฐํ, ํํฐ๋ง์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. POST์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ GET์ ์บ์์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ก์ ๋จ์ง๋ง POST๋ ๋จ์ง ์๋๋ค.
POST๋ ๋ฐ์ดํฐ ์์ฑ์ ์ํด ์ฌ์ฉ๋๋ค. ์ด ๋ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด RESTfulํ๋ค๊ณ ํ ์ ์๋ค.
- GET์ ์กฐํ๊ฐ ๋ชฉ์ ์ด๋ฏ๋ก uri์์ ? ๊ตฌ๋ถ์๋ก ๋ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ๋ ๋ฐ๋ฉด POST๋ Body์ ๊ฐ์ ๋ฐ์์ API๊ฐ ์ํ๋๋ค.
- PATCH์ PUT์ ๋ ๋ค ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋์ง๋ง PATCH๋ ์์ ๋จ์์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ๊ณ , PUT์ ์ ์ฒด ์ ๋ณด๋ฅผ ์์ ํ ๋ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ์ ๋ฐ๊ฟ ๋ ์ฃผ๋ก PATCH๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
PRACTICE
https://www.notion.so/softsquared/4-REST-API-SpringBoot-8961f53889d948cbb8ad2e4d09befb8b?pvs=4
REFERENCE
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html