주변에서 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로 인코딩 된 문서의 앞부분에 표기되는 문서 유형 정보를 표시하는 항목입니다.
감사합니다.
'IT > IT 지식' 카테고리의 다른 글
지겨운 유튜브 추천 맞춤동영상 알고리즘 삭제 초기화 방법 (1) | 2021.08.10 |
---|---|
MIME 타입과 Content Type 이란 (0) | 2021.08.06 |
내 컴퓨터 중고 가격 얼마나 할까? 부품별 중고 가격 (0) | 2021.07.12 |
내 컴퓨터 사양 간단히 확인 하기 . CPU VGA 메인보드 메모리 .. (0) | 2021.07.07 |
PC에서 와이파이 WIFI 사용하기 . USB무선랜카드 NEXT 531WBT (0) | 2021.06.25 |
댓글