메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

간접지정(indirection)의 원리 : 이제 모든 사람은 값에 의한 전달과 참조에 의한 전달의 차이점을 배워야 한다.

한빛미디어

|

2010-10-25

|

by HANBIT

12,939

제공 : 한빛 네트워크
저자 : Jon Udell @judell
역자 : 전경원
원문 : The principle of indirection

프로그래머들은 일찍이, 메모리에 저장한 값과 메모리에 저장한 값을 가리키는 포인터의 (또는 참조나 주소의) 차이점을 배운다. 이것들은 프로그램 안에서 돌아다니다가 값에 의한 전달이나 참조에 의한 전달과 같은 구절을 만났을 때 중요한 차이점이 드러난다.

메모리의 어느 지점에 저장한 값이 6을 나타낸다고 가정하자. 값에 의한 전달 방식에서는 앞에서 저장한 6을 프로그램의 한 부분에서 다른 부분으로 복사한다. 메모리의 원래 위치에 있는 값을 8로 바꾸어도 6의 복사본은 여전히 6이다. 6은 "값에 의해 전달"되었다.

하지만 참조에 의한 전달 방식에서는 프로그램의 한 부분에서 다른 부분으로 6이라는 값이 아닌 6을 저장한 메모리의 위치를 가리키는 참조 또는 포인터를 복사한다. 이 경우엔 참조가 가리키는 위치의 값을 8로 변경하면 6의 메모리 위치를 가리키는 참조를 받은 부분도 역시 8을 나타내게 된다. 여기서 6은 "참조에 의해 전달"되었고 이 참조를 통해서 8로 변경되었다.

예전엔 프로그래머들이나 이런 미묘한 차이를 알아야 했지만 이제 웹이 등장하면서 이 차이는 모두에게 중요해졌다. 왜 그럴까? 포인터, 참조, 주소의 또 다른 이름이 바로 하이퍼링크이다. 우리는 매일 하이퍼링크를 사용한다. 하지만 거의 모든 사람이 "값에 의한 전달"과 "참조에 의한 전달"을 이해하지 못하고, 따라서 일상 업무에서 하이퍼링크를 잘 활용하지 못한다.

여기에 쉬워 보이지만 (쉬워 보이길 바란다) 알고 보면 대부분 사람들에게 매우 어려운 퀴즈가 있다. 누군가 당신에게 "X란 주제에 관한 어떤 정보를 가지고 있습니까?"라고 묻는다. 복수의 답을 고를 수 있다. 다음과 같이 두 가지 방법으로 답할 수 있다:

1. 목록을 만들어서 목록의 사본을 보낸다.
2. 목록을 만들어서 목록의 참조를 보낸다.

대부분의 사람이 1번 즉, 값에 의한 전달을 고른다. 이 경우에 그들이 보내는 값은 단어, 구, 문장, 절, URL 등으로 만들어진 것들의 목록이다. 이 목록은 종이에 출력할 수도 있고 손에서 손으로 건넬 수도 있다. 또는 타자로 입력해서 이메일이나 텍스트 메시지로 보낼 수도 있다. 어느 쪽이든 보내는 것은 목록의 사본이다. 원본은 원위치에 그대로 남아 있다. 원본을 변경해도 변경 사항이 사본들로 전파되어 가지 않는다.

소수의 사람들이 2번 즉, 참조에 의한 전달을 택하는데 값에 의한 전달을 택한 다수가 얻을 수 있는 두 가지 목표를 이들 역시 달성한다. 한 가지 목표는 "내가 당신에게 보내고 싶은 정보가 여기에 있습니다."라는 사회적 신호를 보내는 것이고 다른 하나는 실제 정보를 전달하는 것이다. 여러분이 값에 의한 전달을 택하던 참조에 의한 전달을 택하던 이 두 가지 효과는 얻을 수 있다.

하지만, 내가 여러분에게 목록의 사본 대신에 목록의 링크를 보내면 여러분은 네 가지 추가 혜택이 제공되는 살아 있는 목록에 접근할 수 있게 된다:

1. 목록의 출처가 확실해진다. 목록은 메모리의 특정 위치에 (즉, 클라우드 안의 URL에) 살아 있고 내가 관리하고 있으며 내 신분과 엮여 있다.

2. 목록은 항상 최신 정보로 갱신 된다. 내가 항목을 추가하면 여러분은 (그리고 모두가) 내가 보낸 링크를 따라서 생생하게 갱신된 목록을 보게 된다.

3. 목록은 사회적이다. 다른 사람이 내 링크를 인용하면, 난 그 인용을 찾아서 그에게 연락을 취할 수 있다.

4. 목록은 협력적이다. 여러분이 내 목록을 확장하고 싶어한다고 가정하자. 값에 의한 전달 세상에서는 내가 보낸 사본에 추가하는 것이 최선이 방법이다. 나는 여러분이 추가한 걸 볼 수 없을 거고, 이건 다른 모든 사람에게도 마찬가지이다. 하지만, 참조에 의한 전달 세상에서는 모두가 자신만의 목록을 간직할 수도, 여러 사람에게 참조를 공표할 수도, 관계 있는 것들을 결합해서 통합 목록을 만들 수도 있다.

(물론 공짜 점심은 없다. 여러분이 링크를 믿었는데 링크가 깨졌다면, 운이 없는 거다. 이번 주의 answers.oreilly.com에 실린 관련 기사에서 일시적인 링크 장애를 해결하는 방법에 관해 다룬다.)

네 번째 혜택은 다소 추상적인데 협업에 관한 것이다. 일반적인 실제 시나리오를 들어서 좀 더 명확하게 만들어보자. 여러분이 신문이나, 지역맞춤식 웹사이트, 또는 지역 사회의 정보와 연계된 어떤 것을 발행한다고 가정해보자. 그리고 내가 그 정보의 출처라고 가정하자. 오늘날 거의 항상 그러하듯이 여러분은 나에게 정보를 값으로 넘겨 달라고 요청할 것이다. 내가 지방 의회의 회의, 또는 교회의 저녁 만찬, 강변 대청소나 오픈 마이크(open mic)의 밤 을 홍보하고 있다면 여러분은 행사의 날짜와 시간, 개요를 이메일로 받거나, 여러분의 웹사이트에 이러한 정보를 일정한 형식으로 입력받기를 바랄 거다. 어느 방식이든, 요컨대 "당신의 정보에 대한 사본을 주세요."로 집약된다.

1994년 이전에는 다른 대안이 없었다. 내 원본은 서랍에 들어 있던 종잇조각이든지 하드드라이브에 있던 파일이든지 여러분에게 바로 제공되지 않았다. 정보를 값에 의해 전달할 수밖에 없었다. 비록 세상은 아직 이걸 택하지 않았지만 1994년 이후로 흥미로운 새 옵션이 생겼다. 이제 원본을 광대한 메모리와 같은 웹 안의 영구적이고 잘 알려진 주소에 놓을 수 있다. 그리고 이 원본을 참조에 의해 전달할 수 있다.

그렇게 지역 사회의 행사에 관한 정보를 제공하는 사람(시 정부, 교회, 환경 단체, 음악가)은 그들의 행사에 대한 정보를 참조로 게시할 수 있다. 기존의 웹사이트, 블로그, 트위터, 페이스북 등, 정보 제공자의 온라인 신분을 확인할 수 있는 곳이라면 어디든지 이들 참조를 나타낼 수 있다. 신문사, 지역맞춤식 웹사이트, 또는 이러한 것들과 연계된 정보 제공 업자들은 많은 정보의 출처를 결합하여 다양한 관점에서 여러 목적으로 정보를 보여주는 데 이러한 참조를 이용할 수 있다.

아직도 너무 추상적인 면이 있는데, 점 더 구체적으로 만들어보자. 시 정부는 의회와 위원회의 회의 일정을 제공한다. 지역 신문은 이 일정을 공급하고, 시민들은 이걸 이용한다. 일반적으로 행해지는, 값에 의한 전달 모형에서는 시에서 신문사에 행사 정보의 사본을 제공하고, 신문사는 시민에게 다시 사본을 만들어 제공하며, 일부 시민은 다시 사본을 만들어서 주변에 이 정보를 알린다. 그럼, 원본은 어디에 있을까? 시청에 있는 컴퓨터 안의 문서에 있다.

참조에 의한 전달 세상에서 원본은 클라우드 안의 고유한 URL에 놓여있다. 이 URL은 행사 목록을 가리킨다. 그리고 목록의 각 항목(각각의 행사 일정)도 고유한 URL을 갖는다. 시가 시 웹사이트에 HTML로 일정을 개시하면 시민들은 이 웹사이트에서 일정을 열람할 수 있다. 하지만 신문사에 행사 정보의 사본을 제공하는 대신에 신문사에 일정 피드로 향하는 링크를 제공한다. 신문사는 이 링크를 구독함으로써 시로부터 받은 정보가 시가 신경 쓴 만큼 시기적절하고 정확하며 완벽하다고 확신할 수 있다. 물론 신문사는 여전히 또 다른 사본인 출판본을 만들어야 한다. 하지만 신문사는 온라인으로 각 행사 정보를 전달해주는 행사 URL도 제공한다. 따라서 시민들은 시의 일정 URL을 직접 구독할 수도 있고, 시의 행사 정보 스트림과 개인의 행사 정보 스트림을 병합할 수도 있다.

지역 신문사가 아직 이 모형을 적용했을 것 같지는 않다. 그들이 중개매체가 없어지는 현상을 두려워할지도 모르겠다. 시민들이 결국에 일정 피드를 직접 구독한다면, 신문사가 시민에게 무슨 일이 일어나고 있는지 말해줄 필요가 없지 않을까? 하지만, 나는 이것이 진짜 문제라고 생각하지 않는다. 지역 사회의 관심을 매개하는 매체는 항상 필요할 것이고, 신문 혹은 이 분야로 들어오는 무엇이든지 계속 이러한 욕구를 충족시킬 것이다. 지역 사회의 정보 제공자로서의 역할은 참조에 의한 전달이 값에 의한 전달보다 훨씬 효과적으로 처리한다.

내가 생각하는 진짜 문제는 신문 편집자나 시 공무원 또는 시민의 머릿속에 참조에 의한 전달이라는 도구가 없다는 것이다. 우리는 프로그래머에게 간접 지정의 원리를 가르쳤다. 하지만 최근까지도 프로그래머를 제외한 사람들에게는 그럴 필요가 없다고 생각하고 간접 지정의 원리를 가르치지 않았다.

요즘 나는 교육자들이 생각에 관한 시스템과 디지털 지식 그리고 21세기의 기술에 관해 많은 이야기를 나눈다는 걸 알았다. 좋다! 이제 우리의 뜻을 체계화하자. 사람과 정보의 네트워크는 덧셈이나 곱셈의 교환법칙만큼이나 기초적인 원리가 지배한다. 간접지정도 이러한 원리 중 하나이다. 다른 원칙들로는 발행/구독 배급(pub/sub syndication), 범용 명명 규칙(universal naming), 자료 구조 등이 있다. 먼저 이것들을 적어 두자. 그런 다음 이것들을 가르칠 방법을 강구해야 한다.

관련 자료:
TAG :
댓글 입력
자료실

최근 본 상품0