Rest API의 단어별 사전적 정의는 아래와 같다.
- REST (Representational state transfer)
- API (Application Programming Interface)
먼저 API란 어플리케이션끼리(혹은 어플리케이션 내부에서 업무 처리 단위끼리) 서로 정보를 주고 받는 방법/수단이 정의된 규약이라고 보면 된다. 간단히 말해서 인간끼리 의사소통을 할때는 언어라는것을 통하여 정보를 주고받고 한국인과 대화를 하려면 한국어로 해야 한다는 개념으로 보면 쉽게 이해할 수 있다.
이렇게 주고 받는 정보는 단순한 정보도 있겠지만 기본적으로 프로그래밍에서 API는 특정 행위를 처리해 달라는 요청을 대부분 수반하게 된다. 예를 들어 은행에서 현금을 찾을때 은행에 방문하여 창구로 가서 출금 요청서를 작성 후 전달하면 본인확인 후 금고에서 현금을 가져와 고객에게 주게 된다. 이때 고객과 은행원은 각각 프로그램/모듈이 될 것이며 현금은 결과물 금고는 데이터베이스라고 생각하면 이해가 쉬울 것이다. 여기서 출금 요청서를 작성해 은행원에게 요청하는 것이 은행에서 출금을 위해 정해놓은 규칙인데 이 부분이 인터페이스(Interface) 라고 보면 된다.
REST는 여러 요청방법중 웹의 http 프로토콜의 정보 교환방식을 리소스의 상태변화 관점에서 정의한 규약이라고 보면 된다. 그리고 그 리소스를 처리하기 위해서는 http 헤더에 정의된 정보를 활용하여 처리할수 있도록 한다.
기존의 요청 방식은 주로 비즈니스 업무 처리 단위의 요청/응답이었다. 예를 들어 입금 요청을 한다면
HTTP GET https://domain.co.kr/depositMoney?account=101101111111&krw_amount=10000
위처럼 요청하면 "depositMoney" 를 처리하는 어플리케이션이 요청 변수를 받아 값을 확인 후 출금처리에 대한 요청이구나 하고 판단후 출금 처리를 하고 결과를 200 OK 로 주는 식이었다.
HTTP/1.1 200 OK
{
remain_amount: 5000
}
이렇게 비즈니스 업무 단위로 주고 받다 보니 클라이언트와 서버의 업무 처리 프로세스가 강하게 연결되어 있어 개발/유지보수시 업무를 잘 알아야 하고 필요하면 두 레이어를 같이 보면서 처리해야 하는 문제가 있었다. 이런 부분에서 요청 행위에 대한 부분을 표준화 하고 데이터 처리의 관점을 리소스 단위로 바꿈으로써 업무의 연관성을 깊게 파악해야 하는 부담을 덜고 표준화된 방식으로 데이터를 주고 받음으로써 요청/결과의 일관성을 확보한다는 장점이 있다.
REST의 경우는 기본적으로 리소스 관점에서 접근하는것을 원칙으로 한다. 위와 같은 업무를 REST 방식으로 요청한다면 아래와 같다. json방식을 많이 사용하므로 Content-Type은 JSON으로 예제를 만들었다.
HTTP PATCH https://domain.co.kr/account/101101111111/krw
Content-Type : application/json
{
amount : '10000'
}
계좌번호 뒤에 krw가 있는건 은행마다 다르긴 하겠으나 보통은 대표 입출금 통장에서 KRW/USD 등의 외화 계좌가 서브로 들어가기 때문에 위처럼 표현하였다. 이 글에서는 별로 중요하지 않으니 넘어가자.
여기에 대한 응답은 아래와 같다
HTTP/1.1 200 OK
{
remain_amount: 5000
}
이렇게 리소스 관점에서 리소스의 조회/변경을 http method로 제어하고 결과를 http code를 이용하여 받는 것이 기본적인 REST 방식의 권장 사용 방법이라고 할 수 있다.
'IT Tech > Dev-Web' 카테고리의 다른 글
동일 서버에 Tomcat 여러개 기동시 세션 충돌 문제 (0) | 2021.08.09 |
---|