• How I Explained REST to My Wife

  • Sunday, December 12, 2004
  • Wife: Who is Roy Fielding?
  • 부인 : 로이 필딩이 누구야?
  • Ryan: Some guy. He's smart.
  • 라이언 : 똑똑한 남자야.
  • Wife: Oh? What did he do?
  • 부인 : 그래? 그가 어떤일을 했는데?
  • Ryan: He helped write the first web servers and then did a ton of research explaining why the web works the way it does. His name is on the specification for the protocol that is used to get pages from servers to your browser.
  • 라이언 : 그는 첫번째 웹 서버들을 만드는데 참여하였고, 웹의 동작 원리에 대한 설명과 연구를 엄청 많이 한 사람이야. 그의 이름은 브라우저가 서버로 부터 페이지들을 가져오는데 쓰이는 프로토콜의 스펙에 적혀있지.
  • Wife: How does it work?
  • 부인 : 그게 어떻게 동작하는건데?
  • Ryan: The web?
  • 라이언 : 웹이 어떻게 동작하냐고?
  • Wife: Yeah.
  • 부인 : 응~
  • Ryan: Hmm. Well, it's all pretty amazing really. And the funny thing is that it's all very undervalued. The protocol I was talking about, HTTP, it's capable of all sorts of neat stuff that people ignore for some reason.
  • 라이언: 흠. 좋아, 그건 정말 놀라워. 그리고 재밌는것은 그게 정말 저평가 되었다는거야. 내가 말한 프로토콜(전송규약)HTTP는, 모든 멋진것들을 가능하게 하지만 어떤 이유에서인지 무시당하고 있어.
  • Wife: You mean http like the beginning of what I type into the browser?
  • 부인 : http 라는건 내가 브라우저에 처음으로 치는걸 말하는거야?
  • Ryan: Yeah. That first part tells the browser what protocol to use. That stuff you type in there is one of the most important breakthroughs in the history of computing.
  • 라이언 : 응, 그 첫번째 부분이 브라우저에게 무슨 프로토콜을 이용할지 알려주는거야. 당신이 거기에 입력하는 내용이야 말로 콤퓨터 역사에서 가장 중요한 혁신중의 하나이지
  • Wife: Why?
  • 부인 : 왜 그런 건데?
  • Ryan: Because it is capable of describing the location of something anywhere in the worldfrom anywhere in the world. It's the foundation of the web. You can think of it like GPS coordinates for knowledge and information.
  • 라이언 : 전세계 어디서든 상관없이 무엇이 어디있는지 말해줄 수 있거든. 웹의 기초라고 할수 있지. 일종의 지식과 정보의 GPS 좌표라고 생각하면 되.
  • Wife: For web pages?
  • 부인 : 웹 페이지들에 대한 좌표?
  • Ryan: For anything really. That guy, Roy Fielding, he talks a lot about what those things point to in that research I was talking about. The web is built on an architectural style called REST. REST provides a definition of a resource, which is what those things point to.
  • 라이언 : 음.. 모든것들에 대해서 말야.로이 필딩은 내가 이야기 했던 연구들에서 그런 것들에 대한 지적을 많이 이야기 하지. 웹은 REST 라고 불리는 아키텍쳐 스타일위에 만들어 졌지. REST는 뭔가를 가르키는 한 리소스에 대해 하나의 정의를 제공하는 거야.
  • Wife: A web page is a resource?
  • 부인 : 웹페이지도 리소스야?
  • Ryan: Kind of. A web page is a representation of a resource. Resources are just concepts. URLs--those things that you type into the browser...
  • 라이언 : 그런셈이지. 웹페이지는 한 리소스의 표현이야. 리소스는 단지 개념같은 거지.
    당신이 브라우저에 입력하는 URL 같은..
  • Wife: I know what a URL is..
  • 부인 : URL 이 뭔지 알아 ㅎ
  • Ryan: Oh, right. Those tell the browser that there's a concept somewhere. A browser can then go ask for a specific representation of the concept. Specifically, the browser asks for the web page representation of the concept.
  • 라이언 : 맞아. 그게 브라우저에게 어딘가에 대상이 있다고 말해주는거야.
    브라우져는 그 어딘가로 가서 그 대상의 특정 표현을 요청할 수 있고,
    구체적으로 브라우저는 그 대상의 표현인 웹페이지를 요청하는 거지.
  • Wife: What other kinds of representations are there?
  • 부인 : 그럼 다른 표현의 종류는 뭐가 있어?
  • Ryan: Actually, representations is one of these things that doesn't get used a lot. In most cases, a resource has only a single representation. But we're hoping that representations will be used more in the future because there's a bunch of new formats popping up all over the place.
  • 라이언 : 사실, Representations(표현)이라는 익숙한 표현은 아니야. 일반적으로, 리소스 라는 표현이 잘 쓰이지.
    하지만 우리는 Representation 이 좀더 많이 쓰이길 바래, 모든 분야에서 수많은 새로운 포멧이 있기 때문이지. (역주: 표현이 리소스에 비해 더 광의의 단어이므로 새로운 개념들을 포함하기에 더 적합하다고 생각하는 듯 합니다)
  • Wife: Like what?
  • 부인 : 예를 들자면?
  • Ryan: Hmm. Well, there's this concept that people are calling Web Services. It means a lot of different things to a lot of different people but the basic concept is that machines could use the web just like people do.
  • 라이언 : 음... 이런 컨셉이 있어, 사람들이 '웹 서비스' 라고 부르는.
    이건 많은 사람들에게 각각 다른 의미로 이해되고 있어, 하지만 기본 개념은 기계들이 웹을 사람들이 하는것 처럼 사용할수 있다는 거야.
  • Wife: Is this another robot thing?
  • 부인 : 그건 뭐 로봇같은 건가?
  • Ryan: No, not really. I don't mean that machines will be sitting down at the desk and browsing the web. But computers can use those same protocols to send messages back and forth to each other. We've been doing that for a long time but none of the techniques we use today work well when you need to be able to talk to all of the machines in the entire world.
  • 라이언 : 아니, 그건 아니고. 기계가 책상앞에 앉아서 웹 브라우징을 하는걸 말한게 아냐.
    컴퓨터들이 서로 똑같은 프로토콜로 메세지를 보내고 받는걸 이야기 한거지.
    인간들은 오랬동안 해왔던일이지만, 당신이 세상의 모든 기계들에게 이야기 할 필요성이 있을때 어떤 현존하는 기술로도 그게 되지 않잖아.
  • Wife: Why not?
  • 부인 : 왜 안되?
  • Ryan: Because they weren't designed to be used like that. When Fielding and his buddies started building the web, being able to talk to any machine anywhere in the world was a primary concern. Most of the techniques we use at work to get computers to talk to each other didn't have those requirements. You just needed to talk to a small group of machines.
  • 라이언 : 왜냐면 그렇게 사용되도록 디자인되지 않았으니까. 필딩과 동료들이 웹을 개발하기 시작했을때, 세상 어느곳에 있던 어떤 컴퓨터와 대화를 가능하게 하는것이 첫번째 목표였어. 우리가 다른 컴퓨터와 대화를 하는데 쓰였던 대부분의 기술은 이러한 요구사항이 없었지. 소그룹의 컴퓨터끼리만 대화를 하면 됐으니깐.
  • Wife: And now you need to talk to all the machines?
  • 부인 : 그럼 지금은 모든 컴퓨터에 대화할 필요성이 있어?
  • Ryan: Yes - and more. We need to be able to talk to all machines about all the stuff that's on all the other machines. So we need some way of having one machine tell another machine about a resource that might be on yet another machine.
  • 물론이지. 우린 다른 컴퓨터들이 가지고 있는 모든 것들에 대해 모든 컴퓨터들에게 대화할 필요성이 있지. 즉 우리는 다른 컴퓨터가 가지고 있을지도 모를 리소스를 물어볼 방법이 필요한거지.
  • Wife: What?
  • 부인 : 그게 무슨 말이야?
  • Ryan: Let's say you're talking to your sister and she wants to borrow the sweeper or something. But you don't have it - your Mom has it. So you tell your sister to get it from your Mom instead. This happens all the time in real life and it happens all the time when machines start talking too.
  • 라이언 : 당신하고 처제하고 이야기 하고 있다고 해보자. 처제는 청소기나 다른걸 빌리고 싶어해. 하지만 당신은 가지고 있지 않고, 장모님은 가지고 있다고 해봐. 그럼 당신은 처제에게 장모팀한테 빌리라고 말하겠지. 이게 현실에서 항상 일어나는 일이고. 컴퓨터들이 대화하기 시작할때 일어나는 일이지.
  • Wife: So how do the machines tell each other where things are?
  • 부인 : 근데 어떻게 컴퓨터가 어디에 뭐가 있는지 서로 이야길한다는거야?
  • Ryan: The URL, of course. If everything that machines need to talk about has a corresponding URL, you've created the machine equivalent of a noun. That you and I and the rest of the world have agreed on talking about nouns in a certain way is pretty important, eh?
  • 라이언 : 물론 URL 이지. 만약 컴퓨터가 대화해야할 모든것들이 URL 을 가지고 있다면, 당신은 the machine equivalent of noun 을 만들어 낸거지. 당신, 나 그리고 다른 세상의 사람들이 확실하게 어떤 명사에 대해 동의한다는 것은 매우 중요하지. 그치?
  • Wife: Yeah.
  • 부인 : 응
  • Ryan: Machines don't have a universal noun - that's why they suck. Every programming language, database, or other kind of system has a different way of talking about nouns. That's why the URL is so important. It let's all of these systems tell each other about each other's nouns.
  • 라이언 : 컴퓨터는 공통적인 명사를 알지 못해 - ㅄ같지. 모든 프로그램 언어, 데이터베이스 또는 다른 종류의 시스템들은 모두 다른 명사들로 이야기를해. 그게 왜 URL이 중요한가야. 모든 이런 시스템들이 서로에게 알아 들을수 있는 명사로 이야기할수 있게 해주는거야
  • Wife: But when I'm looking at a web page, I don't think of it like that.
  • 부인 : 근데 웹페이지를 볼땐 난 그런 생각 안하는데?
  • Ryan: Nobody does. Except Fielding and handful of other people. That's why machines still suck.
  • 라이언 : 아무도 안하지. 필딩과 손에 꼽는 몇몇 사람 빼곤 말야. 그래서 아직도 컴퓨터가 ㅄ같은 거야.
  • Wife: What about verbs and pronouns and adjectives?
  • 부인 : 그럼 동사나 대명사나 형용사는?
  • Ryan: Funny you asked because that's another big aspect of REST. Well, verbs are anyway.
  • 라이언 : 재밌네 왜냐면 그건 REST 의 다른 큰 측면이거든. 음 동사야 어쨌든..
  • Wife: I was just joking.
  • 부인 : 난 그냥 농담이었어.
  • Ryan: It was a funny joke but it's actually not a joke at all. Verbs are important. There's a powerful concept in programming and CS theory called polymorphism. That's a geeky way of saying that different nouns can have the same verb applied to them.
  • 라이언 : 재밌는 농담이었는데 그게 그냥 농담은 아니야. 동사는 중요해.
    프로그래밍과 컴퓨터공학이론에서 중요한 개념이 있는데 Polymorphism (다형성) 이라고 하지. 다른 명사들은 각각을 적용하는 같은 동사를 가질수 있다는 거야.
  • Wife: I don't get it.
  • 부인 : 뭔 솔
  • Ryan: Well.. Look at the coffee table. What are the nouns? Cup, tray, newspaper, remote. Now, what are some things you can do to all of these things?
  • 라이언 : 음.. 커피테이블을 보자. 뭐가 명사지? 컵, 트레이, 신문, 리모콘, 그럼 당신은 이 모든것들로 뭘 할수 있지?
  • Wife: I don't get it...
  • 부인 : 모르겠는데...
  • Ryan: You can get them, right? You can pick them up. You can knock them over. You can burn them. You can apply those same exact verbs to any of the objects sitting there.
  • 라이언 : 당신은 그것들을 가질수 있어. 맞지? 주울수도 있고. 두드릴수도 있어. 태워버릴수도 있고. 같은 동사들을 저기 모든것들에게 적용 시킬수 있지.
  • Wife: Okay... so?
  • 부인 : 그래... 그래서?
  • Ryan: Well, that's important. What if instead of me being able to say to you, "get the cup," and "get the newspaper," and "get the remote"; what if instead we needed to come up with different verbs for each of the nouns? I couldn't use the word "get" universally, but instead had to think up a new word for each verb/noun combination.
  • 라이언 : 음. 이건 중요해. 만약에 내가 컵을 가져와, 신문 가져와, 리모콘 가져와라고 말하는 대신에 어떤 말을 써야 한다면?; 만약 내가 "가져와" 를 공통적으로 쓰지못하고, 각각의 명사마다 다른 동사를 써야 한다면, 대신에 각 동사/명사 조합에 맞는 새로운 말을 만들어 내야 하겠지?
  • Wife: Wow! That's weird.
  • 부인 : 우와! X같네?
  • Ryan: Yes, it is. Our brains are somehow smart enough to know that the same verbs can be applied to many different nouns. Some verbs are more specific than others and apply only to a small set of nouns. For instance, I can't drive a cup and I can't drink a car. But some verbs are almost universal like GET, PUT, and DELETE.
  • 라이언 : 그래 그거야. 우리의 뇌는 죠낸 똑똑해서 많은 서로 다른 명사에게 같은 동사를 적용하는 법을 알고있어. 어떤 동사는 좀더 제한적이긴하지만... 난 컵을 운전할수 없고 차를 마실수 없는거 처럼. 하지만 몇몇 동사는 거의 공용이지 GET, PUT 그리고 DELETE 같은것들
  • Wife: You can't DELETE a cup.
  • 부인 : 당신은 컵을 DELETE 할수 없어.
  • Ryan: Well, okay, but you can throw it away. That was another joke, right?
  • 라이언 : 음..그래. 하지만 그건 잊어버려, 농담 맞지?
  • Wife: Yeah.
  • 부인 : 응
  • Ryan: So anyway, HTTP--this protocol Fielding and his friends created--is all about applying verbs to nouns. For instance, when you go to a web page, the browser does an HTTP GET on the URL you type in and back comes a web page.
  • 라이언 : 어쨌든, HTTP --필딩과 친구들이 만든 프로토콜-- 은 동사를 명사에 적용 시키는 거야. 당신이 웹페이지에 갈때, 브라우저는 당신이 입력한 URL 에 대해 HTTP GET 을 하고 페이지가 짠 나타나는 거지.
  • Web pages usually have images, right? Those are separate resources. The web page just specifies the URLs to the images and the browser goes and does more HTTP GETs on them until all the resources are obtained and the web page is displayed. But the important thing here is that very different kinds of nouns can be treated the same. Whether the noun is an image, text, video, an mp3, a slideshow, whatever. I can GET all of those things the same way given a URL.
  • 웹페이지들은 보통 이미지들을 포함하잖아 그치? 그것들은 다른 리소스들이야. 웹페이지는 단순히 이미지에 대한 URL을 표시하고 있고. 브라우저가 다시 HTTP GET 을 해서 웹페이지가 포함한 모든 리소스들을 가져와서 표시해 주는거지.
    여기서 중요한점은 매우 다른 명사들이 똑같이 처리될수 있다는 거야.
    그 명사가 이미지, 텍스트, 비디오, MP3, 슬라이드쇼, 뭐든간에 나는 주어진 URL 로 똑같이 GET할수 있는거지.
  • Wife: Sounds like GET is a pretty important verb.
  • 부인 : 듣기에 GET 이 꽤 중요한 동사 같네.
  • Ryan: It is. Especially when you're using a web browser because browsers pretty much justGET stuff. They don't do a lot of other types of interaction with resources. This is a problem because it has led many people to assume that HTTP is just for GETing. But HTTP is actually ageneral purpose protocol for applying verbs to nouns.
  • 라이언 : 맞아. 특히 당신이 웹브라우저를 사용할 때 그렇지. 브라우저들은 뭔갈 많이 GET 하고 있거든. 리소스들과 다른 타입의 소통은 별로 하지않아. 이게 많은 사람들이 HTTP 는 GET 만 한다고 인식하게 한 문제지. 하지만 HTTP 는 사실 동사를 명사에 적용하는 것에 대한 목적을 가진 프로토콜이야.
  • Wife: Cool. But I still don't see how this changes anything. What kinds of nouns and verbs do you want?
  • 부인 : 멋지네. 하지만 난 아직도 이게 뭘 바꾼다는건지 모르겠어. 무슨 명사와 동사를 말하는거야?
  • Ryan: Well the nouns are there but not in the right format.
  • 라이언 : 음. 명사들은 있지만 딱 정확한 포멧은 없어.
  • Think about when you're browsing around amazon.com looking for things to buy me for Christmas. Imagine each of the products as being nouns. Now, if they were available in a representation that a machine could understand, you could do a lot of neat things.
  • 당신이 크리스마스때 날 위해 물건을 사기위해 아마존을 브라우징 하고 있다고 생각해봐.
    각 물건들이 명사라고 생각해봐. 이제 그것들이 기계가 알수있는 표현이라고 한다면, 당신은 많은 멋진 것들을 할수 있어.
  • Wife: Why can't a machine understand a normal web page?
  • 부인 : 왜 컴퓨터는 일반 웹페이지를 이해할수 없어?
  • Ryan: Because web pages are designed to be understood by people. A machine doesn't care about layout and styling. Machines basically just need the data. Ideally, every URL would have a human readable and a machine readable representation. When a machine GETs the resource, it will ask for the machine readable one. When a browser GETs a resource for a human, it will ask for the human readable one.
  • 라이언 : 그건 사람들이 이해하라고 디자인 되었기 때문이야. 컴퓨터는 레이아웃이나 스타일에 신경쓰지 않아. 컴퓨터는 기본적으로 데이터만 필요하지. 모든 URL 은 사람도 컴퓨터도 읽을수 있는게 이상적이야. 컴퓨터가 리소스를 GET 할때 기계가 읽을수 있는 걸로 요청을 하지. 브라우저가 리소스를 사람을 위해 GET 할때는 사람이 읽을 수 있는 걸로 요청을 하고.
  • Wife: So people would have to make machine formats for all their pages?
  • 부인 : 그럼 사람들은 컴퓨터를 모든 페이지에 맞게 만들어야 하는건가?
  • Ryan: If it were valuable.
  • 라이언 : 그게 가치가 있다면 그래야겠지.
  • Look, we've been talking about this with a lot of abstraction. How about we take a real example. You're a teacher - at school I bet you have a big computer system, or three or four computer systems more likely, that let you manage students: what classes they're in, what grades they're getting, emergency contacts, information about the books you teach out of, etc. If the systems are web-based, then there's probably a URL for each of the nouns involved here: student, teacher, class, book, room, etc. Right now, getting the URL through the browser gives you a web page. If there were a machine readable representation for each URL, then it would be trivial to latch new tools onto the system because all of that information would be consumable in a standard way. It would also make it quite a bit easier for each of the systems to talk to each other. Or, you could build a state or country-wide system that was able to talk to each of the individual school systems to collect testing scores. The possibilities are endless.
  • 봐바. 우린 이걸 많은 추상화로 이야기를 했어. 이걸 어떻게 현실의 예로 이야기할수있을까?
    당신은 학교 선생님이야. 난 당신이 당신이 학생들을 관리하도록 하는 하나 또는 셋 넷의 커다란 컴퓨터 시스템을 가지고 있다고 생각해. 학생들이 어떤 수업을 듣는지, 점수는 어떤지, 비상연락망이나 당신이 가르치는 책의 정보 들 같은 거 말야. 만약 그 시스템이 웹베이스라면 방금 이야기에서 나온 명사들 마다 URL 이 있을꺼야. 학생, 선생님, 수업, 책, 교실 등등. 이제 URL 을 통해 브라우저는 당신에게 페이지를 줄꺼야. 만약 그게 컴퓨터가 읽을수 있는 표현으로 되어있다면, 그 시스템에 있는 새로운 도구로 읽는것은 쉬울거야, 표준적인 방법으로 사용 가능한 정보이기 대문이지. 그건 다른 컴퓨터 시스템들 간에 대화를 하는데 더 쉽게 만들거야. 또는 당신이 각각의 학교의 시험성적을 수집하는 주나 국가 범위의 시스템을 만들수도 있을꺼고. 가능성은 무궁하지.
  • Each of the systems would get information from each other using a simple HTTP GET. If one system needs to add something to another system, it would use an HTTP POST. If a system wants to update something in another system, it uses an HTTP PUT. The only thing left to figure out is what the data should look like.
  • 각가의 시스템은 간단한 HTTP GET 으로 정보를 얻겠지. 만약 한 시스템이 다른 시스템에 뭔가를 추가하고 싶다면, HTTP POST 를 쓰면 될꺼고. 뭔갈 업데이트 하고 싶다면 HTTP PUT 을 쓰면 되지. 이제 남은건 데이타를 어떻게 보여주면 좋을까야.
  • Wife: So this is what you and all the computer people are working on now? Deciding what the data should look like?
  • 부인 : 이게 당신과 컴퓨터 종사자들이 일하는거야? 데이터를 어떻게 보여줄지 결정하는거?
  • Ryan: Sadly, no. Instead, the large majority are busy writing layers of complex specifications for doing this stuff in a different way that isn't nearly as useful or eloquent. Nouns aren't universal and verbs aren't polymorphic. We're throwing out decades of real field usage and proven technique and starting over with something that looks a lot like other systems that have failed in the past. We're using HTTP but only because it helps us talk to our network and security people less. We're trading simplicity for flashy tools and wizards.
  • 라이언 : 슬프게도 아니야. 대신에 대다수는 유용하지도 설득력 있지도 않은 다른 방법으로 이걸 하려고 복잡한 명세서의 레이어들을 쓰느라 바쁘지. 명사들은 공용이 아니고, 동사들은 다형적이지 않은.... 우린 현실에서 수십년간 사용되고 검증된 기술들을 버리고 과거에 실패한 비슷한 시스템들을 만들고 있어. 우린 HTTP를 사용하지만 단지 네트워크워 보안에 신경을 덜 쓸수 있게 해주기때문이야.
  • Wife: Why?
  • 왜?
  • Ryan: I have no idea.
  • 모르겠는데
  • Wife: Why don't you say something?
  • 뭐라도 말하는게 어때?
  • Ryan: Maybe I will.
  • 아마 그럴꺼야
0 Comments