1. μ£Όμ μ μ μ΄μ
μ§λ ITμ©μ΄ μ 리μμ APIμ λν μ€λͺ
μ νμΌλ, κ°μ₯ μ€μν REST APIμ λν μ€λͺ
μ κ°λ΅νκ² νλ€κ³ μκ°ν΄μ ν΄λΉ μ£Όμ μ λν΄ μμΈν μ€λͺ
νκ³ μ μ μ νλ€. νλ‘ νΈ μλλΏλ§ μλλΌ ITμ
κ³μμ κ°μ₯ λ§μ΄ μ¬μ©νλ API λ°©μμ΄κΈ°μ μ΄μ λν μ νν κ°λ
μ λ°λμ μμ§ν΄μΌ ν κ²μ΄λ€.
2. APIλ 무μμΈκ°? === λ©λ΄ν
β’
Application Programming Interfaceμ μμ리λ₯Ό μ‘°ν©νμ¬ λ§λ μ©μ΄λ‘, μμ© νλ‘κ·Έλ¨μ νλ‘κ·Έλλ°νκΈ° μν΄ μλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ μνΈμμ©μ λ°©λ²μ΄λΌκ³ μ μν μ μλ€.
β’
λ°μ΄ν°λ₯Ό μμ²νλ ν΄λΌμ΄μΈνΈ(νλ‘ νΈμλ)μκ² μλ²(λ°±μλ)κ° λ°μ΄ν°λ₯Ό μ 곡ν΄μ£Όλ©°, μ΄λ¬ν μνΈμμ©μ κ°λ₯νκ² ν΄μ£Όλ κ²μ΄ APIμ΄λ€.
3. REST APIλ 무μμΈκ°?
3-1. REST APIμ κ°λ
β’
REpresentational State Transferμ μ½μλ‘, μΉ μλΉμ€λ₯Ό μν μν€ν
μ² μ€νμΌμ΄λ€.
β’
μ΄μμ μΌλ‘ λΆμνλ©΄ 'λνμ μΈ μν μ λ¬μ'λ‘ API λ°©μ μ€ κ°μ₯ λ§μ΄ κ·Έλ¦¬κ³ νμ€μ μΌλ‘ μ¬μ©λλ λ°©λ²λ‘ μ΄λ€.
β’
μν€ν
μ²λ μμ€ν
μ ꡬμ±νλ ꡬμ±μμλ€μ μ‘°ν©κ³Ό κ·Έλ€ κ°μ μνΈμμ© λ°©μμ μ€κ³νλ κ²μ μλ―Ένλ©°, REST APIμμ μΈκΈνλ μΉ μλΉμ€λ₯Ό μν μν€ν
μ²λ ν΄λΌμ΄μΈνΈ-μλ² μν€ν
μ²λ₯Ό μλ―Ένλ€.
β’
ν΄λΌμ΄μΈνΈ-μλ² μν€ν
μΈ λ ν΄λΌμ΄μΈνΈμ μλ²κ° κ°μμ μν μ λΆλ°°νμ¬ μμ€ν
μ ꡬμ±νλ€. ν΄λΌμ΄μΈνΈλ μ¬μ©μ μΈν°νμ΄μ€λ μμ²μ μ²λ¦¬νκ³ , μλ²λ κ·Έμ νμν λ°μ΄ν°λ₯Ό μ λ¬ λ° μ²λ¦¬λ₯Ό νλ μν μ μννλ€.
β’
μ¦, REST APIλ μΉ μλΉμ€λ₯Ό μν ν΄λΌμ΄μΈνΈμ μλ²μ μμ€ν
(μν€ν
μ²)μ μ€νμΌμ΄λΌ μ 리 ν μ μλ€.
β’
REST APIλ HTTP νλ‘ν μ½μ κΈ°λ°μΌλ‘ λμνλ€.
3-2. REST APIλ₯Ό μ¬μ©νλ μ΄μ
β’
μμ(Resource) μ€μ¬μ : 리μμ€(λ°μ΄ν°)λ₯Ό μ€μ¬μΌλ‘ APIλ₯Ό μ€κ³νλ€. κ° λ¦¬μμ€λ κ³ μ ν μλ³μ(URI)λ₯Ό κ°μ§κΈ° λλ¬Έμ κ°λ
μ±μ΄ μ’μ μμ μ΄λ λ³κ²½μ΄ μ©μ΄νλ€.
β’
νμ€νλ μΈν°νμ΄μ€: REST APIλ μΌλ°μ μΌλ‘ HTTP λ©μλ(GET, POST, PUT, DELETE)μ HTTP μν μ½λ(200 OK, 404 Not Found λ±)λ₯Ό μ¬μ©νμ¬ μΌκ΄λ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€. μ΄λ κ°λ°μκ° APIλ₯Ό μ΄ν΄νκ³ μ¬μ©νκΈ° μ½λλ‘ λμμ€λ€.
3-3. HTTPλ 무μμΈκ°?
β’
HyperText Transfer Protocolμ μ½μλ‘, μΈν°λ·μμ μΉνμ΄μ§λ₯Ό μ μ‘νκΈ° μν΄ μ¬μ©νλ νλ‘ν μ½(κ·μΉ)μ μλ―Ένλ€.
β’
HTTPλ ν΄λΌμ΄μΈνΈκ° λ°μ΄ν°λ₯Ό 'μμ²'νκ³ μλ²κ° μ΄μ 'μλ΅'νμ¬ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ ννλ‘ μ΄λ£¨μ΄μ Έ μλ€.
β’
REST APIλ HTTP νλ‘ν μ½μ κΈ°λ°μΌλ‘ λμνκΈ°μ, κ°μ’
HTTP λ©μλλ₯Ό νμ©νμ¬ μ¬μ©μμκ² νμ€νλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
4. HTTP λ©μλ μ 리
β’
GET : μμ²λ°μ URIμ μ 보λ₯Ό κ²μνμ¬ μλ΅νλ€. μ£Όλ‘ μ¬μ©μκ° ν΄λ¦νλ λλΆλΆμ λ²νΌλ€μ΄ GET λ©μλλ₯Ό μ¬μ©νλ€κ³ μκ°ν΄λ 무방νλ€.
ex). GET /index.html HTTP/1.1
β’
POST : μμ²λ μμμ μμ±(create)νλ€. μ¦, μλ²μ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ, μλ²μ λ°μ΄ν°λ₯Ό μ μΆνμ¬ μ²λ¦¬νκ³ μ ν λ μ¬μ©νλ€. μ£Όλ‘ κ²μλ¬Όμ μμ±νκ±°λ, μ£Όλ¬Έ μ 보λ₯Ό μμ±νκ±°λ, μλ‘μ΄ νμΌμ μ
λ‘λ νλ λ±, μλ‘μ΄ μμμ μμ±ν λ μ¬μ©νλ€.
ex). POST / request-uri/ HTTP/1.1
β’
PUT : μμ²λ μμ μ 체λ₯Ό μμ (update)νλ€. κΈ°μ‘΄μ URIμ λ΄μ©μ μμ νλ κ²μ΄κΈ°μ μλ‘μ΄ URIλ₯Ό μμ±νλ POSTμλ μ°¨μ΄λ₯Ό λμ΄μΌ νλ€. μ£Όλ‘ λ¦¬μμ€λ₯Ό μ
λ°μ΄νΈν λ PUT λ©μλλ₯Ό μ¬μ©νλ€κ³ μ΄ν΄νλ©΄ λλ€.
ex). PUT / request-uri/ HTTP/1.1
β’
PATCH : μμ²λ μμμ μμ (update)νλ€. λ€λ§, μμ μ 체λ₯Ό μμ νλ PUTλ©μλμλ λ¬λ¦¬, PATCHλ©μλμ κ²½μ° ν΄λΉμμμ μΌλΆλ§μ κ΅μ²΄νλ€λ μ°¨μ΄μ μ΄ μλ€.
ex). PATCH / request-uri/ HTTP/1.1
β’
DELETE : μμ²λ μμμ μμ ν κ²μ μμ²νλ€. νμ§λ§ μμ μ±μ λ¬Έμ λ‘ λλΆλΆμ μλ²μμλ λΉνμ±ν λμ΄μμΌλ©°, μ£Όλ‘ PATCHλ₯Ό ν΅ν΄ μμ νλ€κ³ νλ€.
ex). DELETE / request-uri/ HTTP/1.1
4-1. POSTμ PUTμ μ°¨μ΄λ 무μμΈκ°?
β’
POST λ©μλλ INSERTμ΄λ©° PUT λ©μλλ UPDATEμ΄λ€.
β’
POSTλ©μλμ κ²½μ°, λ©±λ±νμ§ μμ λμΌν μμμ μ¬λ¬λ² POSTνλ©΄ μλ²μμμ λ³νκ° μκΈ΄λ€.
β’
PUTλ©μλμ κ²½μ°, λ©±λ±νμ¬ λμΌν μμμ μ¬λ¬λ² PUTνλ©΄ μλ²μμμ΄ λ³ννμ§ μκ³ λμΌν 리μμ€λ‘ μλ΅νλ€.
β’
μ¦, POSTλ©μλλ μλ‘μ΄ μμμ μμ±νκΈ°μ μ¬λ¬λ² μμ²νλ©΄ μλ² λ¦¬μμ€μ λ³νκ° μκΈ°μ§λ§, PUTμ κ²½μ°, μμ±μ΄ μλ μμ μ νλ©°, μ¬λ¬λ² μμ²ν΄λ μλ² λ¦¬μμ€μ λ³νκ° μλ€.
4-2. PUTκ³Ό PATCHμ μ°¨μ΄λ 무μμΈκ°?
β’
PUTμ ν΄λΉ μμμ μ 체λ₯Ό κ΅μ²΄νμ§λ§, PATCHλ μΌλΆλ§ λ³κ²½νλ€.
β’
PUTμ λ©±λ±νμ§λ§, PATCHλ λ©±λ±νμ§ λͺ»νλ€.
4-3. λ©±λ±(Idempotent)μ 무μμΈκ°?
β’
λμΌν μμ
μ μ¬λ¬ λ² μ€ννλλΌλ κ²°κ³Όκ° λμΌνκ² μ μ§λλ μ±μ§μ μλ―Ένλ€.
β’
μ¦, λμΌν μμ²μ μ¬λ¬ λ² μ€ννλλΌλ μ²μ μμ²κ³Ό κ°μ μνμ κ²°κ³Όλ₯Ό μ»μ μ μλ€λ κ²μ μλ―Ένλ€.
β’
μ΄λ μμ²μ λ°λ³΅ μ€νμ΄λ μ€λ³΅ μ μ‘μ΄ λ°μν΄λ μμ€ν
μ μνκ° λ³νμ§ μλ κ²μ μλ―Ένλ€.
5. μμ½ μ 리 λ° λ©΄μ ν QnA
5-1. Q. REST APIκ° λ¬΄μμΈκ°μ?
β’
REST APIλ HTTP νλ‘ν μ½μ κΈ°λ°μΌλ‘ λμνλ, μΉ μλΉμ€λ₯Ό μν ν΄λΌμ΄μΈνΈμ μλ²μ μμ€ν
(μν€ν
μ²)μ μ€νμΌμ
λλ€.
β’
REST APIκ° κ°κ΄λ°λ μ΄μ λ κ° λ¦¬μμ€λ κ³ μ ν μλ³μ(URI)λ₯Ό κ°μ§κΈ° λλ¬Έμ κ°λ
μ±μ΄ μ’μ μμ μ΄λ λ³κ²½μ΄ μ©μ΄νκ³ , μΌκ΄λ HTTP νλ‘ν μ½μ λ°λ₯΄κΈ°μ κ°λ°μλ‘ νμ¬κΈ μΉμνκ³ νΈλ¦¬νκΈ°μ μμ£Ό μ¬μ©λ©λλ€.
5-2. Q. POSTμ PUTμ μ°¨μ΄λ 무μμΈκ°?
β’
POST λ©μλλ INSERTμ΄λ©° PUT λ©μλλ UPDATEμ΄λ€.
β’
POSTλ©μλμ κ²½μ°, λ©±λ±νμ§ μμ λμΌν μμμ μ¬λ¬λ² POSTνλ©΄ μλ²μμμ λ³νκ° μκΈ΄λ€.
β’
PUTλ©μλμ κ²½μ°, λ©±λ±νμ¬ λμΌν μμμ μ¬λ¬λ² PUTνλ©΄ μλ²μμμ΄ λ³ννμ§ μκ³ λμΌν 리μμ€λ‘ μλ΅νλ€.
β’
μ¦, POSTλ©μλλ μλ‘μ΄ μμμ μμ±νκΈ°μ μ¬λ¬λ² μμ²νλ©΄ μλ² λ¦¬μμ€μ λ³νκ° μκΈ°μ§λ§, PUTμ κ²½μ°, μμ±μ΄ μλ μμ μ νλ©°, μ¬λ¬λ² μμ²ν΄λ μλ² λ¦¬μμ€μ λ³νκ° μλ€.
5-3. Q. PUTκ³Ό PATCHμ μ°¨μ΄λ 무μμΈκ°?
β’
PUTμ ν΄λΉ μμμ μ 체λ₯Ό κ΅μ²΄νμ§λ§, PATCHλ μΌλΆλ§ λ³κ²½νλ€.
β’
PUTμ λ©±λ±νμ§λ§, PATCHλ λ©±λ±νμ§ λͺ»νλ€.
5-4. Q. λ©±λ±(Idempotent)μ 무μμΈκ°?
β’
λμΌν μμ
μ μ¬λ¬ λ² μ€ννλλΌλ κ²°κ³Όκ° λμΌνκ² μ μ§λλ μ±μ§μ μλ―Ένλ€.
β’
μ¦, λμΌν μμ²μ μ¬λ¬ λ² μ€ννλλΌλ μ²μ μμ²κ³Ό κ°μ μνμ κ²°κ³Όλ₯Ό μ»μ μ μλ€λ κ²μ μλ―Ένλ€.
β’
μ΄λ μμ²μ λ°λ³΅ μ€νμ΄λ μ€λ³΅ μ μ‘μ΄ λ°μν΄λ μμ€ν
μ μνκ° λ³νμ§ μλ κ²μ μλ―Ένλ€.