Wife: Roy Fielding 이 누구야?

Ryan: 똑똑한 사람이지.

Wife: 그래? 뭐 하는 사람인데?

Ryan: 최초의 웹서버를 만드는데 일조했고 웹이 어떻게 동작하는지에 대한 연구도 많이 한 사람이야. 브라우저가 웹서버로부터 어떻게 데이터를 가져올지에 대한 [specification 에도 그사람의 이름이 있어.] (역주: 서버와 브라우저가 어떻게 대화하고 데이터를 전달하느냐 정하고, 그 방법을 protocol 이라고 해, 즉 protocol 에 대한 표준 문서 (specification) 에 그 사람의 이름이 있는 것이지)

Wife: 어떻게 동작하는데?

Ryan: 뭐가? 웹이?

Wife: 응.

Ryan: 음. 사실 정말 대단하지. 근데 신기하게도 사람들이 얼마나 대단한지 잘 몰라. 아까 얘기한 protocol, HTTP 라는 프로토콜인데, 이게 정말 많은 일을 하는데, 사람들이 잘 몰라.

Wife: http 그거 브라우저 주소창에 입력할때 쓰는거?

Ryan: 어. 주소의 젤 첫부분은 브라우저가 어떤 프로토콜을 써야될지 정해주는 거야. 브라우저 주소창에 입력하는 것이 사실, 컴퓨터 역사에서 엄청나게 혁명적인 일이지.

Wife: 왜?

Ryan: 우리가 "주소" 라고 부르잖아. 세계 어느 곳에 있는 어떤 것도 이 주소로 찾을 수 있다는 것이지. "주소" 라는 개념이 있어야 웹이 동작할 수 있는 것이지. 지식과 정보 (역주: 당신에겐 쇼핑 아이템들도 중요하겠네..) 를 웹에서 찾아주는 네비게이션 같은 거지.

Wife: 웹 페이지를 찾아준다는 거지?

Ryan: 웹 페이지도 찾아주고 다른 것도 찾아주지. Roy Fielding 이라는 사람이 했다는 research 에서, 주소가 어떤 것들을 표현할 수 있는지에 대해서도 다뤄. 웹은 REST 라는 구조로 만들어져 있어. REST 에서, 주소가 어떤 "자원" 을 가리킬 수 있는지 정리해 놓았어.

Wife: 웹 페이지가 "자원" 이야?

Ryan: 비슷해. 웹 페이지는 자원을 표현해서 보여주지. "자원" 이란건 어떤 개념이야. URL 이라고 브라우저에 입력하는 것 있잖아...

Wife: URL 이 무엇인지는 알아..

Ryan: URL 이 브라우저에게 "자원" 이 어디 있는지 알려줘. 브라우저는 특정 방법으로 표현된 자원을 요청하지. 브라우저는 웹 페이지라는 형태로 표현된 자원을 요청한다고 할 수 있어.

Wife: 그럼 어떤 표현 방법들이 있는데?

Ryan: 사실, 여러개의 표현 방법이 있을 수 있는데, 대부분의 자원은 한가지 형태로만 표현되는 경우가 많아. 다른 포맷 (역주: json, xml 등?) 들이 많이 사용되고 있어서, 앞으로는 다른 형태의 표현 방법도 많이 사용될 것 같아. (역주: 원글은 2004 년에 쓰여졌음.)

Wife: 예를들면 어떤..?

Ryan: 음. Web Service 라고 부르는 개념이 있는데, 사람들마다 다르게 받아들이는 개념이긴 한데, 기본적으로 기계(machine)도 사람들처럼 컴퓨터를 사용할 수 있다는 거야.

Wife: 로봇을 얘기하는 건가?

Ryan: 아니, 기계가 책상에 앉아서 웹 서핑을 한다는 얘긴 아니고. 컴퓨터가 정의된 protocol 으로 다른 컴퓨터들과 얘기할 수 있다는 거지. 사실 컴퓨터끼리 통신하는 건 이미 오래전부터 해왔던 일이긴 한데, 아직, 세상의 모든 컴퓨터가 서로 얘기할 수는 없다는 거지.

Wife: 왜?

Ryan: 왜냐면 첨부터 그렇게 사용하려고 설계된게 아니라서 그렇지. Fielding 과 그의 동료들이 웹을 생각할 때에는, 컴퓨터가 세상의 다른 모든 컴퓨터와 얘기할 수 있게 하는 것이 중요한 이슈였어. 컴퓨터들이 다른 컴퓨터와 통신할 때, 그들 끼리만 이해할 수 있는 통신 방법을 쓸 수도 있잖아.

Wife: 근데, 다른 모든 컴퓨터와 통신하고 싶다는 거지?

Ryan: 응 - 그리고 그 이상이야. 다른 컴퓨터와 대화할 때, 대화하고 있는 컴퓨터가 아닌 또 다른 컴퓨터에 있는 데이터들에 대해서 얘기하고 싶은거야. 좀 복잡한데 잘 들어봐. 한 컴퓨터가 다른 컴퓨터에게 또 다른 컴퓨터에 있는 자원에 대해서 얘기할 수 있는 방법이 필요한 거야.

Wife: 뭐라고?

Ryan: 당신이 동생이랑 얘기하고 있는데, 동생이 빗자루나 뭐 아무거나 빌려달라고 한다고 해봐. 근데 당신한테도 그게 없고, 엄마한테 있어. 그래서 동생한테, 엄마한테 가서 빌리라고 얘기해. 이런일이 살면서 자주 발생하자나 근데 컴퓨터들이 서로 대화하기 시작하면 컴퓨터들게도 이런 대화가 필요한 경우가 생긴다는 거지.

Wife: 그래서 컴퓨터들이 물건들이 어디 있는지 서로 어떻게 얘기하는데?

Ryan: URL 이지 물론. URL 은 컴퓨터 세상에서는 어떤 물건을 표현할 수 있는 "명사" 라고 생각하면 돼. 사람들이 어떤 명사가 어떤 물건을 표현하는지 약속하고 동의해서 사용하는게 중요하잖아?

Wife: 그렇지.

Ryan: 컴퓨터는 다른 모든 컴퓨터가 모두 이해하고 동의할 수 있는 "명사" 라는 개념이 없어. (역주: URL 외에는) 모든 프로그래밍 언어, 데이터베이스, 또 다른 기타 시스템들은 어떤 물건을 표현하는데 각기 다른 방법을 사용하지. URL 이 중요한 것은 이 때문이야. 이 모든 시스템들이 하나의 이름 ("명사") 으로 자원을 표현하게 해주지.

Wife: 근데 내가 웹페이지를 열어 볼때는, 그런 생각은 전혀 안하는데?

Ryan: 아무도 그런생각을 하진 않아. Fielding 과 몇몇의 사람들 빼고는. 그래서 아직도 컴퓨터들이 멍청한거야.

Wife: 대명사나 형용사는?

Ryan: REST 의 다른 큰 영역에 대해서 물어보다니 신가한데?. 동사가 중요해 사실.

Wife: 어머 농담이었는데.

Ryan: 응 근데 중요한 얘기야. 동사는 되게 중요하거든. 프로그래밍에서 중요하게 다루는 polymorphism 이라는 개념이 있어. 쉽게 표현하면, 다른 명사들에 같은 동사를 사용할 수 있다는 거야. (역주: 이름은 같은 동사지만, 다른 뜻의 동사를 사용할 수 있다는 것이겠죠)

Wife: 잘 이해가 안가는데.

Ryan: 커피 테이블을 봐바. 명사로 부르는게 뭐가 있지? 컵, 쟁반, 신문, 리모컨 이 있어. 이걸로 무엇을 할 수 있지?

Wife: 이해가 안되는데..

Ryan: 잡을 수 있지? 들어 올리수 있고. 넘어뜨릴 수도 있고. 태워버릴 수도 있고. 같은 동사를 여기 있는 어떤 물건들에도 적용할 수 있잖아. .

Wife: 응 그렇지. 그래서?

Ryan: 그게 중요하거든. "컵을 집어줘", "신문을 집어줘", "리모컨을 집어줘" 이렇게 같은 동사 "집어줘"를 사용하는게 아니라 명사마다 다른 동사를 써야된다면 어떻겠어?

Wife: 와! 복잡하겠는걸.

Ryan: 우리는 다른 명사에 같은 동사를 적용해도 다 어떤 뜻인지 이해할 수 있어. 어떤 동사들은 특정 명사들에만 적용시킬 수 있는 것들도 있지. 예를 들면, 컵을 운전한다거나, 차를 마신다거나 하는 표현은 말이 안되지. 하지만 어떤 동사들은 거의 모든 명사에 적용이 가능해. GET, PUT, DELETE 이런 것들은 말이야.

Wife: 컵을 DELETE 할 수는 없잖아?

Ryan: 하지만 던져버릴 수는 있지. 농담이였지?

Wife: 응.

Ryan: Fielding 과 그의 친구들이 만든 HTTP 라는 프로토콜은 사실 명사에 동사를 적용시키는 것에 대한 내용이야. 예를들면, 웹페이지를 본다는 것은, 브라우저가 HTTP 의 GET 동사를 당신이 입력한 URL 에 적용하여, 웹페이지를 받아 오는 거야.

웹페이지에는 보통 이미지들이 있잖아? 그 이미지들은 보통 텍스트하곤 분리되어 있는 자원이야. 웹 페이지에 그 이미지들에 대한 URL 들이 있어서, 브라우저가 웹페이지를 받은 후, 이미지를 가져오기 위해 또 HTTP GET 을 하게 되지. 하지만 중요한 것은, 다른 명사들에 같은 동사를 적용할 수 있다는 것이지. 명사가 image, text, video, mp3, slideshow 어떤 것이든 상관 없이 GET 을 사용할 수 있다는 거야.

Wife: GET 이 아주 중요한 동사인가 보네.

Ryan: 응. 브라우저가 하는 일의 대부분은 자원을 GET 하는 것이니까. 브라우저가 다른 작업을 할때는 그리 많지 않아. 그래서 사람들이 HTTP 는 그냥 GET 만 하는 프로토콜이라고 생각하기도 해. 하지만 HTTP 는 사실 동사를 명사에 적용하는 프로토콜이라고 봐야 돼.

Wife: 좋아 알겠어. 근데 이게 뭘 어떻게 바꾼거지? 어떤 명사와 동사를 사용하길 원하는 거야?

Ryan: 명사들은 이미 사용중이긴 한데, 원하는 형태의 포맷으로 사용되고 있진 않아.

크리스마스 선물을 사려고 amazon.com 을 돌아다니고 있다고 해봐. 각 제품을 명사라고 생각하고. 만약 컴퓨터가 이해할 수 있는 방식으로 이 명사들이 표현되어 있으면, 정말 할 수 있는 일들이 많아.

Wife: 컴퓨터가 웹페이지를 우리가 이해하듯이 이해하면 되지 않아?

Ryan: 웹페이지는 사람들을 위해 만들어진 것이야. 컴퓨터는 페이지의 스타일에 대해선 신경 쓰지 않지. 컴퓨터는 데이터만 필요한 것이지. 이상적으로는 각각의 URL 에 대해서 사람이 이해할 수 있는 표현 방식과 컴퓨터가 이해할 수 있는 표현 방식이 있으면 좋겠지. 컴퓨터가 이 자원을 GET 할 때, 이해할 수 있는 형태로 자원을 받을 수 있고, 사람이 GET 을 할 때는 사람이 이해할 수 있는 형태로 자원을 받게 말이야.

Wife: 그럼 사람들이, 모든 페이지를 컴퓨터가 이해할 수 있는 방식으로도 만들어 줘야하나?

Ryan: 가치가 있다면 그렇게 할 수 있지.

개념적으로 얘기한 부분들이 많은데, 실례를 들어 얘기해 볼께. 당신이 선생님이라고 해보자. 학교에 컴퓨터 시스템이 있어서 학생들을 관리한다고 해봐. 학생들이 어떤 수업을 듣는지, 성적은 어떤지, 위급 상황에 누구에게 연락해야 하는지, 가르치기 위해서 선생님들이 사용하는 책들은 어떤 것들이 있는지 여러가지 정보를 관리한다고 해봐. 이 시스템이 웹 기반이라면, 명사들에 대해서 URL 이 있을 거야. 학생, 선생님, 수업, 책, 교실 등등 에 대한 URL 이 있겠지. 브라우저에 URL 을 입력하면 웹페이지가 뜬다고 해봐. 근데 각각의 URL 마다 컴퓨터가 이해할 수 있는 방식으로도 표현이 가능하다면, 이 시스템에 다른 기능을 추가하는 것이 매우 쉬울 거야. 시스템 내부의 다른 서브 시스템들이 서로 대화하기에도 훨씬 편할 것이고 말이지. 각학교의 시험 성적을 수집하거나 하는, 정부에서 운영하는 시스템을 만들수도 있지. 가능성은 무궁무진해.

각 시스템은 HTTP GET 을 이용해서 정보를 가져올 거야. 어떤 시스템이 다른 시스템에게 정보를 추가하고 싶다면, HTTP POST 를 사용할 거야. 정보를 수정하고 싶다면 HTTP PUT 을 이용하지. 데이터가 어떻게 생겨야 하는지만 정하면 이 모든 것들을 할 수 있어.

Wife: 그래서 컴퓨터 한다는 사람들이 작업중인게 이거야? 데이터가 어떻게 생겨야 하는지 정하는거?

Ryan: 아쉽게도 아니야. 많은 사람들은 더 복잡한 것을 만들려고 해. 그들이 생각하는 세상에선, 명사로 세상 모든 물건을 표현할 수도 없고, 동사는 polymorphic 하지도 않아. 이미 사용하고 증명된 기술을 버리고 예전에 실패한 시스템 같은 것들을 만들려고 하고 있어. 우리는 현란한 툴들을 사용하려고 '간단함' 이라는 것을 버리고 있어.

Wife: 왜?

Ryan: 나도 모르겠어

Wife: 뭐라고 한마디 하지 그래?

Ryan: 그러게 언젠가 그래야겠지.


번역 출처 : http://codeflow.co.kr/question/542/how-i-explained-rest-to-my-wife/

원문 : http://www.looah.com/source/view/2284

'etc' 카테고리의 다른 글

2014 코스닥 상장기업 취업박람회 포스터  (5) 2014.10.21
svn connector  (1) 2014.09.23
자바 코드 영타 연습  (0) 2014.06.26
RESTful 웹 서비스에 대해 알아보자  (0) 2013.09.09
Posted by 꼬렙
: