본문 바로가기
Dev/Backend

RESTful API란?

by haerr 2025. 3. 31.

REST란?

REST는 웹에서 데이터를 주고받는 "규칙"이라고 생각하면 된다.

식당에서 메뉴를 보고 주문하는 것으로 비유하자면, REST에서는 특정 규칙에 따라 서버에게 원하는 데이터를 요청하고, 서버는 그 요청에 맞는 데이터를 제공한다.

 

REST의 구성 요소

  1. 자원(Resource): URI(Uniform Resource Identifier)로 식별.
  2. 행위(Verb): HTTP 메서드를 통해 자원에 대한 작업 정의.
  3. 표현(Representation): JSON, XML 등으로 자원의 상태를 표현.

식당의 주문 시스템을 통한 비유

  • 자원(Resource): 식당의 메뉴에 있는 요리들. 예를 들어, "피자", "파스타" 같은 것들이 자원이다. REST에서는 이런 자원을 URI(예: /pizza, /pasta)로 표시한다.
  • 행위(Verb): 손님이 메뉴를 보고 행동하는 방식. 예를 들어, "피자를 주문하기", "파스타를 확인하기", "피자를 취소하기" 등이 있다. REST에서는 이 행동을 HTTP 메서드(GET, POST, PUT, DELETE 등)로 표현한다.
  • 표현(Representation): 요리가 어떻게 나오는지에 대한 정보. 예를 들어, 피자가 어떤 재료로 만들어졌는지 설명하거나 사진을 보여주는 것처럼, REST에서는 JSON이나 XML 같은 형식으로 데이터를 표현한다.

 

REST의 특징

  • 무상태성 (Stateless): 각 요청은 독립적으로 처리되며 서버는 이전 요청의 상태를 저장하지 않음.
  • 캐시 가능성 (Cacheable): 응답 데이터를 캐싱하여 성능 향상 가능.
  • 계층화 시스템 (Layered System): 클라이언트와 서버 사이에 중간 계층을 둘 수 있음.
  • 일관된 인터페이스 (Uniform Interface): 표준화된 방식으로 자원에 접근 가능.

 

RESTful API란?

RESTful API는 위 식당 시스템(REST 원칙)을 컴퓨터가 이해할 수 있도록 만든 규칙이다.

클라이언트(손님)가 서버(식당)에게 특정 요청을 보내면, 서버는 그 요청에 맞는 정보를 제공한다.

 

HTTP 메서드와 CRUD 매핑

  • POST: 데이터 생성(Create)
  • GET: 데이터 조회(Read)
  • PUT/PATCH: 데이터 수정(Update)
  • DELETE: 데이터 삭제(Delete)

 

손님과 서버의 대화를 통한 비유

  1. 손님: "피자 메뉴 좀 보여주세요!"
    • 클라이언트가 서버에게 GET 요청을 보낸다.
    • 서버는 피자 정보를 JSON 형식으로 전달한다.
  2. 손님: "새로운 피자를 추가해주세요!"
    • 클라이언트가 서버에게 POST 요청을 보낸다.
    • 서버는 새로운 피자를 메뉴에 추가한다.
  3. 손님: "피자 토핑을 바꿔주세요!"
    • 클라이언트가 서버에게 PUT 요청을 보낸다.
    • 서버는 피자의 정보를 업데이트한다.
  4. 손님: "이 피자 삭제해주세요!"
    • 클라이언트가 서버에게 DELETE 요청을 보낸다.
    • 서버는 해당 피자를 메뉴에서 삭제한다.

 

RESTful API 설계 규칙

식당 메뉴판을 만들 때도 규칙이 있듯이, RESTful API를 설계할 때도 몇 가지 규칙이 있다.

  1. URI는 명사를 사용하고 소문자로 작성.
    • 예: /users (✅), /GetUsers (❌)
  2. 마지막 슬래시(/)를 포함하지 않음.
    • 예: /users (✅), /users/ (❌)
  3. 언더스코어 대신 하이픈(-) 사용.
    • 예: /user-profile (✅), /user_profile (❌)
  4. 파일 확장자를 포함하지 않음.
    • 예: /photos (✅), /photos.jpg (❌)

 

장점

  • HTTP 표준을 활용하여 별도의 인프라 없이 사용 가능.
  • 다양한 플랫폼에서 범용적으로 사용 가능. (웹 브라우저, 모바일 앱 등)
  • 서버와 클라이언트의 역할이 명확히 분리됨.

 

단점

  • 표준이 엄격히 정의되지 않아 설계 방식에 따라 품질 차이가 발생할 수 있음. (설계가 제대로 되지 않으면 사용하기 어려움)
  • HTTP 메서드가 제한적이며, 복잡한 작업에는 적합하지 않을 수 있음.