2 minute read


ν•™μŠ΅ λͺ©ν‘œ

  • REST API에 λŒ€ν•΄ 이해할 수 μžˆλ‹€.
  • REST μ„±μˆ™λ„ λͺ¨λΈμ— λŒ€ν•΄ 이해할 수 μžˆλ‹€.
  • REST API λ¬Έμ„œλ₯Ό 읽을 수 μžˆλ‹€.
  • REST API에 맞좰 λ””μžμΈν•  수 μžˆλ‹€.
  • Open API와 API Key에 λŒ€ν•΄ 이해할 수 μžˆλ‹€.


REST API λ””μžμΈ

REST APIμ—μ„œ RESTλŠ” β€œRepresentational State Transferβ€μ˜ μ•½μžλ‘œ, 둜이 ν•„λ”©μ˜ λ°•μ‚¬ν•™μœ„ λ…Όλ¬Έμ—μ„œ μ›Ή(http)의 μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ‘œμ¨ 처음 μ†Œκ°œλ˜μ—ˆλ‹€. REST APIλŠ” μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ μžμ›(Resource)을 HTTP URI둜 ν‘œν˜„ν•˜κ³ , HTTP ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ •μ˜ν•˜λŠ” 방식을 λ§ν•œλ‹€.

HTTP ν”„λ‘œν† μ½œμ„ 기반으둜 μš”μ²­κ³Ό 응닡에 따라 λ¦¬μ†ŒμŠ€λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•΄μ„œλŠ” μ•Œμ•„λ³΄κΈ° 쉽고 잘 μž‘μ„±λœ λ©”λ‰΄νŒμ΄ ν•„μš”ν•œλ°, 이 역할을 APIκ°€ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ λͺ¨λ‘κ°€ 잘 μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.


REST APIλ₯Ό λ””μžμΈν•˜λŠ” 방법

Β 

REST APIλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” λͺ‡ 가지 μ§€μΌœμ•Ό ν•  κ·œμΉ™λ“€μ΄ μžˆλ‹€. 둜이 필딩이 λ…Όλ¬Έμ—μ„œ μ œμ‹œν•œ REST 방법둠을 보닀 더 μ‹€μš©μ μœΌλ‘œ μ μš©ν•˜κΈ° μœ„ν•΄ λ ˆμ˜€λ‚˜λ₯΄λ“œ λ¦¬μ°¨λ“œμŠ¨μ€ REST APIλ₯Ό 잘 μ μš©ν•˜κΈ° μœ„ν•œ 4단계 λͺ¨λΈμ„ λ§Œλ“€μ—ˆλ‹€.


001

REST μ„±μˆ™λ„ λͺ¨λΈμ€ 총 4단계(0~3단계)둜 λ‚˜λˆ„μ–΄μ§„λ‹€.

μ•žμ„œ 이야기 ν•œ 둜이 필딩은 이 λͺ¨λΈμ˜ λͺ¨λ“  단계λ₯Ό μΆ©μ‘±ν•΄μ•Ό REST API라고 λΆ€λ₯Ό 수 μžˆλ‹€κ³  μ£Όμž₯ν–ˆμœΌλ‚˜, μ‹€μ œλ‘œ μ—„λ°€νžˆ 3λ‹¨κ³„κΉŒμ§€ μ§€ν‚€κΈ°λŠ” μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 2단계 κΉŒμ§€λ§Œ μ μš©ν•΄λ„ 쒋은 API λ””μžμΈμ΄λΌκ³  λ³Ό 수 있고, 이런 경우λ₯Ό HTTP API라고도 λΆ€λ₯Έλ‹€.


REST μ„±μˆ™λ„ λͺ¨λΈ - 0단계

REST μ„±μˆ™λ„ λͺ¨λΈμ— λ”°λ₯΄λ©΄, 0λ‹¨κ³„μ—μ„œλŠ” λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κΈ°λ§Œ 해도 λœλ‹€. λ¬Όλ‘  이 경우, ν•΄λ‹Ή APIλ₯Ό REST API라고 ν•  μˆ˜λŠ” μ—†μœΌλ©°, 0λ‹¨κ³„λŠ” REST APIλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ 단계이닀.

λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” 것이 REST API의 μΆœλ°œμ μ΄λ‹€.



REST μ„±μˆ™λ„ λͺ¨λΈ - 1단계

REST μ„±μˆ™λ„ λͺ¨λΈμ— λ”°λ₯΄λ©΄, 1λ‹¨κ³„μ—μ„œλŠ” κ°œλ³„ λ¦¬μ†ŒμŠ€(Resource)μ™€μ˜ 톡신을 μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€. 쑰금 더 μ‰½κ²Œ λ§ν•˜λ©΄, μ•žμ„œ REST APIλŠ” μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“  λ°μ΄ν„°λ‚˜ μžμ›(Resource)을 HTTP URI둜 ν‘œν˜„ν•œλ‹€κ³  이야기 ν–ˆλ‹€. λ”°λΌμ„œ λͺ¨λ“  μžμ›μ€ κ°œλ³„ λ¦¬μ†ŒμŠ€μ— λ§žλŠ” μ—”λ“œν¬μΈνŠΈ(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ©° μš”μ²­ν•˜κ³  λ°›λŠ” μžμ›μ— λŒ€ν•œ 정보λ₯Ό μ‘λ‹΅μœΌλ‘œ 전달해야 ν•œλ‹€λŠ” 것이 1λ‹¨κ³„μ˜ 핡심이닀.

μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό λ³€ν™”μ‹œν‚€λŠ”μ§€ ν˜Ήμ€ μ–΄λ–€ 응닡이 μ œκ³΅λ˜λŠ”μ§€μ— 따라 각기 λ‹€λ₯Έ μ—”λ“œν¬μΈνŠΈλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, μ μ ˆν•œ μ—”λ“œν¬μΈνŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

μ—”νŠΈν¬μΈνŠΈ μž‘μ„± μ‹œμ—λŠ” 동사, HTTP λ©”μ„œλ“œ, ν˜Ήμ€ μ–΄λ–€ ν–‰μœ„μ— λŒ€ν•œ 단어 μ‚¬μš©μ€ μ§€μ–‘ν•˜κ³ , λ¦¬μ†ŒμŠ€μ— 집쀑해 λͺ…사 ν˜•νƒœμ˜ λ‹¨μ–΄λ‘œ μž‘μ„±ν•˜λŠ” 것이 λ°”λžŒμ§ν•œ 방법이닀.

λ”λΆˆμ–΄ μš”μ²­μ— λ”°λ₯Έ μ‘λ‹΅μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό 전달할 λ•Œμ—λ„ μ‚¬μš©ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 정보와 ν•¨κ»˜ λ¦¬μ†ŒμŠ€ μ‚¬μš©μ— λŒ€ν•œ 성곡/μ‹€νŒ¨ μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.



REST μ„±μˆ™λ„ λͺ¨λΈ - 2단계

REST μ„±μˆ™λ„ λͺ¨λΈ 2λ‹¨κ³„μ—μ„œλŠ” CRUD에 맞게 μ μ ˆν•œ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것에 쀑점을 λ‘”λ‹€.


HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ λͺ‡κ°€μ§€ κ·œμΉ™μ—λ„ μœ μ˜ν•΄μ•Ό ν•œλ‹€.

  • GET λ©”μ„œλ“œ 같은 κ²½μš°μ—λŠ” μ„œλ²„μ˜ 데이터λ₯Ό λ³€ν™”μ‹œν‚€μ§€ μ•ŠλŠ” μš”μ²­μ— μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • POST λ©”μ„œλ“œλŠ” μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜κ³  PUT λ©”μ„œλ“œλŠ” μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λ ‡κ²Œ 맀 μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” νŠΉμ§•μ„ λ©±λ“±(idempotent)ν•˜λ‹€κ³  ν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 멱등성을 κ°€μ§€λŠ” PUT κ³Ό 그렇지 μ•Šμ€ POST λ©”μ„œλ“œλŠ” κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • PUT λ©”μ„œλ“œμ™€ PATCH λ©”μ„œλ“œλ„ ꡬ뢄해야 ν•œλ‹€. PUT 은 ꡐ체, PATCH λŠ” μˆ˜μ •μ˜ μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.



REST μ„±μˆ™λ„ λͺ¨λΈ - 3단계

λ§ˆμ§€λ§‰ λ‹¨κ³„λŠ” HATEOAS(Hypermedia As The Engine Of Application State)λΌλŠ” μ•½μ–΄λ‘œ ν‘œν˜„λ˜λŠ” ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ μ μš©ν•œλ‹€. 3λ‹¨κ³„μ˜ μš”μ²­μ€ 2단계와 λ™μΌν•˜μ§€λ§Œ, μ‘λ‹΅μ—λŠ” λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό ν¬ν•¨ν•œ λ§ν¬μš”μ†Œλ₯Ό μ‚½μž…ν•˜μ—¬ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

μ΄λ•Œ 응닡에 λ“€μ–΄κ°€κ²Œ λ˜λŠ” 링크 μš”μ†ŒλŠ” λ‹€μŒμ— ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ μ•‘μ…˜λ“€μ„ μœ„ν•΄ λ§Žμ€ ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ ν¬ν•¨ν•˜κ³  μžˆλ‹€.



Open API & API Key

Β 

Open API

open APIλŠ” 개발자라면 λˆ„κ΅¬λ‚˜ μ‚¬μš©ν•  수 μžˆλ„λ‘ 곡개된 APIλ₯Ό λ§ν•œλ‹€.

Β 

μ •λΆ€μ—μ„œλŠ” 곡곡데이터에 μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ Open API의 ν˜•νƒœλ‘œ 곡곡데이터λ₯Ό μ œκ³΅ν•œλ‹€.

곡곡데이터 포털


API Key

API KeyλŠ” μ„œλ²„μ˜ 문을 μ—¬λŠ” μ—΄μ‡ λ‘œ, μ„œλ²„λ₯Ό μš΄μš©ν•˜λŠ” 데 λΉ„μš©μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μž…μž₯μ—μ„œ μ•„λ¬΄λŸ° 쑰건 없이 읡λͺ…μ˜ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 데이터λ₯Ό μ œκ³΅ν•  μ˜λ¬΄λŠ” μ—†λ‹€.

Β 

API Keyκ°€ ν•„μš”ν•œ 경우 λ‘œκ·ΈμΈν•œ μ΄μš©μžμ—κ²Œ μžμ›μ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œμ„ API Key의 ν˜•νƒœλ‘œ μ œκ³΅ν•˜κ³ , 데이터λ₯Ό μš”μ²­ν•  λ•Œ API Keyλ₯Ό 같이 전달해야 μ›ν•˜λŠ” 응닡을 받을 수 μžˆλ‹€.


Leave a comment