내가 아내에게 REST를 어떻게 설명했는가.

License:
This article is provided under the Creative Commons Attribution-Alike 2.0 license
(http://creativecommons.org/licenses/by-sa/2.0/) as the original article is.
The author of the original article is Ryan Tomayko, and the original post can be
found at http://naeblis.cx/rtomayko/2004/12/12/rest-to-my-wife.
Translation into Korean is provided by Minkoo Seo(minkoo.seo@gmail.com).

라이선스:
이 글은 Creative Commons Attribute-Alike 2.0 라이선스
(http://creativecommons.org/licenses/by-sa/2.0/deed.kr)에 따라 배포됩니다.
원 저자는 Ryan Tomayko이며, 원문은 http://naeblis.cx/rtomayko/2004/12/12/rest-to-my-wife
에서 보실 수 있습니다. 한국어 번역은 서민구(minkoo.seo at gmail.com)가 하였습니다.

내가 아내에게 REST를 어떻게 설명했는가.

부인: Roy Fielding이 누구야?

Ryan: 남잔데, 똑똑한 사람이야.

부인: 응. 근데 그 사람이 뭘 했어?

Ryan: 최초의 웹 서버를 작성했고, 왜 웹이 현재와 같은 모습으로 동작하는지를 설명하는 많은 연구를 했지. 아, 그의 이름은 서버로부터 브라우저로 데이터를 전송하는 프로토콜 스펙에 올라있기도 해.

부인: 어떻게 동작하는데?

Ryan: 웹말야?

부인: 응

Ryan: 흠.. 어, 사실 굉장히 재밌지. 그리고 가장 재밌는 점은 웹이 과소평가되어있다는거야. 아까 말한 프로토콜은 HTTP라는 이름으로 불려. 그리고 HTTP는 사람들이 종종 간과하기도 하는 멋진 일들을 처리하지.

부인: http는 브라우저에서 주소를 입력할때 넣는 맨 앞의 단어를 말하는거야?

Ryan: 응. 그 처음부분이 브라우저에게 어떤 프로토콜을 써야하는지 말하는 곳이지. 바로 그게 컴퓨팅 역사에서 가장 중요한 혁신적인 일이었어.

부인: 왜?

Ryan: 왜냐면 어느곳에서나 세계의 모든 것들을 기술할 수 있었으니까. 그게 웹의 바탕을 이루지. 이건 지식과 정보를 얻는데 사용되는 GPS 좌표같은거야.

부인: 웹의 좌표?

Ryan: 음.. 그래. 사실 모든 것에 대한 좌표지. 아까 그 Roy Fielding이란 남자 말야. 그 사람의 연구에선 그 무언가를 가리키는 포인트들에 많은 언급을 했어. 웹은 REST라고 불리는 아키텍쳐 스타일에 근간을 두고 있는데, REST는 포인트가 가리키는 자원에 대한 정의를 내려주지.

부인: 웹 페이지가 자원이야?

Ryan: 일종의. 웹 페이지는 자원에 대한 표현이야. 자원은 그냥 개념이고. URL들은 브라우저에서 입력하는 주소이고..

부인: 나 URL이 뭔지 알아.

Ryan: 응 그거. URL을 사용해서 어딘가 개념이 있다고 말해주는 거지. 그럼 브라우저는 그 개념의 특정한 표현을 얻어올 수 있지. 좀더 정확하게 말하자면, 브라우저는 개념의 표현인 웹 페이지를 가져오는거야.

부인: 또 어떤 표현 양식들이 있는데?

Ryan: 사실, 그 표현 방식이라는게 그렇게 많이 쓰이지는 않아. 대부분의 경우에, 자원은 단일의 표현만을 가지지. 그렇지만 우리는 전체에 대한 표현이 미래에는 많이 쓰이기를 바래. 왜냐면 새로운 표현양식들이 자꾸 나타나고 있으니까.

부인: 예를들자면 어떤?

Ryan: 음. 말하자면, 사람들이 웹 서비스(web services)라고 부르는 개념이 있지. 이건 많은 사람들에게 종종 서로 다른 의미로 이해되기는 하지만, 어쨌든 기본적인 생각은 기계가 사람처럼 웹을 사용한다는 것이지.

부인: 이거 로봇같은거야?

Ryan: 아냐. 사실 완전히 그런건 아니고. 컴퓨터가 책상에 앉아서 웹 서핑을 한다는 말은 아니야. 그렇지만 컴퓨터가 같은 프로토콜을 사용해 서로 데이터를 주고 받는다는 거지. 사람들은 이런 일을 아주 오랫동안 해왔지만, 오늘날의 어떤 방식도 전세계의 모든 컴퓨터와 통신하는데는 적당하지 않지.

부인: 어째서?

Ryan: 왜냐면 그렇게 설계되지를 않아서 그래. Roy Fielding과 그의 친구들이 웹을 만들때는, 세계의 모든 컴퓨터와 통신한다는게 아주 중요하게 다뤄진 문제였어. 하지만 우리가 일을 할때 컴퓨터가 서로간에 통신하도록 하는 방식에는 이러한 고려가 되어있지 않아. 우리가 일할때는 몇개의 컴퓨터가 서로간에 대화하도록 하는 정도만 되면 되니까.

부인: 그런데 이제는 세상의 모든 컴퓨터와 이야기 할 수 있어야 한단 거야?

Ryan: 응. 그리고 사실은 더 많은 것이 필요하지. 우리는 세계의 모든 컴퓨터와 사방에 퍼져있는 자료들에 대해서 이야기할 수 있어야돼. 그래서 우리는 어떤 컴퓨터에게 그 컴퓨터 외에 있는 자원에 대해 이야기할 수 있는 방법이 필요한거야.

부인: 뭐라구?

Ryan: 예를 들어서 당신이 여동생과 이야기를 하고 있는데, 걔가 청소기 같은걸 빌리고 싶어한다고 하자. 그런데 당신한텐 그게 없어. 어머니한테는 있지. 그러면 당신은 여동생에게 어머니에게 빌리라고 말을 해야하지. 이게 바로 실제세계에서 일어나는 일고, 컴퓨터가 이야기를 시작함에따라 발생할 일들이지.

부인: 그럼 기계들은 어디에 물건이 있는지 어떻게 말해주지?

Ryan: 물론 URL이지. 만약 컴퓨터가 필요한 URL로만 이야기한다면, 기계에서 필요한 ‘명사’를 만들었다고 할 수 있지. 당신과 나와 그리고 전세계가 명사에 대해서 동의한다는건 매우 중요한일이야. 그렇지?

부인: 응.

Ryan: 기계한텐 그런 명사가 없어. 그래서 골치가 아프지. 모든 프로그래밍 언어, 데이터베이스, 그리고 다른 모든 시스템들은 서로 명사를 다르게 정의해버렸어. 그래서 URL이 중요한거지. URL은 모든 시스템들이 다른 기계가 가진 명사에 대해 이야기할 수 있게 해줘.

부인: 그치만 나는 웹을 그렇게 생각해본 적이 없는걸?

Ryan: 아무도 안그러지. Fielding 과 몇몇 사람들 빼고는. 그래서 기계란게 갑갑한 거야.

부인: 명사나 대명사나 형용사는 어떻게 해?

Ryan: 당신이 그런말을 하다니 재밌는걸? 사실 그게 REST의 또다른 큰 측면이거든. 음, 어쨌든 ‘동사’는 그래.

부인: 농담이었는데.

Ryan: 재밌는 농담이긴 한데, 사실 농담이 아닌 일이야. 동사는 중요해. 프로그래밍과 컴퓨터 과학 이론에는 폴리모피즘이라는 강력한 개념이 있지. 폴리모피즘은 명사에 적용되는 동사가 동일할 수 있게 해주는 괴짜같은 방법이야.

부인: 무슨말인지 모르겠어.

Ryan: 음.. 커피 테이블을 보자. 뭐가 명사지? 컵, 차반, 신문, 리모콘. 자, 그럼 이걸 갖구 뭘 할 수 있을까?

부인: 몰라.. (I don’t get it..)

Ryan: 그걸 가져올 수 있어(You can get them. 역주: get을 사용한 말장난입니다) 그치? 집을수도 있어. 때려 눞힐 수도 있어. 태울 수도 있지. 이런 다양한 동사를 저기있는 모든 객체들에게 적용할 수 있지.

부인: 좋아… 그래서?

Ryan: 그게 중요한거야. 당신한테 “컵을 갖다줘(get the cup)”, “신문을 갖다줘(get the newspaper)”, “리모콘을 갖다줘(get the remote)”라고 말하는 대신에, 만약 명사마다 서로 다른 동사를 사용해야한다면 어떨까? 그러면 “갖다줘(get)” 을 온갖 물건에 사용하는 대신에, 모든 동사/명사 조합에 대해서 새로운 단어를 생각해야만 할거야.

부인: 그건 정말 이상할거 같아.

Ryan: 그래, 그렇지. 우리의 뇌는 똑똑해서 서로다른 명사에 같은 동사를 적용할 수 있지. 몇몇 동사는 사용처가 한정되어있어서 일부 명사에만 쓸 수 있지. 예를들어서, 나는 컵을 운전할 수 없고, 자동차를 마실 수 없어. 그렇지만 몇몇 동사는 어디에나 사용될 수 있는데 이런 동사에는 GET, PUT, DELETE가 있지.

부인: 하지만 컵을 지울 수는(DELETE) 없잖아.

Ryan: 응, 그야 그렇지. 하지만 던져버릴 수는 있잖아. 농담인거지 당신?

부인: 그래.

Ryan: 어쨌든간에, Fielding과 그의 친구들이 만든 HTTP라는 프로토콜은 동사를 명사에 적용하는 것에 대한 이야기야. 예를들자면, 웹 페이지에 방문하면, 브라우저는 당신이 입력한 URL에 대해서 HTTP GET을 수행하고 웹 페이지를 보여주지.

웹 페이지에는 보통 이미지가 있어. 그렇지? 각 이미지는 서로 분리된 자원이야. 웹 페이지는 다만 이미지에 대한 URL을 지정할 뿐이고, 그러면 브라우저가 모든 필요한 자원을 획득할 때까지 HTTP GET을 수행하고, 그 후에 웹 페이지가 화면에 나타나지. 그러나 여기서 중요한건 모든 명사를 똑같이 취급할 수 있다는 점이야. 명사가 이미지, 텍스트, 비디오, mp3, 슬라이드쇼든 뭐든지 간에 같게 취급할 수 있지. URL만 있으면 모두 가져올 수(GET) 있는 거야.

부인: GET이란거 무척 중요한 동사같네.

Ryan: 맞아. 특히 브라우저를 쓸 때 그렇지. 왜냐하면 브라우저라는건 그냥 가져오기만 하는 녀석이니까. 자원들을 가지고 무언가 대단한 일을 하지는 않아. 이게 문제야. 왜냐하면 그로인해 많은 사람들이 HTTP란 단지 가져오는 것이다라고 생각하게 만들어버렸으니까. 그렇지만 HTTP는 사실 동사를 명사에 적용하는데 대한 일반화된 프로토콜이야.

부인: 멋진데. 그렇지만 이런것들이 무슨 의미가 있는지 잘 모르겠어. 또 무슨 명사와 동사가 필요한건데?

Ryan: 음, 명사는 있지. 그런데 포멧이 적절하지가 않아. 당신이 나에게 크리스마스 선물을 사주기위해 amazon.com 에 접속했다고 해보자. 각각의 상품이 명사라고 생각해 봐. 만약 기계가 이 상품들이 기계가 이해할 수 있는 형태로 존재한다면, 멋진 일들을 할 수 있어.

부인: 기계는 왜 웹 페이지를 이해할 수가 없어?

왜냐하면 웹 페이지는 사람을 위한 거거든. 기계는 레이아웃이나 스타일에 신경을 쓰지 않지. 기계는 다만 데이터만 있으면 되는거야. 이상적으로 보자면, 모든 URL은 사람과 기계가 모두 읽을 수 있는 표현을 가져야 하지. 기계가 GET을 하면, 기계가 읽을 수 있는 자원을 줘야지. 사람이 브라우저로 GET을 하면, 사람이 읽을 수 있는 것을 줘야하고.

부인: 그럼 사람들이 모든 페이지에 대해서 기계들도 읽을 수 있는 포멧을 만들어야한단 거야?

Ryan: 그런게 의미가 있다면.

지금까지 우리는 많은 추상적인 것들로 대화를 진행해 왔어. 실제 예를 들어보는게 어떨까. 당신이 선생님이라고 해보자… 그러면 학교에는 커다란 컴퓨터가 있을거고, 아니면 적어도 학생 관리를 위한 컴퓨터가 세네 대는 있겠지. 거기에는 어떤 학생들이 등록했는지, 점수는 몇점이나 받았는지, 비상 연락처는 어떻게 되는지, 학생을 가르칠 때 어떤 책을 사용해야할지 같은 정보가 있을거야. 만약 그 시스템이 웹 기반이라면, 그러면 여기에 등장하는 모든 명사에 URL이 있을거야. 이런 명사는 학생, 선생님, 수업, 책, 방 같은거겠지. 자 이제, 브라우저에서 URL을 입력하면 웹 페이지가 나오지. 만약 기계가 읽을 수 있는 표현이 각 URL마다 작성되어 있다면, 새로운 도구를 붙이는게 쉬울거야. 왜냐하면 모든 정보가 표준화된 방법으로 사용될 수 있으니까. 그리고 기계간의 대화도 쉬워지겠지. 즉, 시험 점수를 취합하는데 쓸 수 있도록 국가 전체의 학교 시스템들이 상호간에 통신할 수 있는 시스템을 만들 수 있겠 되는거지.

각 시스템은 간단한 HTTP GET을 사용해서 정보를 얻어오는 거야. 만약 어떤 시스템이 다른 시스템에 무언가를 저장하고자하면 HTTP POST를 쓸 수 있어. 시스템이 다른 시스템의 정보를 갱신하려면 HTTP PUT을 쓰지. 이제 남은 일은 데이터가 어떤 모양이어야 하는가라는 거야.

부인: 그래서, 이게 당신과 모든 컴퓨터 하는 사람들이 하는 일이란 말야? 데이터가 어떻게 나타나야하는가에 대한 것?

Ryan: 불행히도 그렇지는 않아. 대신, 별로 유용하지도 않고 편하지도 않은 또 다른 방식으로 일을 처리하기위한 복잡한 스펙의 계층을 쓰는데 시간을 보내고 있지. 명사는 전세계적으로 통용되는 형태가 아니고, 동사역시 폴리모피즘이 안돼. 수십년간 실세계에서 검증된 기술을 던져버리고는 과거에 실패한 시스템들의 방법을 다시 갖다 쓰고 있지. HTTP를 쓰기는 하는데, 그건 단지 보안 관리자와 대면할 일이 적고, 통신하는데 편하단 이유때문에 쓰는거고. 간단함 대신에 번쩍거리는 도구와 마법사에 의존하고 있어.

부인: 왜?

Ryan: 몰라…

부인: 당신이 뭐라고 좀 하지 그래?

Ryan: 그럴 생각이야.

Similar Posts:

Post a Comment

Your email is never published nor shared.