Primary links

idoo.net 의 OpenID 적용 과정

청소년 포털사이트 아이두넷 idoo.net 에서 시니어 서포터 Staff 을 맡고 있는 (있었던?) twinpix입니다.
아이두넷은 10대들끼리 모여서 노는 사이트로, 블로그 교환일기 포토엘범 그룹/클럽 및 각종 게시판들이 모여있는 커뮤니티 기반의 잡종 사이트(?) 라고 소개드릴 수 있겠습니다. 서비스 기획이나 운영정책 결정, 프로그래밍, 서버 관리 등 사이트 제작 전반이 10대들에 의해 이루어지고 있습니다.
저는 99년에 이 사이트를 처음 만들었던 멤버이고, 지금은 멘토링 정도 해주면서 플랫폼 개발을 돕고 있습니다.
 
- OpenID 도입 경위
 
기본적으로는 OpenID의 취지에 공감했고,
특히나, 어느 사이트에서든 별도 가입 절차 없이 같은 아이디를 계속 쓸 수 있다는 점에 기대가 컸습니다.
뭐랄까, 일관성 있는 identity 를 확보할 수 있기 때문에, 넷에서의 생활에 있어 지속성/연속성을 확보할 수 있지 않을까 하는 기대? 도 있었고- (사람들의 넷 상에서의 생활 패턴을 바꿀 것이라는 기대)
개인적으로는, 해외에 거주하고 있는 친구들이 좀 더 많이 들어오지 않을까 하는 기대도 있었습니다.
아울러, PHP 로 구성된 사이트에서 OpenID를 구현하는 것이, OpenID 도입과 확산의 접근성을 높일 수 있지 않겠냐는 생각도 들었고요.
'어릴때부터 교육이 제대로 되야지!' 하면서 OpenID에 대해 함께 이야기하던 분과 깔깔거렸던 것도 있어서, 의욕을 갖고 나서보았습니다. =)
스터디에는 저와 jef, quidn, zerofish, NPC 등의 스텝(혹은 스텝 언저리에 계신 분)들이 참여하였고,
개발 업무는 제가 맡았습니다.


- 테스트 url

http://factory.idoo.net/notice/p449


- 진행과정

1) 기술적 구현 구조 이해
 
OpenID의 구조에 관한 스터디에 1주 가량 걸렸습니다.
OpenID의 기본적 지향점이나 개념을 이해하는데에는 그리 어렵지 않았습니다. 다만 이것이 기술적으로 어떻게 구현되는지에 있어서는 이해가 쉽지 않았습니다. 개발진들을 위한 한국어 메뉴얼이 없었으니까요. (그냥 이것 설치하고 config를 이렇게 설정하면 된다-는 몇 포스트만만 있었고)
OpenID 서버가 단순히 1회 인증만 확인해줄 뿐인 건지,
아니면 매 페이지 로딩때마다 서버간의 소켓 연결로 인증 유효여부를 확인하는 역할까지 해주는 것인지 여부부터 이해하기 쉽지 않았고, 소켓 단에서 어떻게 키를 주고받는지에 대해서는 더더욱 이해가 어려웠습니다.
기본 스펙에 관한 한국어 메뉴얼은 더더욱 없었고요.
아래와 같은 자료를 참고로 했습니다.
인증 스펙 메뉴얼 (영어) : http://openid.net/specs/openid-authentication-1_1.txt인증 구조 일러스트 (영어) : http://enthusiasm.cozy.org/archives/2005/05/openid-part-iii-pingpong/
구조 이해에는 두번째 그림이 가장 큰 도움이 되었던 것 같습니다.

2) 라이브러리 설치 및 실습(?)

 
idoo.net은 Apache2/PHP를 기반으로 구성된 사이트였던 지라,
구글에서 OpenID PHP 등의 키워드로 검색해 보았습니다.
http://www.openidenabled.com/openid/libraries/php
위 링크가 나오더군요. 일단 설치했습니다.
이틀 정도 테스트하고 나서야, 로그인 인증과 키가 오가는 과정등에 관해 이해할 수 있었습니다.
기본적인 모듈을 완성시키고서는, 바로 블로그와 게시판 덧글에 시스템을 적용하였습니다.
 

3) 구현 및 적용

 
그냥 각 덧글 post do 소스에다가 아래와 같은 소스를 담았습니다.
        if($atc[openid]!="" && !isset($config['OpenID']['userid']))
                flyOpenId($atc[openid]);
        if($config['OpenID']['userid']) {
                    if($_SESSION['OpenIDtextSave']!='') {
                                  $atc[text]=$_SESSION['OpenIDtextSave'];
                                  $OpenIDtextSave='';
                                 session_register('OpenIDtextSave');
                     }
                $atc[nickname]=$config['OpenID']['userid'];
                $atc[id][openid]=1;
        }
flyOpenId($userid) 함수는 작성된 글을 임시로 저장해둔 뒤 (그냥 세션에 넣어버렸습니다;;;) ,
$userid를 받아 인증페이지로 넘기는 함수입니다.
외부 OpenID Server로 페이지가 넘어갔다가, 인증이 되어 돌아오면
작성된 글을 다시 꺼내어 post하는 방식입니다.
인증페이지 이후 소스는 라이브러리에 있는 consumer 소스와 같습니다.
- 처음에는 게시물 내용을 _GET에 몽땅 담았다가,
   kay님께서 작동을 안한다고 덧글을 달아주신 덕분에
   게시물을 따로 임시저장하는 기능을 추가했습니다. 다시한번 감사드립니다=)
 
 
주섬주섬 정리해본 아이두넷의 OpenID 지원 추진 경과입니다.
차후 아이두에서의 OpenID 지원 추진 계획은 이렇습니다.
- 아이두 로그인 자체에 OpenID를 지원할 계획입니다. 다소 큰 광장형 커뮤니티에 OpenID가 지원되는게, 예상 밖으로 실제 어떤 효과를 낳을까 기대하고 있습니다. 몇가지 결정해야 할 쟁점과, 개발 이슈가 있을 것 같습니다.
- 아이두의 블로그나 스페이스 주소를 OpenID 아이디로 활용할 수 있게 할 생각입니다. HTML 태그 몇개 달아주는 정도니 어렵지 않을 것 같습니다.
- opinity처럼 아이두 자체가 OpenID Server 역할을 해주어야 할지 여부에 관해서는 여전히 의견이 분분합니다. standalone 소스가 있는지라 지금도 당장 도입할 수 있긴 합니다만, 그래도 기획 영역에서는 고민되는 부분입니다. 앞으로 OpenID를 도입하려는 다소 큰 사이트들이 저마다 고민할 부분일 것 같습니다. ID를 뿌릴 것이냐. 아니면 ID를 받아줄 것이냐. 이건 다음에 기회되면 별도 토론 thread가 생기면 좋을 것 같아요.
 
이상입니다. 궁금하신 사항 있으시면,
msn # rainygirl(at)ifrance.com 나 이 글의 덧글, 혹은 idoo.net의 테스트 페이지에 덧글로 달아주세요=)