day16 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 6μ›” 29일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
16/129

μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀 (~2κ³Όλͺ©κΉŒμ§€ 곡뢀, 기좜문제 1회 풀어보기)


[μŠ€ν”„λ§ 핡심 원리 - 기본편] μ„Ήμ…˜ 2 μˆ˜κ°•

μ„Ήμ…˜ 2. μŠ€ν”„λ§ 핡심 원리 이해1 - 예제 λ§Œλ“€κΈ° μˆ˜κ°• μ™„λ£Œ!!

λ­”κ°€... μ™„λ²½ν•˜κ²Œ μ΄ν•΄λŠ” μ•ˆ λ˜λŠ”λ° κ·Έλ™μ•ˆ 객체 지ν–₯의 μ—­ν• , μ±…μž„ 뭐 이런 μ–˜κΈΈ 계속 μ ‘ν•΄μ„œ κ·ΈλŸ°μ§€ 이게 μ–΄λ–»κ²Œ 쓰이고 μžˆλŠ”μ§€, μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ 쑰금 이해가 κ°”λ‹€...
근데 κ°•μ‚¬λ‹˜μ΄ νƒ€μžκ°€ λ„ˆλ¬΄ λΉ λ₯΄μ…”μ„œ γ…‹γ…‹ 쀑간쀑간 λ”°λΌμž‘κΈ° μ’€ νž˜λ“€μ—ˆλ‹€.
걍 막 μΉ˜λ‹€λ³΄λ‹ˆ μ–Όλ λš±λ•… μ™„μ„±λΌμžˆκ³ ...
κ·Έλž˜λ„ 맨 처음 μž…λ¬Έ κ°•μ˜ λ“€μ—ˆμ„ λ•Œλ³΄λ‹¨ 무슨 μ†Œλ¦°μ§€ μ•Œ 것 κ°™λ‹€.


μ–΄μ œ λͺ» ν•œ κ±° λ‹€ 끝내기!!!


REST API

+) 22. 07. 02. μΆ”κ°€ μ™„λ£Œ!! (끝낸 건 07. 01. 에 끝냄 ^^...)

API(Application Programming Interface)λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λΉŒλ“œν•˜κ³  ν†΅ν•©ν•˜κΈ° μœ„ν•œ μ •μ˜ 및 ν”„λ‘œν† μ½œ μ„ΈνŠΈμΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€.

⬇️ API에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 μ•„λž˜ 링크에 μ•„μ£Ό 잘 정리돼 μžˆλ‹€.
https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces

μ‰½κ²Œ λ§ν•˜μžλ©΄, μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ œμ–΄ν•  수 있게 λ§Œλ“  μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€.

  • μ–΄λ–€ μž₯치 κ°„ 정보λ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•œ μˆ˜λ‹¨μ΄λ‚˜ 방법. (예: 마우슀, ν‚€λ³΄λ“œ λ“±)

βœ”οΈ ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œκ°€ 데이터λ₯Ό μ£Όκ³  λ°›κΈ° μœ„ν•œ λŒ€ν‘œμ μΈ 방법이닀.
ν”„λ‘ νŠΈμ—”λ“œ β†’ μ‘μš© ν”„λ‘œκ·Έλž¨,
λ°±μ—”λ“œ β†’ μ‹œμŠ€ν…œμ— λ§€μΉ­λœλ‹€.

APIλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‚΄λΆ€ κ΅¬ν˜„ λ‘œμ§μ„ μ•Œμ§€ λͺ»ν•΄λ„ μ •μ˜λ˜μ–΄ μžˆλŠ” κΈ°λŠ₯을 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.


REST(Representational State Transfer)λŠ” ν”„λ‘œν† μ½œμ΄λ‚˜ ν‘œμ€€μ΄ μ•„λ‹Œ μ•„ν‚€ν…μ²˜ 원칙 μ„ΈνŠΈμ΄λ‹€. (μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 톡신 방식 쀑 ν•˜λ‚˜.)

HTTP URI(Uniform Resource Identifier)λ₯Ό 톡해 μžμ›μ„ λͺ…μ‹œν•˜κ³  HTTP Methodλ₯Ό 톡해 μžμ›μ„ κ΅ν™˜ν•˜λŠ” 것을 λ§ν•œλ‹€.

  • 정보에 λŒ€ν•œ 가곡 β†’ CRUD (Create 생성, Read 읽기, Update μˆ˜μ •, Delete μ‚­μ œ)

REST의 νŠΉμ§•

  • Server-Client ꡬ쑰
    μžμ›μ΄ μžˆλŠ” μͺ½μ΄ Server, μš”μ²­ν•˜λŠ” μͺ½μ΄ Clientλ‹€.
    ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ λ…λ¦½μ μœΌλ‘œ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

  • Stateless
    μš”μ²­ 간에 ν΄λΌμ΄μ–ΈνŠΈ 정보가 μ„œλ²„μ— μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€.
    μ„œλ²„λŠ” 각각의 μš”μ²­μ„ μ™„μ „νžˆ λ³„κ°œμ˜ κ²ƒμœΌλ‘œ μΈμ‹ν•˜κ³  μ²˜λ¦¬ν•œλ‹€.

  • Cacheable
    HTTP의 νŠΉμ§•μΈ 캐싱 κΈ°λŠ₯을 μ μš©ν–ˆλ‹€.
    λŒ€λŸ‰μ˜ μš”μ²­μ„ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μΊμ‹œλ₯Ό μ‚¬μš©ν•œλ‹€.

  • 계측화(Layered System)
    ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ ꡬ성과 상관 없이 REST API μ„œλ²„λ‘œ μš”μ²­ν•˜λ©΄ λœλ‹€.
    μ„œλ²„λŠ” 닀쀑 κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 μžˆλ‹€. (예: λ‘œλ“œ λ°ΈλŸ°μ‹±, λ³΄μ•ˆ μš”μ†Œ, μΊμ‹œ λ“±)

  • μΈν„°νŽ˜μ΄μŠ€ 일관성(Uniform Interface)
    정보가 ν‘œμ€€ ν˜•μ‹μœΌλ‘œ μ „μ†‘λ˜κΈ° μœ„ν•΄ ꡬ성 μš”μ†Œ κ°„ 톡합 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.
    HTTP ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜κ²Œλ” μ„€κ³„λ˜μ–΄ μžˆλ‹€.

  • Code on Demand(Optional)
    μš”μ²­μ„ λ°›μœΌλ©΄ μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ½”λ“œ λ˜λŠ” 슀크립트(둜직)λ₯Ό μ „λ‹¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ κΈ°λŠ₯을 ν™•μž₯ν•œλ‹€.


REST APIλž€ REST μ•„ν‚€ν…μ²˜μ˜ μ œμ•½ 쑰건을 μ€€μˆ˜ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€.
REST μ•„ν‚€ν…μ²˜μ˜ μ œμ•½ 쑰건을 μ€€μˆ˜ν•˜λŠ” μ›Ή APIλ₯Ό RESTful API라고 ν•œλ‹€.
RESTful μ›Ή APIμ—λŠ” 곡식적인 ν‘œμ€€μ΄ μ—†λ‹€.

REST API νŠΉμ§•

  • REST 기반으둜 μ‹œμŠ€ν…œμ„ λΆ„μ‚°ν•˜μ—¬ ν™•μž₯μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높인닀.
  • HTTP ν‘œμ€€μ„ λ”°λ₯΄κ³  μžˆμ–΄ μ—¬λŸ¬ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

REST API 섀계 κ·œμΉ™

  • μ›Ή 기반의 REST APIλ₯Ό 섀계할 κ²½μš°μ—λŠ” URIλ₯Ό 톡해 μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

  • μžμ›μ— λŒ€ν•œ μ‘°μž‘μ€ HTTP Method(CRUD)λ₯Ό 톡해 ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

  • λ©”μ‹œμ§€λ₯Ό ν†΅ν•œ λ¦¬μ†ŒμŠ€ μ‘°μž‘

    • HEADERλ₯Ό 톡해 content-type을 μ§€μ •ν•˜μ—¬ 데이터λ₯Ό 전달해야 ν•œλ‹€.
    • λŒ€ν‘œμ  ν˜•μ‹μœΌλ‘œλŠ” HTML, JSON, XML, TEXTκ°€ μžˆλ‹€.
  • URIμ—λŠ” μ†Œλ¬Έμžλ₯Ό μ‚¬μš©ν•œλ‹€.

  • Resource의 μ΄λ¦„μ΄λ‚˜ URIκ°€ κΈΈμ–΄μ§ˆ 경우 ν•˜μ΄ν”ˆ(-)을 톡해 가독성을 높일 수 μžˆλ‹€.

  • 언더바(_)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • 파일 ν™•μž₯자λ₯Ό ν‘œν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€.


RESTλ₯Ό 톡해 β€˜μ •λ³΄β€™λ₯Ό μ•Œ 수 μžˆλ‹€.

λ§Œμ•½ μ£Όμ†Œμ— https://(도메인)/classes κ°€ λΆ™λŠ”λ‹€λ©΄

{
	"results": [
		{"idx": 1, "name": "μ΄ˆλ“±λ°˜"},
		{"idx": 2, "name": "μ€‘λ“±λ°˜"},
		{"idx": 3, "name": "κ³ λ“±λ°˜"}
	]
}

이처럼 β€˜λ°˜β€™ λͺ©λ‘μ„ λ°›μ•„μ˜¬ 것이닀.

κ·Έ 뒀에 https://(도메인)/classes/2 μ΄λ ‡κ²Œ idx(고유번호)κ°€ 따라 λΆ™μœΌλ©΄ λ°˜λ“€ 쀑 인덱슀 λ²ˆν˜Έκ°€ 2인 반의 정보가 올 것이닀.
β†’ {"idx": 2, "name": "μ€‘λ“±λ°˜"}

κ²°κ΅­ REST APIλž€ HTTP μš”μ²­μ„ 보낼 λ•Œ μ–΄λ–€ URI에 μ–΄λ–€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν• μ§€ κ°œλ°œμžλ“€ 사이에 μ§€μΌœμ§€λŠ” 약속이라 ν•  수 μžˆλ‹€.

λ”°λΌμ„œ REST APIλŠ” νŠΉμ • κΈ°μˆ μ„ μ˜λ―Έν•˜λŠ” 것이 μ•„λ‹ˆλΌ, HTTPλ₯Ό μ΄μš©ν•΄μ„œ 기계듀이 톡신을 ν•  λ•Œ HTTPκ°€ 가진 잠재λ ₯을 μ΅œλŒ€ν•œ μ΄μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이닀.


참고 자료

  1. μ–΄λΌμš΄λ“œν—ˆλΈŒ μŠ€νŠœλ””μ˜€, β€œREST API에 λŒ€ν•΄β€, https://youtu.be/lceS3HbGXt4
  1. μ–„νŒν•œ 코딩사전, β€œREST APIκ°€ λ­”κ°€μš”?β€œ, https://youtu.be/iOueE9AXDQQ
  1. μ§μ½”λ”©μ˜ CODING GYM, β€œAPIλž€ 무엇인가?”, https://youtu.be/Jg3FFBLyhK0
  1. Red Hat, β€œREST API(RESTful API, λ ˆμŠ€νŠΈν’€ API)λž€? κ΅¬ν˜„ 및 μ‚¬μš©λ²•β€, https://www.redhat.com/ko/topics/api/what-is-a-rest-api

  2. μ˜μ§„λ‹·μ»΄ 곡식 λΈ”λ‘œκ·Έ, β€œμ›Ή 개발 REST API / JSON μ•Œμ•„λ³΄κΈ°!”, https://blog.naver.com/ydot/222738115724


μžλ°” 곡뢀

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보