RESTful API

애옹이·2026년 9월 28일

REST란 무엇일까?

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부여하는 소프트웨어 아키텍처. 즉 클라이언트와 서버가 데이터를 주고받는 방식을 설계하는 하나의 원칙이자 스타일이에요.

RESTful API는 이 REST 원칙을 잘 따르는 API를 말해요.

REST의 핵심 아이디어 : 자원(Resource)을 URL로 표현

REST의 가장 중요한 개념은 모든 데이터(자원, Resource)를 URL로 표현하고, 그 자원에 대한 행동(조회/생성/수정/삭제)은 HTTP 메서드로 표현한다는 점이에요.

RESTful한 API를 위한 설계 원칙

  1. 클라이언트 / 서버 구조 :
    클라이언트(화면을 보여주는 쪽)와 서버(데이터를 관리하는 쪽)가 명확히 분리되어 있어야 해요. 그래야만 프론트엔드가 React에서 Next.js로 바뀌어도 익스프레스 백엔드는 그대로 둘 수 있고, 반대로 백엔드 로직이 바뀌어도 프론트엔드는 API 응답 형태만 똑같다면 아무런 영향도 받지 않기 때문이에요.

  2. 무상태성 (Stateless) :
    서버는 클라이언트의 이전 요청 상태를 기억하지 않아야 하고, 매 요청마다 그 요청 자체에 필요한 모든 정보가 담겨 있어야 해요. 이 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미해요. 무상태성이 중요한 이유는 서버 입장에서 보면, 누가 어떤 상태였는지? 계속 기억해야할 경우 서버를 여러대로 늘릴 때 스케일링이 복잡해지는 문제가 생기기 때문이에요.

  3. 캐시처리 가능성 (Cacheable) :
    서버의 응답에는 이 응답을 캐시해도 되는지에 대한 정보가 명시되어 있어야 해요. 우리가 배운 revalidate 개념도 결국 이 데이터를 얼마나 오래 캐시해도 되는지에 대한 정보를 정하고 있어요.

  4. 일관된 인터페이스 (Uniform Interface) :
    이게 REST의 정체성이라고 할 만큼 중요해요. 다음의 몇가지 세부 규칙으로 나뉘어요.

  • 자원의 식별 : 모든 자원은 URL로 고유하게 식별할 수 있어요.
  • 표현을 통한 자원 조작 : 클라이언트는 서버가 보내준 데이터의 표현을 통해 자원을 다뤄요. 실제 데이터베이스에 직접 접근하는게 아니라, JSON이라는 표현물을 서로 주고 받는거죠.
  • 자기 서술적 메시지 : 응답 자체에 이게 뭔지 설명해주는 정보가 담거야 해요. 예를 들면 Content-Type: application/json 헤더로 이 응답은 JSON 형식이라는걸 알려주는 거에요.
  • HATEOAS : 응답 안에 다음에 할 수 있는 행동에 대한 링크가 포함되어야 한다는 원칙인데, 실무에서는 엄격하게 지켜지지 않는 경우가 많아요.
  1. 계층화 시스템 (Layered System) :
    클라이언트는 자신이 서버와 직접 통신하는지, 아니면 중간에 프록시 / 로드밸런서 같은 게 껴있는지 알 필요가 없어야 해요. 우리가 이번에 Next.js에서 배운 프록시(API Route) 라는 개념도 이 원칙과 연결돼요.

  2. 온디맨드 코드 (Code on Demand) :
    REST 아키텍처 스타일에서 서버는 클라이언트에게 실행 가능한 코드를 보내서, 클라이언트의 기능을 일시적으로 확장하거나 사용자가 지정할 수 있다는 원칙이에요. 이건 유일하게 선택적인 제약이라서, 지키지 않아도 REST를 위반하는 게 아니에요.

RESTful API를 사용하면 어떤 이점이 있을까?

  1. 확장성 : REST API를 구현하는 시스템은 REST가 클라이언트와 서버 상호 작용을 최적화하기 때문에 효율적으로 크기를 조정할 수 있어요. 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거할 수 있어요. 그리고 잘 관리된 캐싱은 일부 클라이언트와 서버간의 상호작용을 부분적으로 또는 완전히 제거할 수도 있죠. 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서도 확장성을 유지하게 할 수 있다는 장점이 있어요.

  2. 유연성 : RESTful 웹 서비스는 완전하게 클라이언트와 서버 분리를 지원해요. 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리할 수 있어요. 서버 애플리에키션의 플랫폼과 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않아요. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시키는데, 예를 들면, 개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수도 있죠.

  3. 독립성 : REST API는 사용되는 기술과 독립적으로 작용해요. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있어요. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수도 있습니다.

참고자료 : https://aws.amazon.com/ko/what-is/restful-api/
https://velog.io/@somday/RESTful-API-%EC%9D%B4%EB%9E%80

profile
풀스택 웹 개발자가 목표인 애옹이

0개의 댓글