본문 바로가기
IT/IT 지식

REST와 REST API란 . RESTful 개념 쉽게 이해하기

by SidePower 2021. 8. 5.

 

주변에서 REST가 뭐냐고 물어보면

명확하게 설명하기가 힘든 거 같아 정리해보았습니다.

 

 

REST

Representational State Transfer의 약자입니다.

Representational → 표현, 묘사

State → 상태

Transfer → 전송

단어들을 풀어보면

웹 어플리케이션의 어떤 상태(정보)를 전송하는 표현 방식을 말합니다.

 

위 단어정의를 기본으로 생각하면서 REST에 대해 알아볼게요.

 

2000년 로이 필딩(Roy Fielding)의 박사학위 논문에 나온 것으로

단순하고 가벼운 웹(HTTP)의 우수성에 비해 제대로 사용되지 못하는 것을 안타까워 

웹의 장점을 최대한 활용할 수 있는 아키텍처로 REST가 발표되었습니다.

 

화려하지만 무겁고 복잡한 통신보다는

이미 만들어져 있는 HTTP 프로토콜의 고유한 기능을 통해

가볍고 단순하고 빠른 통신을 하자는 취지인 거 같아요.

 

요즘 웹서비스들도 많이 RESTful 하게 전환되고 있습니다.

RESTful은 REST 답게 웹서버를 구성한다는 얘기인데요.

아랫부분에 설명하도록 하겠습니다.

 

 

REST를 한마디로 정의하면

HTTP라는 프로토콜을 이용해서 Web(웹)에서 제공하는 모든 자원들을

하나하나 가리킬 수 있는 고유한 주소(URI)를 이용해서

HTTP Method를 통해 작업(CRUD)을 처리하는 방식입니다.

 

Web(웹)에서의 통신이라면 HTTP 프로토콜을 이용한 통신입니다.

클라이언트 웹브라우저에서 주소(URI)를 입력합니다.

https://sidepower.tistory.com 

웹브라우저가 주소(URI)를 이용해 HTTP request 메시지를 보냅니다.

웹서버는 주소(URI)와 매핑된 서버 내 문서나 프로그램을 찾아서 작업(CRUD)을 처리합니다.

처리 후에 웹서버에서는 HTTP response 메시지를 클라이언트 웹브라우저로 보냅니다.

클라이언트 웹브라우저는 받은 메세지를 웹브라우저에 맞게 변환해서 표시합니다.

 

HTTP에서 클라이언트는

웹브라우저(익스플로러, 크롬, 파이어폭스, 사파리..)뿐만이 아니라

모바일 기기의 앱이나 또 다른 웹 서버에서도

HTTP 프로토콜의 주소(URI)를 이용할 수 있다면 어떤 것도 가능합니다.

 

 

REST 구성요소

자원 . Resource

웹서버가 관리하는 모든 것들입니다.

자원은 URI(Uniform Resource Identifier)를 통해 고유한 주소로 지정해서

식별할 수 있습니다.

 자원 조작 . Verb

HTTP 프로토콜에 있는 Method(매소드)를 통해 CRUD 처리합니다.

Method → POST , GET , PUT , DELETE

 표현 . Representation

클라이언트에서 자원의 상태(정보)를 조작하는 요청을 하고

서버에서 요청 처리를 하고 응답을 보냅니다.

자원은 보통 TEXT , JSON , XML 등 HTTP 해더에 지정된

MIME 타입(Content-Type) 중의 하나를 표현합니다.

 

REST와 REST API 용어는

어떤 특정 프로그램을 가리키는 게 아니라 개념일 뿐입니다.

REST API 개념에 맞는 HTTP 매소드를 이용해서

REST 개념에 맞게 처리하자는 거에요.

 

 

 그렇다면 REST API란 무엇인가?

API는 Application Program Interface의 약자이며

컴퓨터에서 처리할수 있는 기능들을 모아둔 것인데요.

 

예를 들어 화면에 글자를 출력하는 방법이라면

C언어에서는 printf("Hello REST\n")

Java언어에서 System.out.println("Hello REST")

이렇게 화면에 글자를 출력하는 API를 만든 개발 언어마다 사용법이 다릅니다.

 

REST API 역시 컴퓨터에서 기능을 수행하는 건데요.

다른 API와 차이점은 

API를 실행하는 컴퓨터(클라이언트)에서 기능을 처리하는 게 아니고 

HTTP 프로토콜의 URI 주소를 이용하여 서버의 기능을 처리하게 하는 것입니다.

 

REST API에서 처리할 수 있는 기능을 매소드(Method)라고 합니다.

REST는 Web의 통신규약인 HTTP 프로토콜을 이용하기 때문에

HTTP에 존재하는 매소드를 그대로 사용합니다.

 

아래 간단하게 HTTP와 REST API 매소드를 매핑했습니다.

HTTP Verb REST API Method ( CRUD ) 설명
POST Create 생성하기
GET Read 읽기
PUT Update 전체 변경하기
PATCH Update 부분 변경하기
DELETE Delete 삭제하기

 

이해를 돕기 위해

스프링부트를 이용해 웹서버에서 REST API 처리를 위한 

HTTP POST , GET , DELETE 를 간단하게 구성해 봤습니다.

// REST API - HTTP POST 방식 
// 주소 ▶ http://localhost:8080/register
// 클라이언트 웹브라이저에서 입력된 회원정보를 주소를 통해 웹서버로 전송
// 웹서버는 아래와 같이 REST API - HTTP POST 처리할수 있는
// 스프링부트 전용 매소드 PostMapping로 처리하게 설정
// 웹서버에 회원가입 정보를 생성(저장)합니다.
@PostMapping("/register")
public String registerUserr(User user) {
user = service.save(user);
System.out.println(user.getName()+"님 회원가입완료.");
return "index";
}

// REST API - HTTP GET 방식 
// 주소 ▶ http://localhost:8080/users
// 클라이언트 웹브라이저에서 회원리스트 조회를 클릭해서 주소를 통해 웹서버로 전송
// 웹서버는 아래와 같이 REST API - HTTP GET 처리할수 있는
// 스프링부트 전용 매소드 GetMapping로 처리하게 설정
// 웹서버에서 회원리스트정보를 추출합니다.
@GetMapping("/users")
public String getUsers(Model model) {
List<User> users = service.findAllUser();
model.addAttribute("users", users);
return "userList";
}

// REST API - HTTP DELETE 방식
// 주소 ▶ http://localhost:8080/users/sidepw123
// 클라이언트 웹브라이저에서 입력된 회원아이디(sidepw123)를 주소를 통해 웹서버로 전송
// 웹서버는 아래와 같이 REST API - HTTP DELETE 처리할수 있는
// 스프링부트 전용 매소드 DeleteMapping로 처리하게 설정
// 웹서버에서 회원아이디(sidepw123)를 입력받아 회원정보를 삭제처리합니다.
@DeleteMapping("/users/{id}")
@ResponseBody
public int deleteUser(@PathVariable int id) {
return service.delete(id);
}

 

 

RESTful이란 말은

REST라는 아키텍처 개념을 그대로 적용해서

웹서버 구성하고 웹서비스를 하는 것을 말합니다.

 

웹서버가 RESTful 하다라는 말은 REST API를 이용할 수 있다는 것입니다.

웹서버에 구성된 주소(URI)들만 알고 있다면

어떤 클라이언트라도 해당 웹서버를 이용할수 있다는 거예요.

 

주소를 가지고 클라이언트에서 호출하는 방법은 다양합니다.

간단하게 몇 개 적어보면

웹브라우저의 주소란에 입력할 수도 있어요.

 java 언어의 URL 클래스를 이용하는 방법

import java.net.*;

public class URLtest{
    public static void main(String[] args) {
    try
    {

        String host_url = "https://sidepower.tistory.com";
        HttpURLConnection conn = null;

        URL url = new URL(host_url);
        conn = (HttpURLConnection)url.openConnection();

        conn.setRequestMethod("POST");//POST GET
        conn.setRequestProperty("Content-Type", "application/json");
....

 

 curl 툴을 이용하는 방법

Microsoft Windows [Version 10.0.19042.1110]
(c) Microsoft Corporation. All rights reserved.

C:\Users\sidepower>curl
curl: try 'curl --help' for more information

C:\Users\sidepower>curl https://sidepower.tistory.com
<!doctype html>
<html lang="ko">
<head>
<link rel="stylesheet" type="text/css" href="....
......

 

가끔 업무요청이 올 때

RESTful 지원하나요? REST API 사용할 수 있냐라고 문의가 오는데요.

저희 업무는 웹(HTTP)을 사용하지 않기 때문에 RESTful 하지 못합니다.

라고 답변한 기억이 나네요.

 

통신 프로그램들이 다양해지면서

통신 프로그램마다 클라이언트 전용 프로그램이나 라이브러리를 설치도 해야 되고

실행법도 달라서 초보자들은 접근하기 상당히 힘들어요.

 

하지만 REST는

그냥 주소(URI)만 호출하면 되기 때문에 접근성이 아주 뛰어납니다.

클라우드 웹서비스들은 대부분 RESTful을 기본으로 서비스되고 있습니다.

 

RESTful 하다는 게 대세인 거 아시겠죠.ㅋ

 

 

 

※ 참고

* MIME 타입

Multipurpose Internet Mail Extensions의 약자

이메일 시스템 간의 첨부파일을 텍스트 형태로 변환해서 전송하기 위해 개발됐지만

현재는 HTTP를 통해 다양한 유형의 문서들을 알리고 전달하기 위해 사용됩니다.

Content-Type은

MIME로 인코딩 된 문서의 앞부분에 표기되는 문서 유형 정보를 표시하는 항목입니다.

 

 

 

감사합니다.

반응형

댓글