[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 2월 12일 금요일

[HTML]XHTML 1.0 Transitional 문서 템플릿..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

<!-- XHTML 1.0 Templete -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>

        <link rel="stylesheet" href="" type="text/css" />
        <style type="text/css">
        </style>

        <script type="text/javascript" src=""></script>
        <script type="text/javascript">
        //<![CDATA[
        //]]>
        </script>
    </head>

    <body>
    </body>
</html>

문서 만들때마다 헷갈려서.... 따로 적어놔야지....

Aptana에서는 [Window] - [Preferences]에서 Aptana - Editors - HTML 부분에서 Default Content부분에 적어주면 html을 생성할때마다 설정해 놓은 html코드가 입력되어서 생성된다.
    
2008/04/28 14:10 2008/04/28 14:10
 

[EP]제7회 KSUG / 자바지기 공동세미나 참석후기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

오랜만에 세미나를 참가했다. 인터넷하다가 알게 되었는데 주제가 내가 좀 관심있는 쪽이라서 참가를 했다. 피곤해서 갈지 어떨지 고민을 약간 하긴 했지만....

전체적인 주제는 개발환경에 대한 부분이었다. 다양한 툴을 이용해서 좀더 편하고 자동화된 환경에서 개발을 해보자는게 요지였다. 발표자는 자바지기를 운영하시는 박재성 님KSUG(Korea Spring User Group)와 공동으로 세미나를 주최하셨다.

첫 세션은 "사용자 스토리를 기반으로 한 요구사항 분석"이었는데 NHN에 다니시는 박새성님이 실제로 팀에서 진행하시는 것을 위주로 설명해 주셨다. 한 프로젝트를 위해서 기획, 개발이 다 카페테리가 같은 곳에 모여서 사용자 스토리를 구체적으로 다 카드로 만들고 각 카드당 공수가 얼마나 들지를 점수로 매겨서 기간산정을 한다.

이슈관리 프로그램으로 상용인 JIRA라는 프로그램을 사용하고 각 기능별로 쪼개서각 개발자들이 pull방식으로 자기가 할 일을 끌어갈 수 있도록 하여 팀원의 자발적인 적극성을 꾀하고 구체적인 설계없이 큰틀의 설계만을 가져가서 초기에 설계때문에 너무 많은 시간을 투입하지 않고 후반부에 변경도 용이하도록 한다.

이슈관리 프로그램으로는 JIRA외에도 XPlanner, Trac, Bugzilla, Rally(상용) 등이 있다.


둘째 세션은 "Eclipse를 기반으로 한 통합개발환경"이었다. 이클립스의 .metadata를 저장해 두었다가 다른 워크스페이스에 저장하면 이클립스 환경 셋팅을 해 놓은 것을 그대로 살릴 수 있다. 그리고 .metadata/.plugins/org/eclipse.core.runtime/.settings를 공유하면 팀간에 같이 쓰는 환경(이게 잘 이해가.. ㅡ..ㅡ) 공유할 수 있다. 스키마 변겨잉 용이하도록 DB를 로컬에 설치하고 Maven을 통해서 빌드부터 테스트까지 자동화 한다.


세번째 세션은 "Teamcity CI툴을 활용한 지속적인 통합방법"이었는데 개발자가 개발해서 SVN에 Commit를 하면 Teamcity(20명까진 무료란다.)가 SVN을 모니터링 하고 있다가 소스가 수정되면 Checkout해서 빌드를 하고 테스트를 한다. 실패하면 바로 알려주고 성공하면 최신소스를 WAS에 배포한다. 또 Watij라는 프로그램도 보여주었는데 웹 UI를 테스트 하는 툴이었는데 괜찮아 보였다.


발표자료는 박재성님의 블로그에서 구할 수 있다.




이런 툴은 단순히 도와주기만 한다지만 나는 이런것에 관심이 상당히 있었고 이렇게 해서 얻을수 있는 이득에 대해서도 확실한 관심이 있었다. 하지만 내가 사용할 줄을 잘 몰랐기 때문에 적용하기는 어려웠었다. 툴을 익히느라고 프로젝트가 위기에 처할 수도 없고 그걸 책임지고 이끌만한 권한에 있는 입장은 아니었기 때문에......

그래서 참가한거였는데 이번 세션은 나에게는 정보획득보다는 자극이 상당히 되었다. 최근 팀의 붕괴로 팀의 역할을 거의 하지 못하고 자기 공부만 하고 있는 상황에서(일을 시킬사람이 없는 상황이랄까...) 나로서는 좀 정체현상을 겪고 있다.  팀의 상황으로 프로젝트가 진행안되고 있다는 상황이 가장큰 문제인데 여태까지 뒤도 안돌아보고 열심히 달려왔다고 생각하고 있는데 요즘은 어디로 가야할지 어떻게 해야할지 좀 방향을 잃은 상황이랄까....


난 이번 세미나에서 요만큼도 이해를 하기 어려웠다. 내 상황에서는 SVN을 적용하는 것도 기껏해야 내 동기랑 둘이 약간 써보는게 고작이고 ANT나 Maven은 꿈에도 못꿨다. 여기서 프레임워크나 이슈트래킹은 무슨....

저런 환경에서 개발하면 얼마나 편할까.. 저렇게 체계적인 개발환경에서 개발하면 얼마나 배울 수 있을게 많을까 하는 생각들.... 세미나 내내 머리속을 떠나지 않았다.

하나의 프로젝트를 위해서 개발기획이 다 모여서 기능파악하고 분석하고 정의하고 기간산정을 하는 일련의 과정조차 부러울 수밖에 없었다. 주제와 요구사항만 떨어지면 동기랑 농담따먹기 하면서 인터페이스 설계하고 개발하고 요구사항 바뀌면 바꾸고... 진짜 부러웠다...


저런게 가능하고나 하는 생각정도는 할 수 있었지만 구체적인 내용은 전혀 이해를 못했다. 박재성님 말씀대로 내가 앞으로 공부하고 얻어야 할 부분이지만 팀내 적용까지는 아직 꿈도 못꿀일이었지만 그래도 나에겐 큰 자극제가 되었다. 뭘할지 몰라서 방향을 이를 만큼 난 아직 오지도 못했고 JAVA만해도 (얼마전에 느끼긴 했지만) 미친듯이 해도 다 못할 만큼 해야할게 많다. 자바진영쪽에서 내가 맛이라도 본건 아주 쥐꼬리만한 것이란걸 내가 배워나가야 할 것들이 끝도 없이 펼쳐져 있다는 걸 알게 되었다. 다시 좀 정신차려야겠다...

[DEV]InstantRails와 RadRails로 환경설정하고 Hello World 찍기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

일단 미리 말하자면 루비 온 레일즈의 쥐뿔도 모르고 이제 책 보기 시작했다. 루비온레일즈는 다른 언어에 비해서 그 이름이 특이한데 말그대로 레일즈라는 프레임워크 위에 루비라는 언어를 얹은 것이다. 항상 최고인 것은 없겠지만 루비온레이즐의 생산성 만큼은 관심이 가고 진행해 보려는게 있어서 시작했다.

일단 루비온레일즈는 Instant Rails를 이용해서 했다. 여러가지가 있겠지만 일단 윈도우에서 루비온레일즈를 공부하면서 개발해 보기에는 인스턴트 레일즈만한게 없는것 같다. 너무 편해서 머 할말이 없을 정도다....

Instant Rails 폴더구조
압축 풀린 Instant Rails

설치고 머고 없다. 인스턴트 레일즈 사이트에서 다운받은 zip파일을 원하는 곳에 풀어주면 끝이다. 다만 주의할 점은 인스턴트레일즈 경로에 공백이 들어가는 폴더가 있으면 안된다. 이렇게만 하면 인스턴트 레일즈에 대한 준비가 끝났다.

사용자 삽입 이미지
인스턴트 레일즈가 실행된 모습이다.

인스턴트 레일즈에서 자동으로 Apache와 MySQL을 가동시켜준다. 아파치는 apache\conf\httpd.conf 에서 port번호를 원하는대로 바꿔줘도 되고 i 버튼을 눌러서 phpmyadmin으로 제공되는 MySQL 관리로도 들어갈 수 있다. 루비온레일즈라는 특성에 어울리게 인스턴트 레일즈 자체도 심플 그 자체이다.


이제 루비온레일즈에 대한 환경설정은 끝이 났으니까 IDE환경을 보자. 물론 이렇게만 해놓고 console로 개발을 할 수도 있지만 내가 IDE환경을 선호하는 관계로 아무것도 모르면서 RadRails를 올렸다.(뭔 깡으로.. ㅡ..ㅡ)

RadRails는 Ruby on Rails를 위한 Eclipse 기반 IDE환경이다. 기존에는 별도로 돌릴수 있었던 것 같은데 (내가 못찾는건지) 지금은 Aptana[HTML, JS 개발을 위한 Ecipse 기반의 IDE 환경 (Homepage)]
]에 플러그인 형태로 추가할 수 있다. Aptana사이트에서 받아도 되고 Aptana를 실행해서 첫화면에서 클릭해서 받아도 된다.

사용자 삽입 이미지

나도 루비온레일즈는 만지기 시작한지 얼마 안되서 아무것도 모르기 때문에(Hello World만 찍어봤다.) 문법에 대한건 넘어가고 셋팅만 보자.

[Book] 롱테일법칙..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

롱테일 법칙 - 6점
스가야 요시히로 지음, 예병일 옮김/재인



인터넷이라는 기술이 기존의 틀을 완전히 깨면서 만들어낸 롱테일 법칙... 대충 무엇인지는 알고있었지만 정확히  책을 보거나 하지는 않아서 관심만 있었는데 회사에서 통신교육인지 먼지 하면서 이번달에 이책을 받았다. 나름 관심이 있었고 글씨가 커서 금새 봐버렸다.

롱테일은 기존의 경제에 적용되고 있던 파레토 법칙을 완전히 뒤집은 법칙이다. 파레토 법칙은 "매출의 80퍼센트는 20퍼센트의 고객이 만들어낸다." 또는 매출의 80퍼센트는 20퍼센트의 인기상품이 만들어 낸다."는 것이다. 그러니까 매출을 올릴려면 이 20퍼센트의 상품을 어떻게 더 잘 팔리게 할 수 있냐에 모든 초점이 맞춰져 있는 것인데 롱테일은 한두개씩 팔리는 비 인기상품들 매출이 인기상품보다 훨씬 많아지게 된 현상이다.



말그대로 롱테일.... 한두개씩 팔리는 무한대에 가까운 상품들이 모여서 훨씬 큰 매출을 이루게 되고 이는 상품진열에 추가비용이 안들고 또한 비인기상품도 링크를 통해서 한번에 접근할 수 있는 인터넷의 특성에 기인한 것이다.



대충만 알고 있던 것을 정리하는 차원에서는 괜찮았지만 전체적으로 보면 이건 마케팅에 관한 책이다. 물론 난 개발자이므로 마케팅에는 문외한이고 크게 관심도 없다. 롱테일이라는 것 자체가 마케팅에 관한 부분이기는 하지만 나는 IT에서의 롱테일이라는 현상에 대해서만 관심이 있었기 때문에 초반을 넘어서서 마케팅을 어떻게 해야하는지마케팅을 롱테일과 어떻게 결합해야 하는지 하는 부분은 별로 관심이 가지 않아서 별로 인상을 남기지 못했다.

그리고 그래서인지 나에겐 마케팅전략도 롱테일이란 부분을 예리하게 마케팅과 결합했다는 느낌도 그닥 들지 않았다. 롱테일의 압축하지 않는 마케팅등의 개념들은 도움이 되기는 했지만 좀 가벼운 수준으로 느껴져서 롱테일에 관한 다른 책을 한번 더 보고픈 생각이 좀 들었다.

[JS]스크립트 태그의 CDATA 사용에 대해서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

예전에 만들어진 페이지들을 보면 스크립트부분을

//<!--
//-->


로 묶어 놓은 것을 볼 수 있다. 솔직히 이게 필요하게 느껴본적은 전혀 없지만(그땐 개발도 안했긴 하지만..) 이건 오작동을 막는다는 개념으로 알고 있다. 스크립트가 안먹는 곳에서 스크립트 때문에 오작동을 막기 위해서 html태그로 묶어 놓은 것이다. 하지만 실제로 저게 필요한 경우가 이제는 거의 없는 것 같고 안해도 되기 때문에 요즘은 거의 쓰지 않는 것 같다.

대신 요즘에는

//<![CDATA[
     스크립트.....
//]]>

로 묶어준다. 먼가 있어 보여서 쓰긴 했는데 이것에 대해서 정확한 이해를 한지는 얼마 되지 않았다. 이건 DOCTYPE를 XHTML로 사용할 때 써주는 것이다. (내가 HTML 4.01 Tranditional을 거의 쓰지 않아서 그쪽은 잘 모르겠다.) CDATA... XML을 해본 사람은 많이 보던 거란걸 느낄것이다.

XHTML은 기본적으로 형식이다. 스크립트 부분을 CDATA 속성으로 넣어줌으로써 XHTML 파서가 스크립트 부분에 들어간 html부분을 파싱하지 않도록 막아주는 것이다. 물론 대개의 경우 없어도 되지만 이렇게 함으로써 완전히 차단하는 것이다.

유효성검사를 통과하려면 반드시 CDATA로 스크립트를 묶어 주어야 한다. 저 형식은 왠지 잘 외워지지가 않아서... ㅋㅋ CDATA로 묶어 주는데 이부분은 스크립트 문법에 맞지 않기 때문에 //로 주석표시를 해준 것이다.


ps. //<![CDATA[를 제목에 썼더니 리스트에서 깨져버려서 별수없이 제목을 수정 2008.7.28
ps2. 앞쪽에 //<!-- //-->에 대해서 약간은 추측형으로 작성했었는데 이건 쓸 필요가 없다. 이것은 자바스크립트가 생긴지 얼마되지 않았을 때 웹브라우저가 <script>태그를 이해하지 못했기 때문에 화면에 자바스크립트 코드 자체를 화면에 출력해 주기 때문에 이걸 막기위해서 스크립트 부분은 html주석인 <!-- -->로 가려준 것인데 이젠 쓸 필요가 없다.

[JS]정규식(Regular Expression) 대충 정리..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

정규식은 학생때도 배웠고 가끔 접하긴 하는데 할때마다 어려운것 같다. 학생때는 아~ 이런거구나 한적도 있는것 같은데 코딩할려고 하면 막상 매칭시킬려고 하면 왜 이렇게 어려운건지.... 할때마다 찾아야 되고.... 정규식만 자유자재로 써도 내공이 한갑자는 상승할것 같다는 생각도 하지만... 그렇다고 막상 따로 공부는 잘 안되고....

자바스크립트에서는(여기서만 이런건지 잘 모르겠지만...) 정규식을 /.../로 묶어준다.

var pattern = /rules/;

식으로 써주면 된다.

^ : 시작표시(매칭이 처음부터 되어야 함)
$ : 끝표시(문자열 끝에 매칭되어야 함)
[] : 문자열 셋
      [ab][a-z][0-9] 라고 써주면 첫글자는 a또는 b이고 그 다음에 a~z가 나오고 그 뒤에 0~9가 나온다는 뜻..
      []안에서 ^쓰면 그 문자가 아닌것들
* : 0번 이상 반복
+ : 1번 이상 반복
? : 0 또는 1회
{} : 횟수 표시
      [a]{2}이면 aa이고 [a]{2,}이면 a가 2개 이상인거 [a]{2, 4}이면 aa, aaa, aaaa 이다.
\d : 숫자, [0-9]와 같음
\D : 숫자가 아닌 것들 [^0-9]와 같음
| : Or의 뜻
{} : 그룹을 묶어 준다.
. : 뉴라인(\n)제외한 한 문자 (진짜 .을 찍기 위해선 \.으로 표시해야 한다.)

더 자세한 문법은  Wikipedia 참고

옵션 /rules/ig 와 같이 써준다.

g : 글로벌의 뜻. 전역 매칭을 한다. 처음부터가 아닌 전체에서 정규식이 맞는걸 찾는다.
i : case Insensitive, 대소문자 구별안함
m : Multiline



정규식 테스트 사이트

덧) 특수문자를 매칭시켜주려면 \\를 사용한다. \\. 이나 \\| 처럼....

My Comment..
BCCard 에서도 정규식 때문에 여러번 애를 먹은 기억이..
항상 인터넷에서 찾아보거나.. 남들이 해둔 것을 토대로 검색을 해서..
추가 수정을 하곤 한다.. 모든 것이 그렇지만 항상 좋다거나 나쁘다거나 할 수는 없지만..
그래도 쓰면, 코드로 했을 때보다 확 줄어들 때도 있어서.. 종종 쓰게 된다능..

[JAVA]Weblogic에서 DataSource로 디비(DB) 연결하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

JDBC를 이용해서 웹로직에서 제공하는 Data Source를 이용해서 DB 접속을 해보자. 웹로직에서 Data Source 설정을 해주어야 하는데 이건 웹로직 설치가이드 문서를 참고하기 바란다. 뒷부분에 보면 커넥션풀과 데이터소스를 설정하는 부분에 대해서 나와있다.

사용자 삽입 이미지
왼쪽 그림과 같이 설정이 되어야 한다.

먼저 Connection Pools를 만들고 만들어진 Connection Pools(여기선 ibisPool)을 이용해서 Data Sources를 만든다.

그리고 Java쪽에서는 만들어진 Data Sources(여기서는 ibisDS)를 사용하여 DB에 연결한다.





디비 연결 클래스를 보자.

Java

// Weblogic DBConnection Class
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class DBConnection {

    public DBConnection() {
    }

    public Connection getConnection() throws Exception {
        return getConnection("jdbc/ibisDS");
    }

    public Connection getConnection(String dsName) throws Exception {
        Context ctx = null;
        DataSource ds = null;
        try {
            ctx = new InitialContext();
            ds = (DataSource) ctx.lookup(dsName);
        } catch (NamingException e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                if (ctx != null)
                    ctx.close();
            } catch (NamingException ne) {
                System.err.println("comm.util.conPoool : can't close context resource !!");
            }
        }
        return (Connection) ds.getConnection();
    }

    public void disConnection(ResultSet rs, PreparedStatement pstmt, Statement cstmt, Connection conn) {
        try { if(rs   != null) rs.close()   ; rs    = null; } catch(Exception e) { rs    = null;}
        try { if(pstmt!= null) pstmt.close(); pstmt = null; } catch(Exception e) { pstmt = null;}
        try { if(cstmt!= null) cstmt.close(); cstmt = null; } catch(Exception e) { cstmt = null;}
        try { if(conn != null) conn.close() ; conn  = null; } catch(Exception e) { conn  = null;}
    }
}

기존의 JDBC 연결 클래스와 거의 동일하기 때문에 JDBC로 연결을 해본 사람이라면 웹로직에서도 크게 무리가 없으리라고 본다. (내가 그랬기 때문에.....)

일단 생성자인 DBConnection()에서는 아무것도 안하고 있고 오버로딩된 메서드 getConnection()이 2개 정의 되어 있다. 데이터소스 이름을 던져주면 2번째것이 실행되어서 데이터소스에서 해당이름으로 된것이 있는지 검색해서 커넥션을 리턴하고 파라미터를 던지지 않으면 기본으로 설정된 ibisDS(위에서 만든 이름이다. 당연히 각자 웹로직에서 사용한 이름으로...)의 커넥션을 리턴해준다. disConnection메서드에서는 사용한 디비자원을 닫아준다.

[JS]JSON으로 Function 실행하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

JSON은 데이터교환 포맷으로 XML보다 가볍기 때문에 자바스크립트 쪽에서는 자주 쓰이고 있다. 여러 라이브러리 등에서 JSON의 형태를 자주 쓰고 있기 때문에 나도 몇번 써봤는데 자바스크립트의 특성과 맞물려서 유연하기 때문에 유용하게 써먹을 수 있을듯 하다.

JSON의 공식사이트에는 JSON의 표기방식을 다음과 같이 정의하고 있다.

사용자 삽입 이미지

학생때 몇번 써본 표기방식이다. 저걸 모라고 부르더라.... 기본적으로

{ 키 : 값 } 의 형태로 이루어지고 { 키 : 값, 키 : 값, 키 : 값, 키 : 값 } 형태로 계속 이어 붙힐 수 있다는 뜻이다. 이 형태만 유지한다면 넘길때(예를 들어 Server Side에서..) 스트링으로 만들어서 넘기더라도 자바스크립트에서는 열었을대 JSON 오브젝트로 만들 수 있다.(오래된 글에서 내용이 애매하게 작성된 부분이 있어서 내용을 추가합니다. 이하부분에서 JSON 오브젝트라고 부른 정확히는 자바스크립트 객체 리터럴을 의미합니다. 그래서 function이 value에 포함되는 등의 내용은 JSON이 아니라 객체리터럴에만 해당되는 부분입니다.)

더욱이 편한 점은 여기서 value에 값만 넘어오는 것이 아니라 function자체도 넘어올 수 있다는 것이다. 넘겨받아서 function을 실행해 버릴수 있기 때문에 활용하기에 따라서 무척 편하게 할 수 있다. 난 이번 프로젝트에서 input값을 받으면서 validation 체크를 해야했는데 갯수가 너무 많아서 보기에도 않좋고 관리도 어려워서 JSON형태로 만들었었다. 쓰다보면 더 활용할 수 있겠지... ㅎㅎㅎㅎ

간단한 예제이다. JSON형태로 받아서 alert를 4번해주는 간단한 형태이다. 그냥 스크립트 실행자체를 JSON으로 받아서 할 수 있다는 걸 보여주기 위해서......

Js

// javascript in Example
function printString(cnt) {
    alert(cnt);
}

window.onload = function() {
    var temp = "printString('First')";

    var printList = {
        "1": "printString('hi JSON')",   
        "2": temp,
        "3": "alert('second')",
        "4": "printString('Third')"
    }                        

    for (i = 1; i < 5; i++) {
        eval(printList[i]);
    }
}

위 소스가 예제에서 사용된 스크립트의 전부이다. printString(cnt)는 단순이 파라미터를 받아서 alert를 찍어주는 역할만 하고 printList라는 변수에 JSON형태로 담았다. 기본적으로 String이 들어가지만 변수도 들어간다는걸 보여주기 위해서 다양하게 넣어보였다. (하는 짓은 똑같다.)

다 받은 후에 for문을 돌려서 JSON객체를 eval로 감싸주면 그부분이 바로 실행이 된다. 예제를 돌려보면 alert창이 제대로 뜨는것을 볼 수 있다.

여기서는 for문을 돌리기 위해서 key부문에 숫자로 했지만 보통은 key이름을 주는 것이 더 일반적이다.

Js

var Person = {
    "name": "Outsider",  
    "age": "29",
    "sex": "male",
    "fnc": "alert('second')"
}

이럴 경우는 당연히 Person.name하면 값을 가져올 수 있고 eval(Person.fnc)를 하면 alert메세지를 띄울수 있다.


덧) JSON의 마지막 엘리먼트 뒤에 콤마(,)를 넣지 않도록 주의하자. 마지막에 콤마가 들어가도 파이어폭스에서는 잘 돌아가지만 IE 7에서는 제대로 돌아가지 않으면서 에러메시지도 나오지 않는다. 콤마 하나때문에 눈빠지게 디버깅 하는 일은 없기를....

덧2) JSON을 솔직히 머라고 읽어야 하는지 모르겠다. 처음 들었을 때 "제이손"이라고 들어서 계속 그렇게 읽었는데 얼마전에 마이스페이스 API관련 영상을 보다보니 "지~손"이라고 읽는것 같던데... 흠....

[HTML]div를 센터정렬 하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

전에는 table로 레이아웃을 잡았기 때문에 테이블을 센터정렬하면 쉽사리 해결되어서 이것때문에 고민해 본적이 없는데 이젠 레이아웃을 div로 잡으니까 웹페이지 자체를 중앙에 나타나게 하려니까 정렬이 먹지 않았다. text-align같은 걸로는 div가 정렬되지 않았는데 인터넷에서 많은 얘기들이 있었는데 이것저것 다 달라서 적용하는데 약간 애먹었다.

사용자 삽입 이미지


결론은 상당히 쉽다. 웹페이지 레이아웃을 잡으려면 전체를 묶는 div가 있어야 하니까 가장 외부의 레이아웃을 잡는 div에

CSS

margin: 0 auto;

margin을 위에처럼 주면 된다.


margin을 주었을때는 순서가 Top, Right, Bottom, Left 순으로 작성되므로 위처럼 축약형태는 결국

margin: 0 auto 0 auto;

와 같은 형태가 되고 Top, Bottom은 여백은 0을 주고 Left, Right는 auto로 준다는 뜻이고 이렇게 하면 좌우가 자동으로 먹어서 div가 센터에 정렬된다.

[JAVA]Weblogic 8.1에서 Production mode 설정..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

웹로직에는 production mode와 development mode라는게 있다. 나도 잘 모르지만 대충 말하면 프로덕션 모드는 실제 서비스를 하는거고 development mode는 개발단계에서 쓰는거다. 개발단계에서 쓰므로 class파일을 교체해도 자동으로 리로드를 해주기 때문에 class파일을 재컴파일해도 바로 변경사항을 확인할 수 있다. production mode에서는 웹로직을 리스타트 해주어야 class 변경사항이 반영된다.

개발할때는 당연히 development mode에서 해야겠지...

C:\bea\user_projects\domains\mydomain\startWebLogic.cmd 파일을 보자.
(물론 여기서 mydomain은 내가 정해준 domain이름이다. 전에 올린 웹로직 설치문서 참고....)

set PRODUCTION_MODE=false

로 설정을 해주면 development mode가 되고 class가 바로바로 적용된다.(이거 안해놓으면 개발할때 엄청 불편하다.)

설정해주고 웹로직을 리스타해주면 된다. 물론 개발이 완료되고 서비스할때는 다시 true로...



덧) 이게 언제 한건데 이제야 포스팅을... ㅡ..ㅡ(오래되서 기억이 가물가물한 가운데...)

[AJAX]protoload로 Ajax로딩 인디케이터 사용하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

사용자 삽입 이미지ProtoloadAndreas Kalsch가 만든 Prototype Framework를 기반으로 한 Ajax 로딩 인디케이터를 사용하게 해주는 라이브러리이다. Ajax 로딩 인디케이터란  Ajax 통신을 시작할 때 데이터가 로딩중임을 사용자에게 알려주는 역할을 하는 것으로 보통은 GIF이미지가 사용되고 어떤 인디케이터를 사용할 지는 만드는 사람 맘이긴 하지만 보통 우측의 이미지가 Ajax 로딩 인디케이터의 대표적이다.

Prototype Framework를 기반으로 하기 때문에 당연히 프로토타입을 인클루드 해주어야 한다.

<script type="text/javascript" src="scripts/prototype.js"></script>
<script type="text/javascript" src="scripts/protoload.js"></script>


Prototype Framework를 먼저 인클루드 하고 Protoload사이트에서 다운받은 protoload.js파일도 인클루드 하면 사용해 대한 준비는 완료된다. 버전이 0.1이기는 하지만 몇번 다뤄본 경험으로는 사용상에 큰 문제점은 없는 것 같다. 일단 인디케이터라는게 아주 복잡하진 않기 때문에...

Ajax로딩을 사용자에게 알려주는 것은 아주 중요한 일이지만 따로 구현할려면 꽤나 난감하게 생각되는데(따로 구현해 본적은 없다.) protoload는 아주 쉽게 로딩 인디케이터를 사용할 수 있게 해준다.

여기서 제공하는 것은 아주 간단하면서도 편리한데 원하는 엘리먼트에 인디케이터를 표시할 수 있는 점이 아주 좋다. 예를 들어 "ajaxWait"라는 id를 가진 엘리먼트에 인디케이터를 표시하고자 한다면

$("ajaxWait").startWaiting('bigWaiting');
$("ajaxWait").stopWaiting();


위와같이 써주면 된다. 인디케이터를 표시할 엘리먼트는 어떤 것이든지 상관없다. div도 되고 button, select, input등 원하는대로 표시할 수 있고 전체 페이지에 표시하려면 엘리먼트의 id대신에 document.body를 넘겨주면 된다. 파라미터르 넘겨준 bigWaiting는 protoload에서 제공한 css에 들어있는 클래스 이름이다. 즉 지정한 CSS 클래스를 사용하겠다는 의미이고 css에 정의되어 있다면 다른 클래스 이름을 선택해도 무방하다. 페이지에 맞게 스타일을 정한다음 지정만 해주면 된다.
prototype.js의 Ajax를 사용할 때는 startWaiting은 onLoading에서 stopWaiting은 onComplete에서 지정해 주면 된다.(구동되는 것은 protoload 사이트에 나와있으니 사이트를 참고하기 바란다.)

Js

// protoload.js 사용하기
new Ajax.Request("ajax.jsp",
    {
        method:'get',
        parameters : { par:Code },
        onLoading  : function() {
            $("ajaxWait").startWaiting('bigWaiting');
        },
        onSuccess  : function(returnValue)
        {
            var returnValue = returnValue.responseText;
        },
        onFailure  : function() {
        },
        onComplete : function() {
            $("ajaxWait").stopWaiting();
        }
});

일반적인 사이트에서는 사용상에 문제가 없지만 탭을 쓴다던지 자바스크립트를 이용해서 DOM구성을 만져놓은 곳에서는 원하는 위치에 Ajax 로딩 인디케이터가 나오지 않는 경우가 있다. 이럴때는 10년차초보개발자님이 패치한 내용을 참고해서 protoload를 사용하면 아주 잘 돌아간다.(10년차초보개발자님 감사~~)




참고로 Ajaxload사이트를 이용하면 다양한 Ajax 로딩 인디케이터를 원하는 모양과 색으로 쉽게 제작할 수 있다. 페이지에 어울리는 인디케이터를 가져다가 쓰면 될 듯 싶다.

[JS]prototype.js의 Ajax 사용에 대해서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

작년 10월에 Ajax.Request에 대해서 포스팅을 한번 한적 있는데 추가적으로 작성할 것도 있고 또 그때보다 더 알게 된 것도 있기 때문에 다시한번 포스팅한다.

기본적으로 Ajax[Asynchronous JavaScript and XML]라 하는 것은 비동기통신을 뜻하고 웹페이지를 새로 갱신하지 않고 서버세 접속해서 특정 부분만을 갱신하는 기법이다. 이 기법을 통해서 웹이 크게 발전했고 XMLHttpRequest를 사용한 것으로 대표되기는 하지만 Ajax는 비동기로 통신하는 기법자체를 의미하지 반드시 XMLHttpRequest를 사용해야만 하는 것은 아니다.

어쨌든 Ajax라는 게 인기를 끄는데는 XMLHttpRequest가 그 중심에 있는데 솔직히 간단하지는 않다. 하지만 자바스크립트 프레임워크를 쓰면 꽤나 간단하게 사용할 수 있는데 XMLHttpRequest에 대한 처리부분을 프레임워크에서 대부분 처리해 주기 때문이고 여러가지 간면한 메서드를 제공하고 있다. 자바스크립트 프레임워크를 쓰는 이유에 있어서 Ajax만으로도 그 편리함은 충분하다고 생각한다.
Js

// example of an AJAX/XMLHttpRequest JavaScript function from Wikipedia
function ajax(url, vars, callbackFunction)
{
    var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
    request.open("POST", url, true);
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    request.onreadystatechange = function()
    {
        if (request.readyState == 4 && request.status == 200)
        {
            if (request.responseText)
            {
                callbackFunction(request.responseText);
            }
        }
    };
    request.send(vars);
}

나는 prototype.js 프레임웍을 사용하는데 이런 내부의 복잡한 로직을 Ajax.Requst의 호출만으로도 간단히 해결해 준다. Requset가 prototype.js의 기본적인 Ajax사용이라고 생각되는데 프로토타입 프레임워크의 사이트에서 제공하는 API를 보면

new Ajax.Request(url[, options])
위처럼 정의되어 있다. []로 묶인 것은 사용해도 되고 안해도 되는 것이다.



Js

// Ajax.Request 사용하기
new Ajax.Request("ajax.jsp",
    {
        method:'get',
        parameters : { par:Code },
        onLoading  : function() {
        },
        onSuccess  : function(returnValue)
        {
            var returnValue = returnValue.responseText;
        },
        onFailure  : function() {
        },
        onComplete : function() {
        }
});

위처럼 간단하게 Ajax.Request를 사용할 수 있다. 옵션은 JSON 표기법을 사용해서 필요한대로 적어댈 수 있고 필요없는 것은 적지 않아도 상관없다. parameters에서 par라는 이름으로 Code라는 변수를 지정해서 넘겨준다. 물론 스트링을 직접 주려면 홑따옴표('')로 묶어주면 되고 Code라는 변수를 사용했으므로 당연히 상단에서 Code라는 변수를 정의해 놓았어야 한다. 이건 ajax.jap?par=code 처럼 넘겨준것과 같다. 물론 code는 변수의 값이 넘어가야하는거지만....

onLoading은 Ajax통신을 시작할 때 발생하고 onSuccess는 통신이 성공되었을 때 발생하고 onFailure는 통신이 실패했을 때 onComplete는 통신이 성공하든 실패하든 통신이 끝났을 경우에 발생한다. 각 부분에 원하는 기능을 코딩하면 된다. 이밖에도 더 제공하는 옵션이 있는데 사용해 보지 않아서 아직은잘 모르겠다.



여기에 프로토타입에서는 Ajax.Updater라는 것도 제공하고 있는데 API에는 다음과 같이 정의 되어 있다.

new Ajax.Updater(container, url[, options])

Updater는 말 그대로 Ajax통신이 끝난 뒤에 container에 해당 내용을 집어넣는 구조로 되어 있다. responseText를 받아서 innerHTML을 하는 대신에 Updater를 사용해서 간단하게 처리할 수 있고 container에는 해당엘리먼트의 id를 스트링 형태로 넘겨주면 된다.

new Ajax.Updater('elementId', 'ajax.jsp')

위처럼 아주 간단하게 elementId안에 내용을 업데이트 할 수 있다. 물론 여기에 옵션이 필요하다면 Request에서와 동일하게 옵션을 넣어 줄수 있다.



Js

// Ajax.Updater 사용하기
new Ajax.Updater({success:'elementId'}, 'ajax.jsp', {
    method:'get',
    parameters : {
            x:code1,
            y:code2
    },
    onLoading: function() {
    },
    onSuccess  : function(returnValue) {
    },
    onComplete : function() {
    }
});

위에서와 다르게 container부분에 JSON형태로 넘겨주면서 success라는 key값을 넣어주었는데 이는 통신이 성공했을 때만 'elementid'에 내용을 업데이트 하라는 것이다. {success:'elementId', failure:'messagebox'}처럼 넘겨주면 통신이 성공하면 elementId를 실패하면 messagebox를 업데이트 하게 된다.

여기서 주의점은 onSuccess와 onComplete의 업데이트 타이밍의 차이인데 실제로 통신해서 받아온 내용이 갱신되는 시점은 onComplete가 실행되는 시점이다. onSuccess에서는 통신이 완료되기는 하지만 실제 내용이 페이지에 갱신되지는 않는다. 그렇기 때문에 Ajax통신을 통해서 받아온 내용에 들어있는 엘리먼트를 사용하기 위해서는 onSuccess가 아니라 onComplete에서 코드를 넣어주어야 다룰 수 있다. onSuccess에서는 아직 해당 엘리먼트가 페이지에 삽입되지 않았기 때문에 엘리먼트를 찾지 못해서 에러가 나게 되고 Ajax의 특성상 오류메시지도 나오지 않기 때문에 해결하기도 골치 아프다.
 

[EP]위젯 코리아 컨퍼런스 2008..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

위젯코리아 컨퍼런스 2008 현수막 갑자기 가게 된 위젯컨퍼런스에 다녀왔다. 위젯컨퍼런스에 다녀왔다. 위젯이라는거 자체를 그렇게 주의깊게 보고 있지는 않았기 때문에 세션을 보았을때도 그닥 관심이 가지는 않았고 지금 해야할 일이 좀 있었기 때문에 이 바쁠때 여기를 꼭 가야하나 하는 생각도 약간 있었고 위젯을 가지고 하루종일 얘기할 만한게 머 있을까 하는 생각도 좀 있었다.

최근 위젯을 만들자는 얘기가 좀 나오고 있는데 개인적으로 별로 동감은 하고 있지 않다. 여러가지 이유가 있는데 머 가장큰건 "그걸 누가 만들어"라는 생각이 좀 베이스에 깔려 있고 위젯이란건 어떤 메인적인 것을 보완(사용편의또는 홍보, 배포)등의 역할을 하는 것이지 그것 자체가 메인은 아니기 때문에.... 그리고 우리회사가 할만한 사업은 아니라는 생각도 꽤 있는 편이다.(물론 여기엔 복합적인 것들이 더 있긴 하지만...)

어쨌든 내돈 드는 것도 아니고 강력히 갔다 오라고 하시니 갔다가 왔다. 하루 여유도 부릴수 있고 일찍 끝나다 보니....

결론부터 얘기하자면 이정도 큰 액수의 컨퍼런스를 2번째 가보는 건데 이번에도 역시 실망이다. 유료라하면 유료인 만큼 그에 대한 퀄리티를 보장해 주어야 하는데 그러지 못한 느낌이 들었다. 아무래도 전체 세션을 관리하는 쪽에서 다 제어하는게 아니다 보니 중복되는 내용도 있었고 너무 개념적인 내용만을 많이 얘기하기도 했었다.



컨퍼런스 들으면서 생각난 여러가지 것들....

위젯이 앞으로 좀 뜰지도 모르겠다.
조금 연구해 보면 해볼만한게 있을지도 모르겠다.
SNS는 확실히 여러가지로 해볼만 하는게 많다는 생각(위젯은 아니지만 오히려 오픈소셜에 대한 IDtail
세션이 나로선 제일 재밌었다.
싸이에서 블로그가 나오는구나...(생각보다는 개방적인 마인드...)
MS popfly 를 좀 만져봐야겠다.(첫 오픈때와는 많이 달라졌더라는...)
이곳에서 말하는 것 보다는 좀 제한적일지도 모른다는 생각..


괜찮은 세션도 분명히 있긴 했지만 전체적으로 갸우뚱 하게 되는 부분도 있었다. 나만 그런 편견이 있는지 모르겠지만 위젯(혹은 가젯) 하면 떠오르는 건 데스크탑이든 웹페이지이든 개병이나 사이드바 같은 곳에서 사용할 수 있는 콤팩트한 특정기능의 어플이라고 생각한다.(말로 풀어쓰니 좀 어렵긴 하지만...)  근데 위젯의 범주가 좀 작기 때문인지 이곳에선 위젯의 범위를 너무 넓게 잡고 있는 듯한 느낌을 꽤 받았다. 그냥 메쉬업을 한 Apps까지도(다른 웹페이지에 삽입하기 어려운..) 모두 위젯과 한 범주에 넣어버렸다. 매쉬업은 매쉬업이고 위젯은 위젯이지... 매쉬업된걸로 위젯을 제공할 수는 있지만....

제일 관심이 간건 IDtail의 송교석 팀장의 "Google OpenSocial 플랫폼과 소셜위젯 기반 SNS"에 대한 부분이었다. 개발자와 개인적인 관심이 크긴 했지만 IDtail이 Opensocial의 지원을 하고 있다는 것(API사이트 에서 오픈소셜에 대한 부분도 제공하고 있다.)은 국내최초라는 점과 오픈소셜에서 앞으로 기대되는 점으로 볼때 상당히 고무적인 기반이고 소셜 위젯을 위한 "마이템"이라 서비스를 클로즈 베타로 제공하고 있다는 점에서 상당히 관심이 갔고 IDtail에서 마이템 제작을 할 수 있도록 지원한다고 한다.

그리고 위젯을 마케팅이란 측면에서 바라본 위자드웍스의 "해외 위젯 마케팅 사례와 핵심 성공 전략" 세션도 관심이 갔다. 유니클락의 사례로 보았을 때 어찌 보면 당연한 이야기 인데 개발자라서 그런지 마케팅쪽으로는 집중해서 생각해 본적이 없는데 마케팅요소로서 위젯의 특성에 대해서 생각해 볼 수 있는 시간이 되었다. 하지만 웹위젯으로 지금은 꽤나 기대가 되지만 웹페이지에 위젯을 붙힐 수 있는 공간이 제한적이라는 점을 생각해 볼 때 위젯이 말그대로 대박나서 수많은 위젯들이 나왔을 때가 좀 걱정되기도 했다.)

그래도 크게(어쩌면 전혀...) 관심을 가지고 있지 않았던 위젯에 대해서 다시한번 정리해서 생각해 볼 수 있게 되었고 앞으로 위젯을 좀 관심있게 보게 된 시간이 되었다.

위젯 코리아 컨퍼런스 2008에서 받은 기념품

그래도 이번에 득템한 것들... 기본으로 주는건데도 꽤나 푸짐한...  ㅎㅎㅎㅎ 맘에든느 위자드웍스의 머그컵과 위자드웍스의 센스가 돋보이는 Status Card... ㅎㅎㅎ 회사에서 써야지... 그리고 노트는 종류가 많아서 당장 쓰진 않을 것 같지만 심플함이 맘에 드는 IDtail의 다이어리...

[JS]자바스크립트(Javascript)로 동적으로 생성한 HTML 소스보기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

자바스크립트가 강력해 지면서 DOM을 다루는 스크립트를 많이 사용하곤 한다. Ajax를 하면 특히 많이 사용하기도 하고 그 외에 편리한 UI를 위해서 동적(Dynamic)으로 자바스크립트를 이용해서 HTML의 내용을 바꾸거나 구조를 변환하거나 한다. 여기서 동적이라는 의미는 HTML문서를 작성할때 HTML코드를 입력한 것이 아니라 HTML페이지의 랜더링 후에 페이지를 사용하면서 스크립트를 이용해서 순간순간 바꾼다는 뜻이다.

이런 부분이 자바스크립트가 재밌는 점이기도 하면서 잘 활용하면 여러가지 편리한 인터페이스나 효과를 제공할 수 있다.

하지만 이렇게 동적으로 바꾸었다고 하더라도 브라우저에서 제공하는 "소스보기"를 하면 처음 작성한 HTML코드만 나올뿐 동적으로 생성한 코드를 볼 수가 없다. 동적으로 생성한 HTML이 내가 의도한 대로 잘 안나오면 간단한 것은 스크립트 부분을 보면서 해결할 수 있지만 소스가 복잡하다면 스크립트코드만 보면서 생성되는 HTML코드를 예상하는 것은 생각처럼 만만치 않을 때가 있지만 실제로 생성된 HTML코드를 볼 수 있다면 디버깅하는데 훨씬 편리할 수 있다.(왠만한 HTML Syntax에러는 에디터에 붙혀만 넣어놔도 발견할 수 있으니까....)

이게 불가능 한 줄로만 알고 있었는데 동적으로 생성한 코드를 볼 수 있는 방법이 있다.

document.documentElement.innerHTML

위 코드를 실행하면 현재 눈에 보이는 랜더링상태의 HTML코드를 볼 수 있다.

간단하게는

alert(document.documentElement.innerHTML);

를 통해서 볼 수 있지만 이렇게 할 경우 일단 줄바꿈이 제대로 되지 않으며 alert창에서는 복사를 할 수도 없고 또 긴코드는 alert창으로 다 볼 수도 없다. alert창에는 스크롤이 없으므로....(테스트 중인게 아니라면 대개의 경우 alert에서 보여줄 수 있는 야을 넘어갈 것이다.

그래서 동적으로 생성되는 코드를 볼 수 있도록 간단한 예제를 만들어 보았다.

document.documentElement.innerHTML 예제보기

document.documentElement.innerHTML에서 나온값은(head~/body 까지 나온다.) html코드이기 때문에 일반적인 방법으로 페이지에 찍어내도 다시 렌더링 되어버려서 소스코드를 볼 수가 없다.(결국 이것도 동적으로 생성한 것이니까...) 소스를 볼 수 있는 <xmp></xmp>코드를 이용해서 HTML코드가 찍히도록 할 수도 있는데 보통의 HTML페이지 소스에서는 스크립트 코드가 당연히 들어가 있을 것이기 때문에 </script>부분에서 결국 깨져버린다.

위의 예제에서는 textarea를 이용했다. textarea에 찍으면 html코드도 그대로 찍히니까 가장 간단한 방법일 것이다. 복사해서 에디터쪽에 붙히기만 하면 되니까....  예제를 약간 설명(?)하면 div를 하나두고 그안에 있는 change버튼을 누르면 div안의 내용을 스크립트를 이용해서 바꾸어 주었고 소스보기 버튼을 누르면 현재상태의 html코드가 textarea에 찍히는데 change버튼을 누르기 전에 소스보기를 눌러보고 바꾼 후에 눌러보면 쉽게 달라진 점을 비교할 수 있을 것이다.

귀찮아서 그렇게 까지는 안했지만 일반적으로 게시판에디터에서 하듯이 document.documentElement.innerHTML에서 나온 값의 태그가 동작하지 않도록 &lt; &gt;등으로 바꾸어줘서 찍어주는 방법도 있을 것이다.

머 보여주는 방법보다는 일단 본수 있다는게 중요한거니까.. ㅎㅎㅎ

[JS]웹개발자를 위한 Cheat Sheet 모음..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

다른쪽도 마찬가지겠지만 웹개발을 하다보면 메서드명이나 프로퍼티명이 헷갈릴때가 많다. 아예 어떻게 쓰는건지 모르는거 말고 어떻게 쓰는지 그게 있다는건 아는데 갑자기 쓰려니 이름이 헷갈릴때.... 분명히 있다.
getElementByTagname이던가 getElementByClass이던가 하는듯.... 스펠링도 헷갈리고 각 언어나 라이브러리마다 메서드명도 약간 차이가 나고... 함수명 하나 찾을라고 인터넷 뒤지거나 책찾아보는 것도 은근히 번거로운데 이런게 다른사람들도 생각하는 문제인지 Cheat Sheet라는 게 존재한다.

Cheat Sheet라는건 쉽게 말하면 컨닝페이퍼정도? A4한장 정도의 사이즈에 이쁘게 잘 정리해서 필요한 각 메서드나 프로퍼티를 정리해 놓아서 바로바로 참고해서 쓸수 있게 해 놓은 걸 말하는데 Cheet Sheet를 잘 모아놓은 포스팅이 올라와서 소개한다.

The Best Cheat Sheets for Web Designers and Developers

이곳에 올라와 있는 Cheat Sheets는

  • CSS
  • Prototype 1.5.0
  • Script.aculo.us
  • Mootools
  • PHP
  • jQuery
  • Javascript
  • XHTML
  • HTML
  • Ruby on Rails
  • mod_rewrite
  • Perl
  • htaccess
  • .Net
  • ActionScript 2.0
  • mySQL
  • ASP/VBScript
  • Ajax
  • Worldpress
  • Blogger
  • Movable Type
  • MovableType ExpressionEngine Quick Reference
  • RSS 2.0
  • TypePad
가 올라와 있다.

좀 잘 활용해 볼려고 하긴 하는데 아직은 습관이 안붙어서 잘 안된다.(솔직히 아예 알지도 못하는 메서드들이 너무 많아서.. ㅠ..ㅠ)

[EP]Adobe RIA World 2008 참가 후기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

올해는 좀 소문만 더 무성했던 RIA라는 녀석이 이제 본격적으로 붙는 한해가 될거라고 생각하고 있다. 실버라이트도 여러가지 모습들을 보여주고 있고.... 그러던 와중 RIA WORLD 2008이라는 녀석을 ADOBE에서 개최해서 갔다가 왔다.

원래 지난달에도 세미나가 하나 있었는데 그쪽은 개발에 상당히 치중되어 있던터라 관심이 많아 신청을 했었는데 하필 회사일로 그전 주말출근후 밤새고 월요일날 퇴근하고 세미나가 있던 화요일에 휴식을 취한터라 세미나 참가를 못해 아쉬웠기 때문에 이번행사에 많이 가고 싶었는데 운좋게 팀이 대규모로 움직이면서 참가하게 되었다.

이번 행사는 Flex 3와 AIR 1.0 의 공식런칭을 하는 자리였기 때문에 상당히 크게 치루어졌고 세부 개발에 대한 부분이라기 보다는 좀더 큰 개념적인 부분으로 많이 다가갔다.

무료행사에 뭔소리냐 할지도 모르겠지만 시작부터 좀 안좋은 얘기를 하자면 Adobe라는 네임밸류를 생각한다면 행사진행에서 아쉬움이 많이 남았다. 최근에 가본 세미나중에는 정말 많은 사람이 와서 "이러느니 저러느니 해도 RIA가 인기는 인기구나"라는 생각을 하긴 했지만 그정도를 예상못했다는 것처럼 보이는 행사진행은 컨퍼런스에서 말하는 것보다 실제로 자신들을 과소평가했거나 너무 안이하게 대처한게 아닌가 하는 생각이 들었다.

일단 등록부터 좀 짜증이 났다. 9시부터 40분간 진행된 등록.... 9시에 도착한 회사 동료로부터의 얘기를 들어보면 9시정각부터 사람들이 가득찼다고 했는데 그렇게 계속 빡세게 돌린 등록이 행사시작인 9:40분까지 다 이루어지지도 못했다. 물론 늦게 온사람도 있었겠지만 시간내에 도착한 사람도 제때에 처리해내지 못했다. 나도 30분정도에 도착했지만 거진 50분에서야 등록을 마칠수 있었다.

그러고 들어간 행사장. 이미 의자는 모두 다 차있었고 뒤에 서있을수밖에 없었는데 곧 의자가 온다는 안내하시는 분의 말이 있었지만 계속 들어오는 사람에 비해서 의자는 한참만에 십여개정도 오고 끝이났다. 그러고는 안정상의 문제로 더이상 의자를 놓을수 없다고 통로바닥에 앉으란다.

열심히 바닥에 앉도록 권고하던 한 도우미는 나보고 "좀 있으면 통로에도 앉을 수 없어요~"라면서 "곧 있으면 후회할걸"이라는 의미심장한 웃음을 날려주었고 약간 어이없음을 느끼며 그냥 서서 봤다. 이런 저런 도우미들이 왔다갔다 하면서 안내를 했지만 결론은 "사람많아서 어쩔수 없으니 니가 알아서 해라"정도였다. 좀 직급이 있어보이는 사람도 기껏 한다는 소리가 "시간지나면 가는 사람들 있으니까 그러면 의자에 앉으면 된다"고.. ㅡ..ㅡ 사전등록도 받았고(특성상 많이 안올때도 있긴 하지만...) ADOBE정도의 업체에서 이건 어떤 핑계를 대도 납득시킬수 없다고 본다.

기술적인 얘기보다는 마케팅적인(?) 측면에서 RIA의 위치와 회사도입시에 투자수익률등에 중점적으로 얘기되었던 시간... 

Adobe의 에반젤리스트인 Ryan Stewart(유명한 사람이란다...)와서 한 세션... 동시통역으로 듣는데 통역기가 자꾸 지직거린데다가 PPT를 보면서 동시통역도 듣고 직접말하는 것도 같이 들으려 하다보니 내용캐취를 쉽게쉽게 못했던...(담부턴 차라리 택일을 해야겠다. 통역을 듣던 원어를 듣던...)

Flex 3와 AIR에 대한 구체적인 설명들.... 솔직히 Flex의 구현된 기술은 구경도 꽤 해봤고 그건 공부하면 되지 라는 생각(쉽다는게 아니라 기술에 깜짝놀랠 시기는 좀 지났기에...)을 좀 가지고 있었기에 나의 관심사는 AIR쪽에 더 쏠려 있었다. 일단 웹개발자가 웹개발기술을 가지고도 AIR를 개발할 수 있다는 점에 더욱 호의적이 되면서 관심이 갔고 Flex로 개발해서 Flex와 AIR로 모두 배포할 수 있다는 점도 흥미가 갔다.(말로 하는걸 다 믿을 순 없겠지만...)


이런저런 사정으로 오후세션은(솔직히 이게 핵심인데.. ㅠ..ㅠ) 거의 못 들었기 때문에 후기는 오전파트로만... ㅡ..ㅡ 잠시 들렸을때 On-line트랙을 보니까 사람 너무 많아서 강의실이 터지게 생겼더라는....  아쉽지만 실기술에 대한 부분은 웹을 통해서 접해야 할듯 하지만 어쨌든 좀더 흥미를 가질 수 있는 계기간 된 행사였다. (AIR에 대해선 보급여부를 떠나려 개인적인 좀 우려감도 있지만 AIR만지기 시작하면 재밌을것 같기도 하다.)

구입한 Flex 3 책

어쨌든 오늘의 수확... 기념품으로 받은 좀 저렴해 보이는 Adobe 큐브와... 언젠가 부터 뭔가 배울라고 하면 일단 책부터 사게되어서 구입한 Flex3책이다. 이날 런칭인데 책이 나와버려서(서점엔 풀리지도 않았단다. 이날 발간되었다고...) 책이 과연 어떨지 걱정을 하긴 했는데 Flex2에 대한 국내서적은 평이 워낙 안좋았기 때문에 내용이 좀 탄탄해 보여 샀는데 이 Vanila ROI라는 곳이 RIA에선 엄청 유명한 곳이었다. 왠지 뿌듯.... (근데 봐야되는데... ㅠ..ㅠ 보진않고 맨날 책 구입만..)


덧) 발표자료가 Adobe플렉스 사이트에 올려준다고 했는데 아직 안올라오고 있다. 내가 못찾는건지.. ㅡ..ㅡ

덧) 발표자료가 업로드 되었다.
2008.3 22

[Book] 최범균의 Ajax Programming 기초부터 중급까지..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Ajax Programming 기초부터 중급까지 - 8점
최범균 지음/가메출판사



AJAX를 공부하기 위해서 이 책은 산지는 한 6개월 정도 됐었는데 바쁘고 다른거 공부하고 하다보니까 이제서야 봤다.

나는 자바스크립트를 좀 이상한 순서로 공부를 했다. 아주 기초적인 부분만 배운뒤에 바로 Prototype Framework를 접했다. 초급에서 중급을 거진 건너띄고는 바로 프로토타입으로 넘어가게 되었다. 물론 중간에도 계속 다른 책도 보고 이것저것 하기는 했지만 AJAX를 예를 들어보아도 프로토타입을 이용해서는 AJAX를 구현할 수 있지만 XMLHttpRequest를 이용해서는 할 수 없었다.(이런 부분은 프로토타입에서 알아서 해주니까..)

처음엔 어려웠지만 계속 보다보니 이젠 이해를 하게 되었지만 약간 기초가 부실하게 되었다. 자잘한 곳에서는 몰라도 기초가 부실한 것은 그 바닥이 드러나게 되어 있는데 이책이 그런 부분을 보완해 주었다.

자바캔을 운영하시는 최범균씨의 책은 이번이 2번째이다. 그 이전에는 "최범균의 JSP 2.0 프로그래밍"를 보았었는데 그때도 상당히 탄탄한 구성으로 책을 참 잘 쓴다라는 생각을 했었는데 이번에도 마찬가지였다. 자바스크립트는 이것저것 좀 다뤄본 관계로 한 챕터 한 챕터 이해해야 하는 수준이라기 보다는 위에 말한대로 내가 알고 있는 부분이 제대로 알고 있는 건지 확인하는 차원이었기 때문에 책은 꽤 빨리 보게 되었다.

이 책은 AJAX (당연히 그에 필요한 자바스크립트 부분까지...)의 문법적(또는 방법론적)으로 접근한 책이다. 구조가 어떻게 이루어 지는지... 어떤 방법으로 사용하는지... 등등에 중점이 맞춰져 있다는 말이다. 그래서 나는 더욱 좋았다. AJAX의 특성상 서버측 언어가 없이는 설명을 완전하게 할 수 없는데 이 책에서는 JSP와 PHP를 위주로 설명하고 있다. 주는 JSP위주로 설명한다고 할 수 있겠지만 PHP도 해당부분의 소스를 모두 제공하고 있다. 그래서 이 두 언어를 사용할 수 없다면 이해하기는 좀 어려울 수도 있다.
최범균씨의 책 답게 AJAX의 핵심인 XMLHttpRequest가 어떻게 이루어져 있고 어떻게 사용해야 하는지 조금씩 예제가 확장되어 가는 형태로 초보자도 이해하기 쉽게 설명해 주고 있다. AJAX를 실제 구현하려면 자연히 필요한 DOM을 다루는 부분이나 고급 자바스크립트에 이벤트리스너까지 구체적인 예제를 통해서 이해하기 쉽게 되어 있다.

MVC패턴으로 자바스크립트 구현을 통해 자바스크립트의 또다른 패턴을 익힐 수 있고 후반부에는 실제로 사용해 볼수 있는 예제를 통해 앞에서 배운 부분을 활용해 볼 수 있도록 되어 있다.

물론 AJAX자체가 좀 중~고급 자바스크립트라고 생각하기 때문에 자바스크립트 자체를 잘 이해하고 있지 않다면 상당히 어려운 내용일 수도 있지만 예제를 잘 따라해 본다면 그렇게 어렵지 않게 배울수 있는 책이라고 생각한다. 기초부터 활용까지 탄탄하게 구성되어 있는 책....

[JS]자바스크립트 객체 사용에 대해서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

자바스크립트는 상당히 유연한 스크립트이다. 이건 어떻게 보면 상당히 편리하지만 다른 면에서는 아주 헷갈리는 부분이기도 하다. 어찌되었든 내가 보기에는(약간 소심모드.. ㅡ..ㅡ) 자바스크립트의 기본은 Function인것 같다. 일반적으로 메서드나 함수등으로 부르기도 하는 이 Function은 초급 자바스크립트 단계에서는 함수정도의 기능으로 사용하지만 이걸로 객체도 생성하고 모든지 다 할 수 있다.

Js

function ex() {
    ........
}

흔히 보곤 하는 자바스크립트의 기본적인 모습이다. 전에는 솔직히 이게 다인줄 알았다. 위의 형식으로 선언을 하고 ex();로 호출을 한다.

Js

function example1() {

    alert("test");

    this.load = function() {
        alert("test2");
    }
}

이 function은 이런 형태로도 가능하다. example1에 load라는 함수를 더 만들어 넣은 형태이다.
이렇게 했을 경우

example1();                       // test 출력
var run = new example1();   // test 출력
run.load();                         // test2 출력


위의 3가지 형태가 모두 가능하다. 물론 마지막 줄은 2번째 줄에서 run이라는 객체를 생성한 후에야 가능한 것이다. load는 example1을 통해서 객체를 생성했을 때만 사용이 가능하다. this를 통해 해당 객체에 메서드나 변수를 추가해 줄 수 있다. function()이라고 써주는 것은 선언부의 역할을 하므로 위 예제에서 alert("test"); 는 생성자의 역할을 하게 되어 객체를 생성할 때 동작하게 된다.

물론 형태가 function의 형태이기 때문에 example1();으로 객체 생성없이 바로 사용도 가능하고 이럴때는 생성자 역할을 하는 부분만이 실행이 되고 load()는 실행할 수 없다.





이번에는 약간 다른 형태로 정의하는 것을 보자.

Js

var ex2 = function() {

    alert("test");

    this.load = function() {
        alert("test2");
    }
}

위에서 본것과 거의 동일하게 생겼지만 아주 약간 다르다. 초급때 자바스크립트를 접했을때 사용하던 일반적인 패턴과는 약간 다르게 되어 있는데 구조를 보면 ex2라는 변수를 만들고 거기에다가 function()을 할당했다.  (처음에 이렇게 정의하는 방식을 보았을때 익숙치 않아서 많이 당황을 했었다.) 이렇게 할경우 약간은 다르게 보이더라도 실제로는 위에선 본 형식과 동일하게 동작을 한다.

ex2();                       //test 출력
var run = new ex2();  //test 출력
run.load();                //test2 출력


정의형식만 약간 다를 뿐 사용할 때는 완전히 동일하게 사용할 수 있다.

요즘에는 이런식으로 사용하는 것을 훨씬 많이 보게 된다. 내 생각으로는 좀더 명시적으로 나타내기 위해서 굳이 동작은 같으면서도 모양은 다른 이런 형식을 사용하는 것 같다. 자바스크립트에는 따로 클래스라는 개념을 가지고 있지 않기 때문에 객체를 생성해서 사용할 것과 단순히 호출만 해서 사용할 function()을 구분해 주는 것 같다. 사용은 똑같이 할 수 있지만 명시적으로 나타내어주는 목적으로 사용하는 듯 하다.(누구랑 의논해 본게 아니기 때문에 확실치 않다. 다시금 급 소심모드.. ㅡ..ㅡ)





2번 예제를 약간 확장에서 이런식으로 사용하는 것도 가능하다.

Js

var ex3 = function() {
    this.id = "outsider";
    this.url = "outsider.ne.kr";
}

ex3.prototype = {
    init: function() {
        alert("test");
    },

    load: function() {
        alert("test2");
    }
}

아마 이런 형식을 가장 처음 본 것은 prototype 프레임워크를 사용하면서 인듯 하다. 그뒤로 여러번 눈에 익으면서 나도 몇번 써보면서 왜 이런식으로 선언을 할까 하는 생각을 했었는데 이게 JSON[JavaScript Object Notation (http://www.json.org/)] 이란 것을 눈치챈 것은 불과 몇일 되지 않았다. { 키:값, 키:값 } 의 형식을 쓰고 있는 JSON을 ex3라는 변수에다가 할당한 것이다. (:와 , 를 에디터에서 체크해 줄때는 더 신기했었다. ㅡ..ㅡ) 자바스크립트와 JSON의 특성을 제대로 이용한 형태이다. JSON은 이런식으로 값이 펑션이더라 하더라도 그대로 먹는다.

ex3();
var run = new ex3();
run.init();     // test 출력
run.load();     // test2 출력
alert(run.id);  // outsider 출력


위의 형태가 모두 사용이 가능하다. 물론 시작은 2번 예제와 동일하게 작성했으므로 ex3(); 같은 형식으로 호출이 가능하고 객체를 만든후에는 메스드나 변수를 사용할 수 있다. (나중에 또 포스팅을 할듯하지만 이런식으로 이용해서 클래스를 만들어 쓴다. ex3부분이 생성자가 되고 prototype메서드를 통해서 추가메서드를 확장해 주는 것이다.)


유연한 만큼 어떻게 사용하는 지는 본인 맘이지만 난 대부분이 하는 스타일에 어느정도 맞춰주는 것이 좋다고 생각하기에.... 요즘 보는 자바스크립트 라이브러리등의 소스를 볼때도 도움이 되고 좀 더 명시적이라서 도움이 되는 것 같다. (나도 좀 헷갈려서 이 기회에 테스트 하면서 좀 정리를.. ㅋㅋ)

[JS]script.aculo.us의 Combination Effects 사용하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

script.aculo.us는 Prototype Framework를 이용한 라이브러리이다. 처음 프로토타입 프레임워크에 대해서 알았을 때 프로토타입 프레임워크와 항상 콤비를 이룬다는 script.aculo.us에 대해서 들었다.(솔직히 머라고 읽는건지 모르겠다. 난 그냥 스크립타큘러스라고 하긴 하지만...) 꼭 써야할 만큼 강력하다는 얘기도 들었지만 그 당시에는 프로타입 자체도 잘 이해못하던 때였기 때문에 script.aculo.us를 이해한다는 건 거의 불가능에 가까웠다.

그 당시 프로토타입 분석의 임무를 맡고 있었기 때문에 분석하면서 콤비네이션 이펙트를 우리 팀장님한테 보여줬을때 "이걸 어따써"라는 대답(우리 사업분야를 고려해서..)을 들었지만 솔직히 좀 동감하고 있었다. 내심 내가 모르는 뭔가 있을꺼야 라는 생각을 하고 있긴 했지만 lightbox등등의 수많은 화려한 자바스크립트에 비한다면 "이걸 가지고 어쩌란 말이지?"라는 의문은 당연한 거였다.

이때 잘못했던 것이 바로 사용할 수 있게 만든 라이브러리등과 script.aculo.us를 동일선에서 비교한 것이었다. script.aculo.us는(아직 살짝만 써본거지만) 라이브러리라고 써있긴 하지만 내생각으로는 거진 프레임워크에 가깝다. 프로토타입 프레임워크가 가지지 못한 것들을 좀더 확장시켜주는 역할을 하는 것이지 다른 라이브러리들처럼 script.aculo.us그 자체로 쓰라고 나온 것이 아니다.

script.aculo.us도 여러가지 기능이 있는데 이중에서 이펙트관련 기능만 사용해 보았다.

script.aculo.us의 데모페이지에 가면 콤비네이션 이펙트 16가지에 대한 데모가 있다. 이 부분에 대해서 설명을 할려고 한다. 좀 복잡함에 쫄았었는데 만지다 보면 완전히 이해는 못해도 사용하는데는 그렇게 어렵지 않다. 그리고 먼저 추가적으로 말하면 script.aculo.us에서 제공하는 이 콤비네이션 이펙트는 내가 이해하기에는 이렇게 쓴다정도를 제시한다고 할 수 있다. 그렇기 때문에 예외처리등을 안되어 있다. 슬라이드등의 효과를 연속적으로 하면 오작동이 일어나기 때문에 이런 부분은 별도로 처리를 해 주어야 한다.

콤비네이션 이펙트는 말그대로 콤비네이션이다.(엥?)
크기의 변화를 주는 Effect.Scale
투명도를 조절해주는 Effect.Opacity
이동시켜주는 Effect.Move, Effect.MoveBy
여러 효과를 묶어주는 Effect.Parallel
를 다양하게 조합해서 이루어진다. 즉 이걸 다르게 조합하면 내가 원하는 다른 효과도 만들어 낼 수 있다는 것이다.

내부 코드를 다 이해한 것은 아니기 때문에 동작원리까지 설명하긴 아직 어렵고  콤비네이션 이펙트를 어떻게 사용하는 지 정도만 보겠다. 분량이 많은 관계로 일일이 다 설명하면서 하기는 좀 부담되서(귀찮기도 하고.) 예제페이지를 하나 놓고 전체적으로 간략하게만 설명하겠다. 여기선 그냥 사용법정도만 다루는 것이기 때문에 예제의 소스를 보는것 만으로도 이해하는 데 문제가 없을거라고 생각한다.
script.aculo.us Combination Effects Examples
(prototype.js 1.6.0.2 & script.aculo.us 1.8.0 Based)

 기본적인 사용법은 Effect.메서드('엘리먼트id', {옵션}); 의 형태로 이루어진다. 옵션을 말 그대로 빠져도 상관없다. (표현과 구조의 분리를 위해서 태그에 직접 onclick으로 자바스크립트를 사용하는 것 보다는 이벤트 리스너를 통해서 따로 등록하는게 좋지만 여기서는 보기쉽게 하기 위해서 태그에 직접 코드를 써넣었다.)
● Effect.toggle은 toggle를 소문자로 적어주어야 한다. 대문자로 하면 동작하지 않는다.
● Effect.Appear는 처음에 엘리먼트가 안보이는 상태여야 동작가능한데 display속성을 통해서 불편하게 할 필요없이 $('example2').hide(); 와 같은 방식으로 안보이게 설정해 줄 수 있다.
● Effect.Puff는 margin-left:200px이기 때문에 최초위치와 다르게 나타나는데 margin-left가 0px이면 제대로 동작한다.
● Effect.BlindUp/Down에서는 scaleY 옵션을 먹지 않는다.(문서상으론 되는것 같은데.. ㅡ..ㅡ)
● Effect.SlideUp/Down에서는 scaleX/Y옵션을 1,0으로 주어야 한다. 1이 true이고 0이 false이다.
● Effect.Shake에서는 delay옵션이 먹지 않는다.
● Effect.Squish는 뭘 잘못한건지 옵션이 전혀 먹지 않는다.
● Effect.Highlight는 반드시 new와 함께 써주어야 한다. 기본으로 하일라이트 색은 #ffff99(밝은 노란색)에서 #ffffff(흰색)으로 변한다. restorecolor를 지정해주지 않으면 원래색으로 자동으로 돌아간다. 색지정은 #fff식의 단축코드는 먹지 않는다.

 이벤트 관련해서는 script.aculo.us의 이펙트관련 도규먼트에서 사용에 대한 어느정도의 정보를 얻을수 있고 유저들이 다양한 활용을 올려놓은 Effects Treasure Chest를 보면 도움을 꽤 얻을 수 있다.

[EP]Open ID를 더욱 응원하고 싶어졌다..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

사용자 삽입 이미지Open ID라는 녀석에 대해서 처음 들었을때 "오~ 괜찮다"라는 생각을 했었는데 최근에 더욱 응원을 하고 싶어졌다. OpenID는 대략적으로 얘기하자면 회원인증에 대한 표준 같은 거라고 할 수 있다. (그냥 사용만 해봤기 때무네 아주 개념적인 부분밖에 모른다.) 내 회원정보등은 Open ID를 제공하는 곳에서 가지고 있고 난 이 Open ID를 지원하는 사이트에 별도의 가입등을 할 필요없이 Open ID를 이용해서 로그인을 할 수 있다는 거다.

인터넷에서 회원가입이라는 것은 필수적이면서도 상당히 불편하다. 특히 우리나라에서는 무분별한 개인정보요구로 인하여 짜증이 좀 나기도 한다. 온라인은 아니지만 심지어 동네 PC방에 회원가입할 때도 주민번호를 적으라고 한다. (우기면 넘어가기도 하지만...난 왜 PC방이 개인정보를 요구하는지 아직도 모르겠다.)

어쨌든 이런면에서 Open ID라는 것은 상당히 매력적이고 닷넷패스포트나 싱글사인온처럼 특정 사이트혹은 업체의 종속적이지 않고 표준기술이라는 점에서 그 매력은 더 크다. 내가 웹상에 가입해 있는 사이트는 대충생각해도 100여개는 될것이다. 그 정보를 한 곳에서 관리한다면 그 편리성은 이루말하지 못할 것이다.

사용자 삽입 이미지
Open ID 자체는 이걸하려는 기술의 표준기술의 이름이고 이걸 이용해서 국내에서 서비스를 하고 있는 것이 오픈마루의 myid.net이다. 웹2.0을 지향하는 서비스들에서 많이 채택하고 있고 최근에는 대형포털에도 도입되고 있는 상황이다. 국내에도 OpenID커뮤니티가 존재하고 있다.


최근에 오랫동안 사용하던 비밀번호 변경시도를 하였다. 귀찮아서 계속 미루고 있었는데 최근 옥션개인정보누출사건도 있었고 너무 오랫동안 상당히 쉬운 비번을 사용하고 있었기 때문에 비밀번호는 좀더 보안높은 암호로 올리는 작업을 시도했는데 이게 만만치 않은 일이었다.

일단 사이트마다 비밀번호를 입력받는 정책이 제각각이다.

보안성을 확 높이고자 특수기호를 포함한 암호를 하기로 했었는데 곧 특수기호를 암호에 입력하도록 허용하는 사이트는 그리 많지 않다는 것을 깨달았다. 그래서 특수기호가 없이 갈라고 했는데 영문+숫자 혼합필수 정도가 대부분의 사이트의 기본적이긴 하지만 어떤 사이트는 동일한 글자를 3번이상 연속입력하는 것을 거부하고 어떤 사이트는 암호를 8자나 10자정도까지만 허용하고...

맨날 보안강화하라고 하는거 무시했는데 막상 현실을 보니까 암호의 보완성강화를 하기가 무척이나 어렵다. 사이트별로 리스트업을 하기도 참 그렇고... 여태 이런 시도를 안했던 나의 문제라고 할 수도 있지만 이런 제각각의 비밀번호 정책은 상당히 짜증을 유발했다. 보안성 높은 암호로 통일시키려 했지만 결과적으로는 이것저것의 암호가 뒤섞이고 말았다.

이런 점에서 OpenID의 장점을 몸소 체험했다. myid.net에 가서 비밀번호를 바꿔주는 것 만으로 7-8개의 사이트의 비번을 한꺼번에 바꾸었다. 이게 1-200개의 사이트였다면 하는 생각이 간절했다.

My Comment..
나도 OpenID 라는 개념은 Goolge Blog 쓰면서 보게 되었다..
당췌 이게 머지 했는데.. 조금씩 알아가고 쓰다보니.. "아하.. 이런거구나.." 하게 되었다..
살면서 아니.. 개발자로써 아주 필수는 아니지만, 알아두면..
어디가서 "아!.. 그거..??" 정도는 할 수 있을듯해서 가져왔다..
읽다 보면 글이 약간 개인 얘기 같기도 하지만.. 기본적인 개념은 드러나 있어서..
도움은 될거라고 생각한다.. [나도 그랬으니까.. ㅋㅋㅋㅋ..]