수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620971
  • Today | 351
  • Yesterday | 482

2 Articles, Search for '마이그레이션'

  1. 2007/05/21 MySQL을 Microsoft SQL Server 2000으로 마이그레이션
  2. 2007/05/18 웹2.0(Ajax)과 아키텍처의 구현
Database/MySQL2007/05/21 10:13

MySQL을 Microsoft SQL Server 2000으로 마이그레이션

MySQL을 Microsoft SQL Server 2000으로 마이그레이션

이 문서는 몇 가지 내장된 SQL Server의 툴과 유틸리티를 통해 MySQL을 Microsoft SQL Server 2000으로 마이그레이션 하는 방법을 설명합니다. 이 문서는 또한 MySQL 어플리케이션이 SQL Server 2000에서 동작하도록 수정하는 방법에 대한 지침도 제공합니다. 기존에 MySQL 기반의 어플리케이션을 가지고 있다면, 기존의 투자를 보전하면서도 어플리케이션 아키텍처에 SQL Server 2000의 향상된 기능을 추가할 수 있습니다.

개요

MySQL은 오픈 소스 데이터베이스 관리 시스템(DBMS)으로써, 클라이언트/서버 아키텍처를 사용하고 멀티 스레드 및 복수 사용자를 지원하는 데이터베이스 서버입니다. MySQL은 빠른 속도를 염두에 두고 설계되었기 때문에, 관계형 데이터베이스 시스템들이 제공하는 많은 기능들, 즉 하부 질의 (sub-query), 외부 키 (foreign key), 참조 무결성, 저장 프로시저, 트리거, 및 뷰 같은 기능을 지원하지 않습니다. 또한, MySQL의 잠금 기법은 여러 사용자에 의해 동시에 많은 쓰기 동작이 일어나는 테이블에 적합하지 않으며, 소프트웨어 어플리케이션과 툴의 개발을 지원할 참고 문헌도 부족합니다.
SQL Server 2000은 완벽한 관계형 데이터베이스 관리 시스템(RDBMS)으로써, OLAP 및 데이터 마이닝을 위한 통합 분석 기능도 포함하고 있습니다. SQL Server 2000은 대형 규모의 데이터 처리 시스템과 상용 웹 사이트에 필요한 데이터 및 분석용 저장소로써의 요구사항을 만족시키는 동시에, 개인이나 소규모 기업을 위한 사용하기 쉬운 데이터 저장소로써의 요구사항도 만족시킵니다.
Microsoft SQL Server의 아키텍처는 낮은 수준의 잠금, 향상된 질의 최적화, 데이터 복제, 분산 데이터베이스 관리, 및 분석 서비스와 같이 향상된 서버 기능을 지원합니다. Transact-SQL (T-SQL)은 SQL Server 2000이 지원하는 SQL 언어의 변형입니다.
여기에서 소개되는 아키텍처 상의 기능은 SQL Server 2000에 의해 제공되는 기능의 일부에 불과합니다. 서버의 설치 과정에서 함께 설치되는 SQL Server 2000 온라인 설명서는 훌륭한 리소스입니다. 온라인 설명서를 사용하려면, Microsoft SQL Server 프로그램을 열고 온라인 설명서를 클릭합니다.

마이그레이션 절차

이 장에서는 MySQL 및 Microsoft SQL Server 2000의 아키텍처에 대한 설명과 함께 마이그레이션 절차를 설명합니다. 다음과 같은 내용이 포함됩니다:

ㆍ마이그레이션 준비
ㆍ데이터 형식, 예약된 키워드, 및 연산자
ㆍ데이터 마이그레이션에 사용되는 MySQL 툴
ㆍ마이그레이션을 위한 SQL Server 툴
ㆍ직접 마이그레이션: 데이터 변환 서비스(DTS)
ㆍ데이터 로드 기능의 사용: 질의 분석기
ㆍ어플리케이션의 확장
ㆍ문제 해결

마이그레이션 준비

적절한 마이그레이션 계획은 성공적인 결과를 위해 매우 중요합니다. 마이그레이션을 시작하기 전에 마이그레이션 대상 MySQL 데이터베이스의 스키마를 검토하십시오. MySQL의 데이터 형식과 SQL Server 2000의 데이터 형식을 비교하고 차이점을 기록합니다. 이 백서의 "MySQL과 Microsoft SQL Server의 비교" 부분에서는 비교 가능한 데이터 형식을 설명합니다. 일부 MySQL 데이터베이스 객체는 SQL Server 2000의 예약된 키워드와 충돌한다는 사실을 명심하십시오. 이러한 키워드 또한 다음 장에서 설명됩니다. 사용하고 있는 MySQL 데이터베이스 파일은 DTS를 사용하여 SQL Server 2000으로 마이그레이션 하기 전에 백업해야 합니다.

데이터 형식, 예약된 키워드, 및 연산자

이 장에서는 SQL Server 2000에서의 데이터 형식에 대하여 설명하고, 마이그레이션을 쉽게 할 수 있도록 MySQL 데이터 형식과 SQL Server 2000 데이터 형식을 비교하는 표도 제공됩니다. 이 장에서는 또한 Microsoft SQL Server의 예약된 키워드 목록을 제공합니다. 이 장에 포함되는 정보는 다음과 같습니다:

ㆍ지원되는 SQL Server 데이터 형식
ㆍMySQL과 SQL Server 2000의 비교
ㆍSQL Server의 예약된 키워드

지원되는 SQL Server 데이터 형식
데이터 형식
설명

BIGINT

-2^63 (-9223372036854775808)에서 2^63-1 (9223372036854775807) 사이의 정수 데이터.


INT

-2^31 (-2,147,483,648)에서 2^31 - 1 (2,147,483,647)사이의 정수 데이터.


SMALLINT

2^15 (-32,768)에서 2^15 - 1 (32,767)사이의 정수 데이터.


TINYINT

0에서 255까지의 정수 데이터.


BIT

1이나 0 값을 가지는 정수 데이터.


DECIMAL

-10^38 +1에서 10^38 -1사이의 고정 정밀도 및 배율 숫자 데이터.


NUMERIC

기능적으로 decimal과 동일.


MONEY

통화 단위의 1/1000의 정확성을 가진 -2^63(-922,337,203,685,477.5808)에서 2^63 - 1(+922,337,203,685,477.5807) 사이의 통화 데이터 값.


SMALLMONEY

통화 단위의 1/1000의 정확성을 가진 -214,748.3648에서 +214,748.3647 사이의 통화 데이터 값.


FLOAT

-1.79E + 308에서 -2.23E - 308까지, 0과 2.23E + 308부터 1.79E + 308 사이의 부동 정밀도 숫자 데이터.


REAL

-3.40E + 38부터 -1.18E - 38까지, 0과 1.18E - 38부터 3.40E + 38-3 사이의 부동 정밀도 숫자 데이터.


DATETIME

1753년 1월 1일에서 9999년 12월 31일까지 1/300초 또는 3.33밀리 초의 정확성을 가진 날짜 및 시간 데이터.


SMALLDATETIME

1900년 1월 1일에서 2079년 6월 6일까지 1분의 정확성을 가진 날짜 및 시간 데이터.


CHAR

길이가 최대 8,000자이고 유니코드가 아닌 고정 길이 문자 데이터.


VARCHAR

길이가 최대 8,000자이고 유니코드가 아닌 가변 길이 문자 데이터.


TEXT

길이가 최대 2^31 - 1(2,147,483,647)자이고 유니코드가 아닌 가변 길이 데이터.


NCHAR

길이가 최대 4,000자인 고정 길이 유니코드 데이터.


NVARCHAR

길이가 최대 4,000자인 가변 길이 유니코드 데이터. sysname은 nvarchar(128)과 같은 기능의 시스템 제공 사용자 정의 데이터 형식으로서 데이터베이스 개체 이름을 참조할 때 사용됩니다.


NTEXT

길이가 최대 2^30 - 1(1,073,741,823)자인 가변 길이 유니코드 데이터.


BINARY

길이가 최대 8,000바이트인 고정 길이 이진 데이터.


VARBINARY

길이가 최대 8,000바이트인 가변 길이 이진 데이터.


IMAGE

길이가 최대 2^31 - 1(2,147,483,647)바이트인 가변 길이 이진 데이터.


CURSOR

커서에 대한 참조.


SQL_VARIANT

text, ntext, timestamp, sql_variant를 제외하고 SQL Server에서 제공하는 여러 가지 데이터 형식의 값을 저장하는 데이터 형식.


TABLE

나중에 처리할 수 있도록 결과 집합을 저장하는 특수 데이터 형식.


TIMESTAMP

행이 업데이트될 때마다 업데이트되는 데이터베이스 차원의 고유한 숫자.


UNIQUEIDENTIFIER

전역 고유 식별자 (GUID).




MySQL과 SQL Server 2000의 비교

다음 표는 MySQL과 SQL Server 2000 사이의 데이터 형식을 비교하여 보여줍니다. 일부 MySQL 데이터 형식에 대해서는 하나 이상의 SQL Server 데이터 형식이 사용될 수 있습니다. 이 표는 다음 사항에 대한 정보를 포함합니다:

숫자 형식
데이터 및 시간 형식
문자열 형식

참고
D: 부동 소수점 형식에 적용되며 소수점 이후의 자리 수를 표시합니다. 가능한 최대 값은 30이지만 M-2보다 클 수 없습니다.
L: 컬럼 값의 실제 길이
M: 최대 표시 크기. 합법적인 최대 표시 크기는 255입니다.

숫자 형식

MySQL
크기
SQL Server 2000

TINYINT

1 바이트

TINYINT


SMALLINT

2 바이트

SMALLINT


MEDIUMINT

3 바이트




INT

4 바이트

INT


INTEGER

4 바이트

INT


BIGINT

8 바이트

BIGINT


FLOAT(X<=24)

4 바이트

FLOAT(0)


FLOAT(25<=X<=53)

8 바이트

FLOAT(25)


DOUBLE

8 바이트

FLOAT(25)


DOUBLE PRECISION

8 바이트

FLOAT(53)


REAL

8 바이트

REAL


DECIMAL

M 바이트 (D+2, if M
DECIMAL


NUMERIC

M 바이트 (D+2, if M
NUMERIC




날짜 및 시간 형식

MySQL
크기
SQL Server 2000

DATE

3 바이트

SMALLDATETIME


DATETIME

8 바이트

DATETIME


TIMESTAMP

4 바이트

TIMESTAMP


TIME

3 바이트

SMALLDATETIME


YEAR

1 바이트

SMALLDATETIME




문자열 형식

MySQL
크기
SQL Server 2000

CHAR(m)

M 바이트, 1<=M<=255

CHAR


VARCHAR(m)

L+1 바이트 (L<=M이고 1<=M<=255인 경우)

VARCHAR


TINYBLOB

L + 1 바이트 (L<2^8인 경우)

BINARY


BLOB

L + 2 바이트 (L<2^16인 경우)

VARBINARY


TEXT

L + 2 바이트 (L<2^16인 경우)

TEXT


MEDIUMBLOB

L + 3 바이트 (L<2^24인 경우)

IMAGE


MEDIUMTEXT

L + 3 바이트 (L<2^24인 경우)

TEXT


LONGBLOB

L + 4 바이트 (L<2^32인 경우)

IMAGE


LONGTEXT

L + 4 바이트 (L<2^32인 경우)

TEXT


ENUM (VALUE1, VALUE2, …)

Enum 수에 따라 1 또는 2 바이트. Values (최대 값은 65535)

제공되는 데이터 형식은 없지만, CHECK 제약 조건*이 해당 기능을 제공.


SET (VALUE1, VALUE2, …)

인수의 수에 따라 최대 1, 2, 3, 4 또는 8 바이트




* Check 제약 조건은 열에 들어갈 수 있는 값을 제한하여 데이터 무결성을 보장합니다. 자세한 사항은 온라인 설명서의 "CHECK 제약 조건" 항목을 참조하십시오.

Microsoft SQL Server 2000의 예약된 키워드

ADD

EXCEPT

PERCENT


ALL

EXEC

PLAN


ALTER

EXECUTE

PRECISION


AND

EXISTS

PRIMARY


ANY

EXIT

PRINT


AS

FETCH

PROC


ASC

FILE

PROCEDURE


AUTHORIZATION

FILLFACTOR

PUBLIC


BACKUP

FOR

RAISERROR


BEGIN

FOREIGN

READ


BETWEEN

FREETEXT

READTEXT


BREAK

FREETEXTTABLE

RECONFIGURE


BROWSE

FROM

REFERENCES


BULK

FULL

REPLICATION


BY

FUNCTION

RESTORE


CASCADE

GOTO

RESTRICT


CASE

GRANT

RETURN


CHECK

GROUP

REVOKE


CHECKPOINT

HAVING

RIGHT


CLOSE

HOLDLOCK

ROLLBACK


CLUSTERED

IDENTITY

ROWCOUNT


COALESCE

IDENTITY_INSERT

ROWGUIDCOL


COLLATE

IDENTITYCOL

RULE


COLUMN

IF

SAVE


COMMIT

IN

SCHEMA


COMPUTE

INDEX

SELECT


CONSTRAINT

INNER

SESSION_USER


CONTAINS

INSERT

SET


CONTAINSTABLE

INTERSECT

SETUSER


CONTINUE

INTO

SHUTDOWN


CONVERT

IS

SOME


CREATE

JOIN

STATISTICS


CROSS

KEY

SYSTEM_USER


CURRENT

KILL

TABLE


CURRENT_DATE

LEFT

TEXTSIZE


CURRENT_TIME

LIKE

THEN


CURRENT_TIMESTAMP

LINENO

TO


CURRENT_USER

LOAD

TOP


CURSOR

NATIONAL

TRAN


DATABASE

NOCHECK

TRANSACTION


DBCC

NONCLUSTERED

TRIGGER


DEALLOCATE

NOT

TRUNCATE


DECLARE

NULL

TSEQUAL


DEFAULT

NULLIF

UNION


DELETE

OF

UNIQUE


DENY

OFF

UPDATE


DESC

OFFSETS

UPDATETEXT


DISK

ON

USE


DISTINCT

OPEN

USER


DISTRIBUTED

OPENDATASOURCE

VALUES


DOUBLE

OPENQUERY

VARYING


DROP

OPENROWSET

VIEW


DUMMY

OPENXML

WAITFOR


DUMP

OPTION

WHEN


ELSE

OR

WHERE


END

ORDER

WHILE


ERRLVL

OUTER

WITH


ESCAPE

OVER

WRITETEXT




데이터 마이그레이션에 사용되는 MySQL 툴

MySQL은 몇 가지 클라이언트 툴과 유틸리티를 제공하는데, 이 중에서 가장 많이 사용되는 것은 다음과 같습니다:

ㆍmysql - 데이터베이스에 대해 질의를 실행하고 결과를 볼 수 있도록 해주는 대화형 클라이언트

ㆍmysqldump -MySQL 데이터베이스 내의 스키마와 데이터를 추출하여 파일로 저장하는 툴

ㆍmysqlimport - 파일에서 스키마와 데이터를 읽어서 MySQL 데이터베이스로 로딩하는 툴

ㆍmysqladmin - 데이터베이스의 생성 및 삭제와 같은 관리 작업을 수행할 수 있도록 해주는 툴

ㆍmyODBC - ODBC 호환 어플리케이션이 MySQL에 연결할 수 있도록 ODBC 레벨 0 (레벨 1 및 레벨 2 기능과 함께) 드라이버를 제공하는 32비트 Open DataBase Connectivity 소프트웨어

마이그레이션을 위한 SQL Server 툴

SQL Server는 MySQL로부터의 마이그레이션을 쉽게 해주는 풍부한 툴과 유틸리티를 제공합니다. SQL Server 2000의 데이터 변환 서비스 (DTS: Data Transformation Services)는 서로 다른 여러 가지 원본에서 단일 또는 복수 대상으로 데이터를 추출, 변환, 및 통합 해주는 일련의 그래픽 툴 및 프로그램 가능한 객체의 집합입니다.

데이터 변환 서비스의 기능

Microsoft SQL Server 2000의 데이터 변환 서비스는 서로 다른 여러 원본에서 데이터를 마이그레이션 할 수 있는 몇 가지 방법을 제공합니다. DTS는 마법사를 통해 실행될 수도 있고 DTS 패키지 디자이너를 통해 구축될 수도 있습니다. DTS의 마법사는 직접적인 데이터 복사를 신속하게 수행하고, 패키지 디자이너는 개발자로 하여금 다양한 프로그램 언어를 통해 사용자 정의 변환 스크립트를 작성할 수 있도록 해줍니다. DTS 툴은 다음과 같은 기능을 제공합니다:

ㆍMySQL에서 SQL Server 2000으로 데이터를 마이그레이션
ㆍ마이그레이션 전에 데이터의 모양을 표시
ㆍ테이블과 데이터 형식 (텍스트나 날짜 같은)을 마이그레이션
ㆍMySQL 데이터베이스를 MySQL 테이블과 함께 마이그레이션
ㆍ마이그레이션 보고서를 생성 및 보기
ㆍ테이블과 기본 데이터 형식 매핑 규칙을 사용자 정의
ㆍSQL Server의 예약된 키워드 등에 대한 충돌 사항을 해결
ㆍSQL Server 스키마 모델 내의 객체를 삭제하거나 이름을 변경
ㆍ개별적인 테이블 데이터를 마이그레이션

데이터 변환 서비스 용어집

DTS를 설명하는 데는 다음과 같은 용어가 사용됩니다:
DTS 패키지는 DTS 디자이너를 통해 그래픽 방식으로, 또는 프로그래밍 방식으로 어셈블 될 수 있는 연결, DTS 작업, DTS 변환, 및 워크플로 제약을 잘 구성하여 모아놓은 것입니다.
DTS 작업은 패키지에서 한 단계로 실행되는 기능의 불연속 집합입니다. 각 작업은 데이터 이동 및 데이터 변환 과정의 일부 또는 실행될 작업으로 수행되는 작업 항목을 정의합니다.
DTS 변환은 데이터가 대상에 도착하기 전 한 데이터에 적용되는 하나 이상의 함수 또는 작업입니다.
DTS 패키지 워크플로는 데이터 변환 서비스 (DTS)의 단계 및 사전 제약이 DTS 패키지 내의 작업 항목의 순서를 정하도록 합니다. DTS 패키지 워크플로는 DTS 디자이너를 통해 그래픽 방식으로, 또는 프로그래밍 방식으로 설계할 수 있습니다.
메타 데이터는 DTS에 패키지 메타데이터 및 데이터 계보 정보를 메타데이터 서비스로 저장하는 기능과 이러한 유형의 정보를 연결하는 기능이 포함되어 있습니다. 패키지에서 참조된 데이터베이스의 카탈로그 메타데이터를 저장할 수 있고 데이터 마트 또는 데이터 웨어하우스의 데이터 특정 열 기록에 관한 계정 정보를 저장할 수 있습니다.

직접 마이그레이션

데이터를 MySQL에서 Microsoft SQL Server로 마이그레이션 하는 가장 직접적인 방법은 myODBC 지원을 설치하고 DTS 패키지를 생성하여 데이터베이스를 MySQL에서 가져와 Microsoft SQL Server에 생성하는 것입니다.
다음은 MySQL 데이터베이스의 마이그레이션을 위해 Microsoft SQL Server를 설정하는 방법입니다.

1. MyODBC 지원을 설치합니다. MyODBC는http://www.mysql.com/ 에서 구할 수 있습니다.

2. 설치가 진행되는 동안 다음과 같은 대화 상자가 나타납니다:



다음과 같은 정보를 사용하여 ODBC 설치 설정 사항을 입력합니다:
Windows DSN name:

test


Description:

This is a test database


MySQL Database:

test


Server:

seawolf.microsoft.com


User:

cgunn


Password:

my_password


Port:

3306


위와 같은 설정에서, Windows DSN 이름은 연결하는 컴퓨터 상에서 유일해야 하며, 서버 설정은 FQDN 이거나 (DNS에 의해, 또는 사용자가 직접 모종의 이름 해석을 제공해야 합니다), IP 주소여야 합니다.

3. 다음은 DTS 마법사를 실행합니다. Microsoft SQL Server 프로그램 그룹에서 데이터 가져오기 및 내보내기를 선택하면 다음과 같은 대화 상자가 나타납니다.



Next를 클릭하여 다음 단계로 이동합니다.

4. 이제 필요한 데이터 원본 정보를 입력하는데, 아래 그림에서와 같이 ODBC 데이터 원본은 MySQL, System DSN에는 test를 입력하고 사용자 이름과 암호를 입력한 후 Next를 클릭합니다.



5. 아래 대화 상자에서와 같이 대상에 연결하기 위한 세부 사항을 입력하고 Next를 클릭합니다.



6. Specify Table Copy or Query 대화 상자에서는 원본 (이 경우 MySQL)에서 데이터베이스 객체를 선택할 수 있습니다. Copy Table(s) and View(s) from the source database를 선택합니다. 다시 한번 얘기하지만 MySQL은 뷰 기능을 제공하지 않으므로 이 옵션을 선택해도 테이블 객체 만을 복사할 것입니다. Next를 클릭하여 다음 단계로 넘어갑니다.



7. Select Source Tables and View 대화 상자에서는 원본 테이블과 대상 테이블을 선택할 수 있습니다.



8. 아래 Column Mappings and Transformations 대화 상자에서처럼 데이터 변환을 위한 내용을 지정합니다.



위의 대화 상자에서는 원본 및 대상 데이터 형식이 일치하고 있으며 NULL을 허용하도록 선택되어 있습니다. 작업이 완료되면 OK를 클릭합니다.
다음에는 Save, Schedule, and Replicate Package 대화 상자가 나타납니다. 여기에서는 마이그레이션 작업을 바쁘지 않은 시간 대로 스케줄 하고 DTS 패키지를 다른 위치 및 다른 포맷으로 저장합니다.



9. Save DTS Package 대화 상자는 DTS 패키지에 대하여 두 가지 유형의 암호를 제공합니다. 소유자 암호는 패키지에 포함된 사용자/암호 정보를 보호하는 것이고, 사용자 암호는 실행을 제어하기 위한 것으로 DTS 패키지가 인가되지 않은 사람에 의해 실행되는 것을 방지합니다. Next를 클릭하여 다음 단계로 진행합니다.



10. 마지막으로 Completing the DTS Import/Export Wizard 대화 상자가 DTS 마법사에서 선택된 옵션들을 요약하여 보여줍니다.



Finish를 클릭하여 데이터 마이그레이션 절차를 시작합니다.

11. Executing Package 대화 상자가 각 작업의 실행 상태를 보여줍니다. 녹색 체크 표시는 작업이 성공적으로 완료된 것을 뜻합니다. 오류로 인해 작업이 실패하면 오류 대화 상자가 오류에 대한 정보를 보여줍니다.



이제 당신은 데이터를 MySQL에서 SQL Server 2000으로 성공적으로 마이그레이션 하였습니다.

데이터 로딩의 사용

MySQL Server와 함께 제공되는 클라이언트 프로그램인 mysqldump를 사용하면 MySQL 데이터베이스의 스키마와 데이터를 다양한 포맷으로 .sql/.txt 파일로 저장할 수 있습니다. DTS는 mysqldump의 결과 파일을 사용하여 대규모 테이블에 대하여 오프라인 데이터 로딩 기능을 제공할 수 있습니다. 데이터 로딩 절차에 대해서는 다음과 같은 내용이 설명됩니다:

ㆍmysqldump 데이터 추출 스크립트의 생성
ㆍ스크립트의 전송
ㆍ추출된 스크립트의 사용


mysqldump 데이터 추출 스크립트의 생성

MySQL은 백업 또는 데이터의 전송을 위해 데이터베이스 또는 일련의 데이터베이스를 덤프 해주는 유틸리티를 제공합니다.
mysqldump 유틸리티는 데이터베이스의 SQL 스크립트를 생성하는 기능을 제공합니다.
Mysqldump을 위한 최소한의 문법은 다음과 같습니다:

Shell> mysqldump [OPTIONS] database [tables]

mysqldump에서 사용할 수 있는 옵션에 대한 자세한 정보는 이 백서에서도 설명하지만 MySql의 참조 매뉴얼에서도 자세히 설명하고 있습니다.
Mysqldump을 사용하면 해당 데이터베이스의 SQL 스크립트를 얻을 수 있습니다.

스크립트의 전송

Mysqldump로 생성한 스크립트는 SQL Server로 전송될 수 있습니다. MySQL 호스트에서 SQL Server 2000 컴퓨터로 스크립트를 전송하기 위해서는 FTP와 같은 네트워크 어플리케이션을 사용할 수 있습니다.

추출된 스크립트를 SQL 쿼리 분석기에서 사용

생성된 스크립트는 이제 데이터베이스 객체를 생성하고 데이터를 입력하는데 사용될 수 있습니다. MySQL 스크립트를 데이터베이스 스키마를 구축하는데 있어 가장 좋은 방법은 SQL Server 2000에 포함되어 있는 SQL 쿼리 분석기를 사용하는 것입니다. You can run SQL 쿼리 분석기는 시작 메뉴에서 직접 실행시킬 수도 있고 SQL Server 엔터프라이즈 관리자에서 실행시킬 수도 있습니다. SQL 쿼리 분석기는 명령 프롬프트에서 isqlw 유틸리티를 통해서도 실행시킬 수 있습니다. 스크립트가 제대로 실행되기 위해서는 SQL dialect를 일부 변경하는 등의 약간의 추가 작업이 필요합니다. 또한, SQL 스크립트를 살펴보고 데이터 형식을 SQL Server와 호환되는 형식으로 변경해야 함을 기억하십시오. 아래 그림은 mysqldump를 통해 가져온 스크립트를 보여줍니다. 중요한 사항은 덤프 한 내용이 ASCII 스크립트 파일이라는 것입니다.



Microsoft SQL Server 2000의 SQL 쿼리 분석기는 다음과 같은 기능을 제공합니다:

ㆍ질의 및 다른 SQL 스크립트를 생성하고 이를 SQL Server 데이터베이스에 대하여 실행합니다
ㆍ사전에 정의된 스크립트를 이용하여 자주 사용되는 데이터베이스 객체를 신속하게 생성합니다
ㆍ기존의 데이터베이스 객체를 신속하게 복사합니다
ㆍ필요한 인수를 몰라도 저장 프로시저를 실행시킵니다
ㆍ저장 프로시저를 디버깅 합니다
ㆍ질의의 성능 문제를 디버깅 합니다
ㆍ데이터베이스 내의 객체를 찾거나, 보거나 또는 작업할 수 있습니다
ㆍ테이블에 행을 신속하게 삽입, 갱신, 또는 삭제합니다
ㆍ자주 사용되는 질의에 대하여 키보드 바로가기를 생성합니다
ㆍ자주 사용되는 명령을 Tools 메뉴에 추가합니다

어플리케이션의 확장

MySQL 어플리케이션의 데이터 관리 부분을 Microsoft SQL Server로 옮긴 후에는 SQL Server를 이용하여 데이터를 보호하고 Transact-SQL로 인코딩 한 모든 참조 무결성과 비즈니스 규칙을 보호할 수 있습니다.
ADO, OLE DB, 및 ODBC와 같은 데이터베이스 어플리케이션 프로그램 인터페이스(API)는 다양한 프로그램 언어를 사용하여 데이터베이스의 데이터를 처리할 수 있도록 해줍니다. 이러한 API는 Microsoft Visual C++, Microsoft Visual Basic, 또는 Microsoft Visual J++와 같은 개발 시스템에서 사용할 수 있습니다.
또한 어플리케이션의 규모가 커지는 경우에는 Microsoft SQL Server를 더 큰 컴퓨터로 옮기면 어플리케이션을 변경하지 않고 쉽게 확장할 수 있습니다. SQL Server는 하드웨어 구성을 자동으로 인식하여 메모리, I/O 및 프로세서를 최적으로 사용하도록 스스로 튜닝합니다.

인터넷을 통한 데이터 액세스

SQL Server는 어플리케이션을 웹 기반 인터페이스로 확장시키는 기능을 제공합니다. 이 기능은 언제 어디서나 어플리케이션을 액세스 할 수 있도록 해줍니다. SQL Server는 Microsoft Internet Information Services (IIS)와 통합되므로, IIS 웹 서버와 ActiveX Data Object (ADO) 및 Active Server Page (ASP)를 사용하면 SQL Server에 저장된 데이터에 대하여 빠르고 효율적인 사용자 인터페이스를 제공할 수 있습니다.
자세한 사항은 다음 웹 사이트를 참조하십시오: http://www.microsoft.com/korea/msdn/

보안

SQL Server 2000의 데이터베이스 보안은 강력하면서도 관리하기 쉽습니다. SQL Server와 MySQL 모두에 대해서, 두 단계의 보안을 생각하는 것이 중요합니다: 1) 서버에 대한 액세스 2) 개별 데이터베이스에 대한 액세스.
MySQL은 서버에 대한 액세스를 고유의 방식으로 보호하는데, 클라이언트의 경우에는 소스에 대한 액세스를 제한하는 방식으로, IP 주소나 FQDN에 따라, 또는 '%' 같은 와일드 카드를 사용합니다. SQL Server는 운영체제에 의해 관리되거나 SQL Server 마스터 데이터베이스 내에 저장되는 사용자 계정을 필요로 합니다.
SQL Server는 역할을 통해 그룹 액세스 기능을 제공하는데, 이 기능을 사용하면 그룹에 속한 사용자에 대해 공통적인 액세스를 설정할 수 있으므로 데이터베이스 관리가 쉬워집니다.
다음 단계는 Microsoft SQL Server에서 엔터프라이즈 관리자 툴을 통해 서버 및 데이터베이스에 대한 액세스를 관리하는 방법을 보여줍니다.

1. 엔터프라이즈 관리자를 열고, 보안 폴더로 이동한 후, 로그인 아이콘을 선택하고, 마우스를 오른쪽 클릭하여 새 로그인을 선택합니다.



2. SQL Server Login Properties 대화 상자가 나타나면 로그인 이름을 입력합니다. 로그인 이름은 MySQL에서의 사용자 이름과 유사합니다. SQL Server에서 검증되는 보안 수준을 제공하도록 SQL Server Authentication을 선택합니다.



3. Server Roles 탭에서 서버에 액세스 하는 권한을 지정합니다. 아래 그림에서 선택한 역할은 sysadmins (시스템 관리자)인데, MySQL의 root 권한에 해당합니다.



4. 다음 탭은 Database Access이다. 이 등록정보 페이지에서는 SQL Server 내에 물리적으로 존재하는 모든 데이터베이스에 대한 액세스를 제공합니다. 데이터베이스를 선택된 후에 데이터베이스 역할을 설정합니다. 기본적으로 모든 사용자는 public 역할을 속하지만, 권한을 할당할 때 이 역할도 명시적으로 할당되어야 합니다. 아래 그림에서 추가로 선택된 역할은 db_owner인데, 이 역할은 전체 SQL Server나 다른 데이터베이스에 대해서는 아니지만, 선택한 데이터베이스에 대해서는 전권을 가집니다.



5. OK를 클릭하면 암호를 물어봅니다.



새로운 로그인은 엔터프라이즈 관리자에서 볼 수 있습니다. 아래 그림에서는 'sa'라는 로그인 계정도 볼 수 있는데, 이 시스템 계정은 반드시 암호를 설정해야 합니다. 암호는 SQL Server의 설치 과정에서 지정해야 하며, 빈 암호를 할당하는 옵션이 있기는 하지만, 이 로그인에 대해서는 항상 암호가 할당되어야 합니다.



Microsoft SQL Server 로그인을 생성하는데 대한 자세한 사항은 SQL Server 온라인 설명서의 "보안 관리" 항목을 참조하십시오

데이터베이스 권한

SQL Sever 2000 역시 데이터 정의 언어 (DDL) 및 데이터 조작 언어 (DML)에 대한 액세스를 제한 함으로써 데이터베이스를 보호하는 기능을 제공하는데, 이를 위한 단계는 로그인을 생성하는 것과 유사합니다. SQL Server 데이터베이스에 대한 권한을 설정하는 것은 엔터프라이즈 관리자를 통해 쉽게 수행될 수 있습니다.

데이터 조작 언어 권한

1. 엔터프라이즈 관리자를 열고 데이터베이스 폴더에서 권한을 설정할 데이터베이스를 선택합니다. users 아이콘을 선택한 후 데이터베이스 사용자를 오른쪽 클릭하여 Properties를 선택합니다.



2. permissions 단추를 클릭합니다.



3. 권한 윈도우에서는 테이블, 뷰, 및 저장 프로시저와 같은 모든 데이터베이스 객체에 대하여 DML 문장을 설정할 수 있습니다. 권한이 선택된 후에는 OK를 클릭합니다.





데이터 정의 언어 권한

1.데이터베이스에 DDL 문에 대한 권한을 설정하려면, 해당 데이터베이스의 등록정보를 선택해야 합니다. 해당 데이터베이스를 오른쪽 클릭한 후 Properties를 선택합니다.



2. 다음에 등록정보 윈도우에서 permissions 탭을 선택합니다.



3. 적절한 권한을 선택한 후에 OK를 클릭합니다.

문제 해결

이 장에서는 다음과 같은 사항에 대한 문제 해결 방법 및 정보를 제공합니다:

ㆍ사용자 계정의 정의
ㆍMySQL 데이터의 덤프
ㆍ명령 행 옵션의 최적화

사용자 계정의 정의

MySQL 서버를 시스템에 설치하면 root 사용자 계정이 모든 DBA 권한을 갖도록 기본 설정됩니다. MySQL 서버에는 ODBC를 통해 root 사용자로 로그온 해야 합니다. (참고: 기본적으로 root 사용자는 로컬 호스트에서만 로그온 할 수 있도록 설정되므로, DTS 마법사를 통해 root 사용자가 다른 IP 또는 DNS 주소를 통해서도 로그온 할 수 있도록 설정해야 합니다.)

MySQL 데이터의 덤프

아래 표는 MySQL 데이터를 덤프하고 mysqldump 텍스트 파일에서 데이터베이스를 다시 생성하는데 사용되는 문법을 설명합니다.

명령
설명

mysqldump

MySQL 데이터베이스의 스키마 및 데이터를 파일로 추출할 수 있도록 해주는 툴.


mysql

MySQL를 로드 하여 명령을 수행할 수 있도록 해줍니다.


-u user name

root MySQL 사용자 이름. 이 사용자는 모든 DBA 권한을 가져야 합니다.


-ppassword

MySQL 데이터베이스 서버 root 사용자의 암호.


--opt

테이블 덤프 속도를 최적화 하고 다시 로딩될 빠르게 수행되도록 덤프 파일을 씁니다. 이 옵션은-add-drop-table, --add-locks, --all, --extended-insert, --quick 및 -lock-tables 옵션을 설정한다. -opt에 의해 설정되는 옵션에 대한 설명은 "명령 행 옵션의 최적화" 부분을 참고하십시오.


databasename

텍스트 파일로 덤프 하고자 하는 정보를 포함하고 있는 데이터베이스 이름.


<

UNIX 및 Windows NT/2000에서 입력을 리디렉트 하는데 사용하는 심볼.


filename.sql

MySQL을 포함하는 파일 이름.



MySQL 데이터를 덤프 하려면 다음 명령을 사용합니다:

#> mysqldump –u user name –ppassword –opt databasename < filename.sql

mysqldump로 생성된 텍스트 파일로부터 데이터베이스를 다시 생성하려면 다음 명령을 사용합니다:

#> mysql –u user name –ppassword databasename < filename.sql

명령 행 옵션의 최적화

-opt를 사용하면 mysqldump 명령의 옵션을 자동적으로 설정합니다. MySQL에서 데이터를 덤프 하는 것과 관련된 더 자세한 사항은 "MySQL 데이터의 덤프" 부분을 참조하십시오. 다음 표는 -opt 명령에 대한 설명입니다:

명령
설명

--add-drop-table

각각의 CREATE TABLE 문장 앞에 DROP TABLE If EXISTS 문장을 추가합니다.


--all

MySQL에서 사용하는 생성 옵션을 모두 포함합니다.


--extended-insert

복수 행을 삽입하는 문장을 작성합니다.


--quick

질의를 버퍼링 하지 않고 표준 출력으로 바로 덤프합니다. 이 옵션을 사용하는 중에 mysqldump를 중단시키면 서버를 대기 상태로 만들 수 있으므로 다른 클라이언트에 영향을 미칠 수 있습니다.


--lock-tables

모든 테이블을 읽기 전용으로 잠급니다




MySQL의 오류 메시지

이 장에서는 MySQL 데이터베이스를 SQL Server 2000으로 마이그레이션 하는 동안 접할 수 있는 오류 메시지에 대하여 설명합니다.

오류 메시지

데이터 마이그레이션을 위해 DTS를 사용할 때 다음과 같은 오류 메시지가 나타날 수 있습니다:

오류 메시지
해법

Cannot connect to MSQL Server .
Is there a MySQL server running on the system/port you are trying to connect to?

이 오류는 다음과 같은 이유 때문에 발생할 수 있습니다:
· 소스 포트는 기본적으로 3306으로 설정됩니다. 이 포트 번호는 MySQL이 통신하는 포트인데, 이 포트가 MySQL 상에 다르게 정의되어 있다면 MySQL ODBC 설정에서 포트 설정을 변경합니다.
· 사용자가 MySQL 서버를 액세스 하는데 적절한 권한을 가지고 있는지 확인합니다.
· 사용자 이름이 유효한지 확인합니다.


There is already an object named 'tablename' in the database

DTS 패키지를 실행하는 동안 테이블이 생성되었습니다. 패키지를 실행하는 동안 테이블이 삭제되거나 재생성 되도록 확인합니다.




결론

이 백서에서는 MySQL에서 Microsoft SQL Server 2000으로 데이터베이스 스키마와 데이터를 마이그레이션 하기 위한 기본적인 정보와 배경을 설명하였습니다. SQL Server 2000은 어플리케이션에 대하여 더 높은 수준의 신뢰성, 확장성, 및 기능을 제공합니다.

출처 : 한국마이크로소프트(주)
"MySQL" 카테고리의 다른 글
  • MySQL을 Microsoft SQL Server 2000으로 마이그레이션 (0)2007/05/21
  • MySQL 백업 및 복구 (0)2006/11/25
2007/05/21 10:13 2007/05/21 10:13
Posted by webdizen
Tags Migration, MySQL, SQL Server 2000, 마이그레이션
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3011

Leave your greetings.

[로그인][오픈아이디란?]

Programming/Java2007/05/18 11:53

웹2.0(Ajax)과 아키텍처의 구현

웹2.0 도입을 위한 마이그레이션 프레임워크

웹2.0(Ajax)과 아키텍처의 구현

이동호, 윤현희, 손범성, 박정은

Ajax는 웹2.0의 기반이 되는 기술이다. 기존 웹을 재활용하는 측면에서 웹2.0과 Ajax, 그리고 웹2.0 환경으로 마이그레이션하는 방법을 함께 알아보자. 이번 시간은 웹2.0 및 Ajax의 개념과 전체적인 구조에 대한 기본 라이브러리를 어떻게 구현했는지 살펴본다.


구글 애드센스, 비트토런스, 넵스터 등 최근 언론의 주목을 끄는 사이트의 공통된 특징은 웹2.0 기반의 성공사례로 꼽힌다는 점이다. 전문가들은 웹2.0을 두 가지 측면으로 해석한다. 우선 콘텐츠의 질적, 양적 팽창이 사용자 중심으로 이뤄지는 구조로 흘려간다는 것이고 다른 하나는 마케팅 용어에 불과하다는 시각이다. 그런데 대다수 기업은 웹2.0의 의미보다는 자사 서비스가 웹2.0에 기반 한다는 사실을 사용자에게 더 알리고 싶어 한다. Time to Market(적기 시장 진입)이 기업 성공의 필수조건이니 만큼 트렌드를 따라가야겠다는 생각이다. 여기에는 웹2.0 기반의 개발 환경이 필연적이다.

이번 프로젝트의 결과물인 ‘Web2.0 Migration Framework’는 기존 웹의 재활용성을 높이고, 적기 시장 진입을 충족시켜줄 수 있는 환경을 제시한다. 기존 웹을 재활용하기 위해서는 범용성을 위한 언어 독립적 구현이 필요하고, 도입의 판단을 위해 기존 웹을 데이터적인 측면에서 바라보는 시각이 요구된다. 이번 호는 웹2.0 기반의 기술인 Ajax와 설계적인 측면에서 프로젝트 결과물을 살펴보고자 한다.




웹2.0과 Ajax

웹2.0은 X-인터넷과 더불어 현재 이슈화되고 있는 개념이다. 이 둘의 공통점은 웹 서비스의 애플리케이션화와 가벼운 리치 클라이언트 구현의 중심이라는 것이다. 이러한 웹 서비스의 애플리케이션화에 도움을 주는 것이 Ajax이다. Ajax는 Asynchronous JavaScript and XML의 줄임말로, 사용자 요청에 JavaScript와 XML을 이용, 비동기적으로 처리한다는 의미이다. 즉 Ajax는 특별한 기술을 요구하는 것이 아니라 실용성과 효율성을 바탕으로 현존하는 기술을 조합하고 웹 애플리케이션을 개발하려는 새로운 시도인 셈이다.

사용자 삽입 이미지

<그림1> 기존 동기 통신과 Ajax의 비동기 통신의 차이


<그림 1>에서 기존 동기 통신은 애플리케이션이 서버와의 인터랙션을 필요로 할 때 매번 브라우저가 사용자와의 인터랙션을 멈추고, 서버의 응답을 기다린다. 반면 비동기 통신은 사용자 동작과 상관없이 연속적인 작업 진행이 가능하다. Ajax의 구현과 확장에 대해서는 뒤에서 살펴보도록 하겠다.




필자 메모
Web2.0 Migration Framework라는 이번 프로젝트를 진행하면서 기존 시스템에서 스크랩한 정보, 즉 Html 파싱 부분이나 파싱한 정보에 Ajax 코드를 넣는 부분, 서비스에 필요한 설정과 여러 코드들의 생성, 이클립스 플러그인의 구현 등에 대한 부분에서 많은 어려움을 겪었다. Html 파싱의 경우, Html은 XML과 같은 Well-Formed 문서가 아닌 탓에 별도의 변환 과정을 거치고, 여러 사이트를 스크랩하면서 테스트를 수행해야 했다. 또한 서비스 구조에 대한 정확한 데이터 처리가 필요해 웹 서버에 대한 배경 지식도 요구되었다. 이클립스 플러그인이라는 생소한 부분도 직접 구현해야 했기에 이에 대한 조사는 물론 구현에 많은 시간을 할애할 수 밖에 없었다. Html 파싱은 NekoHtml이라는 라이브러리를 부분적으로 사용, 구현하였다. 파싱된 정보는 프로젝트 전반에 걸쳐 사용하기 때문에 Well-Formed 문서로 구성하는데 중점을 뒀다. 그리고 서비스 가운데 기존 시스템에서 스크랩한 부분은 페이지의 여러 부분에서 사용자 요청이 있을 수 있으니 이에 대한 정확한 처리를 위해 페이지 상태와 요청에 대한 부분을 별도로 관리했다. 아울러 Html 수정과 Ajax 코드를 끼워 넣을 때는 트리 형태로 파싱한 정보를 오브젝트에 바인딩 하여 관리하고, 서비스시 동적으로 Html 코드를 생성하여 사용자한테 보낼 수 있도록 했다.




전체 시스템의 설계

그럼 프로젝트의 전체 시스템 구조가 어떤 방향으로 설계되었는지 살펴보자.

우선 설계의 기본 개념을 열거하면 기존 웹의 부분적인 마이그레이션(MVC 패턴의 도입)과 웹2.0 기술인 Ajax의 손쉬운 도입, 그리고 기존 시스템의 구조적 수정 불가(데이터적 관점), 기존 시스템의 재활용, 언어 독립성 등이다.

사용자 삽입 이미지


<그림 2>에서 Scraper는 Html 소스를 스크랩하고 언어 독립적인 구현을 위해 존재한다. 최초 작업을 위해 Scraper에서 Html 소스를 스크랩한다. 이를 Html Parser에서 Html 소스를 well-formed 문서로 변환 후 파싱, ParseTree 형식으로 객체에 바인딩 한다. 이후 소스에 대한 수정과 Ajax 기능에 대한 추가 작업이 끝나면, 작업 히스토리에 대한 정보를 바탕으로 Web Service Configuration Module에서 Xml Parser와 Xml Generator로 웹 서비스를 위한 설정을 한다.

최종적으로 Struts Handle에서 web.xml, struts-config.xml, java, jsp 등의 파일을 생성한다. Web 2.0 Extension Module은 이 같은 부분을 바탕으로 웹2.0 기술인 Ajax에 대한 구현을 하며 javascript, java, html을 생성하는 역할을 한다. 사용자 인터페이스는 이클립스 플러그인 형태로 구현하였다. 이제 최종 작업이 완료된 후 서비스가 어떤 형태로 운영되는지 보자.


Struts MVC

웹 프로젝트에서 사용하는 MVC는 크게 Struts와 Spring로 나뉜다. 여기서는 대부분의 시스템에서 사용하는 Struts를 사용한다. Struts는 Java Servlet, Java Server Pages, Java Beans, Resource Bundle 그리고 Extended Markup Language(XML)처럼 표준 기술에 기반 한 오픈소스 프레임워크이다. Struts는 아파치 소프트웨어 재단이 지원하는 자카르타 프로젝트의 일부이며 Struts의 공식 홈페이지는 http://jakarta.apache.org/struts이다.


서비스 구조의 설계

먼저 Controller와 View, Model의 경우 MVC의 구조로 코드가 생성된 부분이고 Ajax Module은 Ajax 기능에 대해 코드가 생성된 부분이다. 최초 사용자의 페이지 요청이 있을 때 Cont roller에서 그 요청을 받아 Model 부분에 적합한 페이지를 요구한다.

Model 부분은 기존 페이지를 스크랩하여 View 부분으로 업데이트해 사용자 요청에 응답한다. 만약 비동기적인 요청인 경우엔 Ajax Module에서 처리하여 응답하는 서비스 구조를 갖는다. 이 방식은 웹2.0 도입이 적합하지 않다고 판단되면 <그림 3>의 ‘1’에 대한 부분만 빼내면 기존의 서비스를 다시 가동할 수 있다는 이점이 있다. 기존 시스템을 데이터적 관점에서 관찰하고 구조적인 수정을 하지 않는 형태의 웹2.0 프로젝트 콘셉트와 관련된다.

사용자 삽입 이미지
<그림 3> 서비스 구조



작업 파일의 구성

전체 시스템 구조에서 알 수 있듯이 사용자 인터페이스는 이클립스 플러그인으로 작성되었다. 이클립스의 에디트뷰, 즉 에디트할 수 있는 창은 파일 확장자와 연관 관계가 있는 것으로 파일 확장자에 대한 에디트 방법의 정의가 필요하다. 여기선 새로운 작업 파일에 대한 구성이 필요한 만큼 잠깐 살펴보도록 하자. 마이그레이션 작업을 위한 파일 포맷은 XML 형식을 따른다. 파일 포맷을 구성하는데 고려된 사항은 다음과 같다.

- 현재 작업 상태와 작업 편의성을 위한 작업 히스토리를 저장할 수 있어야 한다.
- 웹 서비스를 위한 각종 맵핑 정보와 스크랩을 위한 정보들을 보관해야 한다.

이를 바탕으로 구성한 스키마는 <리스트 1>과 같다.

사용자 삽입 이미지


<리스트 1>은 전체적인 작업 파일의 스키마 구성이다. 스키마는 크게 세 부분으로 분류할 수 있으며, 각 요소는 init, recently-html, histories 등이다.

사용자 삽입 이미지


<리스트 2>의 init 부분은 url-pattern, scrap-path, scrap-html 등으로 나눠진다. url-pattern은 서비스시 맵핑에 대한 정보를, scrap-path는 서비스시 스크랩할 주소, scrap-html은 작업을 위한 파일 생성시 스크랩된 html 정보를 포함한다. recen tly-html 부분은 연속적인 작업을 위한 최근 작업의 html 소스 부분을 담는다. histories 부분은 history라는 요소를 하부 항목으로 갖는다. 관련 스키마는 <리스트 3>과 같다.

사용자 삽입 이미지


<리스트 3>은 extension과 operations를 하부 항목으로 갖는다. extension의 경우 Ajax 기능, 즉 웹2.0 기술에 필요한 정보를 담고, operations는 html 소스의 수정에 대한 정보를 담는다. 작업 파일에 대한 파싱과 코드 생성은 스키마에 따라 XmlBeans를 사용하여 기본 라이브러리를 생성했고, 이를 토대로 작업 파일을 처리하는 부분을 작성하였다.


기본 라이브러리의 구현
Scraper(Screen Scraping의 구현)

> ● HttpClient 라이브러리의 사용

Scraper는 언어 독립적인(JSP, ASP, PHP 등에 독립적인) 구현을 위해 필요한 기술이다. Scraper는 또 웹 서비스시 사용자에 대한 요청을 기존 웹 서버로 보내 스크랩할 수 있는 형태로 구현돼야 한다. 그래서 선택한 것이 HttpClient 라이브러리이다. Http 프로토콜의 기본적인 메소드인 Post와 Get에 대한 서버측에 전송이 가능한 라이브러리이다.


HttpClient
HttpClient는 자카르타의 오픈소스 프로젝트로 진행되는 Http 프로토콜 메소드에 대한 부분을 자바로 구현한 것이다. GET, POST, PUSH 등 모든 Http 프로토콜에 대한 메소드가 정의되어 있어 Screen Scraping 기술 구현시 적합하다 (http://jakarta.apache.org/httpcomponents /index.html 참고).


● Scraper의 구현

사용자 삽입 이미지


<리스트 4>는 get 방식에 대한 Http 메소드의 구현 부분이다. 서비스 구조의 구현, 즉 서비스시 기존 웹에서 페이지를 스크랩할 때 쓰일 라이브러리 역시 동일한 방식으로 구현한다. 이에 대한 것은 Default Servlet의 구현 항목에서 자세히 알아보자.


Html Processing Handle의 구현

● ParseTree의 구현

ParseTree는 Html 파싱과 생성시 필요한 도큐먼트를 오브젝트에 트리구조로 바인딩하기 위한 부분이다. ParseTree는 크게 사용자에 보이는 인터페이스 구현 부분과 감춰진 내부 구현에 사용된다. 사용자 인터페이스는 사용자에게 직접적으로 영향을 미치므로 사용자 편의성이 우선시 된다. 소스 뷰, 트리 뷰, 브라우저 뷰 등 작업 환경 관련 노드에 대한 비주얼적인 어시스트/어프로치 구현은 물론 Ajax 기능 삽입시 Html 소스에 구조적 접근으로 요소요소를 핸들링하고 처리할 때 쓰인다.

사용자 삽입 이미지


<리스트 5>의 absolutePosition 메소드는 트리 인덱스를 인자로 노드에 한 번에 접근하기 위한 것으로 정확한 노드의 인덱스를 알고 있을 때 사용성이 증가한다. 즉 사용자의 노드 선택시 활용성이 크다. toList 메소드는 트리 구조를 순차적으로 액세스할 수 있다. 각 노드가 포함된 범위내의 하부 노드를 가져올 때 사용성이 증가한다. toList 메소드는 비지터 패턴으로 구현하였다. <리스트 5>의 visit 메소드가 비지터를 받아들이는 역할을 하며, 비지터는 각 노드가 된다.


● Html Parser의 구현

Html은 기본적으로 well-formed 형식의 문서가 아니다. 때문에 파싱시 well-formed 문서 형태로 변환하는 과정이 요구된다. SAX 파서를 기본으로 구현하였다. 또한, 각 웹 서비스를 위한 언어에서 동적으로 Front-End Html 소스가 변하는 부분에서의 필터링이 필요하다(<리스트 6> 참조).

사용자 삽입 이미지


● Html Generator의 구현

Html Generator는 Html Processing Handle에 포함되며, 기본적으로 ParseTree를 도큐먼트로 생성하는 기능과 Html 소스 변경에 대한 히스토리 처리 등의 기능을 한다.


Web Service Configuration Module

WebConfigParser와 WebConfigGenerator를 이용하여 web.xml에 각종 맵핑 정보(servlet-mapping/taglib 등)를 추가/삭제한다. WebConfigParser와 Generator는 web.xml의 스키마 문서를 XmlBeans를 사용하여 라이브러리를 생성, 오브젝트에 바인딩한다. XmlBeans는 내부적으로 SJSXP(StAX)를 사용하여 파싱을 한다.


Sun Java Streaming XML Parser(SJSXP : StAX)
XML 문서에 대한 파서는 크게 SAX, DOM, SJSXP 등 세 가지로 구분된다. SAX는 이벤트 기반의 API로 일반적으로 개발자가 파서와 몇 개의 리스너를 등록하고, XML 문서의 요소나 속성이 도착되면 리스너의 메소드가 호출된다. DOM은 반대로 전체 문서를 읽어 트리를 생성한다. 그러니 개발자는 트리 생성이 완료된 후 트리에 접근하여 처리할 수 있다. SAX나 DOM과 달리 SJSXP는 스트리밍 방식의 XML 문서의 처리가 가능하다. 개발자가 XML 문서의 요소나 속성에 능동적으로 처리가 가능함을 의미한다.


● WebConfigGenerator

웹 서버 톰캣의 구동에 대한 기본적 설정 파일인 web.xml 파일을 파싱하여 매핑된 정보의 getter와 setter를 구현하고 web.xml 파일에 정보를 추가/삭제/생성하는 기능을 구현한다. 또한 Request Filter와 Default Servlet에 대한 url-pattern 맵핑을 한다(<리스트 7> 참조).

사용자 삽입 이미지


StrutsHandle의 구현

Web Service Configuration Handle을 기반으로 기본적인 맵핑을 하며, struts-config.xml의 action-mapping과 data-source 설정, Servlet, JSP 등의 서비스가 가능한 파일 등을 생성하는 기능을 구현했다. Struts Handle의 경우 여러 파일을 생성하기 때문에 이에 대한 generate-map을 구성하여 각 파일에 대해 독립적으로 구현하였다. XmlBeans는 Xml 스키마 파일인 XSD 파일 기반으로 라이브러리를 생성한다. 그런데 Struts에 대한 설정 파일인 struts-config.xml의 스키마는 DTD 파일이다. 때문에 DTD 파일을 XSD 파일로 변환하는 작업이 필요하다. 스키마 문서를 변환할 수 있는 프로그램을 사용하여 변환하였다. 그리고 web.xml 경우 XSD 파일이 필요하다. 썬마이크로시스템즈 홈페이지에서 web-app_2_4.xsd, jsp_2_0.xsd, j2ee_1_4.xsd, j2ee_w eb_services_client_1_1.xsd 등의 여러 파일을 다운로드할 수 있다.

사용자 삽입 이미지


<리스트 8>은 generate-map에 대한 스키마이다. generate-map은 크게 Java 파일에 대한 부분과 JSP 파일 부분으로 나눠 정의하였다. 기본적인 파일 이름 및 확장자 부분과 import, path, JSP의 contentType의 정의를 볼 수 있다. Struts를 적용, 서비스하기 위해 다음의 세 가지 파일로 나눠 생성하였다.


● Action

애플리케이션의 모든 Action은 Struts의 org.apache.struts. action.Action을 확장한다. 이 Action 클래스는 애플리케이션의 Model 레이어 인터페이스를 제공하면서 비즈니스 로직 주변의 래퍼로 작동한다. Action 클래스는 각각의 구현을 perform 메소드에 정의한다. perform 메소드는 ActionForward의 값을 리턴하며, ActionForward의 값은 strust-config.xml 주소로 맵핑된다. 최초 사용자의 요청은 Action으로 들어오며, forwardedPage를 사용자에게 넘겨주게 된다.


● forwardedPage(JSP)

Action의 ActionForward의 값, 즉 맵핑된 주소에 해당하는 JSP 페이지 관련 부분이다. 사용자에게 직접적으로 보이는 뷰로 특히 이 부분에서 Scraper로 기존 시스템의 페이지를 스크랩하며, 스크랩한 정보의 수정 사항(줄 단위의 삽입/삭제에 대한 오퍼레이션)을 포함하여 처리한다. 수정 정보, 즉 코드의 삽입/삭제에 대한 부분은 작업시 HtmlHandle에서 생성하는데 다음 항목에서 살펴보도록 하자.


● FrontEndPage

FrontEndPage는 Struts와는 관련이 적다. Struts의 경우 주소에 일반적으로 ‘.do’로 web.xml에 맵핑하여 사용한다. 이러한 부분을 그대로 사용하면, 마이그레이션된 페이지의 링크가 바뀜으로 해서 기존 페이지를 수정해야 하는 번거로움이 있다. Front EndPage는 이를 해결하기 위한 파일이다. FrontEndPage를 생성함으로써 기존의 페이지 링크에 맞게 맵핑하고, 링크가 바뀌는 것을 막을 수 있다.



HtmlHandle의 구현

사용자 삽입 이미지

<리스트 9>는 HtmlHandle의 구현 부분이다. HtmlHandle은 크게 두 가지 역할을 하는데 한 가지는 수정 전, 후의 코드에 대해 삽입/삭제된 줄 정보를 알아내고 저장한다. 다른 하나는 이 정보를 이용하여 수정 전의 소스를 수정 후의 소스로 변경하는 역할이다. <리스트 9>는 수정된 부분에 대한 코드로 프로젝트 초기에는 이 부분의 설계에서 Html 소스의 골격이 서버에서 동적으로 변화하는 부분을 수용하려고 ParseTree의 노드를 비교, 노드 단위로 바뀐 부분을 잡아 연산하도록 했다. 하지만 이는 정확히 변경된 부분을 집어내기엔 다소 버겁다. 그래서 앞에서 설명한 줄 단위 비교로 바뀐 부분을 잡아내고, 이에 대한 소스 생성을 할 수 있도록 변경하였다.


Request Filter의 구현

웹 서비스시 사용자의 페이지 요청이 마이그레이션된 서버에 있는지, 기존 웹 서버에 있는지를 판단한다. 기존 웹의 정보라고 판단되면 Default Servlet으로 포워딩하여 처리하도록 했다.

사용자 삽입 이미지


<리스트 10>은 로컬상의 web.xml 파일에 맵핑된 페이지 정보와 로컬상의 페이지 이외의 이미지나 기타 파일이 존재하는지에 대한 검증 작업을 보여준다. <리스트 10>과 같이 작은 String 연산으로 맵핑 정보를 판단하는 코드로 구현한 이유는 웹 서버인 톰캣이 정확한 맵핑 정보를 얻을 수 없었기 때문이다. Request Filter는 전처리와 후처리를 가능하도록 Sevlet Filter로 구현하였다.


Default Servlet의 구현

web.xml에 맵핑되어 있는 페이지 이외의 페이지를 스크랩하여 사용자에게 보내주는 역할이다. Post, Get 등의 Http 메소드를 포함하는 Request를 구현하여 기존 웹 페이지가 사용자의 요청에 응할 수 있도록 하였다. web.xml에 url-pattern이 ‘/’ 로 맵핑된다.

<리스트 11>은 사용자 요청에서 Post 및 Get 메소드에 대한 판단을 하며, 응답 부분은 Scraper의 구현과 동일하다. 각 사이트별 사용 언어의 인코딩이 다르기 때문에 이에 대한 처리가 필요한데 모든 부분을 ‘utf-8’을 기준으로 변환하여 처리하였다. ‘utf-8’을 기준으로 변환한 것은 인코딩 문제가 Html에 대해 한정된 것이 아닌 Xml 파싱에서도 나타났기 때문이다. Xml 파싱의 경우 ‘utf-8’에 안정적으로 처리가 가능하다. 다음 시간에는 웹2.0 기술 확장과 Ajax 기본 기능의 구현, 이크립스 플러그인을 기반으로 사용자 편의성 향상에 대해 알아본다.


리스트 11> Default Servlet의 구현


참고 자료
1.Java 디자인 패턴 입문
2.프로그래머를 위한 서블릿 / JSP
3.http://kr.sun.com/developers/techtips/e2005_0222.html#2
4.http://struts.linuxstudy.pe.kr/
5.http://network.hanbitbook.co.kr/view.php?bi_id=1141 Web 2.0이란 무엇인가
6.http://network.hanbitbook.co.kr/view.php?bi_id=1148
7.http://network.hanbitbook.co.kr/view.php?bi_id=1152 8.http://www-12
8.ibm.com/developerworks/kr/library/j-sr2.html 필수 자바 라이브러리 - 출처 : IBM


제공 : DB포탈사이트 DBguide.net
"Java" 카테고리의 다른 글
  • Java DOM Tutorial (0)2008/03/21
  • Java Swing을 이용해서 제작한 마방진 (3)2007/10/13
  • 웹2.0(Ajax)과 아키텍처의 구현 (0)2007/05/18
  • 리팩토링을 이용한 자바 성능 최적화 기법 (0)2007/05/18
  • 유연한 참조로 메모리 누수 막기 (0)2007/05/18
2007/05/18 11:53 2007/05/18 11:53
Posted by webdizen
Tags Ajax, 마이그레이션, 아키텍처, 웹 2.0, 프레임 워크
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2999

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 유혹
  • Scanning
  • 전자제품
  • 전쟁
  • Standard
  • Portable Executable File Format
  • FastCGI
  • Silverlight
  • Override
  • Serialize
  • 로그
  • 캐시 적종
  • Data Warehouse
  • 에너지 버스
  • 지식탐사
  • 나래관
  • Thread 종료
  • WHAT-WHY-HOW
  • DNS
  • 암호화

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.