본문 바로가기
delphi

REST(Representational State Transfer) 아키텍처에 대한 심층 분석

by 천지조율 2024. 8. 7.

서론

**REST(Representational State Transfer)**는 현대 웹서비스(Web Service) 아키텍처에서 중요한 역할을 하고 있으며, 이미 구글, 야후, 아마존, 마이크로소프트 등 다수의 주요 IT 기업들이 REST를 채택하여 데이터 공유 및 통합을 수행하고 있습니다. REST는 간단한 기술적 배경만으로도 쉽게 구현 가능한 아키텍처로, HTTP와 XML 같은 표준 기술을 기반으로 합니다.

REST의 기본 아키텍처

REST의 정의와 역사

**REST(Representational State Transfer)**는 Roy Fielding이 제안한 아키텍처 스타일로, 웹의 본래 설계 우수성을 최대한 활용하기 위해 고안되었습니다. Fielding은 웹이 가지고 있는 다양한 장점을 충분히 활용하지 못하고 있다는 가정 하에 REST를 소개했습니다.

REST의 구성 요소

리소스(Resource)

액션(Action)

  • HTTP 메서드를 통해 리소스에 대한 행위를 정의합니다.
  • CRUD 연산을 HTTP 메서드로 매핑:
    • POST: 생성(Create)
    • GET: 조회(Read)
    • PUT: 수정(Update)
    • DELETE: 삭제(Delete)

REST의 장단점

장점

  • 기존 웹 인프라 활용: 대부분의 웹 서비스 클라이언트가 사용하는 80포트(HTTP 포트)를 그대로 사용할 수 있습니다.
  • 별도 스펙 불필요: REST는 별도의 스펙 정의 없이 HTTP URI와 메서드만 지키면 됩니다.

단점

  • 표준 부재: REST는 표준 프로토콜이 아닌 아키텍처 스타일이므로, 각 서비스 간에 자체적인 표준을 정의하고 공유해야 합니다.
  • 다중 키 표현의 어려움: REST는 다중 키를 표현하는 데 어색할 수 있어, 대체 키(Alternative Key) 사용을 고려해야 합니다.

REST 설계 시 고려사항

리소스 관계 표현

  • Href 링크를 통해 리소스 간 관계를 표현합니다.

버전 관리

  • API의 버전 관리를 위한 방법을 고려해야 합니다.

네이밍 규칙

  • 일관성 있는 네이밍 규칙을 통해 리소스와 액션을 명확히 정의해야 합니다.

추가 설계 고려사항

  • RESTful 접근 방식: 자원을 중심으로 한 설계가 필요합니다.
  • 메시지 표현: XML 외에도 JSON, YAML 등 다양한 포맷을 활용할 수 있습니다.

REST에 대한 오해와 진실

REST는 HTTP + XML 프로토콜이 아니다

  • REST는 웹의 특성을 잘 활용하여 자원을 리소스로 표현하는 아키텍처입니다. XML은 필수가 아니며, JSON이나 YAML 등 다른 표현 방식도 가능합니다.

REST는 SOAP보다 쉽다?

  • REST는 표준이 없어 구현이 더 쉬워 보일 수 있지만, SOAP은 잘 정의된 프로토콜을 사용해 예측 가능하고 디코딩이 용이합니다. REST는 데이터를 일일이 파싱해야 하는 불편함이 있습니다.

REST의 전망

국내에서는 아직 REST의 수요가 많지 않지만, 해외 주요 사이트들은 이미 REST 기반의 아키텍처를 통해 서비스를 제공하고 있습니다. 예를 들어 Amazon은 기존의 웹 서비스 기반 Open API를 REST 기반으로 마이그레이션할 계획을 가지고 있습니다.

표준화와 향후 전망

REST는 현재 Defactor 표준으로 자리잡고 있으며, J2EE Spec의 JAX-RS(JSR311)로 추가되어 다음 JEE6 버전에 포함될 예정입니다. REST의 자유도는 매우 높으며, 이는 앞으로 큰 장점이 될 수 있습니다.

결론

REST는 간단한 기술적 배경으로도 강력한 웹 서비스 아키텍처를 제공하며, 기존의 웹 인프라를 그대로 활용할 수 있는 장점을 가지고 있습니다. 비록 표준이 없다는 점에서 단점이 될 수 있지만, 각 서비스 간에 자체적인 표준을 정의하여 활용할 수 있습니다. REST를 통해 웹의 장점을 최대한 활용하여 다양한 서비스와 데이터를 통합하고 공유하는 데 유용한 아키텍처로 자리잡을 것입니다.