반응형

먼저 이글은 http://zine.standardmag.org/200802/20 와 같은 내용임을 알려 드리며 다시한번 테스트 해본 결과입니다.

크로스브라우징으로 인해 시간낭비 및 생각하지 않던 것들때문에 야근을 하는 경우가 종종 발생하죠. 참 안타까운 현실입니다.
알려진 크로스브라우징 팁 가운데 DTD의 선택도 중요한 부분을 차지 하고 있다는건 여러 글들을 통해 접했으리라 생각합니다.
그래서 DTD에 따른 박스크기 변화를 다시한번 테스트해 보았습니다.

테스트 박스는 공통적으로 width = 150px / height = 100px / padding = 30px / border = 3px 값을 주었을때 입니다.

먼저 DTD를 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 로 했을 경우에 결과입니다.
소스는 다음과 같습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
body { margin:30px; }
#wrap { width:150px; height:100px; padding:30px; border:3px solid #ccc; font-size:12px; }
</style>
</head>

<body>
<div id="wrap">테스트 크로스 브라우징</div>
</body>
</html>


dtd_html.gif

보 시는 바와 같이 파이어폭스를 제외한 IE6 / 7 은 지정한 가로/세로 값으로 보여지며 border 과 padding 값을 포함하고 있는 반면 파이어폭스는 지정한 가로/세로 값에서 border 값과 padding 값이 추가된 사이즈로 박스가 보여집니다. 


다음은 DTD 가 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 로 했을 경우 입니다.

소스는 다음과 같습니다.

<!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">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
body { margin:30px; }
#wrap { width:150px; height:100px; padding:30px; border:3px solid #ccc; font-size:12px; }
</style>
</head>

<body>
<div id="wrap">테스트 크로스 브라우징</div>
</body>
</html>


dtd_xhtml.gif

이처럼 DTD에 따라 각 브라우저 별로 다르게 보임을 알수 있습니다.

오페라와 사파리(3.1) 역시 파폭과 동일하게 DTD와 관계없이  padding 값과  border 값만큼 지정한 박스보다  커짐을 알수 있었습니다.

dtd_xhtml_opera.gif 

dtd_xhtml_safari.gif

역시 IE만 혼자 노는걸 알수 있군요.. 참고 되셨으면 좋겠네요..^^
반응형
반응형
9609002472.jpg
제프리 젤드만의 웹표준 가이드
웹 디자이너와 개발자, 그리고 사용자를 위한 올바른 선택(2ed)

제프리 젤드만 (Jeffrey Zeldman) 은 누구인가?
제프리 젤드만은 최초의 웹디자이너 중 한 명이고 전문가들 사이에서 강력한 영향력을 지녔습니다.

1995년 전 아트 디렉터이자 카피라이터인 그는 최초로 가장 영향력 있는 개인 웹 사이트 중의 하나 (www.zeldman.com)을 만들었고웹 디자인의 방법과 원칙에 대한 유명한 튜토리얼을 쓰기 시작했습니다.

1998년 마이크로소프트와 넷스케이프에서 각각 자기들의 브라우저에서 같은 기술을 지원하도록 설득한 기초 연합인 The Web Standards Project(www.webstandards.org)를 공동 설립했습니다. 같은 해 A List Apart(www.alistanart.com) 'for people who make websites' (웹 사이트를 만드는 사람들을 위하여)를 만들기 시작했습니다. 그리고 이 분야해서 가장 존중 받고 영향력 있는 잡지가 되었다고 합니다. (책 저자 소개 일부...)


웹표준과 저작 프로그램
제프리 젤드만의 웹표준 가이드에서는 이렇게 쓰여져 있습니다.

브 라우저 전쟁의 절정이었던 시점에서 개발된 어도비(이전의 매크로미디어)사의 드림위버너 Golive처럼 시장을 장악한 전문가용 비주얼 에디터들은 3.0과 4.0 브라우저에 최적화된 마크업과 코드를 생성하여 브라우저의 비호환 문제를 처리했습니다.

브 라우저가 비표준이고 유효하지 않은 HT<L 태그로 실행될 때 드림위버와 GoLive는 브라우저가 원하는 대로 태그를 만들어 주었습니다. 각 브라우저가 자신들만의 호환성 없는 DOM이 있거나 독자적인 스크립트 언어로 작동된다면, 드림위버나 GoLive는 그것에 따라서 코드를 만들었습니다.

이런 방식을 사용한 드림위버와 GoLive가 마크업과 코드를 직접 사용하는 개발자들보다 더 잘못했다는 것은 아닙니다. 2장에서 설명한 바와 같이 표준이 개발되는 중이었고, 브라우저들이 지원을 제대로 하지 않을 때라서 사이트 제작자도 어쩔 수 없었습니다. '원하는 대로 주라'는 말은 그때는 말이 됐지만 이제는 적절한 전략이 아닙니다. 브라우저가 표준을 지원하자 드림위버나 GoLive 같은 프로그램들도 같이 변하게 되었습니다. 이제는 프로그램들도 표준을 지원합니다.

전문 비주얼 웹편집의 선두 주자인 드림위버로 만든 사이트의 표준화 지원과 접근성을 향상시키는 노력의 일환으로 매크로 미디어의 기술자들과 같이 일하기 위해 2001년 WaSP의 Dreamweaver Task Force 가 생겨났습니다.
이 그룹의 주요목표는 아래와 같습니다.

* 드림위버는 '격이 다른'유효한 마크업을 만들어야 한다(유효한 마크업은 반드시 표준 태그와 요소만 사용해야 하고 에러가 없어야 한다.)
* 드림위버는 유효한 DTD를 추가하여 XHTML과 HTML 버전을 선택할 수 있게 해줘야 한다 (DTD-Document Type Definition은 브라우저에게 어떤 종류의 마크업으로 웹 페이지를 만들었는가를 알려준다.)
* 드림위버는 문서의 DTD를 엄격히 따르고, 이에 따라서 마크업과 코드를 만들어야 한다.
* 드림위버는 모두에게 접근성 있는 웹 문서를 사용자가 쉽게 만들 수 있게 해야한다.
* 드림위버는 CSS2를 정확하게 표현하여 CSS로 만들어진 페이지가 드림위버의 비주얼 환경에서 작동이 되어야 한다.
* 드림위버는 사용자의 허락 없이 inline 스타일을 추가하여 유효한 CSS 레이아웃을 방해아지 않아야 한다.
* 사용자가 드림위버로 만든 페이지가 유효하고 높은 수준의 접근성을 이룰 수 있다는 믿음을 가질 수 있어야 한다.

이 목표들에 더해서 추가적인 목표들이 2002년 5월 드림위버 MX가 출시되면서 생겨나게 되었습니다.
드림위버 MX를 만드는 데 도움을 주었던 Dreamweaver Task Force는 제품을 평가 하면서 아래 사실들을 발견하게 되었습니다.

* 훌류한 유효한 마크업을 생산해 냈다.
* 사용자가 접근성 있는 사이트를 만들 수 있게 도와주었다.
* (CSS배치에 다소 문제점이 있긴 하지만) 적합한 수준의 정확도로 CSS2를 표현했다.
* CSS 레이아웃을 해치지 않았다.
* 유효한 XHTML 과 CSS(자동으로 표준지원 검사를 하여)사용을 권장했다.
* 웹표준을 중요하게 생각하고 장려했다.

개인 적으로도 드림위버를 웹표준 저작 툴로 추천하는 바입니다.
참고로 외국에서 실시된 설문조사에서 가장 많이 사용하는 웹저작 툴로도 드림위버를 꼽고 있습니다.
http://webdesign.about.com/gi/pages/poll.htm?linkback=http://webdesign.about.com/b/a/253457.htm&poll_id=2822610066

물론 우리나라에서는 에디터플러스도 많이 사용되긴 하지만, 위에 설문조사에서 보듯이 웹퍼블리셔들이 선호하는 저작 프로그램임은 사실인거 같습니다.
반응형

'개발도 하냐?' 카테고리의 다른 글

웹 퍼블리셔란?  (0) 2008.12.20
DTD에 따른 브라우저 박스크기변화  (0) 2008.12.20
OpenID php 구현  (0) 2008.12.19
중앙부처 사이트 웹 표준 안 지킨다  (0) 2008.12.12
ERP, ISP, ITA ?  (0) 2008.11.29
반응형
OpenID 그까이꺼 (1)

February 21, 2007 at 8:44 pm · Filed under WebDevelopment, WebStandard

약속했던 대로, OpenID 구현에 대한 이야기입니다.
이번은 JanRain의 라이브러리를 이용한 초간단 OpenID Provider 제작편입니다.
JanRain의 라이브러리는 원래 Python으로 구현되었습니다만, 현재는 여러 언어로 포팅되어있지요. Ruby, Perl, PHP, DotNet, Java, ColdFusion 등이 가능합니다.
여기에서는 PHP Library를 이용하겠습니다.
주의 : php 4.3 이상. Bcmath, GMP 패키지 등이 설치되어 있어야 합니다.
MySQL의 경우에는 innoDB를 사용합니다.

1) 설치
Pear Installer가 지원된다면
pear install http://www.openidenabled.com/resources/downloads/php-openid/pear/Auth_OpenID-1.2.1.tgz

로 설치하면 간단 끝.
만약 경로를 따로 제어하고 싶다거나, 혹은 Pear를 쓸 수 없는 환경이라면, 그냥 다운로드 받아서 적당한 곳에 풀어주면 됩니다.

2) 구조
압축을 풀면 여러가지 디렉토리가 있는데, 실제적으로 중요한 곳은 /Auth입니다. 이 안에, OpenID 컨슈머와 프로바이더 모두를 위한 클래스들이 들어있습니다.
실제로 PHP4로 제작되어 있기 때문에 클래스 내부 코드들이 완벽한 OO 스타일을 유지하고 있다고 말하기는 어렵습니다. 코드들은 거의 미로수준. 게다가, 은근히 도큐먼트가 부실해서…

3) 구현
OpenID는 프로바이더와 컨슈머 사이에서 키를 발급하고 조회하는 메커니즘으로 운영됩니다. 발급된 키를 관리하는 방법은 여러가지가 있는데, 예를 들어, 메모리 세션을 이용하거나, 파일 세션, 혹은 DB 세션등을 이용하기도 하지요. 여기에서는 MySQL을 Store로 사용하겠습니다.

우선, 필요한 파일들을 include해야겠지요?
[php]
require_once(’Auth/OpenID.php’);
require_once(’Auth/OpenID/Server.php’);
require_once(’Auth/OpenID/MySQLStore.php’);
[/php]
내부적으로 다른 인클루드 파일들을 요구하기 때문에, include_path에 아까 설치한 Library위치를 포함시켜두면 좋겠습니다. (아니면 ini_set(’include_path’,) 를 설정하던가요.)

그리고 PEAR::DB를 이용한 DB커넥션을 Store로 사용할 것이므로 DB인스턴스를 만들어서 선언해줍니다.

[php]
$dsn = “mysqli://openid:password@localhost/openid”;
$connection = DB::connect($dsn);
[/php]

그리고는 MySQL을 이용하는 Store 객체를 반환받아야겠지요.

[php]
$store = new Auth_OpenID_MySQLStore($connection, ’setting’, ‘association’, ‘nonce’);
// $store->createTables();
[/php]

도큐먼트에 보면, 2번째 파라미터부터는 optional하다고 되어 있고, null값일 경우 default 정의된 테이블 이름으로 생성된다고는 되어있습니다만, 무엇의 문제인지 null값을 넣으면 제대로 생성되지 않더군요. 그리고 createTables()메쏘드를 실행해줍니다. 위에서는 주석처리해놓았는데, 사실 한번 테이블이 생성되면 저 메쏘드는 필요없어지기 때문입니다. 물론 여러번 실행시켜도 문제가 되지는 않습니다. (내부적으로 rollback)

이제, 해당 Store를 사용하는 OpenID Server 객체를 만들어야겠지요. 만약 다른 DB Store나 혹은 File Store를 쓰고 싶다면 해당 Store 클래스로부터 만들어진 객체를 $store로 넣어주면 됩니다.
[php]
$server =& new Auth_OpenID_Server($store);
[/php]

이제, 이 만들어진 Server 객체에 OpenID Request를 넘겨주면 되는데, 이 Request는 대개 Get메쏘드로 넘어온 값을 가지고 Request객체를 만들어 주면 됩니다.

[php]
//$value는 대개 Get으로 넘겨받은 OpenID request문자열입니다. 서버 구현에 따라 이 부분은 달라질 수도 있으니 알아서…
$request = Auth_OpenID::fixArgs($value);
$request = $server->decodeRequest($request);
[/php]

이 Request 객체의 멤버중에 mode라는 멤버가 있습니다. 이에 따라 해당 작업을 해주면 됩니다.

[php]
switch($request->mode) {
case ‘checkid_immediate’:

break;
case ‘checkid_setup’:

break;
default:

break;
}
[/php]

특별한 문제가 없는 한, association mode는 라이브러리에서 알아서 처리해줍니다. 물론 발급되는 키값을 바꾸거나 하고 싶다면 이 부분을 고쳐줘야겠지요. 어쨌거나, 특별히 고칠 부분이 없다면, 위의 default부분에, 아래의 코드를 넣는 것만으로 충분합니다. 이것은 user정보와는 상관없는 기본적인 handshake 단계의 통신이기 때문에 사실 건드릴 것도 별로 없는 셈이죠.
[php]
$response =& $server->handleRequest($request);
$webresponse =& $server->encodeResponse($response);
foreach ($webresponse->headers as $k => $v) {
header(”$k: $v”);
}
header(header_connection_close);
print $webresponse->body;
exit(0);
[/php]

checkid_setup과 checkid_immediate의 경우에는 프로바이더의 사용자 시나리오에 따라 복잡한 과정들이 처리되어야 하는데, 예를 들자면, 사용자가 인증을 허용하는지 여부등에 따라 반환되어야 하는 값이 달라져야겠지요.

만약 모든 조건이 클리어하다면, (예를 들어, Consumer사이트가 trustRoot에 포함되어 있고, 사용자가 해당 Consumer사이트로의 인증을 허락했다면…)
[php]
$response =& $request->answer(true);
$webresponse =& $server->encodeResponse($response);
foreach ($webresponse->headers as $k => $v) {
header(”$k: $v”);
}
header(header_connection_close);
print $webresponse->body;
exit(0);
[/php]
로 끝.

만약 Simple Registration Extended를 지원한다면, openid.sreg.required / openid.sreg.optional 의 형태(php에서는 openid_sreg_required / openid_sreg_optional 이라는 해쉬값으로..)로, 필요한 사용자의 데이터를 요구하게 됩니다. 이 경우에는,
[php]
$response->addField(’sreg’, 요구필드이름, 해당 데이터);
[/php]
형태로 추가해주면 되지요.(물론 $server->encodeResponse()전에..)

Provider의 사용자 시나리오에 따라서는, 로그인처리, 인증여부처리, 요구필드에 대한 허가 처리 등이 필요한 경우도 있을 수 있습니다. 그런 경우에는 Ajax나 혹은 일반 Form 형태로 사용자 브라우저에서 처리를 받은 후에, 현재 호출된 URL로 다시 redirect해주면 됩니다. (OpenID Request는 Get값으로 이루어지므로… 물론 처리페이지까지 OpenID Request들을 전달해서 그 페이지에서 처리하는 방법도 있겠지요.)

만약 올바른 요구와 답변이 아닐 경우에는,
[php]
$response =& $request->answer(false);
$webresponse =& $server->encodeResponse($response);
foreach ($webresponse->headers as $k => $v) {
header(”$k: $v”);
}
header(header_connection_close);
print $webresponse->body;
exit(0);
[/php]
로 해주면 됩니다.

나머지는 라이브러리에서 다 알아서 해주니까, Provider 개발자가 고민할 부분은, 사용자 시나리오를 어떻게 운영할 것인가.. 하는 부분이겠죠?

이상으로 OpenID 그까이꺼 만드는 법 Provider편 초간단 설명.

물론, 남의 라이브러리를 의지하지 않고, 프로토콜만 가지고 직접 구현할 수도 있겠습니다만, 뭐 굳이 그럴 필요 있나요?

Consumer편은 더 간단합니다만, 다음 기회에. 사실 Provider는 굳이 여러 곳에서 만들 필요는 없어요. 공연히 사용자에게 불편만 줄 뿐. 실상 Cyworld나 Naver Blog같은데서 지원하면 깨끗이 정리될 문제입니다만, 그럴 생각들은 없는 것 같고… (OpenID Provider라면 당연히 자사의 서비스에 Consumer도 붙여야 체면이 서겠습니다만… 과연 N이나 S가 그럴 것인지? ^_^)

----------------------

OpenID 그까이꺼(2)

February 23, 2007 at 4:03 am · Filed under WebDevelopment, WebStandard

이번에는 Consumer 구현입니다.
지난번에 이야기한 건 Provider편이었죠? 많은 부분 Provider와 겹치므로 슬쩍 새 창으로 띄워서 컨닝해가면서 따라오세요.
역시 마찬가지로 PHP 4.3.0 이상, bcmath나 gmp가 설치되어 있다고 가정하고, MySQL은 InnoDB를 사용합니다.
또한, 이미 OpenID Library가 설치되어있고 경로에 추가되어있다고 가정합니다.

Consumer편은 더 쉽습니다. 설명할 게 없을 정도.

일단, 세션스토어로 MySQL을 사용할 예정이니 Provider편과 마찬가지로 MySQLStore 객체를 만듭시다.

[php]
$connection = DB::connect($dsn);
$store = new Auth_OpenID_MySQLStore($connection, ’setting’, ‘association’, ‘nonce’);
//$store->createTables();
[/php]

물론, 최초 실행시에는 createTables()를 해줘야합니다.

만약 MySQL대신 다른 Store를 이용하고 싶다면 다른 Store 클래스로 객체를 만드시면 됩니다. Factory 패턴이기 때문에 따로 신경안써줘도 되는건 OO 공부하신 분들이면 다 아실테지요.
[php]
$store = new Auth_OpenID_FileStore($store_path);
[/php]
예를 들어 파일패스를 스토어로 쓰고 싶다면 이렇게 해주면 된다는 말씀.

이제 만들어진 스토어 객체로 Consumer 객체를 만듭시다.
[php]
$consumer = new Auth_OpenID_Consumer($store);
[/php]

일반적인 시나리오에서는, 사용자는 Consumer 사이트에 와서 자신의 OpenID를 Form으로 입력하겠죠. 어쨌거나 인증하고자 하는 OpenID값을 Consumer 객체에 던져주기만 하면 됩니다.

[php]
$openid = $_POST[’login_openid’]; // 뭐, 예를 들자면.. 이런 식이겠죠:)
$auth_request = $consumer->begin($openid); //오픈아이디 서버와 association을 시도하고 그 결과를 돌려줍니다.
if($auth_request) {
//success;
} else {
//fail;
echo “Authentication Fail”;
}
[/php]
$auth_request가 true이면 정상적으로 association이 이루어졌다는 뜻입니다. 만약 false라면 인증에 실패했다는 메시지를 사용자에게 보여주면 되겠죠?

association이 성공적으로 이루어졌다면 이제, 해당 openid에 대한 인증을 시도하면 됩니다.

[php]
$trust_root = ‘http://consumer.com’;
$process_url = ‘http://consumer.com/afterAuth’;
$redirect_url = $auth_request->redirectURL($trust_root, $process_url);
header(”Location: “.$redirect_url);
[/php]
$trust_root는 Provider에게 이 인증시도가 어떤 Consumer로부터 시도된 것인지 신뢰여부를 판단하게 해주는 일종의 키값이 됩니다. 완벽하진 않지만, trustroot와 인증시도 도메인간에 도메인이 다를 경우 피싱시도로 파악해서 인증을 거부하거나 할 수 있도록 하지요. 반대로, trustroot로 인정된 도메인의 경우에는 따로 지정하지 않는 한, 인증을 자동보장한다거나 하는데 쓰일 수 있겠지요.

$process_url은 OpenID Provider가 인증을 처리하고 난 후 그 결과값을 되돌려받을 Consumer 사이트의 url입니다.

위의 코드가 실행되면, $redirect_url이 되돌려집니다. $redirect_url은 Provider의 인증처리 페이지에 인증 Request를 Get 메쏘드로 전달하는 형태이지요. 즉, 이렇게 만들어진 $redirect_url로 redirect시켜주기만 하면 됩니다.

만약 단순한 인증으로 끝나지 않고, Simple Registration Extension를 이용해 사용자 정보를 얻어오길 원한다면
[php]
$auth_request->addExtensionArg(’sreg’, 요구필드타입, 요구필드이름리스트);
[/php]
를 redirecURL메쏘드 실행전에 실행시켜주면 됩니다.
요구필드타입은 required/optional이구요, 비록 required라고 해도 Provider에서 반드시 정보를 제공한다는 보장은 없으니(Simple Registration Extension를 지원하지 않거나, 사용자가 정보제공을 거부하거나…), required로 요구한 필드의 되돌아오는 값이 없다해도 에러는 아니라는 점.
그외에, policy_url을 이용해, 어떤 필드들을 왜 요구하는지 설명을 알려줄 수도 있지요.
요구필드로 현재 Simple Registration Extension 에 정의된 필드는,
nickname, email, fullname, dob, gender, postcode, country, language, timezone

의 8 가지인데요, 주의할 점은 각각의 필드의 리턴값은 RFC와 ISO에 정의된 표준 스펙이라는 겁니다. 그러니까, country를 알려달라고 요구해도, “Korea”라든가 “대한민국”같은 형식으로 돌아오지는 않는다는 거지요.
각각의 필드에 대한 스펙 및 Simple Registration Extension에 관한 더 자세한 설명은,
여기를 참고하세요.

에.. 하여튼간에, 실제로 Simple Registration Extension을 이용하려면,
[php]
$auth_request->addExtensionArg(’sreg’, ‘policy_url’, ‘http://consumer.com/policy’);
$auth_request->addExtensionArg(’sreg’, ‘required’, ‘email’);
$auth_request->addExtensionArg(’sreg’, ‘optional’, ‘nickname’);
$auth_request->addExtensionArg(’sreg’, ‘optional’, ‘gender’);
$redirect_url = $auth_request->redirectURL($trust_root, $process_url);
header(”Location: “.$redirect_url);
[/php]
처럼 하면 된다는 말씀.

이제 인증 요청이 끝났습니다. redirect를 통해 Provider에게 GET 메쏘드로 인증요청을 했으니 나머지는 Provider와 사용자간에 나름의 과정을 통해 인증여부가 회신되겠지요?

전에 지정해둔 $process_url로 회신이 돌아옵니다.

다음은 $process_url에서 GET으로 돌아온 회신에 대한 처리부분입니다.

[php]
$response = $consumer->complete($_GET);
switch($response->status) {
case Auth_OpenID_CANCEL :
// 사용자가 인증을 취소했을 때의 처리
break;
case Auth_OpenID_FAILURE :
// 무언가의 문제로 인해 인증이 실패했을 때의 처리(인증을 요구한 openid가 없다든가..)
break;
case Auth_OpenID_SUCCESS :
// 인증성공!!
break;
}
[/php]

인증은 모두 끝났습니다. 간단하죠? :)
만약 Simple Registration Extension을 사용했을 경우, 요구했던 필드값들을 구해야겠죠?

[php]
$sreg = $response->extensionResponse(’sreg’);
echo $sreg[’email’];
[/php]

이걸로 진짜 끝.

간단하죠?

그러니까 OpenID 지원하는게 뭐 대단한 것도 아닌거에요. 무슨 코어모듈을 고쳐야 한다거나 하는 작업이 있을리도 없으니까, Consumer 지원하는 건 어려운 일이 아니에요. 물론 Provider가 되려면 좀 더 복잡한 작업이 필요하긴 합니다만, Provider는 많을 필요도 없고요.
OpenID의 의의를 이해하신다면, 별 특징이나 기능도 없는 Provider가 늘어나는 건 그저 사용자들에게 불편만 주고 OpenID의 장점을 전혀 못살리는 멍청한 짓이기도 하지요.
delegation을 이용하면 어떤 Provider를 쓰든 상관없는 거니까요. (오히려 Simple Registration Extension을 지원안하는 Provider라면 편의성이 떨어지는 셈이니 이용에 고민을 해봐야겠지요. 물론 보안문제가 아직 완벽하게 해결된 것은 아니므로 SRE를 믿느냐는 좀 다른 이야기긴 합니다만.)

국내에서 OpenID를 이야기하는 사람들이 많아지긴 했습니다만… 뭐랄까, 실제 개발자들에게는 그런 뜬구름잡는 이야기보다는 간단한 샘플소스에 대한 설명 하나가 더 필요한 시점아닐까 하는 생각이 드네요. 정말로 OpenID를 널리 퍼뜨리게 하고 싶다면요. 혹은, 그냥 기술적 우위를 뽐내는 걸로 만족하는 거라면 또 다른 이야기겠지만요.


반응형
반응형

중앙부처 사이트 웹 표준 안 지킨다

디지털타임스 | 기사입력 2008.08.28 08:03


본지조사, 파이어폭스ㆍ오페라 사용때 30% 이상 중대오류

정부가 웹 표준 준수 방침을 밝히고 있지만 중앙부처 사이트부터 웹 표준을 지키지 않고 있는 것으로 확인됐다. 이에 따라 웹 표준 수준을 높인`인터넷익스플로러(IE) 8'이 출시되면 혼란이 우려된다는 지적이 일고 있다.

본지가 최근 43개 중앙정부사이트를 대상으로 파이어폭스와 오페라 브라우저의 사용 가능여부를 조사한 결과 30% 이상(파이어폭스 34%, 오페라 30%)의 사이트가 메인 화면 깨짐이나 메뉴가 작동이 안 되는 등의 문제가 발생했다.

청 와대와 대통령 직속기관, 정부 15개 부처와 18개 청을 대상으로 메인화면의 내용과 메뉴의 작동여부, 표본조사를 통한 페이지 이상을 확인한 결과 파이어폭스 사용시 15개 사이트가 중대한 이상을 보였으며 오페라는 13개 사이트에서 이상이 발견됐다. 약간의 글자 깨짐 등 사소한 이상현상을 합할 경우 웹 표준과 브라우저 호환성이 떨어지는 사이트는 50%에 달했다.

감사원 사이트의 경우 메인 화면의 상당수 메뉴가 작동하지 않아 사이트를 거의 사용할 수 없었으며 국토해양부, 국가보훈처 사이트 등도 메인 화면에 이상이 나타나고 일부메뉴를 사용할 수 없었다. 관세청, 방위사업청, 병무청 등도 IE가 아닌 다른 브라우저로는 주요 서비스를 이용할 수 없었다.

특히 웹 표준 준수지침을 마련한 주무부처인 행정안전부의 경우 고객센터 페이지에 이상이 있는 것으로 나타나 체면을 구겼다.

이같은 오류현상은 웹 표준을 준수하지 않고 마이크로소프트(MS)의 인터넷익스플로러에만 적합하도록 사이트를 제작했기 때문이라는 게 업계의 지적이다.

최 근 정부가 웹 표준에 관한 지침을 공지하고 준수 대책을 발표했지만 모두 권고 수준이어서 각 부처 웹사이트 담당자들의 변화를 이끌어내지 못하고 있다는 분석이다. 관계자들은 해당 부처 책임자들이 웹 표준에 대한 인식이 부족하고 사이트개발 후 웹 표준에 대한 테스트도 이뤄지지 않고 있다고 지적했다.

한 전문가는 "인터넷 익스플로러의 세계시장 점유율이 70%대인 것을 감안할 때 20%를 넘는 브라우저를 지원하지 못하는 것은 장기적으로 해외인터넷 사용자들의 사이트 이용을 제한, 우리 인터넷 환경을 고립시키는 것"이라고 말했다. 또 다른 전문가는 "MS는 하반기 출시할 익스플로러 8.0 버전에서 웹 표준 수준을 높인다는 계획인데 국내 사이트들이 이를 따라가지 못한다면 큰 혼란이 올 수 있다"고 우려했다.

강진규기자 kjk@
반응형

'개발도 하냐?' 카테고리의 다른 글

제프리 젤드만의 웹표준 가이드  (0) 2008.12.20
OpenID php 구현  (0) 2008.12.19
ERP, ISP, ITA ?  (0) 2008.11.29
iabf 에서 사용하는 기본 css  (0) 2008.11.23
산출물관리지침(한국전산원)  (0) 2008.10.11
반응형
Web-Based HTML Editor 비교 및 미리보기

웹개발시 종종 필요로 하는 웹기반 HTML에디터..

Sourceforge에 등록되어 있는 오픈소스 웹기반 HTML 에디터의 종류와 기능비교  및 미리보기

순서는 Sourceforge의 Activity 순

 

- FCKeditor (http://sourceforge.net/projects/fckeditor/)
  * IE의 Editor Object 를 이용하여 제작
  * jsp, php, asp에 대응하는 이미지 업로드 및, 브라우징 기능
  * 미리 정의된 3가지 형태의 툴바 형태제공
  * 간편하게 기존 소스에 추가 가능
  * 테이블 편집 기능 지원
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요
  * 다양한 언어 지원(한글포함)

  * 완성도 높음.. 강추!
  * sample -
http://pistos.pe.kr/FCKeditor/_test/test.php

- HTMLarea (http://sourceforge.net/projects/itools-htmlarea)
  * 이미지 업로드 지원 안함
  * 풀스크린 편집 지원
  * 영문메뉴만 지원
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음  
  * PHP Image Editor 지원 (
http://sourceforge.net/projects/imgmngedt/)

  * 한글화 및 이미지업로드만 커스터마이징하면 FCK에 떨어지지 않을듯
  * sample -
http://pistos.pe.kr/htmlArea/examples/full-page.html

 

- SPAW web-based WYSIWYG editor control (http://sourceforge.net/projects/spaw/)
  * 예쁜 디자인
  * 이미지 라이브러리 기능
  * 이미지 업로드 지원 안함  
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 디자인만 놓고 보면 최고! 그러나 이미지삽입부분이 맘에 들지 않고, 사소한 버그가 좀 있는듯.
  * sample -
http://pistos.pe.kr/spaw/test.php

 

- hypertextarea (http://sourceforge.net/projects/hypertextarea/)
  * 기본적인 기능만 제공
  * 이미지 업로드 지원 안함
  * 심플한 디자인
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 바로 갖다 쓰기엔 스크립트에러의 압박이 심함..
  * sample -
http://pistos.pe.kr/hypertextarea/javascript/demo.html

 

- RichText-editor (http://sourceforge.net/projects/richtext/)
  * 브라우저 언어설정이 한글인경우 문제있음(한글지원 커스터마이징 필요)
  * 이미지 업로드 지원 안함
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 한때는 꽤 잘나가는 녀석이었는데... 이제는 경쟁력이 떨어짐.. 가져다 쓰려면 고쳐야 할것도 많음.
  * sample -
http://pistos.pe.kr/richtext/editor/rte/richedit.html

 

- aynHTML (http://sourceforge.net/projects/aynhtml/)
  * 이미지업로드 지원
  * 이미지 저장소 지원
  * 깔끔한 디자인
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 나름대로 깔끔함.. 소스보기시 컬러링도 해주고.. 간단히 쓰기엔 좋을듯
  * sample -
http://pistos.pe.kr/aynHTML/

 

- XsDhtmlEditor (http://sourceforge.net/projects/xsdheditor/)
  * 심플한 디자인
  * 이미지 업로드 지원
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 바로 쓰기에는 버그가 좀 있음..
  * sample -
http://pistos.pe.kr/XsDhtmlEditor/

 

- bpEditor ( http://sourceforge.net/projects/bpeditor/)
  * 만들다 만듯..ㅡㅡ
  * sample -
http://pistos.pe.kr/bpShitEditor/bpShitEditor.php

반응형

'오픈소스SW' 카테고리의 다른 글

Open Source 기반의 차트 프로그램  (0) 2008.12.26
Ajax Scripts  (0) 2008.12.26
core file 분석  (0) 2008.04.17
탭 방식으로 html에 옷을 입혀주는 css  (0) 2008.02.02
공개웹방화벽을 이용한 보안대응  (0) 2008.01.11
반응형
ERP/ISP/ITA 모두 경영정보시스템(MIS)분야에서 등장하는 주제입니다.
MIS분야가 해결하고자 하는 중심 이슈 중 하나는 "IT를 어떻게 조직 목적/전략에 부합시킬 것인가"라는 명제인데 위의 개념들은 모두 그런 목
적 배경 하에서 등장했습니다.

ERP는 약간 scope이 다르니 따로 떼어놓고 생각하는 게 좋고, ISP/ITA를 같이 비교를 하는 것이 좋습니다.

ERP는 쉽게 이야기해서 조직 내 흩어진 DB들을 하나로 통합하자는 계획을 세우는 것입니다. 그래서 조직의 가치사슬 상의 모든 프로세스들이 각자
의 DB가 아닌 통합 DB에 데이터를 저장하고 활용함으로써 데이터의 중복도 방지하고 데이터의 분석도
용이하게 하는 목적이 있습니다. DB통합의 목적은 딱히 한가지로 정의할 수 없지만 궁극적으로는 조직 전략의사결정을 지원하여 조직의 목적을 달성하
도록 하는 데 있습니다.
(ERP 참고 : http://ees.khu.ac.kr/iee/ees9/main0.html)

ISP는 80년대 말 James Martin의 정보공학방법론을 시초로 하여 지금까지 가장 많이 사용되어 온 정보화전략계획 방법론입니다.
여기서는 조직의 다양한 차원에서 현황을 분석하고 이를 바탕으로 미래 모델을 제시하고 정보화이행계획을 수립하게 됩니다.

ITA는 오늘날 EA(Enterprise Architecture)라는 용어로 더 많이 사용되고 있습니다.
그리고 ISP와 비교했을 때 상응하는 용어는 정확하게는 ITA가 아니라 EAP(Enterprise Architecture)가 됩니다.
EAP에서 수행하는 작업은 ISP와 유사하나, EAP는 ISP에 비해 "관리적 측면"에서 더 보완된 개념입니다.

ISP에서 도출된 산출물들은 조직의 방향성을 이끌어 내기위한 재료이지, 그것 자체를 관리하는데 초점을 두지 않습니다.
하지만, EAP를 통해 도출된 산출물들을 EA라는 틀(프레임워크라고 합니다.)에 담아 체계적으로 정리하고, 각각의 산출물 간 상호관계를 파악하는 데 중점을 둡니다. 그리고 그렇게 정의된 현재의 EA(AS-IS EA)를 미래의 EA(TO-BE EA)로 바꿔가는 이행계획을 수립함으로써 IT가 조직목적에 부합될 수 있도록 합니다.

따라서, EAP에서 나온 산출물들을 EA프레임워크에 정리한 것이 조직의 아키텍처(Enterprise Architecture)가 되는 것이고, 이 아키텍처를 잘 관리함으로써 ISP와는 다른 여러가지 유익을 얻을 수 있습니다. 이 아키텍처의 관리를 위해 EAMS Enterprise Architecture)라는 시스템이 사용되는 것도 ISP와의 차이라고 할 수 있습니다.

EA는 IT가 조직목적에 부합하도록 하는 본래의 목적 이외에도, 조직 내 업무 프로세스 관리, 정보자원관리, 데이터 관리, 물리적 자원관리 등 종합적인 자원관리 도구로도 사용할 수 있고, 조직 내 투자프로세스와 연동시키면 투자관리 지원도구로도 사용될 수 있고, 나가아가서는 조직 개편이나 기업 간 M&A 같은 조직 차원의 변화관리에도 사용될 수 있습니다. EA는 조직을 모든 차원에서 투명하게 들여다 볼 수 있는 청사진인 셈입니다.
반응형
반응형

Toad DBA Suite로 패키징된 제품 중에서 먼저 TDM 제품에 대한 리뷰를 간략하게 작성해 보았다.

 

<먼저, 본 리뷰에서 언급한 사항 중에 툴에 대해서 깊이 있게 알지 못해서 혹은, 특정 기능을 찾지 못해서 잘못된 내용을 기술할 수도 있음을 미리 알린다. 나름 기능을 찾기 위해 매뉴얼도 찾아보고 했지만, 자료도 부족하고 영어 울렁증이 있어서 말이다.>

 

TDM은 데이터 모델링 툴이다. 대표적인 데이터 모델링 툴로는 국내에서 많이 사용하는 Allfusion ERWin, DA#(encore), ER/Studio(Embarcadero), PowerDesigner(Sybase), Visio(Microsoft) 등이 있으며 UML 툴에서 데이터모델링을 지원하거나 eclipse plug-in으로 나온 제품들도 있다.

 

예전에 TDM의 초기버전은 논리모델이 없었으며, 물리모델만을 모델링 할 수 있도록 구성되어 있었던 것으로 생각된다. 이번 버전은 기존의 기능에 논리모델 기능 및 여러가지 다양한 기능을 추가하여 나온 제품인 듯 하다.

<?xml:namespace prefix = o /> 

"百聞 不如一見"

 

 

TDM을 설치 후에 처음으로 실행한 화면이다.

TDM TOAD만큼 유명한 제품이 아니라서 그런지 샘플모델을 디폴트로 로드되도록 구성되어 있다. 첫 느낌은 색깔이 화려한게 일단 맘에 든다.

 

LDM & PDM

TDM이 다른 모델링 툴과 가장 차이점은 LDM(Logical Data Model) PDM(Physical Data Model)을 작성하고 관리하는 방식인 것 같다.

대부분의 모델링 툴은 LDM PDM을 동일한 구조를 갖도록 구성해야 한다.

 

위의 그림과 같이 Super Type Sub Type으로 구성된 논리모델이 있을 때, 물리모델에서는 테이블 단위로 구성되기 때문에 물리모델 단계에서 각 엔티티를 하나의 엔티티로 통합하거나 각각의 서브타입으로 분리하거나 하는 방식으로 변경을 한다.

Erwin이나 대부분의 모델링 툴에서는 논리모델시에 위의 그림처럼 Subtype으로 모델링을 하여도 최종 물리모델단계로 넘어가면서 엔티티를 통합/분리하므로 최종적으로는 하나의 엔티티가 어떤 서브타입으로 구성되어 있는지 모델만 봐서는 파악하기가 어려워진다.(물론 별도의 파일로 작성하면 가능은 하지만 상당히 관리가 불편해진다.) 그런 단점이 있으나 논리모델과 물리모델이 동일한 모습을 가지게 되므로 논리모델에서 물리모델로 전환이 쉬워지는 장점이 있으며 하나의 파일로 관리된다는 점도 장점 중 하나이다.

 

그러나 TDM은 일반적인 하나의 파일로 논리/물리를 관리하지 않으며 별개의 파일로 논리/물리모델을 구성/관리하도록 되어 있다.

 

위의 그림과 같이 간단히 논리모델을 TDM으로 작성하였다. 물리모델을 작성하기 위해서는 TDM에서는 Convertor를 이용하여 물리모델을 생성하여야 한다.

 

다음은 툴의 기능을 이용하여 물리모델을 작성한 화면이다.

두 모델을 비교하면 물리모델에서는 Subtype이 하나의 테이블로 통합되어 구성이 되어있다. TDM에서는 이렇게 비즈니스 로직을 담고 있는 논리모델과 테이블구조를 가지는 물리모델을 분리하여 관리하도록 하여 논리모델에서는 비즈니스 로직만을 충실히 담을 수 있도록 구성하여 기존 툴과의 차별성을 내세우고 있다.

 

그러나 데이터모델은 지속적으로 변경된다. TDM에서는 한번 변환한 모델간의 Alignment가 되지 않는다는 치명적인 단점이 있다.

가령 논리모델에서의 사용자아이디란 속성이 물리모델에서의 “USER_ID”란 컬럼으로 변경되어 있다는 정보를 툴이 인식을 하지 못한다. 그러므로 논리모델의 속성명이 변경되거나 컬럼사이즈가 변경, 컬럼의 추가 등의 변경이 발생하더라도 물리모델에서 인식을 하지 못하므로 개별적으로 두 모델을 따로 관리하여야 한다.

혹시 Convertor를 이용하면 되지 않을까? 열심히 궁리를 해보았지만 Convertor에서는 사용자아이디“USER_ID”가 완전히 서로 틀린 컬럼으로 인식하고 있어서 방법이 없었다.

 

[위의 그림처럼 좌측의 회원이 물리모델에서 존재하지 않는 것으로 나타나며, 우측의 USER 테이블에 해당되는 좌측의 논리모델도 존재하지 않는 것으로 나타난다.]

 

매뉴얼을 찾아보니 모델 변경시에는 물리모델을 먼저 변경하고 변경사항을 역으로 PDM -> LDM으로 병합해야 한다고 나와있었다.

그 말은 비즈니스 모델이 변경되었지만 물리모델에서 먼저 작업하고 비즈니스 로직을 나중에 고치라는 말도 안되는 방식을 툴은 강요하고 있는 것이다.

차기 버전에서 가장 개선되어야 할 부분이 아닌가 싶다.

LDM PDM을 별도의 파일로 관리하는 모델링툴의 대표적인 사례는 DA#이 있다. 이 툴은 논리모델의 변경사항을 한번의 클릭으로 물리모델에서 정확히 인식하며 엔티티 레벨, 속성 레벨의 변경정보를 정확히 모델러에게 알려준다.

 

엔티티 속성 편집창

다음은 LDM  엔티티 속성 편집창의 모습이다.

 

 

일반적인 엔티티의 속성 정보를 저장할 수 있는 UI이다.

Caption 항목은 속성의 설명정보를 담는 항목이다. 대부분의 툴에서는 Description 이름으로 제공하고 있다.

모델링을 하다 보면 Caption Description 기능이 모두 필요하다.

특히 우리나라 같이 비 영문 국가에서는 테이블 생성시에 Comment 객체에 컬럼의 한글명을 기입하고 논리모델에서는 컬럼의 상세한 업무규칙 및 컬럼의 정의를 할 수 있다면 가장 best 하지만 아쉽게도 그렇게 구별하여 지원하는 툴은 아직까지는 보지 못한 것 같다.(나만 필요하다고 느끼는 것인지도 모르겠다)

 

컬럼편집

TDM에서는 컬럼별로 복사를 할 방법이 없다. 엔티티 레벨에서는 복사가 가능하나 LDM에서 특정 속성만을 선택하여 다른 엔티티로 컬럼을 복사할 방법이 없다. 등록일자/수정일자 같은 시스템 공통속성을 전 엔티티에 모두 두기 위해서는 각 엔티티마다 모두 입력하는 방법밖에 없다. 이 부분도 반드시 차기 버전에는 들어가야 될 기능이 아닐까 싶다.

 

데이터 표준화 지원

TDM의 또 다른 단점 중 하나는 데이터 표준화에 대한 지원이다.

TDM에서 도메인을 지원하기는 하나 계층적으로 구성할 수가 없고 별도의 도메인타입을 만들 수 가 없어서 모든 도메인을 1차원적으로 구성해야 한다. 조금은 아쉬운 부분이다.

또한, 물리모델 생성시에 단어 및 용어 표준화를 지원하지 않는다. 툴을 열심히 뒤졌것만 찾을 수가 없었다. 특히 우리나라같이 한글로 논리모델을 작성하고 영문컬럼명으로 물리모델을 변환해서 사용해야 하는 환경에서 영문컬럼명 변환을 매번 모든 컬럼을 클릭하여 입력한다는 것은 엄청난 노가다다.  용어사전을 생성하여 두고 자동으로 변환되지 않는다면 엔티티가 100개만 넘어가더라도..(생각하기도 싫다)

이 부분도 차기 버전에 반드시 들어가야 될 기능이 아닌가 싶다.

 

WorkSpace & UI

TDM에서는 주제영역(Subject Area) Workspace란 명칭으로 사용한다. eclipse의 영향인 것 같기도 하다. 거의 모든 툴에서 subject area란 용어를 사용하는데 말이다.

TDM의 편리한 점 중 하나는 여러 모델을 tab 방식으로 조회를 할 수 있는 점인 것 같다.

그리고 TDM에서는 실행취소 기능을 제공한다. 이게 얼마나 편리한 기능인지는 이 기능이 없는 툴을 사용해 본 사람이면 공감을 할 것이다. Erwin의 경우에도 아직도 많은 사람들이 사용하고 있는 v4.xxx 버전에서는 이 기능이 없다. r7 버전부터 이 기능을 제공하고 있으니 말이다. 엔코아의 모델링 툴인 da# 의 경우도 실행취소 기능이 없어서 어떤 땐 무지 짜증이 날 때도 있다. TDM에서는 이 기능을 제공해 주니 그래도 쓸만은 하다.

 

Reverse Engineering

리버스 엔지니어링은 초기 AS-IS 데이터 모델 분석시에 반드시 필요한 부분이다. 특히 엔티티가 몇 백개씩 되는 대형 사이트에서는 이 기능이 없으면 DB 분석시에 엄청난 시간이 걸릴것이다. 리버스 엔지니어링과 관련하여 또 반드시 필요한 기능은 테이블 정렬 기능이다. 몇 백개 되는 테이블이 아무런 연관없이 이름을 툴위에 쭉 나열한다면 테이블을 거의 분석하기가 힘들것이다. 대부분의 시스템에서 명식적인 FK를 설정하지 않고 데이터베이스를 구성하기 때문에 툴에서 컬럼명을 기준으로 가상의 Relation을 생성해주고, 사용자가 지정하는 Key Entity 혹은 Main Entity를 중심으로 주변에 Action Entity를 배치하게 해준다면 리버스 된 모델이 사용자가 인지하기 쉬운 구조로 재배치되어 많은 도움이 되리라 생각된다.

TDM에서는 리버스 기능은 훌륭하나 테이블 정렬기능은 단순정렬밖에 제공되고 있지 않아 아쉬움이 남는다.

아래 그림은 운영하고 있는 시스템을 리버스로 물리모델을 생성하는 과정을 담고 있는 화면이다.

 

 

설치시에 데이터소스를 오라클과 MS-SQL만으로 한정하였기에 해당되는 항목이 위의 정보만 나타난다. MS-SQL 2008 ORACLE11도 출시되었으니 조만간에 추가되지 않을까 싶다. 또한 QUEST사의 대표적인 제품인 TOAD와 연동할 수 있는 기능이 눈에 띈다.

 

Data Provider 및 접속정보를 입력한 후 Reverse해야 될 대상을 선택하는 화면이다.

 

다음은 리버스에 대한 옵션을 선택하는 화면이다.

 

최종적으로 리버스해야될 테이블은 선택하고 나서 Execute 버튼을 클릭하면 TDM은 리버스를 시작한다.

 

 

위의 그림은 최종적으로 리버스된 물리모델의 모습이다.

 

테이블 속성편집 창

리버스된 테이블의 속성 편집창이다.

상당히 많은 탭이 보인다.

 

SQL Preview 기능은 다른 툴에서는 잘 없는 기능인데 편리한 기능인 것 같다.

 

테이블의 속성정보 (위 그림은 파티션정보이다.)을 콤보박스나 그리드 같은 UI를 사용하지 않고 Text로 입력하도록 구성되어 있는 모습이다.

 

 

리버스한 정보 중 오라클 패키지의 SQL Preview화면이다. 주석의 일부분이 진한갈색으로 보이는건 왜 그런지 모르지만 리버스는 훌륭히 수행한 것 같다.

 

모델 Compare Alter Script Generation

극히 일부의 모델링툴에서만 제공하는(Erwin) 편리한 기능이 TDM에도 탑재되어 있다. 모델간의 비교 및 비교를 통한 Alter Script를 생성해주는 기능이다. 변경되는 양이 적을 경우에는 툴보다는 손으로 스크립트를 작성하는게 편리하다. 그러나 큰 규모의 변경이 일어나는 경우에는 툴의 기능을 이용하면 편리하게 업무를 처리할 수 있다.

 

 

위의 그림은 물리모델에서 하나의 컬럼을 추가한 후 ALTER SCRIPT를 생성하기 위해 Convertor를 실행시킨 모습이다.

 

 

최종적으로 생성된 Alter 스크립트이다. 변경된 부분 중에서 필요한 부분만 선택하여서 Alter 스크립트를 생성할 수 있다.

 

Reporting

프로젝트 개발시에 모델링에 대한 산출물은 필수산출물이다. 나는 대체로 별도로 산출물을 작성하지 않으며 ER모델을 아주 상세하게 작성한 후 고객사의 양식에 맞게끔 툴로 Generation하여 제출하는 편이다. 그러므로 이 기능은 아주 필요한 기능이다.

TDM HTML 방식과 rtf 파일을 제공하고 있다.

 

위의 그림은 Report 생성시에 필요한 사항을 선택하는 화면이다.

최종적으로 Reporting된 화면은 아래와 같다

 

 

내부 프로젝트나 별도의 양식이 없는 프로젝트의 경우에는 사용이 가능하나 고객사 혹은 내부 산출물 양식이 지정되어 있는 경우는 이정도 레포팅 기능으로는 부족하지 않나 싶다.

별도의 양식을 디자인하는 기능이나 혹은 Erwin처럼 별도의 API를 제공은 고사하더라도 최소한 엔티티나 테이블의 정보를 엑셀로 출력하는 기능정도는 있어야 하지 않을까 싶다.

 

총평

Toad Data Modeler(TDM)은 버전 3으로 오면서 많은 기능이 추가되었지만, 아직까지는 부족한 기능이 많은 편이다. 소규모 프로젝트에서는 가능한 수준이 아닌가 싶다. 그러나 데이터베이스 관련한 SW의 노하우가 많은 Quest사의 제품이니만큼 그리 오래지 않아 필요한 기능들이 모두 추가되고 TDM만이 제공하는 특별한 기능까지. 향후에는 Toad와 같은 명성을 TDM도 얻을 수 있으리라 생각한다.


반응형

'삽질로그' 카테고리의 다른 글

가격제안에 사용하는 계정과목표준  (0) 2009.05.10
나만의 UCC 사이트 구축하기  (0) 2008.12.26
데이터모델링  (0) 2008.11.28
자바스크립트로 UI 구현하기  (0) 2008.10.11
검색의 혁명 Search 2.0  (0) 2008.09.24
반응형
1. 데이터 모델
  1.1 데이터 모델의 정의
데이터의 집합을 기술하는데 사용되는 개념이며, 데이터를 조작할 수 있는 연산들의 모임을 의미한다. 데이터는 키(주 식별자)와 일반 칼럼(속성, Attribute)올 표현이 되며 키와 칼럼들이 모인 로우(레코드), 하나 이상의 로우가 모인 테이블(모델링 단계에서는 엔티티)이 되는데, 모든 용어들이 데이터의 표현에 사용된다.
  1.2 데이터 모델의 종류
가. 개념적 모델(Conceptual Model)
현실 세계의 업무규칙(업무처리흐름상의 규칙, 양식 등의 자료를 구성하는 데이터들의 상관관계 규칙)을 개략적으로 데이터 모델을 사용하여 표현을 하되, 각각의 사업장, 부서 등에 대해서 개별적인 데이터 모델이 작성될 수 있다.
나. 논리적 모델(Logical Model)
개념적 데이터 모델을 통합한 것으로써, 각각의 사업장, 부서 등의 데이터를 구성하는 속성들의
도메인(자릿수, 형태, 초기 값 등)이 통합되어 표현 된다.

논리적 데이터 모델은 특히 다음과 같은 특성을 가지고 있다.
? 데이터베이스 설계 시 사용
? 주어진 현실세계로부터 개념의 집합을 명세
? 높은 수준의 추상화에서 현실세계를 표현하는 도구
? 현실세계를 이해하기 쉽고 해석하기 쉽도록 현실세계를 명세

논리적 데이터 모델의 평가기준은 다음과 같다.
? 표현성(Expressiveness)
? 단순성(Simplicity)
? 최소성(Minimality)
? 정형성((Formality)

다. 물리적 모델(Physical Model)
논리적 데이터 모델과 비교한 물리적 데이터 모델의 특징은 다음과 같다.
? 특정 DBMS에 의해 지원됨
? 컴퓨터에 의해 처리될 수 있는 데이터 명세를 지원
? 종류 : 계층형 모델, CODASYL 모델, 관계형 모델

  1.3 데이터베이스 구축과정으로 본 데이터 모델의 의의
데이터베이스 구축과정은 현실세계의 데이터와 업무를 데이터 모델의 세계로 Mapping시키는 과정이라고 할 수 있다. 데이터베이스는 현실 세계의 데이터와 업무를 그들의 세계로 안내하는데 있어서 그들이 채택한 모델을 통하여 안내한다. 즉, 모델의 표현규칙, 작성규칙을 따라 현실세계의 자료와 업무가 표현된다. 다시 말하면 컴퓨터세계와 현실세계의 연결다리 역할을 하는 것이 바로 이 모델이다. 데이터베이스 관리시스템(DBMS) 또한 이 모델을 근거로 각종 자동화 처리기를 제작했다. 따라서, 데이터베이스 시스템을 구축 시에 필수적으로 그들이 채택한 데이터 모델에 대하여 정통할 필요가 있다.
2. 데이터 모델링
  2.1 데이터 모델링 절차
다음은 일반적인 데이터 모델링 절차이다.
일반론적인 데이터 모델링 절차 그림에서 '데이터 모델 콘테스트' 및 '업종별 표준 데이터 모델'의 제작과 관련하여 엔티티 정의, 관계 정의, 엔티티-관계도 작성, 주/부 식별자 정의, 외부 식별자 정의, 세부속성 정의에 대해서만 설명하기로 한다. 나머지 부분들은 일반 책자들에 잘 설명이 되어 있으므로 참고하기 바란다.
  2.2 엔티티 정의
가. 엔티티의 종류
엔티티의 종류는 독립 엔티티(Kernel Entity, Master Entity), 업무중심 엔티티(Transaction Entity), 종속 엔티티(Dependent Entity), 교차 엔티티(Associative Entity, Relative Entity)의 4종류로 분류된다.
1) 독립 엔티티(Kernel Entity, Master Entity)
    사람, 물건, 장소, 개념처럼 원래부터 현실세계에 존재하는 엔티티.
    예) 사원, 고객, 영업부, 창고, 생산계획, 계정과목 …

2) 업무중심 엔티티(Transaction Entity)
    업무가 실행되면서 발생하는 엔티티
    예) 주문, 납품, 대금청구, 대금지급 …

3) 종속 엔티티(Dependent Entity)
    주로 1차 정규화(1st Normalization)로 인하여 관련 중심엔티티로 부터 분리된 엔티티
    예) 주문품목, 납품품목 …

4) 교차 엔티티(Associative Entity, Relative Entity)
    다:다 관계를 해소하려는 목적으로 인위적으로 만들어진 엔티티

나. 엔티티의 자격조건
엔티티의 종류는 독립 엔티티(Kernel Entity, Master Entity), 업무중심 엔티티(Transaction Entity), 종속 엔티티(Dependent Entity), 교차 엔티티(Associative Entity, Relative Entity)의 4종류로 분류된다.

다. 엔티티의 예
다음 표는 엔티티의 사례를 보여주는 표이다.
① 사람 (사원(직원, 행원, 공원,…), 계약자(가입자, 회원,…), 이용자(학생, 환자,…))
② 물건 (재료(부품, 원자재, 연료, …), 상품(제품,…), 시설(건물, 창고, 운송센터,…), 지점(영업소, 소매점,…))
③ 사건 (계약(수주,발주,…), 작업(공정, 보관, 선전, 광고,…), 사고(재해, 고장,…))
④ 장소 (구획(창고, 선반, 진열케이스, 생산라인, …), 지역(판매구역, 관할구, 선거구,…), 하천, 항만(부두, 선창,…))
⑤ 개념 (목표, 계획(지침, 방침, 지표, 판매목표, 생산계획, 판매계획, 인원계획,…), 시간(월, 일, 년, 시각, 시각분할,…), 평가(기준, 지표))
⑥ 금전 (예입금(구좌,…), 예산(년간예산, 수정예산, 실행예산,…), 차입(단기, 장기,…), 융자(단기, 장기,…))

  2.3 관계(Relationship) 정의
가. 기수성(Cardinality)
기수성은 다음과 같이 정의된다.
? 1:1, 1:M, M:N 관계
? 해당엔티티 1건에 대한 상대엔티티의 기수성을 상대 엔티티쪽에 표기
? 표기 방법(James Martine 표기법)

나. 선택성(Optionality)
선택성은 다음과 같이 정의된다.
? 집합의미 (포함, 불포함)
? 1:0 (Optional), 1:1 (Mandatory)
? 해당엔티티 1건에 대한 상대엔티티의 기수성을 상대엔티티쪽에 표기
? 표기 방법(James Martine 표기법)

다. 관계의 완성 : 기수성과 선택성의 통합 [James Martin]
기수성과 선택성을 통합하면 관계가 완성이 된다.
? 해당 엔티티를 기준으로 기수성의 경우의 수와 선택성의 경우의 수를 합하여 최소값과
  최대값의 경우의 수를 구한 후 해당 엔티티쪽에 최대값을 바깥쪽에 최소값을 표기한다.
? 상대 엔티티도 유사한 방법으로 표기한다.

라. 관계의 완성 사례
다음은 '고객'엔티티와 '주문'엔티티에 대하여 관계를 작성하는 절차를 보여주는 사례이다.
? 기수성 : 각 고객은 하나 이상의 주문을 할 수도 있고 안 할 수도 있다.
? 선택성 : 각 주문은 고객이 하는 것도 있고 그렇지 않을 수도 있다. (사원이 할 수도 있다.)

관계를 완성할 때 흔히 나올 수 있는 경우에 대한 대처 방법을 설명하기로 한다.
첫째, 기수성과 선택성의 통합 시 다:다 관계가 나올 수가 있는데 이는 Table Join이 안되므
        로 (외부 키의 표시가 불능) 교차 엔티티를 이용하여 표기한다.

둘째, 관계는 두 엔티티간의 업무규칙(Business Rule)을 토대로 인위적인 방법으로 기수성
        과 선택성을 구하여 이를 통합하여 완성된다.

셋째, 관계(Relationship) 표기의 의미는 두 엔티티 중에서 외부키(Foreign Key)가 놓이는
        자식 엔티티를 구분하기 위한 것이 첫째 임무이다. 외부키는 부모엔티티의 기본키(Pri
        mary Key)가 되기 때문이다. 둘째 임무는 외부키 무결성(관계무결성)을 구하기 위한
        것이다.

넷째, 기수성 표기, 선택성 표기, 관계통합 표기 방법이 각 교수나 RDBMS 업체에 따라 다를
        수 있는데 큰 문제가 되지 않는다. 왜 관계(Relationship)를 구하는 가의 이유만 알면
        되기 때문이다.

  2.4 엔티티-관계도(Entity Relationship Diagram)의 작성
가. 작도방법
다음은 엔티티-관계도를 효과적으로 작성하는 기법을 설명하기로 한다.
? 사각형의 도형 안에 엔티티명을 기록
? 업무흐름의 진행순서와 관련된 엔티티는 진행순서를 고려하여 좌에서 우 또는 상에서 하로   중심부에 배열 ("주문"→ "출고")
? 중심에 배열된 엔티티와 관계를 가진 연관엔티티(종속엔티티)를 가까운 쪽으로 배열
  ("주문" : "주문품목", "출고" : "출고품목")
? 배열된 엔티티와 관계를 갖는 핵심엔티티(Kernal Entity)를 외곽으로 전개
  ("주문", "고객", "영업담당자", "창고", "품목", "제품")
? 해당엔티티의 한 건에 대한 상대엔티티의 기수성(Cardinality)을 상대 엔티티쪽에 표기함으
  로써 관계의 기수성을 표기 :
? 해당엔티티의 한 건에 대한 상대엔티티의 선택성(Optionality)을 상대 엔티티쪽에 표기함으
  로써 관계의 선택성을 표기 :

나. 주요성공요소
엔티티-관계도를 작성하는데 있어서 주요성공요소는 다음과 같다.
? 엔티티를 식별하고, 관계를 도출한 후 ERD작도법에 맞추어 ERD를 작성
? 업무흐름 및 업무규칙의 ERD작도 시 활용

다. 엔티티-관계도와 관련된 실무적인 의미 및 검증기준
다음은 엔티티-관계도의 실무적인 의미와 작성시 유의사항이다.
첫째, 엔티티-관계도는 데이터베이스의 형상(Schema)을 결정하는 매우 중요한 그림이다.
둘째, 엔티티-관계도는 업무흐름을 나타낼 수 있어야 하며, 중요한 데이터속성들이 모두 표현되어 있어야 한다. 따라서 엔티티-관계도는 표현규칙 및 작성규칙에 충실하게 따라서 작성이 되어야 한다.
셋째, 엔티티-관계도를 그리다 보면 선이 겹치는 경우가 많이 발생하는데, 이는 상기한 작도방법을 따르지 않은 것으로 많은 문제를 야기할 수 있다.

다음은 실무적으로 엔티티-관계도를 효과적으로 작성하는 절차이다.
? 엔티티의 배열
? 관계의 연결
? 기수성 정의 (기수성명 표기)
? 선택성 정의 (선택성명 표기)
? 기수성과 선택성의 통합 : 엔티티-관계도의 완성
? 관계가 다:다일 경우에 교차엔티티를 이용하여 일대다로 분리함

다음은 엔티티-관계도의 검증기준이다.
? 작성규칙 및 데이터모델 표현규칙 적합성, 단순성, 확장성, 비중복성, 공유성
? 모든 속성의 표현
? 관계표기의 적합성
? 사용자의 데이터요구(화면, 보고서 등)에의 성능 우수성

  2.5 주식별자(Primary Identifier, primary Key, 주키) 정의
다음은 주식별자에 대한 정의절차이다. 이해하기 쉬우므로 간략하게 절차만 설명한다.
 
? 각 엔티티별로 하나의 주식별자 선택
? 후보 식별자 중 가장 중요한 하나를 주식별자로, 나머지를 대체키로 지정
? Subtype엔티티의 주식별자는 Supertype엔티티의 주식별자와 동일하게 선택
? 데이터 이름에 대한 표준약어목록의 이용

  2.6 외부식별자(Foreign Identifier, Foreign Key, 외부키) 정의
가. 외부식별자의 특징
외부식별자는 다음과 같은 특징을 가진다.
? 두 엔티티간의 관계를 결정하여 주는 속성으로 관계에 의한 자식엔티티에 위치하며 부모엔
  티티의 주식별자가 같은 값을 갖는다.
? 논리적 데이터 모델내의 모든 관계에 관련된 외부키를 규명한다.

나. 외부식별자의 표기 사례
다음 그림은 외부식별자의 표기 예를 보여준다.

  2.7 속성 정의
가. 속성 정의
속성이란 엔티티를 구성하는 더 이상 분리될 수 없는 정보단위로 식별자 종류(기본, 대체, 외부 키)와 비식별자(non-key)로 구분한다.

나. 효과적인 속성 정의방법
다음과 같은 방법으로 속성을 찾아 정의한다.
? 정보 분석단계에서 수집된 각종자료 참조
? 엔티티, 관계 정의시 파악
? 기존 정보시스템 분석 - 관련 DB나 file의 field
? 속성의 이름을 부여 - 표준화 규칙 사용, 자료사전에 기록

다. 속성 정의 예
다음 표는 제품 엔티티에 대한 속성 정의 예이다.
엔티티 속성 속성유형 식별자구분 비고
제품 제품코드 설계 PK
  제품명 기초  
  기대수요 기초    
  재주문요구 기초    

  2.8 데이터 모델 검증 및 주요성공요소
가. 데이터 모델 검증 방법
데이터 모델 검증은 아래와 같은 범위의 품질기준에 맞추어 검증한다.
? Group Check
Business rule에 의한 완전한 이해와 E-R Modeling에 대한 완전한 이해를 가진 숙련된 분석가가 최선의 답이며, Project 팀 내의 동료끼리 상호 모델을 Check하고 오류를 찾아 본다.
? 사용자(End User) 확인
정기적으로 사용자에게 모델을 제시하면서 확인하거나, 사용자를 참여시켜 Error와 누락된 것을 check한다.
? 업무규칙(Business Rule)
? 엔티티품질 검증
? 속성품질 검증
? 관계품질 검증
? 완전성 검증
사용자 INTERVIEW, 서류양식, 장표, 보고서 등과 비교 점검하여 추가되거나 누락된 것이 없는지를 확인하고, 향후 입력, 출력보고서가 모두 적용될 수 있는지를 점검한다.

나. 주요성공요소
데이터 모델링을 잘하기 위하여 다음과 같은 내용들을 숙지한다.
첫째,
분석단계의 Data Modeling(산출물: Logical ERD)과 설계단계(산출물: Physical ERD)의 구분
? Business Rule이 같기 때문에 분석단계의 ERD(Entity로 표시)와 설계단계의
  ERD(Table로 표시)의 근본구조는 달라지지 않는다.
? 분석단계의 ERD에서 약 20%내외만이 수정이 되어 설계단계의 ERD로 바뀐다.
? 설계단계에서는 성능(Performance)을 고려한 Summary, Duplicate, Processin
  g Table이 만들어진다.
둘째,
엔티티-관계도(ERD) 작성 및 검증요령
? 현재의 장표, 양식, 업무 매뉴얼, 보고서, 사용자인터뷰 내용 등에서 Entity추출
  기준 (정보관리대상, 유일한 키의 존재, 키 이외의 속성 가질 것) 엔티티(Entity)
  를 추출 하여 적어 놓는다.)
? 엔티티 사이의 Business Rule을 분석하여 그들 사이의 관계를 찾는다.
관계유형>
▶ Dynamic flow(업무흐름도에 의존 :주문→생산지시→제품입고 → 출고 →납품)
▶ Static flow(데이터 자체의 관계 : BOM Type, Super-Sub Type)
▶ Transient flow(시간이 가면 변하는 것 : 정산-미정산 분개의 확정 시점)
? 향후 입력화면, 출력보고서가 현재의 ERD에서 추측될 수가 있고 계산하기 편한
  가 등의 기준으로 엔티티-관계도를 검증한다.
세째,
엔티티(Entity, Table)를 분해한 후 합칠 수 있다
? 엔티티-관계도 작성시 핵심엔티티(독립엔티티, 코드엔티티 : kernel Entity)를
  구별함
? Sub-system만 제작한 다음 나중에 통합할 수 있다.
네째,
엔티티-관계도를 제대로 못 그리는 이유 : Business Rule을 제대로 분석하지 못했기 때문
? Business Rule에 숨어있는 Data를 분석해내지 못했고 그들 Data사이의 관계를
  분석하지 못했기 때문
? ER 방법론 미 숙지
? Business Rule해독 90%, ER방법론 숙지 10%
다섯째,
관계형 데이터베이스 모델링은 속성(Attribute)끼리의 Logical Model이다
? 속성(Attribute끼리의 Business Rule → Relationship
? 물리적 의미(Physical meaning) → Relational Key(외부키)의 정의
여섯째,
관계형 데이터베이스는 속성(Attribute)접근 방식이지 Pointer접근방식(COBOL문의 OCCURS, Redefine)이 아님, 즉 같은 TYPE의 속성은 중복되면 안 된다.
일곱째,
엔티티-관계도(ERD)작성시 속성 검출 및 정규화 유의사항
? 속성(Attribute)은 가장 최소로 자른다. (예 : 년월일→년, 월, 일)
? 주키(Primary Key)가 나누어지는 것은 분석이 잘못되었기 때문이다
? 1차, 2차, 3차 정규화를 잘 할 것
여덟째,
다대다(Many to Many)관계가 해소되어야 하는 이유와 해소 방법
? 속성(Attribute)사이에만 관계(Relationship)가 생성하는데, Many to Many는
  관계를 맞출 수가 없다.
? 비교엔티티 (연결엔티티, 교차엔티티)를 집어넣어준다
  : 양쪽의 엔티티(Entity)와 속성(Attribute)이 서로 key나 Data부분의 속성
  (Attribute)으로 들어가기만 하면 된다.
아홉째,
Logical Design(Data중심)과 Physical Design(사용하는 DBMS, System 중심)을 완전히 분리할 것
? Summary Table은 Relationship으로 표시가 불가하다.
(Logical Data Modeling에서는 표시가 안됨)
? Physical개념 : Processing 개념
열째,
엔티티-관계도 (ERD)를 작성시 Top-Down과 Bottom-up을 병행하면서 진행한다. 왜냐하면 Entity의 분할과 Attribute의 상세한 define이 발생하기 때문이다.
열한째,
엔티티-관계도 작성시 선택성(Optionality)을 구분해줄 필요가 있으나 치명적이지 않다.

반응형

'삽질로그' 카테고리의 다른 글

나만의 UCC 사이트 구축하기  (0) 2008.12.26
Toad DBA Suite 사용후기 - Toad Data Modeler[TDM] 리뷰  (0) 2008.11.28
자바스크립트로 UI 구현하기  (0) 2008.10.11
검색의 혁명 Search 2.0  (0) 2008.09.24
GDB 사용하기  (0) 2008.04.17
반응형
http://www.iabf.or.kr//Lab/share/css/base.css

@charset "euc-kr";
/*
* default definition
*/
body {
margin: 0;
padding: 0;
font-size: 0.75em;
line-height: 1.5em;
/*
font-family: Dotum, "돋움", sans-serif;
*/
font-family: "Malgun Gothic", "Lucida Grande", Tahoma, Verdana, AppleGothic, UnDotum, sans-serif;
}
* html body {
/*
font-size: 12px;
*/
}
form {
margin: 0;
padding: 0;
}
hr {
display: none;
}
p, div, th, td, select, input {
color: #333;
}
a:link, a:visited {
color: #555;
text-decoration: none;
}
a:active, a:hover {
color: #777;
text-decoration: none;
}
img,
input.type-image {
border: 0 none;
}
input.type-text,
textarea {
border: 1px solid #ddd;
background: #fff;
padding: 1px;
}
input.type-text:hover,
input.type-text:focus,
textarea:hover,
textarea:focus,
select:hover,
select:active {
background-color: #ffd;
}
input, select, textarea {
vertical-align: middle;
font-size: 1em;
color: #333;
}
select {
font-size: 11px;
font-family: Dotum, "돋움", sans-serif;
}
span.button,
img.button,
a.button {
cursor: pointer;
vertical-align: middle;
}
반응형
반응형

간만에 인터넷을 여기저기 들락거리다가
온라인으로 즐기는 무료게임들중에 구미에 맞는걸로 찾았다.
(원래 릴게임,슬롯게임 안가리고 좋아해서 ㅎㅎ)

우선 다양한 정보들을 볼 수 있게
http://cafe.naver.com/3626197 에 가입한다.
(오래전부터 국내 성인게임 유저들의 커뮤니티이다)

요즘 단도용으로 많은 유저분들이 일본한게임을 하고 있다고 한다.

우선 회원등록부터 아래에서 한다.
https://member.hangame.co.jp/registration/index.nhn
(아이디,비밀번호,비밀번호재입력,이메일,이메일확인,가입코드 입력하면 가입된다)

슬롯과 구슬이 자주 이용되니까 한번해보자.

슬롯게임 - http://game.hangame.co.jp/pachislotdx/index.nhn
구슬게임 - http://game.hangame.co.jp/pachinkodx/index.nhn

가입해서 무료머니 받아서 즐기면 된다.

밤새 이것저것 해보면서 그 외의 인기있는 무료 게임사이트들에 가입해서 해봤는데
재미있는곳이 많다.

777타운이라고 아주 인기있는 파친코사이트
http://www.777town.net/
(여기 게임은 실행파일을 다운로드받아서 일본어 환경으로 전환한후에 실행해야 게임이 설치된다.
일본어환경으로 전환은 msapplocale 이라는 프로그램을 다운로드 받아서 설치하면 된다)



무료로즐기는 가멜레온 사이트(예전에 부산에서 해본 해물전 게임이 있다)
http://pachinko.gameleon.jp/index.asp

도저히 모르겟다 하시는 분은 마메게임으로 체리마스터(당구장에 가끔있는 높음낮음 하는게임)를
다운받아서 해보면서 단도하시길...ㅎㅎㅎ
반응형

+ Recent posts