Tech/Architecture

RestFul 에 대하여 (With Hook API)

glqdlt 2017. 3. 26. 14:04

#Rest는 'Representational State Transfer' 의 약어다.

하나의 URI는 하나의 고유한 리소스를 대표하도록 설계해야 한다는 개념이라는 데.. 뭐 그렇다한다.

서버에 접근하는 다양한 기기에 공통적으로 데이터를 웹으로 처리할 수 있게 하자는 시도의 방식이다.


최근에는 Open API에서 많이 사용하면서 REST 방식으로 제공되는 외부 연결 URI를 REST API 라고 하고, REST 방식의 서비스 제공이 가능한 것을 RestFul 하다고 표현한다.


Ajax는 Asynchronous JavaScript and XML 의 약어다.

뜻을 풀어보면 비동기화된 자바스크립트 XML 표현 데이터 이다.

쉽게 얘기하면 롱 폴링 꼼수를 고급지게 표현한 거라 보면 된다.


AJAX가 최근 좋은 대안이 되는 이유로는 여러가지가 있지만 개인적으로 이렇게 생각한다.

가장 큰 이유로는 웹 서비스의 접근성의 확산 되었기 때문이다. 특히 모바일이 비약적으로 발전함에 따라 User 접근성이(플랫폼)의 패러다임이 다양해지면서, 오래전부터 있어왔던 롱폴링 개념이 너도나도 신기술인거처럼 쓰여지는 이유라고 본다. (여기서 확립된 개념이 SPA )

또한 자바스크립트의 트랜드가 잘 맞아 떨어졌고,  자연스럽게 xml -> Json 로 넘어간 패러다임에서도 한 몫 했다고 본다. (xml 데이터가 넘어와서 파싱하는 것도 일인데, 어차피 User에는 자바스크립트라는 강력한 플랫폼이 존재하니 파싱할 필요가 없는 Json이 환영 받은 이유다.)


1) 브라우저의 화면 전환이 없어 UX적인 측면에서 User 친화적인 웹서비스를 제공 할 수 있다.

2) 서버는 화면을 신경 쓰지 말고 데이터만 In/Out 처리만 해주고, View는 User Client에서 모든 걸 관리할 수 있다. (SPA, Single Page Application) 


결국 이러다 보니 프론트/백엔드 롤이 확실하게 나뉘어진다. 

User = 프론트, 데이터 = 백엔드로 확실히 롤이 나뉘어진 셈.

이게 무슨 말이냐면 User의 리퀘스트 로직이 프론트로 이동했으니 벡엔드는 데이터 처리와 커넥션 관리에 집중을 하면 되는 셈이다.

재밌는 것은 AWS 와 같은 클라우드 플랫폼을 이용하여 서비스 구축시에 플랫폼 제공 벤더에서 벡엔드와 관련된 비지니스 처리를 도와주는 서비스가 있다 이를 이용하여 프론트 개발만 작성하여 Hook 연동만 하기만 해도 서비스가 운영가능해진다. 이를 흔히 요즘 말하는 '서버리스' 아키텍쳐라고 말하는 건데..

패러다임이 이렇게 바뀌고 있다, 밥벌이의 걱정을 고민해보자 -_-;


밥벌이를 떠나서 긍정적인 생각은 프론트/백엔드를 확실하게 분리가 되면, 서비스의 플랫폼 확장이이 자유로워진다. Client가 웹브라우저이든, 스마트기기이든, IOT기기이든 - User Interface (view) 이 뭐가 되었든 데이터 Type만 (예: JSON이나 XML) 맞춘다면 어디서든 서비스가 가능해진다는 얘기.


AJAX의 단점은 불필요한 리소스 낭비가 있는 편이다. 이를 대안하고자 나온 것이 웹소켓(websocket) 이 있다.


(지난 포스트 참고(웹소켓 과 롱폴링):  http://glqdlt.tistory.com/145)


#web hook

흔히 자주 이용하는 Github 나, 유명 웹서비스들을 보면 다른 서비스와의 연동을 위한 Hook Url (or API 라고 부른다) 을 지원한다. 

이는 무엇일까?

Hook 단어 자체는 말 그대로 갈고리를 뜻한다, 뭔가 연동이라는 단어에 그럴싸하게 어울리는 단어다.

Hook API 는 말 그대로, 다른 서비스가 자사 서비스와의 연동을 위해 제공하는 Push(Notification) API를 뜻한다.

후크선장의 갈고리처럼 Hook 이라는 단어를 거는 쪽이라고 생각하는 데, 사실상 타사 서비스가 자사 서비스에서 접속하게 끔 (도와주는) 걸리게 하는 연결 고리 의 의미로 쓰인다.

예를 들어, Github 와 Slack 을 연동시에 Push Alarm 을 듣고자 Hook api 를 slack 연동하면 깃커밋 시에 slack에서 알림이 뜬다, 이의 원리는 Github 에서 커밋 이벤트가 감지가 되면 Hook api 를 통해 상대가 누군지 신경쓰지 않고 브로드캐스트로 Hook 에 연동된 listener(타사 서비스) 에 커밋이 되었다는 것을 push 해버리는 개념이다.