아키텍처 스타일, RESTful API의 정의

Gyutae Ha·2024년 12월 6일
post-thumbnail

REST(Representational State Transfer)는 분산 시스템을 설계하기 위한 아키텍처 스타일로, 2000년 로이 필딩(Roy Fielding)의 박사 논문에서 처음 정의되었습니다. RESTful API는 이 REST 아키텍처 스타일을 따르는 애플리케이션 프로그래밍 인터페이스(API)를 의미합니다. REST는 특정 기술이나 프로토콜에 종속되지 않지만, HTTP와 같은 웹 표준 프로토콜과 함께 사용되는 경우가 많습니다.

RESTful API의 정의

RESTful API는 자원(Resource)을 중심으로 설계된 API로, 클라이언트와 서버 간의 통신을 단순하고 확장 가능하며 효율적으로 만들기 위해 REST의 원칙과 제약 조건을 준수합니다. RESTful API는 자원을 URI로 식별하고, HTTP 메서드와 상태 코드를 활용하여 자원의 상태를 전송하거나 조작합니다.


REST의 핵심 개념

RESTful API는 다음과 같은 개념과 원칙에 기반합니다:

1. 자원(Resource)

  • 모든 것은 자원으로 간주됩니다. 자원은 URI(Uniform Resource Identifier)로 고유하게 식별됩니다.
  • 예:
    • /users → 사용자 목록
    • /users/123 → ID가 123인 특정 사용자

2. 표현(Representation)

  • 자원은 클라이언트와 서버 간에 전송될 때 표현 형태로 전달됩니다.
  • 표현은 JSON, XML, HTML 등 다양한 형식으로 제공될 수 있습니다.
  • 예: JSON 형식으로 사용자 데이터를 반환:
    {
      "id": 123,
      "name": "John Doe",
      "email": "john.doe@example.com"
    }

3. 상태 전이(State Transfer)

  • 클라이언트는 서버와의 상호작용을 통해 애플리케이션 상태를 전이합니다.
  • 클라이언트 요청은 필요한 모든 정보를 포함해야 하며, 서버는 요청에 따라 응답을 반환합니다.

REST의 아키텍처 제약 조건

RESTful API는 다음 제약 조건을 준수해야 합니다:

1. 클라이언트-서버 구조

  • 클라이언트와 서버는 서로 독립적으로 동작하며, 클라이언트는 UI 및 요청을 처리하고 서버는 데이터 저장 및 비즈니스 로직을 처리합니다.
  • 장점: 독립적인 개발 및 유지보수 가능.

2. 무상태성(Statelessness)

  • 각 요청은 독립적이며, 서버는 클라이언트의 이전 요청 상태를 저장하지 않습니다.
  • 모든 요청에는 필요한 모든 정보(예: 인증 토큰)가 포함되어야 합니다.
  • 장점: 확장성과 안정성 증가.

3. 캐시 가능(Cacheable)

  • 응답은 캐시 가능해야 하며, 이를 통해 네트워크 트래픽 감소 및 성능 향상이 가능합니다.
  • HTTP 헤더(Cache-Control, ETag)를 사용하여 캐싱 정책을 정의합니다.

4. 통합된 인터페이스(Uniform Interface)

  • RESTful API는 일관되고 표준화된 인터페이스를 제공해야 합니다.
  • 이를 통해 클라이언트와 서버 간의 상호작용이 단순화됩니다.
  • 주요 요소:
    • 자원의 고유 식별성 (URI)
    • HTTP 메서드 활용 (GET, POST, PUT, DELETE 등)
    • 표준 상태 코드 사용 (200 OK, 404 Not Found 등)

5. 계층화 시스템(Layered System)

  • 클라이언트와 서버 사이에 중간 계층(예: 로드 밸런서, 프록시)을 둘 수 있습니다.
  • 중간 계층은 보안 강화, 로드 분산 등의 역할을 수행할 수 있습니다.

6. 코드 온 디맨드(Optional)

  • 필요할 경우 서버에서 실행 가능한 코드를 클라이언트에 제공할 수 있습니다(예: JavaScript).
  • 이 제약 조건은 선택 사항입니다.

RESTful API의 특징

  1. 자원 중심 설계:

    • URI를 통해 자원을 명확히 식별하며, CRUD 작업은 HTTP 메서드를 활용해 수행됩니다.
    • 예:
      • GET /users → 사용자 목록 조회
      • POST /users → 새 사용자 생성
      • PUT /users/123 → ID가 123인 사용자 업데이트
      • DELETE /users/123 → ID가 123인 사용자 삭제
  2. 표준화된 HTTP 메서드 및 상태 코드:

    • RESTful API는 HTTP 메서드(GET, POST 등)와 상태 코드(200 OK, 404 Not Found 등)를 활용하여 명확한 의사소통을 제공합니다.
  3. 확장성:

    • 무상태성과 계층화 시스템 덕분에 확장성이 뛰어나며 대규모 시스템에서도 효과적으로 동작합니다.
  4. 플랫폼 독립성:

    • RESTful API는 JSON이나 XML과 같은 표준 데이터 형식을 사용하므로 다양한 플랫폼에서 사용할 수 있습니다.

예시: RESTful API 설계

사용자 관리 시스템의 RESTful API 예시:

HTTP 메서드URI설명응답 상태 코드
GET/users모든 사용자 조회200 OK
GET/users/123특정 사용자(ID=123) 조회200 OK
POST/users새 사용자 생성201 Created
PUT/users/123특정 사용자 업데이트200 OK
DELETE/users/123특정 사용자 삭제204 No Content

결론

RESTful API는 분산 시스템 설계에서 단순성과 확장성을 강조하는 아키텍처 스타일입니다. HTTP 프로토콜과 함께 사용될 때 REST의 원칙과 제약 조건을 충족하며, 자원 중심 설계와 표준화된 인터페이스를 통해 다양한 플랫폼에서 효율적으로 작동할 수 있습니다. RESTful API는 현재 웹 애플리케이션 개발에서 가장 널리 사용되는 방식 중 하나로 자리 잡았습니다.

profile
Search Engineer

0개의 댓글