REST(Representational State Transfer)란?
웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 스타일이다. HTTP 프로토콜을 기반으로 자원을 정의하고 이를 처리하는 구조로 설계되며, 자원(Resource)의 상태(Representation)를 클라이언트와 서버 간에 주고받는다.
특징
- 자원(Resource): 관리 대상인 데이터나 소프트웨어다. (예를 들어, 학생 정보가 자원이면 'students'가 이를 표현한다.)
- 표현(Representation): 자원의 상태를 JSON, XML 등으로 전달한다.
- HTTP Method 활용: CRUD 작업을 POST, GET, PUT, DELETE 등의 HTTP 메서드로 수행한다.
- URI(Uniform Resource Identifier): 고유한 자원을 식별하기 위한 URL이다.
- Stateless(무상태성): 요청 간에 클라이언트 상태를 저장하지 않는다.
- Cacheable(캐시 가능): HTTP 캐시를 활용해 성능을 향상시킨다.
장점
1. HTTP 표준을 활용하므로 추가 인프라가 필요하지 않다.
2. 다양한 플랫폼에서 호환 가능하다.
3. 서버와 클라이언트의 역할을 명확히 분리할 수 있다.
단점
1. 명확한 표준이 없어 구현 방식이 다양하다.
2. HTTP 메서드가 제한적이다.
3. 복잡한 관계를 처리하기 어렵다.
REST API란?
REST API는 REST 원칙을 기반으로 설계된 API를 의미한다. HTTP 프로토콜을 사용하여 자원을 클라이언트와 서버 간에 주고받는 방식으로 동작한다.
특징
- HTTP 기반: 모든 데이터 교환이 HTTP 프로토콜을 통해 이루어진다.
- 다양한 포맷 지원: JSON, XML 등 여러 데이터 형식을 사용할 수 있다.
- 범용성: 다양한 클라이언트(웹, 모바일 등)에서 활용할 수 있다.
- 확장성: 사내 시스템과 외부 시스템 간의 연동 및 확장이 용이하다.
장점
1. REST의 장점을 대부분 포함한다.
2. 기존 웹 기술과 쉽게 통합 가능하다.
단점
1. REST 원칙을 완벽히 준수하지 않을 경우 비효율적일 수 있다.
2. 설계에 따라 이해하기 어려운 구조가 될 수 있다.
사용 방법
1. 자원을 URI로 정의한다.
2. 자원에 대한 CRUD 작업을 HTTP Method로 구현한다.
3. 요청과 응답은 JSON이나 XML 형식으로 데이터를 주고받는다.
RESTful API란?
RESTful API는 REST 원칙을 충실히 따르는 API를 의미한다. RESTful은 RESTful한 설계 규칙을 따르는 것을 목표로 하며, 일관성 있고 이해하기 쉬운 API를 만든다.
특징
- 명확한 URI 설계: 자원을 고유하게 식별하고 직관적인 구조를 따른다.
- HTTP Method 활용: CRUD 작업을 각 메서드로 명확히 구분한다.
- Stateless(무상태성): 요청 간 상태를 저장하지 않아 구현이 간단하다.
- 표준화된 데이터 교환: JSON, XML 등을 사용한다.
장점
1. 일관성과 호환성이 높아 유지보수가 용이하다.
2. HTTP 표준에 따른 설계로 다양한 환경에서 쉽게 사용할 수 있다.
3. API 의도를 쉽게 이해할 수 있다.
단점
1. 설계와 구현이 복잡할 수 있다.
2. 모든 상황에서 성능을 최적화하는 데 제약이 있을 수 있다.
REST API 사용 예시
블로그 API
- GET /posts: 게시글 목록 조회
- POST /posts: 새 게시글 작성
- PUT /posts/{id}: 게시글 수정
- DELETE /posts/{id}: 게시글 삭제
도서 관리 API
- GET /books: 도서 목록 조회
- POST /books: 새로운 도서 추가
- PUT /books/{id}: 도서 정보 수정
- DELETE /books/{id}: 도서 삭제
결론
REST, REST API, RESTful API는 현대 애플리케이션 개발에서 중요한 역할을 하는 아키텍처와 설계 방식이다. RESTful API는 REST 원칙을 충실히 따르며, 설계가 명확하고 유지보수가 쉬운 API를 만드는 데 중점을 둔다. 프로젝트의 요구 사항에 맞춰 REST와 RESTful 방식을 적절히 활용하는 것이 중요하다.
'React' 카테고리의 다른 글
[React] React에서 Drag & Drop 구현 – react-beautiful-dnd 사용 (0) | 2025.02.08 |
---|---|
[React] fixed로 고정된 위치, 알고 보니 뷰포트 기준 (0) | 2025.01.22 |
[React] React에서 Css module 적용하기 (0) | 2025.01.21 |
[React] 프로젝트 폴더 구조 정리부터 퍼블리싱까지(작업 기록) (0) | 2025.01.18 |
[React] 기존 React 프로젝트에 TypeScript 설치하기 (0) | 2025.01.15 |