๐[Backend Development] API ๋ช ์ธ์ ์์ฑ์ ๋ท๋ฐ์นจํ๋ ํต์ฌ์ ์ธ ๊ฐ๋ ๋ค
โ 1. API ๋ช ์ธ์ ์์ฑ ์ ์ฌ์ฉ์์ ํธ์์ฑ์ ๋ง์กฑํ๊ฒ ์์ฑํด์ผ ํ๋ ์ด์ .
API์ โ์ฌ์ฉ์โ๋ ์ผ๋ฐ ๊ณ ๊ฐ์ด ์๋๋ผ, ์ด API๋ฅผ ํธ์ถํ์ฌ ๊ฐ๋ฐํ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์(ํ๋ก ํธ์๋, ๋ชจ๋ฐ์ผ ์ฑ ๋ฑ)์
๋๋ค.
์ด๋ค์ ํธ์์ฑ์ ๋ง์กฑ์์ผ์ผ ํ๋ ์ด์ ๋ ๊ฐ๋ฐ ์ ์ฒด์ ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํจ์
๋๋ค.
- ์์ฐ์ฑ ํฅ์ : API๊ฐ ์ง๊ด์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ฉด, ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ ๋ถํ์ํ ์ง๋ฌธ์ด๋ ์ถ์ธก ์์ด ๋น ๋ฅด๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ํ๋ก์ ํธ์ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ ๋๋ค.
- ์ค๋ฅ ๊ฐ์ : API์ ๋์ ๋ฐฉ์์ด ์์ธก ๊ฐ๋ฅํ๊ณ ์ผ๊ด๋๋ฉด(์: ๊ฒ์ ๊ฒฐ๊ณผ๋ ํญ์ ๋ฐฐ์ด), ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๊ฐ ์ค์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค์ด ๋ฒ๊ทธ ๋ฐ์๋ฅ ์ด ๋ฎ์์ง๋๋ค.
- ์ฌ์ด ์ ์ง๋ณด์ : ์ ์ค๊ณ๋ API๋ ๋์ค์ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ํ์ฅํ ๋๋ ์ดํดํ๊ธฐ ์ฌ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
๊ฒฐ๋ก : ๋๋ฃ ๊ฐ๋ฐ์๋ฅผ ์ํ โ์ข์ ๋๊ตฌโ๋ฅผ ๋ง๋ ๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์ข์ ๋๊ตฌ๋ ์ฌ์ฉํ๊ธฐ ํธํ๊ณ , ์ค์๋ฅผ ์ค์ฌ์ฃผ๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ ๋นจ๋ฆฌ ๋ง๋ค๊ฒ ํด์ค๋๋ค.
โ 2. ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ด๋ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ์ ์ ํฉ์ฑ(Data Integrity) ์ด๋, ๋ฐ์ดํฐ๊ฐ ํน์ ์กฐ๊ฑด์ด๋ ๊ท์น์ ํญ์ ๋ง์กฑํ์ฌ ๋ชจ์ ์์ด ์ ํํ๊ณ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ์์ 1: โ์ฌ๊ณ โ ๋ฐ์ดํฐ๋ ์์(-)๊ฐ ๋ ์ ์๋ค๋ ๊ท์น์ ํญ์ ์ง์ผ์ผ ํฉ๋๋ค.
-
์์ 2: โ์ฃผ๋ฌธโ๋ด์ญ์ ์๋
productId
๋ ๋ฐ๋์ โ์ํโํ ์ด๋ธ์ ์ค์ ๋ก ์กด์ฌํ๋ ID์ฌ์ผ ํฉ๋๋ค. -
์์ 3: ์ด์ต๋ฅ (
margin
)์ ํญ์ ์ค์ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ๊ณ์ฐ ๊ฒฐ๊ณผ์ ์ผ์นํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฐ์ดํฐ๋ค์ด ์๋ก ์ถฉ๋ํ๊ฑฐ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง์ด ์ ๋๋ ์ํฉ ์์ด, ์ธ์ ๋ โ์ฌ๋ฐ๋ฅธโ ์ํ๋ก ์กด์ฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
โ 3. API ๋ช ์ธ์ ์์ฑ ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ง์กฑํ๊ฒ ์์ฑํด์ผ ํ๋ ์ด์ .
API๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ โ๋ฌธ์ง๊ธฐโ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
API์ ์ค๊ณ๋ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์งํค๊ฑฐ๋ ๊นจ๋จ๋ฆฌ๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์๋ชป๋ ๋ฐ์ดํฐ ๋ฐฉ์ง : API๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ์ฌ, ์ ํฉ์ฑ์ ํด์น๋ ๋ฐ์ดํฐ(์: ์ฌ๊ณ ๋ฅผ ์์๋ก ๋ง๋ค๋ ค๋ ์์ฒญ)๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ง ์๋๋ก ๋ง์์ผ ํฉ๋๋ค.
- ํธ๋์ญ์ ๋ณด์ฅ : โ์ํ ๋ฑ๋ก๊ณผ ์ด๊ธฐ ์ฌ๊ณ ์ ๋ ฅโ์ฒ๋ผ ์ฌ๋ฌ ์์ ์ ํ๋๋ก ๋ฌถ์ด, ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํ๊ฒ ๋ง๋ค์ด ๋ฐ์ดํฐ๊ฐ ๋ชจ์๋ ์ํ๋ก ๋จ์ง ์๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.
-
๊ณ์ฐ๋ ๊ฐ ๋ณดํธ :
margin
์ด๋totalStockCount
์ฒ๋ผ ๊ณ์ฐ๋๋ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์์ ํ ์ ์๋๋ก API๋ฅผ ์ค๊ณํด์ผ ํฉ๋๋ค. ์ค์ง ์๋ณธ ๋ฐ์ดํฐ(๊ฐ๊ฒฉ, ์ฌ๊ณ ๋ ๋ฑ)๋ง ์์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ ํฉ์ฑ์ ์ ์งํฉ๋๋ค.
๊ฒฐ๋ก : API๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์งํค๊ธฐ ์ํ ๊ท์น์ ๊ฐ์ ํ๋ ์ต์ ์ฑ์ ๋๋ค. API ์ค๊ณ๊ฐ ํ์ ํ๋ฉด, ์์คํ ์ ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ง๊ฐ์ง ์ ์์ต๋๋ค.
โ 4. RESTful ๋์์ธ ์์น์ด๋ ๋ฌด์์ธ๊ฐ์?
RESTful ๋์์ธ ์์น์ ์น ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ผ์ข
์ โ๋ชจ๋ฒ ์ค๊ณ ์์โ ๋๋ โ๊ฐ์ด๋๋ผ์ธโ์
๋๋ค.
์ด ์์น์ ๋ฐ๋ฅด๋ฉด ๋๊ตฌ๋ ์ดํดํ๊ธฐ ์ฝ๊ณ , ํ์ฅํ๊ธฐ ํธํ๋ฉฐ, ์ผ๊ด๋ API๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํต์ฌ์ ์ธ ์์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์์(Resource) : ๋ชจ๋ ๋ฐ์ดํฐ๋
์ํ
,์ฃผ๋ฌธ
๊ณผ ๊ฐ์ โ์์โ์ผ๋ก ํํ๋๋ฉฐ, ๊ฐ ์์์ ๊ณ ์ ํ URL ์ฃผ์๋ฅผ ๊ฐ์ง๋๋ค.(์:/products
,/products/123
) -
ํ์(Verd) : ์์์ ๋ํ ํ์๋ HTTP Method(
GET
,POST
,PUT
,PATCH
,DELETE
)๋ก ํํํฉ๋๋ค.(์:GET /products
- ์ํ ์กฐํ) - ํํ(Representation) : ์์์ ์ํ๋ JSON์ด๋ XML ๊ฐ์ ํํ๋ก ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
๊ฒฐ๋ก : โURL๋ก๋ ๋์์ ํํํ๊ณ , HTTP Method๋ก๋ ํ์๋ฅผ ํํํ์โ ๋ ๊ฒ์ด RESTful ๋์์ธ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฒ ํ์ ๋๋ค.
โ 5. API ๋ช ์ธ์ ์์ฑ ์ RESTful ๋์์ธ ์์น์ ๋ง์กฑํ๊ฒ ์์ฑํด์ผ ํ๋ ์ด์ .
RESTful ๋์์ธ ์์น์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค ์ฌ์ด์ โ๊ณตํต ์ธ์ดโ ๋๋ โ๋ฌธ๋ฒโ ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
์์ธก ๊ฐ๋ฅ์ฑ :
GET /products/1
์ด๋ผ๋ URL๋ง ๋ด๋, ๊ฐ๋ฐ์ ๋๊ตฌ๋ โ1๋ฒ ์ํ์ ์ ๋ณด๋ฅผ ์กฐํํ๋๊ตฌ๋โ๋ผ๊ณ ์ฝ๊ฒ ์์ธกํ ์ ์์ต๋๋ค. ์ด๋ API๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๋ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถ์ํต๋๋ค. - ํ๋ซํผ ๋ ๋ฆฝ์ฑ : ์น, ๋ชจ๋ฐ์ผ ์ฑ, ๋ค๋ฅธ ์๋ฒ ๋ฑ HTTP ํต์ ๋ง ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ค ํด๋ผ์ด์ธํธ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ : ๋ช ํํ ๊ท์น๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก, ๋์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์์คํ ์ ํ์ฅํ ๋ ๋ ์์ํฉ๋๋ค.
- ์ผ๊ด์ฑ : ํ๋ก์ ํธ ๋ด ๋ชจ๋ API๊ฐ ๋์ผํ ๊ท์น์ ๋ฐ๋ฅด๋ฏ๋ก, ์ ์ฒด์ ์ธ ์ฝ๋์ ํ์ง๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค.
๊ฒฐ๋ก : ์ฐ๋ฆฌ๊ฐ ๋ง์ถค๋ฒ๊ณผ ๋ฌธ๋ฒ์ ๋ง์ถฐ ๊ธ์ ์ฐ๋ ๊ฒ์ฒ๋ผ, API๋ RESTful์ด๋ผ๋ โ๋ฌธ๋ฒโ์ ๋ง์ถฐ ์์ฑํด์ผ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ์ดํดํ๊ณ ํ์ ํ ์ ์์ต๋๋ค.