썰렁한 엔지니어

Adventures of Bilbo Baggins

'잡생각' - 64

  1. 2008/07/06  |   웹사이트 기획 (3)
  2. 2008/05/06  |   버그란?
  3. 2008/03/19  |   하나의 URL 여러개의 리소스
  4. 2008/01/22  |   MSN, SNS (10)
  5. 2008/01/18  |   XFN, ACL (8)
  6. 2007/11/09  |   회색지대의 문서화 (7)
  7. 2007/11/05  |   많은 인력 (6)
  8. 2007/10/22  |   선입견 (11)
  9. 2007/06/08  |   간단한 안티 피싱 방법 (5)
  10. 2007/06/05  |   로그인 유지 기능 (9)

웹사이트 기획

2008/07/06 00:07  |   잡생각  |   최호진
잡생각이 떠올라 잠을 더 이루지 못하고 컴퓨터를 켜게 되었다. 요즘 내 머리에 생각의 똬리를 틀고 있는 주제중의 하나가 "기획"이라는 단어이다.

생각없는이라는 단어를 앞에 좀 붙여 몇가지 말을 만들어 보기로하자.
생각없는 개발자, 생각없는 그래픽 디자이너, 생각없는 UI 디자이너, 생각없는 퍼블리셔, 생각없는 홍보담당.
이런 단어들을 만들어 놓아야, 그 옆에 생각있는 기획자라는 역할이 생겨난다. 위의 누구라도 생각하기 시작하면, 피곤해진다. 과거, 개발자와 디자이너가 웹이라는 기술에 대한 깊은 이해없이 마구 시장에 쏟아져 들어오던 시절, 누군가는 지휘를 해야했고, 웹마스터가 변신하여 기획이라는 고유의 영역을 가진 타이틀을 생산해내지 않았던가.
개발자는 서버사이드 스크립트부터 Javascript, CSS를 모두 할 줄 알아야한다.  디자이너는 자신의 그래픽디자인이 어떤 태그로, 어떻게 배치될지를 알아야한다. UI는 구현상의 javascript, 서버사이드 스크립트 기술들을 알고 적절한 사용자 경험을 이끌어내야한다.
개발조직이 위와 같이 목표를 두고 자기계발을 하지 않는 이상,
  • 책임을 회피하고, 소극적인 반쪽짜리 개발자를 양산할 뿐이다.
  • 멈췄을 때 보기 좋은 그래픽을 만들어내는 디자이너를 만들 뿐이다.
흔하디 흔한 웹 2.0을 다시 들먹여서 미안하지만,
웹 2.0식 개발이란 심하게 말하면, 모든 생각 없었던 웹 종사자들이 자기들의 몸값을 높히기 위한 의도적 포장이며, 정색을하고 말하면, 다른 역할에 대한 깊은(!) 기술적 이해를 바탕으로 상호 작업하는 문화인 것이다.
이렇게 변화하고 있는데, 기획자의 단어가 던져주는 역할은 무엇일까? 모르겠다. 정말 모르겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/07/06 00:07 2008/07/06 00:07

버그란?

2008/05/06 05:39  |   잡생각  |   최호진
버그란 내 사고력의 한계에 꽂혀 있는 깃발이다.

zzz...
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/05/06 05:39 2008/05/06 05:39

하나의 URL 여러개의 리소스

2008/03/19 03:02  |   잡생각  |   최호진

URL Fetch

http://coolengineer.com/ 이라는 주소를 브라우져에 입력하면, 흔히 웹페이지를 기대하기 쉽습니다. 좀 기술적인 표현을 써서,
Content-type: text/html
라는 데이터 스트림을 받게 되는 것이죠. 사실 브라우져 입장에서 보면 어떤 Content-type이 전송되어 올지 아무런 사전 정보없이 막연히 기다리는 것입니다. 오직 사람만이 웹페이지라고 기대하고 주소에 입력합니다. 브라우져의 마음가짐은
Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png
뭐 이정도로 표현된다고나할까요? 즉, 사람에 의해 입력한 주소는 브라우져의 입장에서는 어떤 Content가 올지 기대하지도 않았던 뭔가를 받는 셈입니다.

URL 공유?

그런데 이런 코드는 어떨까요? /index.php 의 내용입니다.
<html>
<head>
<link type="text/css" href="/index.php" rel="stylesheet" />
<script type="text/javascript" src="/index.php" ></script>
</head>
<body>
<img type="image/png" src="/index.php" />
</body>
</html>
CSS도 JavaScript도 Image도 심지어 이 HTML도 모두 /index.php 를 통해 전달됩니다. 물론 이런 장난을 할 때는 Cache-control: no-cache 로 해야겠지요. 그러나 이 코드가 잘 동작하기 위해서는 브라우져가 /index.php를 가져올 때, 이렇게 해야합니다.

최초.
GET /index.php HTTP/1.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png

다음.
GET /index.php HTTP/1.0
Accept: text/css

GET /index.php HTTP/1.0
Accept: text/javascript

GET /index.php HTTP/1.0
Accept: image/png
이렇게 Accept가 전송되어 오면 오죽 좋으랴마는, 실상은 그러하지 못하며. 따라서, 일반적인 웹브라우져로는 맨 위 코드에 해당하는 HTML이 존재할 수 없게 됩니다. 굳이 한다면, 순서에 따라 index.php의 내용을 내려주면 되겠지만, 가당치도 않겠죠.

맨 처음 화두를 꺼냈을 때와 두번째 Accept의 변경이 있을 수 있는 상황을 고려해본다면, 가장 큰 차이는, "특정 문맥 상에서의 URL 페치의 차이라 할 수 있을 것"입니다.

즉, 용도에 따라 URL을 가져오려한다면, 그 용도가 서버에 전달 될 수 있을 때, URL은 중복 될 수 있다는 뜻입니다. 즉, http://coolengineer.com/ 과 ftp://coolengineer.com/ 의 차이가 아닌 http://coolengineer.com/ 내에서의 용도 분화에 따라 다른 것을 수신할 수 있는 것을 의미합니다.

다음엔, 이 생각으로 좀 더 발전된 주제인 OpenID가 바라보는 URL에 대한 생각을 정리해보려합니다. 기대해주세요.
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/03/19 03:02 2008/03/19 03:02

MSN, SNS

2008/01/22 22:17  |   잡생각  |   최호진
메신저야말로 SNS의 가장 밀접한 결합상황의 응용프로그램입니다. 많이 사용하는 MSN을 이 관점에서 보면, 윈도우 98이 널리 세상이 설치되어 쓰이고, 메신저 시장 초창기에 군웅이 할거하던 시절에, MSN이 다른 메신저에 비해 착한(?) 기능이라고 추가했던 두 가지 기능은,
  • 친구의 온라인 상태와 걸어오는 말을 느닷없이 올라오는 상자에 표시해주던것
  • 친구가 타이핑하고 있는 것을 윈도우 아래 프레임에 일러바치는 행위
당시에는 너무나 생소해서, 눈없는 인형이 무섭다는 사람도 있었고, 내가 타이핑하는 것을 미리 알려주는 것을 사생활 침해라고 생각되었으나, MSN은 아주 과감히 유지 했습니다.

지금 돌아 보건데, 이젠 거의 모든 메신저가 동일한 UI를 채택하게 될정도의 파격적인 UI의 도입이었습니다.

단순히 SNS의 관점에서 생각해보면, 사실 SNS라는 것의 가장 핵심이라고 할 수 있는 기능이 "요즘 그년/놈의 시키는 뭐하고 사나"를 지속적으로, 그것도 은연중에 알려주는 아주 중요한 기능인 것이죠. 또한 한 번, 온라인 상태가 되면, 다른 일을 하면서도 박자를 맞춰가면서 대화를 할 수 있게 되었습니다. 즉, 대화가 끊기지 않고, 그 순서가 잘 꼬이지 않고 리듬을 타게 해주는 중요한 기술이라고 할 수 있습니다.

SNS는 응용프로그램에서 하나의 사이트에 이르기까지 많은 모습이 존재합니다. 앞으로도 메신저들이 채택했듯이 SNS도 사이트들도 비슷한 양상으로 전개되고 있습니다. 어떤 기능이 SNS의 필수적인 요소가 될 것인지를 미리 도입하고 강화하는 것은 중요한 일이라 생각됩니다.

  • 어떤 기술이 되든, 그 기술은 인간 관계를 공교히 해주는 기술이 될 것이며,
  • 어떤 기술이 되든, 그 기술은 인간 관계를 합법적으로, 재미있게 이용하는 기술이 될 것이며,
  • 어떤 기술이 되든, 관계에서 주고 받는 흐름에 리듬을 실어 주는 기술이 될 것입니다.
잠이 안오는 퇴근길에 생각나서 적어봅니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/01/22 22:17 2008/01/22 22:17

XFN, ACL

2008/01/18 01:28  |   잡생각  |   최호진
텍스트큐브의 ACL을 바꿔놓은 장본인으로서 이제 근시일내에 이룰 수 있는 꿈을 하나 꿔보려고 합니다. 바로, XFN을 응용한 ACL 입니다. XFN은 "XHTML Friends Network" 이고, ACL은 "Access Control List"란 뜻입니다.즉, 어떤 홈페이지(XHTML)에 있는 친구정보를 기반으로 접근 권한을 주겠다는 것이지요.

가능한 상황은 다음과 같습니다.
  • 블로거 A씨는 자신의 블로그 중에 일부 게시물에 대해서 친구로 등록한(블로그 롤-사이드바의 링크 목록에 들어 있는) 사람에게만 읽기 권한을 주겠다.
  • 블로거 B양은 idtail.com이나 myid.net의 네트웍 혹은 그룹에 들어 있는 사람에 한해서 글을 읽을 수 있도록 제한 하고 싶다.
  • 블로거 C옹은 자신이 속한 협회의 블로그 D에 링크 되어 있는 동료들에게만 글을 읽을수 있도록 하고 싶다.
말그대로, 특정 그룹(?)을 위한 게시물을 운영하는 방법에 대한 방법을 제시하고 싶은 것입니다.

URL 소유자로서의 OpenID에 대해 쓴 글에서 비슷한 개념을 얘기한 적이 있는데요, 방문자가 특정 URL의 소유자임을 확인할 수 있고, 그 사이트가 신뢰하는 URL에 기재 되어 있는 친구 정보에 등록되어 있는 URL이라면, 특정 글을 읽을 수 있게 하는 것입니다. 즉, 위에 나열한 경우에 해당하는 친구나 동료의 목록을 XFN으로 표현하는 페이지가 있다면, 그 페이지가 신뢰할만하게 운영되고 있을 때, URL을 OpenID로 확인하여 접근 권한을 주는 것입니다.1

XFN의 경우 HTML 페이지에 대한 접근이 인증을 받지 않고 누구나 접근 가능한 상태로 노출되므로, 멤버조차 알 수 없는 폐쇄 그룹을 만들기 약간 어려운 감이 없지 않아 있으나, 위에 나열한 상황의 경우 어느 정도 가능하리라 보여집니다.

이를 구현하기 위해 가장 쉬운 방법은 텍스트큐브의 분류관리화면에는 공개 설정을 이용하는 것입니다. 현재는 카테고리 자체를 폐쇄할 수 있습니다. 여기에 OpenID 로그인할 때, 등록된 카테고리별 XFN 페이지들을 방문하여 권한을 줄지 확인한다면 상당히 근사한 구현을 만들 수 있으리라 보여 집니다.

여러분들의 의견을 바랍니다.

PS. 현재 myid.net에서는 그룹정보를 가져오는 것에 대한 방법이 제시되어 있습니다.2 아무나 어떤 그룹에 대해 XFN으로 접근이 가능한 것인가요?
크리에이티브 커먼즈 라이센스
Creative Commons License
  1. 블로그의 일반계정을 이용할 경우, OAuth를 도입하면 확인할 수 있습니다. [Back]
  2. http://myid.springnote.com/pages/300337.xhtml [Back]
2008/01/18 01:28 2008/01/18 01:28

회색지대의 문서화

2007/11/09 00:43  |   잡생각  |   최호진
지금 말하고자하는 것에는 문서화하기 귀찮은 간단한 작업들에 대한 이야기이다.

간단한 작업들이 사실은 스크립트 수준으로 만들어지는 팀의 단순반복적인 일거리 해소 성격의 것들이 많다. 그런데, 사실 그 사람 혹은 그 팀의 수준을 그것으로 알아 볼 수가 있다.

All-round player가 모이기는 사실 힘들다. 모든 사람이 똑같이 실력이 있을 수가 없다. 아마 모두 같다면 오히려 그 팀이 잘 돌아갈지도 의문이다.

걱정인 것은, 문서화되지 않은 짜잘한 작업들을 내용만 봐도 슥슥슥 알아주는 친구가 있다면, 문서화가 굳이 많이 필요치 않겠건만, 그렇지 않은 경우 어느 정도 설명을 해주다가 주변이야기도 겯들이다 보면, 짜잘한 작업에서부터 무슨 환타지 소설이 나온다.

언젠간 문서화 하겠지 (여기서 언젠간이란 퇴사 혹은 전환배치? 정도의 충격을 말하는 것 같다.)라고 생각될 정도의 귀찮은 작업들은 사실 보여지는 몇 십줄의 코드만 가지고도 대화가 통해야한다.

내가 이 글을 쓰면서 위안받고 싶은 것은, 이제 누군가를 아래서부터 차근차근 설명할 마음의 여유를 잃었음에도 내 이런 상태가 정상이야(!)라는 말을 듣고 싶어서인가 보다.

누가 날 이 달걀 껍질 안에서 꺼내줘.

크리에이티브 커먼즈 라이센스
Creative Commons License
2007/11/09 00:43 2007/11/09 00:43

많은 인력

2007/11/05 11:46  |   잡생각  |   최호진
동원할 수 있는 인력이 많다거나, 휘하의 부하 직원이 몇이다거나 하는 말 속에 오류가 있을 수 있는 것이 "시간"에 대한 것이다. 사실 저런 류의 말은 "지금 당장 동원할 수 있는~" 이라는 말이 생략된 것이며, 이것은 무슨일이 생길지 모르는 미래에 대한 불안감을 없애기 위한 조직 구조일 뿐이다.

내가 미래를 어느 정도 예측할 수 있고, 지금 있는 인력에 대한 투입 순서를 조절 할 수 있다면, 상당수 해결 가능한 일이다. 그러나 미래를 예측하기란 쉽지않고, 현재의 불안은 계속 존재한다.

사람이 없다고 소리칠 때, 로드맵을 세우고 그것으로 외부를 설득할 수 있고, 내부의 기강을 잡을 수 있는 것이 "건조한 인력관리"의 기본이 아닐까? (습윤한 인력관리는 대화와 기름칠을 말하는것) 팀이 작을 수록 미래를 예측가능 한 상태로 놓는 것을 항상 기본적인 목표로 삼아야한다.

(이게 잘 되냐고요....)
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/11/05 11:46 2007/11/05 11:46

선입견

2007/10/22 14:15  |   잡생각  |   최호진
바쁜 생활 속에서도 생각은 멈출 수 없기 때문에 생각하는, 아니 어쩌면 생각해주는 그런 생활을 하다보면, 생각의 고삐를 내 마음대로 할 수 없기 때문에 생각이 가는 대로라는 표현 그대로 살기 마련이다.

첫인상과 선입견이라는 단어들을 어렸을 때부터 경계해야할 개념으로 교육받은 나는 말 그대로 첫인상이나 선입견과 상관없이 판단하려고 부단히 노력한 결과, 새로운 사람에 대해 선입견을 갖지 않는 것도 아니고, 그렇다고 그 사람을 쉽게 파악해내는 능력도 없는 촉수가 거세된 살아 있는 생명체가 된거 같다. (생명체라는 뉘앙스는 mortal을 생각했지만 적절한 단어가 안떠오르네)

새로운 조직에 들어가고, 새로운 커뮤니티를 만나고, 새로운 사람들을 만나게 되며, 특히나 돈이 오고 가야는 하는 상대를 만나게 될 경우, 즉, 가치 교환이 첨예한 상황이 되면 될 수록 선입견에 의한 판단을 하는 것이 신속하고, 때론 정확하기까지 하다.

선입견을 갖지 말라는 말은 자라는 청소년에게나 미덕으로 다가가는 것이지, 산전수전을 겪고 있는 나에게까지 필요한 것은 아닌것같다. (난 왜 거꾸로 사는 걸까?)

이런 생각들이 영글기 전에 다가온 것은, 어떤 사람이나 조직, 단체를 처음 본 그대로, 필요성 그 이상도 그 이하도 아닌 상태로 만나는 것을 연습해왔다.

자취를 하게 되면 아무리 친한사이라도 싸우게 된다.
교회 조직에 깊숙이 들어가게 되면 오히려 추한 모습에 실망하게 된다.
훌륭한 사람과 계속 일하게 될지라도, 언젠가는 그 사람의 추하고 때론 사악한 면까지 보게 된다.
선한 의도를 가지고 있는 집단이라할지라도 인간의 알력에 대한 소식은 간간히 듣게 된다.

이런 것들에 실망하지 않으려고, 그 10년간 최소한의 인터페이스만 유지한 채, 소극적으로 살아왔다. 앞으로도 크게 변할 것 같진 않아 보인다. (최소한이 될 수 없는 유일한 인터페이스는 아마 아내(나아가 가정)이 아닌가 싶다.)

최소한의 인터페이스란 목적 달성(?)을 위해 필요한 수준 정도로 교류하는 것을 말한다. 상처 받지 않고, 상처 주지 않기 위해 소극적으로 이기적인 자세를 취하는 것이 지금의 나다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/10/22 14:15 2007/10/22 14:15

간단한 안티 피싱 방법

2007/06/08 01:03  |   잡생각  |   최호진
피싱사이트란 주로 금융권 사이트와 전자상거래 사이트가 주 타겟이 되어 있으며, 방법은 다음과 같습니다.
  1. 호스트이름이 완전히 다르거나 IP로 되어 있지만, 보여지는 내용이 동일하게 구성함
  2. 호스트 이름을 비슷하게 만들어 속이는 경우.
  3. hosts 파일을 수정하여 호스트 접속 재전환 (트로이목마 감염 및 1회 필요)
  4. 소켓 관련 라이브러리 치환을 (DNS요청을 바꾸는 방법등으로) 통해 접속 재전환(트로이목마 감염 및 상주)
  5. 필터 드라이버에 설치되어 호스트 접속 재전환 (트로이 감염 및 상주 필요)
1,2 번의 경우는 주소가 보이는 상황에서라면 눈으로 쉽게 알 수 있습니다.
3~5의 경우 hostname을 브라우져로서는 알 수 없기 때문에, 쿠키 정보등이 그대로 전송될 수 있기 때문에 쉽게 알아 낼 수 있는 방법이 없습니다.

상용 안티피싱의 경우 위와 같은 변경사항을 확인하며 바뀌는지 알아내는 방법으로 사용자에게 경고를 합니다.

이런 상황을 가정하고 사이트에 접속하여 자신의 로그인 정보를 전송할 경우 자신이 접속한 사이트가 정말 올바른 사이트인지 알 수 있는 방법은 다음과 같습니다.
  • 안전할 때, 쿠키를 설정하여 정확히 그 사이트에 들어왔을 때에만 쿠키가 전송되도록한다.
  • 쉽게 추측할 수 없는 주소에 이미지를 업로드해 두고, 해당 쿠키가 전송될 경우에만 이미지를 내려보내준다.
  • 로그인 할 때, 아이디와 상관없이 항상 그 이미지를 보여주어 해당 이름의 사이트에 접속했는지 알도록 한다. 안보이면 피싱!
위의 예는 1,2 번의 시도가 들어왔을 경우 사용자로 알기 쉽게하는 방법입니다. 늘 같은 위치에 정해진 그림이 있어야만 안심하도록 사용자 스스로 길들인다면, 그림이 달라졌을 때 피싱되었는지를 알 수 있게됩니다. 다만, 기술에서도 보았듯이 사용자에게 한 정된 것이 아니라 해당 PC, 브라우져에 한정된 것이므로, 같은 PC/같은 계정/같은 브라우져를 사용하는 사람은 같은 이미지가 로그인할 때 보이게 됩니다.

사람이 눈으로 비교하는 것을 이미지로 구별하자는 것이 이 아이디어의 핵심입니다.

여기에도 물론 3,4,5는 막을 수 없는 취약점이 있습니다. 트로이 목마로 피싱하는 경우 호스트이름이 같게되어 쿠키가 전달되기 때문에, 그 쿠키로 피싱사이트에서 적절한 PC인것처럼 본 사이트에서 이미지를 가져 올 수 있게 됩니다.

피싱하는 사람에게 약간 상황을 어렵게 만들어 기술적인 장벽을 만드는 것이라 할 수 있겠습니다. 아뭏든 이번에 소개하는 이 기술도, 뭔가 공부해야 이해할 수 있는 기술입니다. 아놔... 쉬운 개념 없나!?

관련 사이트:
http://protect.login.yahoo.com/login/set_pref/
https://www.myopenid.com/set_cookie_image

크리에이티브 커먼즈 라이센스
Creative Commons License
2007/06/08 01:03 2007/06/08 01:03