개발자 취업준비/springboot

API와 REST API

naspeciallist 2025. 2. 13. 20:08


이 글은 스프링부트3 백엔드 개발자 되기 책을 바탕으로 공부한 내용을 정리한 게시글 입니다.

 

 

1. API란?


 

API란 프로그램 또는 서비스 간에 데이터를 주고받고 기능을 사용할 수 있도록 정해진 규칙이나 인터페이스를 의미 합니다. 예를 들어 손님(클라이언트), 점원(API), 주방(서버)가 있다고 가정해보겠습니다.

그러면 먼저 손님이 점원에게 음식을 주문합니다. 그러면 점원이 주방에 다시 음식을 주문하게 되고 주문한 음식을 주방으로 부터 받게 됩니다. 그러면 다시 점원이 손님의 주문에 대한 음식을 손님에게 전달하게 됩니다.

 

여기서 손님은 클라이언트 주방은 서버라고 생각하고 중간에 있는 점원을 API라고 생각하면 됩니다. 다시 이 예시를 웹사이트에 적용해보겠습니다. 저희는 웹사이트의 주소를 입력해서 요청을 합니다. 그러면 API는 이 요청을 받아서 서버에 전달해주고 반환값을 다시 서버로부터 전달 받습니다. API는 클라이언트에게 요청에 대한 최종결과물을 반환하게 되고 그러면 저희는 브라우저에 보내준 요청에 대한 결과를 확인 할 수 있게 됩니다.

 

 

2. 웹의 장점을 최대한 활용하는 REST API


 

REST API는 웹의 장점을 최대한 활용하는 API 입니다.  REST API는 API의 한 형태이며, REST(Representational State Transfer) 아키텍처 스타일을 따르는 API를 의미합니다.  

 

REST는 2000년 로이 필딩(Roy Fielding)이 제안한 개념으로, 웹에서 데이터를 효율적으로 주고받기 위한 설계 원칙을 정의한 것입니다.  REST는 Representational State Transfer을 줄인 표현입니다. 풀어서 말하면 자원의 이름으로 구분해 자원의 상태를 주고받는 API 방식입니다. 쉽게 생각해서 명확하고 이해하기 쉬운 API라고 생각하시면 됩니다. REST API는 URL의 설계방식으로 이 설계 방식을 따랐을 때 얻을 수 있는 장점이 있고 단점도 있습니다.

 

REST API의 특징

REST API는 서버/클라이언트 구조, 무상태, 캐시처리가능, 계층화, 인터페이스 일관성과 같은 특징이 있습니다. 

 

  1. 서버/클라이언트 구조
    • 서버/클라이언트 구조에서는 서버(데이터 제공자)와 클라이언트(사용자)를 분리하여 서로 독립적으로 동작 할 수 있어야 합니다.
    • 클라이언트는 사용자 인터페이스(UI)에 관한 처리를 담당하고 서버는 데이터 저장 및 비즈니스 로직을 처리합니다.
    • 클라이언트와 서버가 독립적으로 개발 및 운영 될 수 있기 때문에 유연성과 확장성이 증가합니다.

  2. 무상태성
    • RestAPI에서는 각 요청(Request)가 이전 요청과 독립적이어야 합니다.
    • 서버는 클라이언트의 이전 상태를 저장하지 않습니다. 이렇게 서버가 클라이언트의 이전 상태를 저장하지 않게되면서 서버는 클라이언트에게 요청을 보낼 때 필요한 모든 정보(인증 정보, 세션 정보)를 매번 포함해야 합니다.
    • 서버가 불필요한 상태 정보를 저장하지 않아 확장성(Scalability)이 증가하며 요청이 독립적으로 처리되므로 안정성(Stable)이 높아집니다. 또한 클라이언트가 필요한 정보를 요청에 포함하기 때문에 오버헤드(부하)가 줄어들게 됩니다.

  3. 캐시 가능
    • 클라이언트는 서버의 응답 데이터를 캐시 할 수 있어야 합니다. RESTAPI에서는 HTTP의 캐싱 메커니즘(Expires, Cache-Control 헤더 등)을 활용하여 데이터를 저장 할 수 있습니다.
    • 같은 요청이 반복적으로 발생 할 경우 서버가 아닌 캐시에서 데이터를 불러오면 성능이 향상됩니다.
    • 캐시를 활용하면 서버의 부하가 감소되며 네트워크의 대역폭을 절약할 수 있습니다. 또한 API 응답속도를 향상시킬 수 있습니다.

  4. 일관된 인터페이스
    • RestAPI는 일관된 방식으로 리소스를 접근 할 수 있어야 합니다.
    • REST에서는 URI(Uniform Resource Identifier)를 사용하여 리소스를 명확하게 식별합니다.
    • 각 리소스는 HTTP메서드(GET,POST,PUT,DELETE)를 사용하여 조작됩니다.
      • ex) GET /users/1  (ID 1번 사용자의 정보 조회)
        POST /users  (새로운 사용자 생성)
        PUT /users/1  (ID 1번 사용자 정보 수정)
        DELETE /users/1  (ID 1번 사용자 삭제) 
      • URI는 리소스를 나타내야하고, 동사가 포함되지 않아야 합니다.
    • API가 직관적이고 사용하기 쉬워지며 HTTP 메서드에 따라 요청의 의미가 명확해집니다. 또한 RESTful한 구조 덕분에 유지보수가 쉬워집니다.

  5.  계층화된 시스템
    • RESTful API는 여러 개의 계층(layer)으로 구성될 수 있어야 합니다. 즉 클라이언트(사용자)가 API 요청을 보낼 때 그 요청이 어떤 내부 과정을 거치는지 알 필요 없이, 단순히 API만 사용하면 됩니다.
    • 이러한 계층구조를 통해(보안(Security), 로드 벨런싱(Load Balancing), 캐싱(Caching)등의 기능을 추가할 수 있으며 시스템의 유연성과 확장성을 높을 수 있습니다.
    • 예시로 사용자가  /users/1   API를 호출하면 요청은 다음과 같은 여러 계층을 거칠 수 있습니다.
      클라이언트 → API Gateway → 인증 서버 → 애플리케이션 서버 → 데이터베이스
      API Gateway를 통해 요청을 필터링하거나, 인증 서버에서 사용자를 검증한 후 데이터베이스에서 정보를 가져올 수 있습니다.

 

 

REST API의 장단점

REST API는 URL만 보고도 무슨 행동을 하는 API인지 명확하게 알 수 있다는 장점이 있습니다. 그리고 상태가 없다는 특징이 있어서 클라이언트와 서버의 역할이 명확하게 분리됩니다. 또한 HTTP표준을 사용하는 모든 플랫폼에서 사용할 수 있습니다. 단점으로는 HTTP 메서드, 즉 GET,POST와 같은 방식의 개수에 제한이 있고, 설계를 하기 위한 공식적으로 제공되는 표준 규약이 없다는 단점이 있습니다. 그래도 API는 주소와 메서드만 보고 요청의 내용을 파악할 수 있다는 장점이 있어 많은 개발자가 사용합니다. 또한 REST형식에 알맞게 딱 맞춰 디자인한 API를 RESTful API라 부르기도 합니다.

 

REST API의 장점

  • URL만 보고도 API의 동작을 쉽게 파악할 수 있음
  • 클라이언트와 서버의 역할이 명확하게 분리됨
  • HTTP 표준을 사용하여 모든 플랫폼에서 활용 가능

REST API의 단점

  • GET, POST 등 정해진 메서드만 사용 가능
  • 공식적으로 제공되는 설계 표준이 없음

 

REST API를 사용하는 방법


 

1. URL은 동사를 쓰지 말고 자원을 표시해야 한다.

URL에서의 자원은 가져오는 데이터를 말합니다. 예를 들어 학생 중에 id가 1인 학생의 정보를 가져오는 URL은 이렇게 설계 할 수 있습니다.

  • /students/1
  • get-student?student_id=1 (REST에 위배되는 URL 설계)

처음에 두번째 URL을 보면 괜찮다고 생각 할 수도 있습니다. 하지만 RESTful API는 1번입니다. 왜냐하면 2번은 자원이 아는 동사를 사용했기 때문입니다. 동사를 사용한 경우 추후 개발할 때 혼란을 줄 수도 있습니다. 예를 들어 자원을 보여주는 URL을 구성할 때 개발자마다 get이나 show같이 서로 다른 동사를 사용하게 되면 URL의 구조가 엉망이 되어 개발할때 큰 혼란이 올 수 있습니다. 따라서 RESTful API를 설계할 때는 이런 동사들을 사용하지 않습니다.

 

2. 동사는 HTTP 메서드로

동사는 HTTP메서드라는 것을 이용할 때 사용합니다. HTTP메서드는 서버에 요청을 하는 방법을 나눈 것인데요 주요 사용하는 HTTP메서드는 POST, GET, PUT, DELETE 입니다. 흔히 CRUD(create,read,update,delete)라고 불리우는 작업을 담당하는 메서드입니다.

 

예를 들어 블로그에 글을 쓰는 API를 설계한다 했을 때 다음과 같이 RESTful API를 설계 할 수 있습니다.

설명 적합한 HTTP 메서드와 URL
id가 1인 블로그 글을 조회하는 API GET /articles/1
블로그 글을 추가하는 API POST /articles
블로그 글을 수정하는 API PUT /articles/1
블로그 글을 삭제하는 API DELETE /articles/1