기억의 실마리
2023. 12. 25. 15:04

API

Application Programming Interface의 약자로 응용 프로그램에서

운영체제나 프로그래밍 언어가 제공하는 기능을 제어 가능하도록

만든 인터페이스이며, 프로그램들이 서로 상호작용하는 것을

돕는 매개체라고 볼 수 있다.

 

REST

HTTP를 기반으로 필요한 자원에 접근하는 방식을 정의해둔

아키텍처이다. REST는 웹의 기존 기술과 HTTP 프로토콜을 그대로

활용하기 때문에 웹의 장점을 최대한 활용가능한 것이 특징이다.

 

REST의 속성

  1. 서버의 모든 자원은 클라이언트가 접근할 수 있는 고유 URI가 존재한다.
  2. 클라이언트가 요청할 때마다 필요한 정보를 보내주기 때문에 세션 정보를
    보관할 필요가 없어 서비스의 자유도가 높아지고 유연한 아키텍처 적용이 가능하다.
  3. HTTP 메서드를 사용한다.(GET, POST, PUT, DELETE 등)
  4. 서비스 내의 자원은 연관된 자원들과 연결되어 표현되어야한다.

REST는 HTTP메서드를 통해 자원을 처리하도록 설계된 아키텍처이다.

 

 

REST의 구성 요소

자원(Resource)

모든 자원은 서버에 존재하며 고유 ID를 가지고 있으며,

자원의 위치를 식별하는 URI(Uniform Resource Identifier)를 통해

자원에 접근할 수 있다.

 

메서드(Method)

  • GET: 리소스를 조회
  • POST: 리소스를 생성
  • PUT: 리소스를 전체 수정
  • PATCH: 리소스를 일부 수정
  • DELETE: 리소스를 삭제

 

메시지(Message)

HTTP header, body, 응답 상태 코드 등으로 구성되어 있다.

  • header: body에 어떤 형식으로 데이터가 담겼는지 표시
  • body: 자원에 대한 정보를 JSON, XML 등으로 전달

응답 상태 코드는 200 ~ 500 사이의 숫자로 클라이언트의

요청에 대한 상태를 나타낸다.

 

 

REST의 특징

1. Server-Client 구조

클라이언트는 자원을 요청하고 서버는 자원을 가지고 있으며

API를 제공하여 비즈니스 로직처리 및 저장을 책임진다.

 

2. Stateless(무상태)

HTTP는 무상태이며 REST는 HTTP를 기본으로 하기 때문에 무상태이다.

클라이언트의 상태(State)를 서버에 저장하지 않는 것을 무상태라고 표현하고

서버에서 클라이언트의 요청을 완전히 별개의 것으로 인식하고 처리한다.

따라서 이전의 요청이 다음의 요청에 연관되지 않고 처리 방식에 일관성을

부여하고 부담이 줄어든다.

 

3. Cacheable(캐시 처리 가능)
HTTP의 캐싱 기능을 적용할 수 있어 대량의 요청을 효율적으로 처리할 수 있다.

캐시를 활용하여 응답 시간이 빨라지고 성능, 서버의 자원 이용률을 향상할 수 있다.
 
4. Layered System(계층화)
클라이언트는 REST API 서버만 호출하며 REST 서버는 다중 계층 구성이 가능하다.

API 서버는 순수 비즈니스 로직을 수행하고 이의 앞단에서 보안, 로드 밸런싱, 암호화,

사용자 인증 등을 활용해 구조에 유연성을 줄 수 있다.
 
5. Code-On-Demand
서버로부터 스크립트를 받아서 클라이언트에서 실행한다.

(필수 요건 아님)
 
6. Uniform Interface(인터페이스 일관성)
URI를 통해 자원 조작을 통일되고 한정적인 인터페이스로 수행한다.

HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하며 특정

언어나 기술에 종속되지 않는다.

 

 

REST API의 장단점

장점

  1. 독립적인 언어와 플랫폼
  2. REST API 메시지를 통해 의도를 쉽게 파악 가능
  3. REST가 지원하는 프레임워크나 언어 등 없이 구현 가능
  4. HTTP로 기존 웹 인프라를 사용 가능
  5. 서버와 클라이언트의 역할을 명확하게 분리
  6. 다양한 서비스 디자인에서 생길 수 있는 문제 최소화

단점

  1. 표준이 존재하지 않음(보안, 정책 등)
  2. HTTP프로토콜만 사용 가능

 

 

마치며...

얼마 전 회사에 서류합격을 통지받고 면접을 볼 수 있는 기회가 있었다. 지금껏 개발을 해왔지만 정작 이론에 대한 부분은 약하다는 것을 느끼게 되었고 면접결과 역시 좋지 못했다. 한번에 잘 되리라 생각하진 않았지만 생각했던 것 보다 모르는 이론이 너무나도 많았던 것 같다... 기술면접에서 REST API의 특징을 말하는 부분에서 시원하게 답변하지 못했고 이 포스팅을 시작으로 이론공부도 꾸준히 해야겠다!

'Computer Science' 카테고리의 다른 글

[ Circular Dependencies ] 의존성 순환  (0) 2024.02.27