[Daily morning study] RESTful API의 6가지 원칙

#daily morning study

Image


RESTful API의 6가지 원칙

REST(Representational State Transfer)는 웹 서비스 아키텍처 스타일 중 하나로, 클라이언트와 서버 간의 상호작용을 정의하는 데 있어서 중요한 원칙을 가지고 있습니다. RESTful API는 이러한 원칙을 준수하여 효율적이고 일관된 방식으로 데이터를 제공합니다. 이번 학습 자료에서는 RESTful API의 6가지 원칙에 대해 깊이 있게 살펴보겠습니다.


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

클라이언트-서버 구조는 REST의 기본 개념으로, 클라이언트와 서버는 서로 독립적으로 작동합니다. 클라이언트는 UI와 사용자 인터랙션을 담당하고, 서버는 데이터 처리 및 저장을 담당합니다.

  • 장점: 역할 분리가 이루어지므로 클라이언트와 서버에서 별도로 기술 스택을 변경해도 서로 영향을 미치지 않습니다.
  • 예시: 웹 애플리케이션에서 클라이언트는 사용자 입력을 받고, 해당 입력을 서버에 전달하여 결과를 받는 구조.

2. 무상태 (Stateless)

RESTful API는 무상태성을 갖습니다. 즉, 서버는 클라이언트의 상태를 저장하지 않으며, 각 요청은 독립적입니다. 모든 요청은 필요한 정보를 담아야 하며, 필요한 상태를 서버로 전달합니다.

  • 장점: 서버의 부담이 줄어들고, 확장성이 향상됩니다. 또한 유지보수가 용이해집니다.
  • 예시: 클라이언트가 서버에 로그인 요청을 할 때, 각 요청에 인증 정보를 포함시켜야 함.
POST /api/login HTTP/1.1
Content-Type: application/json

{
  "username": "user",
  "password": "pass"
}

3. 캐시 처리 가능 (Cacheable)

RESTful API의 응답은 캐시가 가능해야 합니다. 이를 통해 성능을 향상시킬 수 있으며, 동일한 요청에 대한 반복적인 처리를 피할 수 있습니다.

  • 특징: 서버는 각 응답에 캐시 가능 여부를 명시할 수 있습니다. 지연 시간과 대역폭을 줄이는 데 효과적입니다.
  • 예시: HTTP 응답 헤더에 Cache-Control을 포함하여 사용자가 다음 요청 전까지 응답을 캐시할 수 있도록 합니다.
Cache-Control: max-age=3600

4. 일관된 인터페이스 (Uniform Interface)

일관된 인터페이스 원칙은 RESTful 시스템 간의 상호작용을 단순화합니다. REST API는 고유한 URI를 사용해 자원에 접근하며, HTTP 메서드를 통해 자원을 조작합니다.

  • HTTP 메서드:
    • GET: 자원 조회
    • POST: 자원 생성
    • PUT: 자원 업데이트
    • DELETE: 자원 삭제
  • 예시: GET /api/users는 모든 사용자 정보를 조회하고, POST /api/users는 새로운 사용자를 생성합니다.

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

계층화된 시스템은 클라이언트가 직접 서버와 상호작용하는 것이 아니라, 여러 중간 계층을 통해 상호작용하도록 설계됩니다. 이러한 구조는 시스템을 더 유연하게 하고 보안을 강화합니다.

  • 장점: 클라이언트는 대리인 서버 또는 프록시를 통해 서버에 접근할 수 있으므로, 네트워크 트래픽을 최적화하거나 보안을 강화할 수 있습니다.
  • 예시: 로드 밸런서와 캐싱 서버를 두어 효율성을 높이고 응답 시간을 줄이는 구조.

6. 자원 기반 (Resource-Based)

RESTful API는 자원(예: 사용자, 상품 등)에 기반하여 설계됩니다. 각 자원은 URI로 접근할 수 있으며, 자원 자체가 정보를 갖고 있어야 합니다. 자원은 생성, 읽기, 수정 및 삭제(CRUD) 작업이 가능합니다.

  • 장점: 자원 중심의 설계를 통해 API를 직관적으로 이해할 수 있습니다.
  • 예시: GET /api/products/1은 ID가 1인 상품의 정보를 조회합니다.
GET /api/products/1 HTTP/1.1

결론

잘 설계된 RESTful API는 클라이언트-서버 통신의 효율을 높이고, 개발자와 사용자 모두에게 좋은 경험을 제공합니다. 위에서 살펴본 6가지 원칙을 바탕으로 API를 설계하고 개발한다면, 더욱 안정적이고 확장성이 뛰어난 시스템을 구축할 수 있을 것입니다. 각 원칙을 바탕으로 다양한 응용 프로그램을 설계하고, 실제 따른 사례를 통해 이해도를 높여보세요.