수업이나 인터넷에서 API 관련된 소리를 듣게 되면, REST, RESTful API에 대해서 많이 듣게 된다.
이름이 굉장히 비슷한 이 친구들 . . . 대체 무슨 차이인걸까?

🚀 REST (REpresentational State Transfer)
: REST는 웹 서비스가 어떻게 동작해야 하는 지에 대한 아키텍처 스타일 또는 설계 원칙
: 클라이언트와 서버 간의 상호작용을 규정하며, 여러 가지 원칙들과 제약조건들을 가진다.
: Statelesss와 캐시 가능한 응답을 지향
🛠️ RESTful API
: REST의 원칙을 잘 지켜서 만든 API
: 즉, REST를 웹에 실제로 구현한 API
📌 RESTful API의 특징
URI는 명사 중심 (/users, /posts/1/comments)
HTTP 메서드를 의미에 맞게 사용 (GET: 조회, POST: 생성, PUT: 수정, DELETE: 삭제)
URI에 동사나 쿼리 파라미터 남용하지 않음
ex)
❌ /getUser, /createUser
✅ GET /users, POST /users
상태를 서버에 저장하지 않음 (Stateless)
JSON을 주로 사용
✅ RESTful API의 장점
- 표준화된 HTTP 사용
HTTP 메서드(GET, POST, PUT, DELETE 등)를 의미에 맞게 사용함
전 세계적으로 익숙한 방식이기 때문에 이해하기 쉽고 일관성 있음
2. URI를 통해 자원을 명확하게 표현
자원 중심의 설계 (/users/1 → ID가 1인 사용자)
직관적인 구조로 API 문서 없이도 어느 정도 파악 가능
3. 무상태성(Stateless)
각 요청은 독립적이기 때문에 서버 확장성(Scale-out)에 유리
세션을 서버에 저장하지 않아 서버 부담이 줄어듦
- 클라이언트-서버 구조
프론트엔드와 백엔드가 명확히 분리되어 유지보수에 용이함
여러 클라이언트(웹, 모바일 등)에서 같은 API 재사용 가능
- 캐싱(Caching) 용이
HTTP 캐싱 메커니즘 활용 가능 (예: GET 요청 결과를 캐싱)
서버 부하 감소 및 응답 속도 향상 가능
❌ RESTful API의 단점
- 복잡한 관계 표현이 어려움
REST는 자원 단위로 처리되기 때문에 관계형 데이터(예: 사용자와 주문 간 관계)를 다루기 까다로움
이를 해결하려면 복잡한 URI 구조 또는 다수의 요청이 필요함
- 과도하게 정형화된 URI 설계 요구
REST 원칙을 엄격히 따르다 보면, 유연성이 떨어질 수 있음
작은 기능을 위해 전체 설계를 변경해야 하는 경우도 있음
- 버전 관리 불편
URI에 버전을 넣는 방식(/v1/users) 등 다양한 방식이 있지만 일관성 유지가 어려움
- 무상태성이 항상 장점은 아님
인증/인가를 위해 매번 토큰 등을 보내야 하므로 클라이언트 부담 증가
세션 기반 처리가 필요한 경우 RESTful 구조가 불편함
- 실시간 양방향 통신에 부적합
REST는 기본적으로 요청-응답 구조 → 채팅, 게임, 실시간 알림 같은 기능에는 WebSocket이나 GraphQL Subscriptions이 더 적합