iknowDev
Blog Driven Development
iknowDev 🐘
/
  • μž‘μ„± κΈ€ λͺ©λ‘
  • Github
  • Category (30)
    • πŸ“• CS μŠ€ν„°λ”” (22)
      • λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ (0)
      • Java, Spring (5)
      • 도컀, μΏ λ²„λ„€ν‹°μŠ€, λ¦¬λˆ…μŠ€ (4)
      • λ„€νŠΈμ›Œν¬ (11)
      • λ°μ΄ν„°λ² μ΄μŠ€ (1)
      • λ””μžμΈ νŒ¨ν„΄ (1)
      • 자료 ꡬ쑰 (0)
    • πŸ“ μ•Œκ³ λ¦¬μ¦˜ μŠ€ν„°λ”” (4)
      • Java (3)
      • JavaScript (0)
      • Python3 (1)
    • πŸ’» 토이 ν”„λ‘œμ νŠΈ 개발기 (2)
    • πŸš€ κ²½ν—˜ (2)
      • μ—λŸ¬ λŒ€μ‘ (2)
      • 회고 (0)
      • 즐거운일 (0)

Popular

Tag

νŠΈλžœμž­μ…˜   
λ°±μ€€   
Netty   
μΏ λ²„λ„€ν‹°μŠ€   
Spring   
java   
Was   
κ³¨λ“œ   
μ—λŸ¬ λŒ€μ‘   
side Project   

Comment


Designed By hELLO
iknowDev

Blog Driven Development

πŸ“• CS μŠ€ν„°λ””/λ„€νŠΈμ›Œν¬

[CS] #2. λ„€νŠΈμ›Œν¬ - (URL / URI), REST API

2022. 12. 22. 21:41
πŸ’‘ λ„€νŠΈμ›Œν¬
	URL
	URI
	REST API

[ URL ]

유일 μžμ› μ£Όμ†Œ

:= μ„œλ²„μ»΄ν“¨ν„°μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ 파일의 디렉토리λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 

πŸ‘‰ μ£Όμ†Œμ°½μ— www.naver.com을 쳀을 λ•Œ μƒκΈ°λŠ”μΌ 

 

 

[ URI ]

:=  μžμ›μ˜ 고유 μ‹λ³„μž

 

=> URL은 μœ„μΉ˜λ₯Ό κ°€λ₯΄ν‚€κ³ , URIλŠ” μ‹λ³„ν•œλ‹€.

 

 

[ REST API ]

:= μ„œλ²„μ— λ¦¬ν€˜μŠ€νŠΈν•  λ•Œ μžμ›μ˜ id와 μžμ›μ— λŒ€ν•œ 처리(HTTP METHOD)λ₯Ό ν¬ν•¨ν•˜μ—¬ λ¦¬ν€˜μŠ€νŠΈ λ˜λ„λ‘ ν•˜λŠ” 것

λ¬΄μƒνƒœ(stateless) ν™˜κ²½μ—μ„œ λ™μž‘μ„ μ „μ œλ‘œ ν•œλ‹€.λ³΄μ•ˆ 및 인증에 λŒ€ν•΄μ„œλŠ” JWT, OAuth와 같은 토큰 인증이 μ‚¬μš©λœλ‹€.

 

보닀 RESTFULν•˜κ²Œ πŸ‘‡

 

< HTTP Methods >

1. GET

μžμ›μ„ λ°›μ•„μ˜€κΈ°λ§Œ ν• λ•Œ μ‚¬μš©ν•œλ‹€.

 

2. POST

μƒˆλ‘œμš΄ μžμ›μ„ μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

 

3. PUT

μ‘΄μž¬ν•˜λŠ” μžμ›μ„ λ³€κ²½ ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

POSTλŠ” μ—¬λŸ¬κ°œμ˜ μžμ›μ— μˆ˜ν–‰λ˜λŠ” 반면, PUT은 단일 μžμ›μ—λ§Œ μˆ˜ν–‰λœλ‹€.

 

4. DELETE

μžμ›μ„ μ‚­μ œν•  λ•Œ μ‚¬μš©ν•œλ‹€.

이미 μ œκ±°λ˜μ—ˆμœΌλ―€λ‘œ404(NOT FOUND)λ₯Ό λ°˜ν™˜λ°›λŠ”λ‹€.

 

5. PATCH

ν•œ μžμ›μ˜ 데이터λ₯Ό λΆ€λΆ„μ μœΌλ‘œ λ³€κ²½ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

PUT도 λ§ˆμ°¬κ°€μ§€λ‘œ μžμ›μ„ λ³€κ²½ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ μ‘΄μž¬ν•˜λŠ” μžμ›μ— λŒ€ν•΄ λΆ€λΆ„μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄μ„œλŠ” PATCHλ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

< REST API 이점 >

ν™•μž₯μ„±

REST APIλ₯Ό κ΅¬ν˜„ν•˜λŠ” μ‹œμŠ€ν…œμ€ RESTκ°€ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μƒν˜Έ μž‘μš©μ„ μ΅œμ ν™”ν•˜κΈ° λ•Œλ¬Έμ— 효율적으둜 크기 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬΄μƒνƒœλŠ” μ„œλ²„κ°€ κ³Όκ±° ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 정보λ₯Ό μœ μ§€ν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ„œλ²„ λ‘œλ“œλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. 잘 κ΄€λ¦¬λœ 캐싱은 일뢀 ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μƒν˜Έ μž‘μš©μ„ λΆ€λΆ„μ μœΌλ‘œ λ˜λŠ” μ™„μ „νžˆ μ œκ±°ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  κΈ°λŠ₯은 μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λŠ” 톡신 병λͺ© ν˜„μƒμ„ μΌμœΌν‚€μ§€ μ•ŠμœΌλ©΄μ„œ ν™•μž₯성을 μ§€μ›ν•©λ‹ˆλ‹€.

 

μœ μ—°μ„±

RESTful μ›Ή μ„œλΉ„μŠ€λŠ” μ™„μ „ν•œ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ 뢄리λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. 각 뢀뢄이 λ…λ¦½μ μœΌλ‘œ λ°œμ „ν•  수 μžˆλ„λ‘ λ‹€μ–‘ν•œ μ„œλ²„ ꡬ성 μš”μ†Œλ₯Ό λ‹¨μˆœν™”ν•˜κ³  λΆ„λ¦¬ν•©λ‹ˆλ‹€. μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν”Œλž«νΌ λ˜λŠ” 기술 변경은 ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν•¨μˆ˜λ₯Ό κ³„μΈ΅ν™”ν•˜λŠ” κΈ°λŠ₯은 μœ μ—°μ„±μ„ λ”μš± ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ°œλ°œμžλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šκ³ λ„ λ°μ΄ν„°λ² μ΄μŠ€ 계측을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

독립성

REST APIλŠ” μ‚¬μš©λ˜λŠ” 기술과 λ…λ¦½μ μž…λ‹ˆλ‹€. API 섀계에 영ν–₯을 μ£Όμ§€ μ•Šκ³  λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ ν΄λΌμ΄μ–ΈνŠΈ 및 μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λͺ¨λ‘ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 톡신에 영ν–₯을 μ£Όμ§€ μ•Šκ³  μ–‘μͺ½μ˜ κΈ°λ³Έ κΈ°μˆ μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

< REST API URI 7κ°€μ§€ κ·œμΉ™ >

1. URI의 λ§ˆμ§€λ§‰μ΄ '/'둜 λλ‚˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

    better

        http://www.itivllage.tistory.com/coffees (γ…‡)

    worse

        http://www.itivllage.tistory.com/coffees/ (x)

 

2. 동사 λ³΄λ‹€λŠ” λͺ…사λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    better

        http://www.itivllage.tistory.com/coffees (γ…‡)

    worse

        http://www.itivllage.tistory.com/coffees/update (x)

 

3. λ‹¨μˆ˜ν˜• λ³΄λ‹€λŠ” λ³΅μˆ˜ν˜• λͺ…사λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    better

       http://www.itivllage.tistory.com/coffees (γ…‡) 

    worse

        http://www.itivllage.tistory.com/coffee (x)

 

4. URIλŠ” κΈ°λ³Έ μ†Œλ¬Έμžλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

5. μ–Έλ”μŠ€μ½”μ–΄( _ ) λŒ€μ‹ μ— ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©ν•©λ‹ˆλ‹€.

 

6. 파일 ν™•μž₯μžλŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

7. 계측관계λ₯Ό λ‚˜νƒ€λ‚Ό λ•ŒλŠ” μŠ¬λž˜μ‹œ κ΅¬λΆ„μžλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

 

μ°Έκ³ ν• λ§Œν•œ REST API URI μ»¨λ²€μ…˜ πŸ‘‰ REST Resource Naming Guide

    'πŸ“• CS μŠ€ν„°λ””/λ„€νŠΈμ›Œν¬' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [WEB] 🌐 μ›Ή λΈŒλΌμš°μ €μ˜ λ™μž‘ 원리 - μ£Όμ†Œμ°½μ— URL 검색 μ‹œ λ°œμƒν•˜λŠ” 일련의 κ³Όμ •
    • λ”°λΌν•˜λ©΄ λ˜λŠ” Netty 기반 κ°„λ‹¨ν•œ Live Chat μ„œλ²„ 예제
    • λ”°λΌν•˜λ©΄ λ˜λŠ” Netty 기반 EchoServer 예제
    • JAVA λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ° - μ†ŒμΌ“ 톡신 πŸ‘‰ netty
    iknowDev
    iknowDev
    iknowDev 개발 λΈ”λ‘œκ·Έ SSAFY 8κΈ° Java

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”