71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션...

31
56_DBA : 데이터 웨어하우징 Oracle GoldenGate로 실시간 데이터 통합 71_이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 만들기

Upload: others

Post on 13-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

56_DBA : 데이터 웨어하우징 Oracle GoldenGate로 실시간 데이터 통합

71_이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 만들기

Page 2: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 56

Oracle GoldenGate

Oracle GoldenGate는 다양한 엔터프라이즈 시스템 사이에 트랜잭션 데이터를

고속으로 복제하고 통합하기 위해 사용되는 배포가 용이한 최신 제품이다. 또한

서로 다른 Oracle Database 버전이나 서로 다른 하드웨어 플랫폼을 포함한 동종

시스템과 이기종 시스템 사이 및 Oracle Database와 오라클 이외의 데이터베이

스(Microsoft SQL Server, 오픈 시스템과 z/OS용 IBM DB2, Sybase 등) 사이에

데이터를 이동하는 유연성을 제공한다.

이 기사는 Oracle Database 10g와 11g 사이에 밀접한 데이터 복제를 쉽게 달성

하도록 본 제품을 설치, 설정 및 구성할 수 있는 방법을 선보이며 본 제품의 뛰어난

성능에 대해서도 소개한다.

2009년에 오라클이 인수한 Oracle GoldenGate는 광범위한 산업에 걸쳐 전 세계

에 4,000여 건 이상의 솔루션 구현 실적을 나타냈다. 소프트웨어로 실시간 로그 기

반 변경 데이터 캡처(CDC)를 수행하고 이기종 데이터베이스 사이에 방대한 분량

의 트랜잭션 데이터를 복제할 수 있으며 복제 시간(Latency)가 극히 짧고 설치가

매우 간단한 것이 특징이다.

일반적으로 GoldenGate 캡처(Capture, Extract), 데이터 펌프(Data Pump) 및

전송(Delivery, Replicat) 프로세스를 설치하게 되고, 다양한 운영 체제와 데이터

베이스에서 사용할 수 있다. 대상 데이터베이스의 요구 사항에 따라 모든 데이터

또는 일부 데이터를 복제할 수 있다. Oracle Database용 Oracle GoldenGate의

경우 DML(데이터 조작 언어) 및 DDL(데이터 정의 언어) 연산을 복제할 수 있다.

(현재 DDL 연산은 유사한 오라클 버전 사이에서만 복제가 가능하며 서로 다른 오

라클 버전 사이의 복제는 불가능하다.)

Oracle GoldenGate는 공식적으로 Oracle 9i 릴리스 2에서 Oracle Database

11g 릴리스 2까지 지원하며 이 버전들에 대해서는 모두 DML/DDL 지원이 제공된

다. 본 제품은 Oracle Database의 Enterprise Edition과 Standard Edition에서

모두 작동한다.

앞서 언급했듯이 지원되는 Oracle Database의 유사 버전 또는 서로 다른 버전

사이 및 Oracle Database와 오라클 이외의 데이터베이스 사이에 데이터 이동이

가능하다. 대부분의 경우 데이터의 필터링, 매핑 및 변환이 가능하다. 참고로 DDL

지원을 사용 중인 경우에는 데이터 필터링, 매핑 및 변환이 지원되지 않는다(다시

말해서 GoldenGate를 유사한 Oracle Database 버전 사이의 DDL 복제에 사용

중인 경우).

Oracle GoldenGate는 데이터베이스와 관련성이 높은 제품이므로 데이터베이스

관리자들은 사용 방법을 아주 쉽게 습득 가능하다. 구현 시간도 매우 적다.(일부

업체의 경우에는 1개월 이내에 100% 가동에 이르렀다.)

제품 구성

Oracle GoldenGate 제품군에는 다음 항목이 포함되어 있다.

• Oracle GoldenGate

• Oracle GoldenGate용 관리 팩(일명 Oracle GoldenGate Director)

• Oracle GoldenGate Veridata

• Oracle GoldenGate 애플리케이션 어댑터

• 메인프레임용 Oracle GoldenGate

고객들에게 높은 부가가치를 제공하기 위해 Oracle GoldenGate 코어 라이

선스에는 Oracle Active Data Guard에 대한 전체 사용 라이선스와 Oracle

Database의 XStream에 대한 전체 사용 라이선스가 포함되어 있다. XStream

은 Oracle Streams에 대한 API이다. Oracle Active Data Guard를 사용하면

트랜잭션 로그(Redo Log)가 운영 데이터베이스에 쓰이고 있는 중간에도 대기

(Standby) 데이터베이스를 조회용으로 바로 사용할 수 있다. 이것은 운영 데이터

베이스에서 발생하는 리포팅과 조회 작업을 대기(Standby) 데이터베이스에서 별

도로 실행시킬 수 있는 탁월한 기능이다.

DBA : 데이터 웨어하우징Oracle GoldenGate로 실시간 데이터 통합

� 저자 - Porus Homi Havewala � 감수 - 정명훈 부장, 한국오라클 퓨전미들웨어 사업부([email protected])

Oracle Database 10g와 11g 사이에 밀접한 데이터 복제를 쉽게 달성하도록 Oracle GoldenGate를 설치, 설정 및 구성하는 방법을 배워보자.

Page 3: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

57 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

전통적으로 Oracle Streams는 Oracle Database 사이에만 데이터를 복제하는

데 사용되어 왔다. Oracle GoldenGate는 오라클 이외의 데이터베이스 사이의 데

이터 복제를 제공하며 설정하기가 쉽다.

이미 발행된 <Oracle - GoldenGate 제품 전략 보고서>에서 우리가 천명했던 말

을 상기하고자 한다. “Oracle GoldenGate의 전략적 성격을 감안할 때 Oracle

Streams는 계속 지원하되 적극적으로 향상시키지는 않을 것이다. 그 대신에

Oracle Streams의 가장 좋은 요소를 Oracle GoldenGate에 포함하는 방법을

평가할 계획이다.”

이 데모의 목적

이 데모를 위해서 Microsoft Windows 서버 한 대에 데이터베이스 3개 HRPRD1,

HRPRD2 및 HRPRD3를 설치해야 한다. 데이터베이스 버전은 각각 Oracle

Database 11g Oracle Database10g 및 Oracle Database 10g이다.

이들 세 데이터베이스의 SYS 및 SYSTEM 암호는 시험 목적을 위해 hrpassword1

로 설정되었으며, 이 암호는 나중에 변경할 수 있다.

이 데모의 목적은 두 Oracle 10g 데이터베이스 HRPRD2 및 HRPRD3의 HR.

EMPLOYEES 테이블 사이에 단방향 복제를 설정하는 것이다. 첫 번째 데이터베

이스의 테이블에서 발생한 모든 DML 변경사항을 두 번째 데이터베이스로 옮겨야

한다. 이것은 나중에 Oracle 11g 데이터베이스 HRPRD1에도 동시에 복제를 하는

것으로 기능이 추가된다. 따라서 HRPRD2의 테이블에서 업데이트, 삽입 또는 삭

제되는 모든 내용은 HRPRD1뿐만 아니라 HRPRD3에서도 업데이트된다.

Oracle Database 10g에서 Oracle Database 10g로 복제한 다음 Oracle

Database 11g로 복제하는 이 전략은 업그레이드 시에 자주 사용되며, 이 경우 업

데이트된 데이터베이스 버전으로 전환하기 전에 데이터를 복제해야 한다. 바로 이

러한 경우에 Oracle GoldenGate가 손쉬운 해결 방법을 제공한다.

참고로 Oracle Database의 경우 Microsoft ODBC 데이터 소스 관리자를 사용

하는 데이터베이스를 위해 데이터 소스 이름(DSN)을 만들 필요가 없다. Oracle

GoldenGate 복제는 리스너를 사용하여 Oracle Database에 직접 연결한다.

다운로드할 내용

먼저 Windows 시스템의 경우에는 Microsoft 다운로드 센터에서 Microsoft

Visual C ++ 2005 SP1 재배포 가능 패키지를 다운로드하여 설치해야 한다. 이 패

키지는 컴퓨터에 아직 Visual C++가 설치되지 않은 경우 애플리케이션을 실행하

는 데 필요한 Visual C++ 라이브러리의 런타임 구성요소를 설치하기 위해 사용된

다.

다음에는 Oracle Technology Network에서 Oracle GoldenGate 소프트웨어

를 다운로드해야 한다. Windows 플랫폼의 경우, OTN에서는 이 글을 쓸 당시에

DBA : 데이터 웨어하우징Oracle GoldenGate로 실시간 데이터 통합

� 저자 - Porus Homi Havewala � 감수 - 정명훈 부장, 한국오라클 퓨전미들웨어 사업부([email protected])

현재 Windows 2000, XP 및 2003(8MB)용 64비트 버전, 즉 Oracle 10g 64비트

용 Oracle GoldenGate v10.4.0.x만을 제공한다. 32비트 Windows 버전을 다운

로드하려면 Oracle E-Delivery사이트를 사용해야 한다. (참고로 E-Delivery 다

운로드는 OTN 개발자 라이선스가 아닌 30일 시험판 라이선스를 제공한다.) 이 사

이트에서 로그인한 다음 Microsoft Windows(32비트) 플랫폼의 경우 검색창에

“Oracle Fusion Middleware Product Pack”(Oracle GoldenGate는 Oracle

Database 제품이 아닌 Oracle Fusion Middleware 제품으로 간주되기 때문)을

입력하고 Go를 클릭한다.

미디어 팩의 목록이 나타난다. 이 목록에서 먼저 Oracle GoldenGate on Oracle

Media Pack for Microsoft Windows (32-bit)를 선택한다.

이 미디어 팩에는 아래와 같은 구성요소들이 있다.

Oracle GoldenGate for Oracle 11g뿐만 아니라 Oracle GoldenGate for

Oracle 10g도 필요하므로 zip 파일 3개를 모두 다운로드한다. 이후 Oracle Fusion

Middleware용 미디어 팩 목록으로 돌아가서 Management Pack for Oracle

GoldenGate (v2.0.0.2) Media Pack for Microsoft Windows를 선택한다.

ManagementPack의 미디어 팩에는 아래와 같은 구성요소들이 있다.

Management Pack을 설치하려는 경우 이 구성요소들도 모두 다운로드한다.

Management Pack은 Windows 서버에 설치되는 독립형 제품이다. 제품의 원

래 이름은 Oracle GoldenGate Director이며 이 제품은 Oracle GoldenGate 환

경을 쉽게 모니터링 및 관리할 수 있게 해주는 Multi-tier 클라이언트-서버 애플리

케이션으로 구성되어 있다.

Oracle GoldenGate Director의 GUI 인터페이스를 사용하면 중앙에서 Oracle

GoldenGate를 설계 및 구성할 수 있으며 서버 간 데이터를 복제하도록 설정된 여

러 Oracle GoldenGate 프로세스들을 관리 및 모니터링 하는 것도 가능하다.

미디어 팩의 주 목록에는 Microsoft Windows용 Oracle GoldenGate Veridata

미디어 팩 등과 같은 다른 미디어 팩도 포함되어 있다. Oracle GoldenGate

Veridata는 서로 다른 플랫폼에 Agent를 설치하여 실시간 데이터 비교를 통해 두

데이터베이스의 동기화(일치) 여부를 다운타임 없이 판단할 수 있다. 이 비교 작

<표 1>

Windows용 Oracle GoldenGate Director V2.0.0.x Server

Windows용 Oracle GoldenGate Director V2.0.0.x Client

Oracle GoldenGate Director 문서

228MB

55MB

952KB

V18127-01

V18128-01

V18129-01

<표 2>

8.4MB

8.4MB

20MB

V18162-01

V18164-01

V18423-01

Windows 2000, XP 및 2003용

Oracle GoldenGate V10.4.0.x for Oracle 10g

Windows 2000, XP 및 2003용

Oracle GoldenGate V10.4.0.x for Oracle 11g

Oracle GoldenGate 문서

Page 4: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 58

업은 24*7 언제나 수행할 수 있으며 대량 데이터 복제와 동시에 실행할 수도 있다.

또한 서로 다른 플랫폼 간의 데이터 비교도 가능하다.

전술한 주 미디어 팩 외에 다른 Oracle GoldenGate 팩도 목록에 표시된다. 이

러한 팩은 Sybase, SQL Server, IBM DB2, Teradata 및 JMS와 플랫 파일

등 오라클 이외의 데이터베이스를 위한 것으로서 이 기종을 지원하는 Oracle

GoldenGate의 특징을 잘 보여준다.

설치 단계

다운로드한 Oracle GoldenGate 문서 zip 파일(V18423-01.zip)에는 Linux, UNIX

및 Windows용 Oracle GoldenGate for Oracle Database의 설치 단계를 설

명하는 Oracle GoldenGate Oracle Installation and Setup Guide Version

10.4(Oracle GoldenGate 설치 및 설정 가이드) 버전 10.4(gg_ora_inst_v104.

pdf)가 들어있다. 참고로 Sybase, SQL Server, DB2, MySQL, Teradata용

Oracle GoldenGate의 설치 문서도 있다.

먼저 Oracle GoldenGate for Oracle 10g 압축 파일 V18162-01.zip을 새로운

Oracle GoldenGate 소프트웨어 설치 디렉터리(디렉터리 이름에 공백 없이)에 푼

다. 예를 들어 Oracle GoldenGate 디렉터리로 C:\OGG10G를 사용할 수 있다. 이

디렉터리의 소프트웨어 코드는 첫 번째와 두 번째 Oracle 10g 데이터베이스 사이

의 복제를 설정하기 위해 사용된다.

세 번째 데이터베이스는 Oracle Database 11g 버전이므로 Oracle GoldenGate

for Oracle 11g의 압축 파일 V18164-01.zip을 풀어야 한다. 이 Oracle

GoldenGate 버전의 설치 위치는 C:\OGG11G 디렉터리를 사용해야 한다. 이 디렉

터리의 소프트웨어 코드는 세 번째 Oracle Database 11g 데이터베이스에 대한

복제를 제어하는 데 사용된다.

만약 원본 또는 대상 데이터베이스로 Oracle9i가 있다면 다른 버전의 Oracle

GoldenGate 코드가 필요하다. Oracle GoldenGate의 Oracle9i 버전은 이 오라

클 웹 사이트에서 다운로드할 수 없다. 이 버전이 필요하면 My Oracle Support

에서 서비스 요청(SR)을 올려야 한다.

명령 프롬프트에서 아래 단계를 따른다.

mkdir C:\OGG10G

cd C:\OGG10G

unzip c:\V18162-01.zip

mkdir C:\OGG11G

cd C:\OGG11G

unzip C:\V18164-01.zip

# start the 10gdatabasesifnotalreadystarted

net start OracleServiceHRPRD2

net start OracleServiceHRPRD3

# start the 11gdatabaseifnotalreadystarted

net start OracleServiceHRPRD1

환경 변수 설정

이제 명령창 두 개를 열고(시작 -> 실행 ->Cmd) ORACLE_HOME,ORACLE_SI

D,LD_LIBRARY_PATH등의 해당 환경 변수를 Oracle Database 10g 및 Oracle

Database 11g에 맞는 값으로 설정할 수 있다.

Oracle 10g 데이터베이스 사이의 복제를 설정하려면 환경 변수를 아래와 같이 설

정한다.

set ORACLE_HOME=C:\Oracle\product\10.2.0\db_1

set ORACLE_SID=HRPRD2

set PATH=%ORACLE_HOME%\bin;%PATH%

set LD_LIBRARY_PATH=C:\OGG10G; %ORACLE_HOME%\LIB;

%ORACLE_HOME%\jdbc\lib

set CLASSPATH=;C:\Program

Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib

ORACLE_SID는 HRPRD2 또는 HRPRD3(둘 다 Oracle 10g 데이터베이스 임)으

로 설정할 수 있다. PATH, LD_LIBRARY_PATH 및 CLASSPATH에 추가된 사

항에 주목한다. 다른 대안은 이러한 변경사항을 시스템 변수로 저장하는 것이다.

Windows XP Professional에서는 내 컴퓨터 � 속성 � 고급 � 환경변수 � 시

스템 변수를 사용하여 이 작업을 할 수 있다. 이 시스템 변수를 추가하고 경로를 위

에 지적한 대로 변경한다.

이 경우 서버 한 대에 두 가지 데이터베이스 버전을 설치하는 방법의 결점은

Oracle GoldenGate for Oracle 10g 또는 Oracle GoldenGate for Oracle 11g

용 Manager 서비스가 시작될 때마다 시스템 변수를 변경해야 한다는 것이다. 즉,

Oracle Database 11g에 속한 시스템 변수를 추가한 다음 Oracle GoldenGate

for Oracle 11g Manager서비스를 시작해야 한다. 그 후 시스템 변수를 Oracle

Database 10g에 필요한 것으로 변경한 다음 Oracle GoldenGate for Oracle

10g Manager 서비스를 시작해야 한다.

이 시스템은 테스트 시스템이므로 이 방법으로 수행해도 괜찮을 수 있다. 그러나

실무 환경에서는 스크립트 방식 등과 같은 더 자동화된 방법을 선택하여 변수를

Page 5: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

59 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

설정하고 이 스크립트 자체에서 Manager 서비스를 시작해야 한다.

GGSCI 명령 인터프리터

명령창 또는 내 컴퓨터 수준에서 환경 변수를 설정한 후 Oracle GoldenGate

폴더로 이동하고 명령 Oracle GoldenGate Command Interpreter for

Oracle(GGSCI) 프로그램을 명령줄(< 그림 1 > 참조) 또는 Windows 탐색기에

서 실행한다.

이제 GGSCI에서 CREATE SUBDIRS 명령을 내려 Oracle GoldenGate 작업 하

위 디렉터리를 만든다. <그림 2>에는 생성된 주요 디렉터리들이 열거돼 있다.

Oracle GoldenGate Manager를 로컬 프로그램으로 실행

Oracle GoldenGate Manager 서비스는 명령창에서 로컬 프로그램으로 실행

하거나 Windows가 시작될 때 자동으로 시작되는 Windows 서비스로 설치할

수 있는데, 후자를 권장한다.

로컬 명령으로 실행하려면 디렉터리에서 매개변수(Parameter) 파일을 사용하

여 Manager 실행 파일을 호출하면 된다. 구문은 다음과 같다.

C:\OGG10G>mgr

Usage: MGR PARAMFILE <param file> [REPORTFILE <report file>]

[PID <process id>] [PORT <port number>]

[USESUBDIRS] [NOUSESUBDIRS]

[PAUSEATEND] [NOPAUSEATEND]

[CD <directory>]

필수 매개변수는 PARAMFILE이다. 이를 위해 다음과 같이 GGSCI에 매개변수 파

일을 만들어야 한다.

GGSCI (HaviPori) 1> edit params mgr

위 명령을 실행하면 C:\OGG10G\dirprm 디렉터리에 새 mgr.prm 파일이 생성된다.

관리자 프로세스를 실행하는 데 사용되는 포트 번호를 입력하고 파일을 저장한다.

PORT 7809

기본 포트는 7809이다. 포트 번호를 선택하면 다른 프로그램과 충돌이 발생해서

는 안되며 방화벽에 제한도 없어야 한다. PORT는 Manager의 유일한 필수 매개

변수이므로 이 값은 반드시 지정해야 한다. 이 포트는 GGSCI가 Manager에게 프

로세스를 시작하라는 요청을 보낼 때 사용하며 Extract 프로세스도 여러 동작을

위해 이 포트를 사용한다. 매개변수 파일을 만든 후 Windows 명령 프롬프트에서

다음과 같이 Manager를 시작할 수 있다.

C:\OGG10G>mgr paramfile c:\OGG10G\dirprm\mgr.prm

위 명령을 실행하면 Manager가 시작되고 < 그림 3 >과 같은 메시지가 표시된다.

< 그림 1 > Oracle GoldenGate 명령 인터프리터

< 그림 2 > 작업 하위 디렉터리 만들기

< 그림 3 > Windows 명령 프롬프트에서 관리자 시작하기

Page 6: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 60

Manager의 실행을 유지하려면 이 창을 계속 열어 두어야 한다. 로그아웃하면 창

이 닫히고 Manager가 정지한다.

Manager를 Windows 서비스로 설치

앞에서 설명한 것처럼 Manager를 시작하는 또 다른 방법은 Manager를

Windows 서비스로 등록하는 것이다. Windows 클러스터의 경우에는 Windows

서비스만이 자동으로 Passive 서버로 Failover 될 수 있기 때문에 반드시 이 방

법을 사용해야 한다. 클러스터가 아닌 시스템에서는 Manager를 반드시 서비

스로 실행할 필요는 없지만 적극 권장한다. Windows에서 Manager 프로세스

가 서비스로 생성될 때 기본 이름은 GGSMGR이다. 이 이름은 변경 가능하다. 동

일한 서버에 Oracle GoldenGate Manager 서비스가 두 개 이상(예: Oracle

GoldenGate for Oracle 10g에 대한 서비스와 Oracle GoldenGate for Oracle

11g에 대한 서비스) 필요한 경우에는 사용자 정의 이름을 지정하는 것이 필요하다.

또한 Oracle GoldenGate Veridata를 실행하려는 경우에도 별도의 Manager 서

비스가 필요하다. Manager 서비스에 다른 이름을 지정하는 방법은 다음과 같다.

GGSCI 명령 프롬프트에서 다음 명령을 내린다.

EDIT PARAMS ./GLOBALS

이때 나타나는 메모장 편집기에서 새 파일 만들기를 선택하고(이 과정을 처음 수

행하는 경우) 다음 줄을 입력한 다음 GLOBALS 파일을 저장한다.

MGRSERVNAME OracleGGSMGR1

OracleDBConsole<instancename>, OracleJobScheduler<instancename>

등의 서비스와 같이 보통 Oracle이라는 접두어가 붙는 Windows용 Oracle 서비

스의 일반 규칙에 따라 이름 OracleGGSMGR1을 사용한다. Manager 서비스는

C:\OGG10G 디렉터리에서 Install 명령을 통해 쉽게 생성할 수 있다.

<그림 4>와 같이 Addservice 명령을 사용한다.

새 서비스가 Windows 서비스 목록에 자동 서비스로 나타난다(< 그림 5 > 참조).

Manager 서비스는 로컬 시스템 계정으로 실행하거나 Addservice 명령에서 지

정한 사용자 이름과 암호를 사용하여 특정 계정으로 실행할 수 있다. 이제 다음 명

령으로 Manager 서비스를 시작할 수 있다.

GGSCI (HaviPori) 1> start manager

Starting Manager as service ('OracleGGSMGR1')...

Service started.

Windows 이벤트 메시지 설치

이벤트 메시지를 Windows 이벤트 관리자가 표시할 수 있도록 install 명령을 사

용하여 Windows 레지스트리에 설치할 수도 있다. 다음 명령을 사용하면 된다.

C:\OGG10G>install addevents

Oracle GoldenGate messages installed successfully.

Install program terminated normally.

일반적 메시지가 아닌 구체적인 것이 생성되도록 하려면 category.dll과 ggsmsg.

dll 파일을 C:\OGG10G 디렉터리에서 C:\WINDOWS\system32 디렉터리로 복

사하면 된다.

복제 설정 - HRPRD2상의 Extract 프로세스

Oracle GoldenGate Manager프로세스가 작동하여 실행된다. 다음 단계는 데

이터베이스 사이에 복제를 설정하는 것이다. 이를 위해 최소한 한 개의 Extract 및

Replicat 그룹을 만들고 구성해야 한다. 이들 그룹에서 캡처해서 복제할 데이터를

지정한다. Extract 프로세스는 원본 데이터베이스에서 발생한 데이터 변경사항을

캡처하고 이것을 대상 서버에 있는 trail로 생성한다. Replicat 프로세스는 대상 < 그림 4 > 관리자 서비스 만들기

< 그림 5 > 관리자 서비스 속성

Page 7: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

61 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

서버에서 작동하고 있으며 trail에서 데이터 변경사항을 가져와 대상 데이터베이

스에 적용함으로써 실제 복제를 실행한다. 또한 데이터베이스의 Supplemental

Logging 기능을 켜서 Oracle GoldenGate 복제를 실행할 수 있도록 해야 한다.

이 작업은 데이터베이스에 SYSDBA로 로그온한 상태에서 다음 명령을 수행해야

한다.

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Database altered.

SQL> alter system switch logfile;

System altered

이제 Extract 그룹을 추가할 준비가 되었다.

GGSCI (HaviPori) 1> ADD EXTRACT emp_ext, TRANLOG, BEGIN NOW

EXTRACT added.

TRANLOG를 지정했는데, 이것은 트랜잭션(Redo) 로그가 데이터 원본임을 의

미한다. BEGIN 다음에는 처리를 시작할 로그의 타임 스탬프나, NOW 옵션을 주

어 즉시 시작한다는 것을 나타낼 수 있다. 또는 TRANLOG를 EXTSEQNO(시작할

Oracle Redo 로그의 시퀀스 번호)나 EXTRBA(해당 로그의 상대 바이트 주소) 옵

션과 함께 사용할 수 있다.

참고로 Extract 그룹의 이름에는 8문자만이 허용되는데, 다음을 지정하면 전체 도

움말을 볼 수 있다.

GGSCI (HaviPori) 1> help add extract

다음 단계는 RMTTRAIL 또는 EXTTRAIL을 추가하는 것이다. 전자는 원격 시스템

에 사용되며 후자는 동일한 로컬 시스템에서의 복제를 설정하는 경우에 권장된다.

다음 명령에 의해 생성되는 EXTTRAIL을 사용한다.

GGSCI (HaviPori) 1> ADD EXTTRAIL C:\OGG10G\dirdat\et, EXTRACT emp_ext

EXTTRAIL added.

EXTTRAIL은 서버의 물리적 디렉터리, 주로 Oracle GoldenGate 서브 디렉터리

중 하나인 dirdat에 지정된다. 실제 파일이 생성될 때 지정한 두 문자에 숫자 접미

어가 추가되어 파일 이름을 만들기 때문에, 지정된 파일 이름은 두 문자로만 지정

할 수 있다. 예를 들어 C:\OGG10G\dirdat\et000001 파일은 EXTRACT 프로세스

가 시작되어 데이터 변경이 일어날 때 압축이 풀린 파일로 생성된다.

RMTTRAIL의 구문도 마찬가지이며, 단지 이 명령을 사용할 때에는 단어 EXTT-

RAIL을 RMTTRAIL로 바꾸기만 하면 된다. 주요 차이점은 Extract의 매개변수 파

일에 있는데, 이 매개변수 파일은 다음 단계에서 생성된다. RMTTRAIL의 경우 매

개변수 파일에는 원격 호스트와 원격 관리자 포트 번호를 설명하는 추가 매개변수

가 포함되어 있다.

이제 다음과 같이 Extract 그룹 emp_ext에 대한 매개변수 파일을 만든다.

GGSCI (HaviPori) 1> EDIT PARAM emp_ext

이 파일에 다음 줄을 입력한다.

EXTRACT emp_ext

USERID system@localhost:1521/HRPRD2, PASSWORD hrpassword1

EXTTRAIL C:\OGG10G\dirdat\et

TABLE hr.employees;

위 명령은 첫 번째 Oracle 10g 데이터베이스(HRPRD2)에서 Extract 그룹이

HR.EMPLOYEES 테이블의 변경 사항을 추출하도록 지정한 것이다. RMTTRAIL

을 사용할 경우에는 위 명령을 다음과 같이 변경하면 된다.

RMTHOST <remote host>, MGRPORT <remote manager port number>

RMTTRAIL C:\<remote GoldenGate Directory>\dirdat\rt

이제 다음 명령을 사용하여 Extract 프로세스를 시작할 수 있다.

GGSCI (HaviPori) 1> START EXTRACT EMP_EXT

Sending START request to MANAGER ('OracleGGSMGR1') ...

EXTRACT EMP_EXT starting

프로세스에 관한 상태와 정보는 다음과 같이 확인할 수 있다.

GGSCI (HaviPori) 2> STATUS EXTRACT EMP_EXT

EXTRACT EMP_EXT: RUNNING

GGSCI (HaviPori) 3> INFO EXTRACT EMP_EXT

Page 8: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 62

EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:00 ago)

Log Read Checkpoint Oracle Redo Logs

2009-12-08 13:05:58 Seqno 11, RBA 578560

또한 프로세스에 관한 자세한 정보를 표시할 수도 있다.

GGSCI (HaviPori) 4> INFO EXTRACT EMP_EXT detail

EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:00 ago)

Log Read Checkpoint Oracle Redo Logs

2009-12-08 13:07:19 Seqno 11, RBA 596992

Target Extract Trails:

Remote Trail Name Seqno RBA Max MB

C:\OGG10G\dirprm\et 0 923 10

Extract Source Begin End

D:\ORADATA\HRPRD2\REDO01.LOG 2009-12-08 12:59 2009-12-08 13:07

Not Available * Initialized * 2009-12-08 12:59

Current directory C:\OGG10G

Report file C:\OGG10G\dirrpt\EMP_EXT.rpt

Parameter file C:\OGG10G\dirprm\EMP_EXT.prm

Checkpoint file C:\OGG10G\dirchk\EMP_EXT.cpe

Process file C:\OGG10G\dirpcs\EMP_EXT.pce

Error log C:\OGG10G \ggserr.log

Extract 문제 해결

오류가 있으면 Extract 프로세스가 STOPPED(정지됨)로 나타날 수 있다. 이 경

우 오류를 조사해야 한다. 먼저 위의 자세한 정보에서 언급한 보고서 파일 C:\

OGG10G\dirrpt\EMP_EXT.rpt를 확인한다. 그런 다음 주 C:\OGG10G 디렉터리

에 있는 로그 파일 ggserr.log 및 sqlnet.log에서 관련 메시지가 있는지 확인한다.

ggserr.log 파일에는 다음과 같은 이벤트 정보가 들어 있다.

2009-12-02 14:53:26 GGS INFO 301 Oracle GoldenGate

Manager for Oracle, mgr.prm: Command received from GGSCI on host

10.10.10.10 (START EXTRACT EMP_EXT ).

2009-12-02 14:53:26 GGS INFO 302 Oracle GoldenGate Manager for

Oracle, mgr.prm:

EXTRACT EMP_EXT starting.

이 이벤트는 다음과 같은 방법으로 확인할 수도 있다.

GGSCI (HaviPori) 1> VIEW GGSEVT

...

....

2009-12-02 15:09:34 GGS INFO 302 Oracle GoldenGate Manager for

Oracle,

mgr.prm: EXTRACT EMP_EXT starting.

2009-12-02 15:13:26 GGS INFO 399 Oracle GoldenGate Command

Interpreter

for Oracle: GGSCI command (HaviPoriH): EDIT PARAM emp_ext.

sqlnet.log 파일에 다음과 같은 오류가 나타날 수 있다.

TNS-12557: TNS:protocol adapter not loadable

이 오류는 데이터베이스 연결 문제를 표시해 주므로 리스너를 점검해야 한다. 시

작할 때 Path(경로)에 오라클 홈 bin 하위 디렉터리가 포함되어 있는지 확인한다.

다른 TNS 오류가 있을 수 있으며, 이 경우 다른 해결 방법이 표시될 수 있다.

EMP_EXT.rpt에 다음과 같은 오류가 표시될 수 있다.

2009-12-08 13:01:27 GGS ERROR 182 OCI Error beginning

session (status = 28009-ORA-28009: connection as SYS should be as

SYSDBA or SYSOPER).

2009-12-08 13:01:27 GGS ERROR 190 PROCESS ABENDING.

이것은 Extract 프로세스가 SYSDBA 없이 sys로 로그온하려 하고 있음을 나타낸

다. Extract에 대한 매개변수 파일의 Login을 'system'으로 변경하면 된다. 여기

서 Extract 매개변수 파일의 Login 줄 끝에 SYSDBA를 지정하는 방법은 통하지

않는다는 데 유의해야 한다(단, 다음에 보게 될 GGSCI의 DBLOGIN 명령에서는

이 방법이 가능함).

ggserr.log 파일에 유사한 오류가 나타날 수 있다.

Page 9: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

63 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

2009-12-03 00:43:16 GGS INFO 399 Oracle GoldenGate

Command Interpreter for Oracle: GGSCI command (HaviPoriH): start

manager.

2009-12-03 00:43:25 GGS ERROR 182 Oracle GoldenGate

Manager for Oracle, mgr.prm: OCI Error during OCIServerAttach

(status = 12154-ORA-12154: TNS:could not resolve the connect identifier

specified).

2009-12-03 00:43:25 GGS ERROR 190 Oracle GoldenGate

Manager for Oracle, mgr.prm: PROCESS ABENDING.

위의 오류는 Manager 매개변수 파일 mgr.prm에 제공한 로그인 자격 증명 문제

를 나타낸다. 따라서 Manager는 시작되지 않은 것이다. 있을 수 있는 또 다른 오

류는 Extract 보고서 파일에서 확인할 수 있다. 예를 들어 EMP_EXT.rpt에는 다음

오류가 있을 수 있다.

2009-12-07 16:40:08 GGS ERROR 190 No minimum supplemental

logging is enabled. This may cause extract process to handle key

update incorrectly if key column is not in first row piece.

2009-12-07 16:40:08 GGS ERROR 190 PROCESS ABENDING.

이 오류에 대한 해결 방법은 데이터베이스의 Supplemental Logging을 활성화

하는 것이다. 여기서는 이미 이 작업을 수행했으므로 오류가 나타나지 않는다.

HRPRD3에서 Replicat 프로세스 설정

이제 대상 데이터베이스 HRPRD3(이 경우 동일한 서버에 있음)로 이동한다.

역시 Oracle 10g 데이터베이스이므로 하위 디렉터리 C:\OGG10G의 동일한

Oracle GoldenGate for Oracle 10g 및 동일한 Manager 서비스를 사용할 수

있다. 데이터베이스가 다른 서버에 있는 경우 데이터베이스 버전에 맞는 Oracle

GoldenGate 소프트웨어를 설치한 다음 해당 서버에서 새 Manager 서비스

를 구성해야 한다. 첫 단계는 데이터베이스 명령을 내릴 수 있도록 GGSCI 에서

DBLOGIN을 사용하여 데이터베이스에 연결하는 것이다.

DBLOGIN이 다음과 같이 제대로 작동하는지 확인한다.

GGSCI (HaviPori) 1>

DBLOGIN USERID system@localhost:1521/HRPRD3 PASSWORD

hrpassword1

Successfully logged into database.

DBLOGIN에는 다른 두 개의 매개변수 SOURCEDB와 TARGETDB가 있다. 이 매

개변수들은 Oracle 이외의 데이터베이스만를 위한 것이다.

이제 복제 중인 Employees 테이블에 대한 Checkpoint 테이블을 추가해야 한다.

GGSCI (HaviPori) 2> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT

Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이 테이블에 저장된 Checkpoint는 Replicat 프로세스의 현재 읽기, 쓰기 위치를

가리킨다. 이 과정은 프로세스를 다시 시작해야 하는 경우 또는 서버에 오류가 있

거나 네트워크에 다른 방법으로 데이터 손실을 야기할 수 있는 일시적 장애가 있

는 경우 데이터 손실을 방지하기 위해 사용된다. 다른 장점은 Checkpoint를 사용

하여 동일한 trail을 복수의 Extract 또는 Replicat 프로세스에서 읽을 수 있다는

것이다.

Extract 및 Replicat 프로세스가 배치 모드로 실행될 때는 일반적으로 재시작을

하기 때문에 Checkpoint가 필요하지 않으며, 따라서 Checkpoint는 선택사항이

다. 그러나 Extract 및 Replicat 프로세스를 지속적으로 실행해야 하는 경우에는

Checkpoint가 필요하다. heckpoint는 보통 dirchk 하위 디렉터리에 파일로 유지

되고 있지만, Replicat의 경우에는 데이터베이스의 Checkpoint 테이블에 저장할

수 있다. 만약 GLOBALS 매개변수 파일에 Checkpoint 테이블을 지정하면 ADD

CHECKPOINT 명령에 별도로 지정할 필요는 없다. 다음과 같은 모습이 될 수 있다.

GGSCI (HaviPori) 3> ADD CHECKPOINTTABLE

No checkpoint table specified, using GLOBALS specification (hr.

employees_chkpt).

Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이제 다음과 같이 첫 번째 데이터베이스에서 Extract 그룹 설정에 사용했던 것과

같은 EXTTRAIL을 지정하여 Replicat 그룹을 추가할 수 있다. 그러면 Replicat 그

룹이 Extract 그룹에서 만든 trail에 정보를 기록하거나 해당 trail을 사용하게 된다.

GGSCI (HaviPori) 4> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\

dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,

REPLICAT added.

다음과 같이 매개변수 파일을 이 Replicat 그룹에 맞게 편집한다.

GGSCI (HaviPori) 5> EDIT PARAM emp_rep

Page 10: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 64

새 파일에 다음 내용을 입력한다.

REPLICAT emp_rep

USERID system@localhost:1521/HRPRD3, PASSWORD hrpassword1

ASSUMETARGETDEFS

MAP hr.employees, TARGET hr.employees;

이 테이블은 똑같은 DDL 구조를 가지고 있기 때문에 ASSUMETARGETDEFS 매

개변수를 사용한다.

이제 Replicat 그룹을 시작할 수 있다.

GGSCI (HaviPori) 6> start REPLICAT emp_rep

Sending START request to MANAGER ('GGSMGR') ...

REPLICAT EMP_REP starting

상태가 표시되려면 잠시 기다려야 하는데, 즉시 확인하려고 하면 상태가

'stopped(정지됨)'으로 나타날 수 있다. 상태가 'running(실행 중)'으로 표시되면

자세한 정보를 확인하고 info all 명령을 내려서 실행 중인 모든 프로세스를 표시

할 수 있다.

GGSCI (HaviPori) 7> status REPLICAT emp_rep

REPLICAT EMP_REP: STOPPED

GGSCI (HaviPori) 8> status REPLICAT emp_rep

REPLICAT EMP_REP: RUNNING

GGSCI (HaviPori) 11> info REPLICAT emp_rep detail

REPLICAT EMP_REP Last Started 2009-12-08 13:35 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:01 ago)

Log Read Checkpoint File C:\OGG10G\dirdat\et000001

2009-12-08 13:33:24.000000 RBA 985

Extract Source Begin End

C:\OGG10G\dirdat\et000001 2009-12-08 13:33 2009-12-08 13:33

C:\OGG10G\dirdat\et000000 * Initialized * 2009-12-08 13:33

Current directory C:\OGG10G

Report file C:\OGG10G\dirrpt\EMP_REP.rpt

Parameter file C:\OGG10G\dirprm\EMP_REP.prm

Checkpoint file C:\OGG10G\dirchk\EMP_REP.cpr

Checkpoint table HR.EMPLOYEES_CHKPT

Process file C:\OGG10G\dirpcs\EMP_REP.pcr

Error log C:\OGG10G\ggserr.log

GGSCI (HaviPori) 12> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING

EXTRACT RUNNING EMP_EXT 00:00:00 00:00:03

REPLICAT RUNNING EMP_REP 00:00:00 00:00:06

이제 두 개의 Oracle Database 10g 데이터베이스 HRPRD2와 HRPRD3 사이에

서 데이터 복제를 테스트할 수 있다. 그러나 테스트는 다음 단계에서 Oracle 11g

데이터베이스 HRPRD1에 대한 복제까지 설정하고 나서 해보기로 한다.

HRPRD1에서 Replicat 프로세스 설정

Oracle 11g 데이터베이스 HRPRD1도 같은 서버에 있다. 이 데이터베이스는 11g

버전이기 때문에 이 글의 시작 부분에서 압축을 풀어 C:\OGG11G 디렉터리에 저

장했던 Oracle GoldenGate for Oracle 11g를 사용해야 한다.

Oracle 11g 데이터베이스 홈에 대해 환경 변수를 다음과 같이 설정한다.

set ORACLE_HOME=C:\app\havipori\product\11.1.0\db_1

set ORACLE_SID=HRPRD1

set PATH=%ORACLE_HOME%\bin;%PATH%

set LD_LIBRARY_PATH=C:\OGG11G; %ORACLE_HOME%\LIB;

%ORACLE_HOME%\jdbc\lib

set CLASSPATH=;C:\Program Files\Java\jre6\lib\ext\QTJava.

zip;%ORACLE_HOME%\jdbc\lib

Oracle GoldenGate for Oracle 10g 설치와 유사한 단계에 따라 Oracle

GGSMGR2라는 Manager 서비스를 만들고 해당 서비스를 시작한다. 작업 하위

디렉터리와 mgr.prm 파일을 만든다. 이 단계는 아래와 같다.

C:\OGG11G>ggsci

GGSCI (HaviPori) 1> EDIT PARAMS ./GLOBALS

Page 11: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

65 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

이 파일에 MGRSERVNAME OracleGGSMGR2를 입력하고 파일을 저장한다.

C:\OGG11G>install addservice

Service 'OracleGGSMGR2' created.

Install program terminated normally.

GGSCI (HaviPori) 1>create subdirs

Creating subdirectories under current directory C:\OGG11G

Parameter files C:\OGG11G\dirprm: created

Report files C:\OGG11G\dirrpt: created

Checkpoint files C:\OGG11G\dirchk: created

Process status files C:\OGG11G\dirpcs: created

SQL script files C:\OGG11G\dirsql: created

Database definitions files C:\OGG11G\dirdef: created

Extract data files C:\OGG11G\dirdat: created

Temporary files C:\OGG11G\dirtmp: created

Veridata files C:\OGG11G\dirver: created

Veridata Lock files C:\OGG11G\dirver\lock: created

Veridata Out-Of-Sync files C:\OGG11G\dirver\oos: created

Veridata Out-Of-Sync XML files C:\OGG11G\dirver\oosxml: created

Veridata Parameter files C:\OGG11G\dirver\params: created

Veridata Report files C:\OGG11G\dirver\report: created

Veridata Status files C:\OGG11G\dirver\status: created

Veridata Trace files C:\OGG11G\dirver\trace: created

Stdout files C:\OGG11G\dirout: created

GGSCI (HaviPori) 2> EDIT PARAMS mgr

이 파일에 다음 줄을 입력하고 파일을 저장한다. 참고로 다른 포트 번호를 사용했

고 Manager는 이제 HRPRD1에 로그온한다는 것을 알 수 있다.

PORT 7810

USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1

이제 Manager를 시작할 수 있다. 다음 단계는 DBLOGIN을 사용하여 Oracle 11g

데이터베이스에 로그인한 다음 이 데이터베이스에 Checkpoint 테이블을 만드는

것이다.

GGSCI (HaviPori) 3> start manager

Starting Manager as service ('OracleGGSMGR2')...

Service started.

GGSCI (HaviPori) 4> DBLOGIN USERID system@localhost:1521/HRPRD1

PASSWORD hrpassword1

Successfully logged into database.

GGSCI (HaviPori) 5> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT

Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이제 이 데이터베이스 HRPRD1에 두 번째 Replicat 그룹을 만들 준비가 되었다.

참고로 앞서 HRPRD3 데이터베이스에서 사용한 것과 똑같은 trail을 사용한다. 이

렇게 해서 HRPRD2에서 오는 동일한 trail을 두 Replicat 그룹의 두 데이터베이스

HRPRD3과 HRPRD1에서 사용하고 있는데, 이 상황이 매우 인상적이다.

ADD REPLICAT 명령에 BEGIN NOW를 사용하지 않으면 Replicat 프로세스는

추적 기록의 시작 부분에서 바로 시작하는데, 그렇게 하면 된다.

GGSCI (HaviPori) 6> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\

dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,

REPLICAT added.

GGSCI (HaviPori) 7> EDIT PARAM emp_rep

이 파일에 다음 줄을 입력한다.

REPLICAT emp_rep

USERID system@localhost:1521/HRPRD1, PASSWORD hrpassword1

ASSUMETARGETDEFS

HANDLECOLLISIONS

DISCARDFILE c:\OGG11G\dirrpt\emp_ext.dsc, purge

MAP hr.employees, TARGET hr.employees;

Page 12: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 66

여기에는 HANDLECOLLISIONS 및 DISCARDFILE 등과 같은 매개변수가 지정

되어 있는데, 이것들은 테이블 내의 중복 같은 오류를 처리하기 위한 것이다. 이 매

개변수들을 여기서는 옵션으로 지정했지만 첫 번째 Replicat 그룹 매개변수 파일

에 저장할 수도 있다. HANDLECOLLISIONS는 원본 데이터베이스가 활성화되어

있는 동안 초기 데이터 로드에 대한 자동 오류 처리를 수행한다. 초기 로드가 완료

된 후에는 반드시 이 매개변수를 제거해야 한다. DISCARDFILE 매개변수는 오류

가 발생한 레코드에 대한 기록이 저장될 파일을 지정한다.

이제 Replicat 그룹을 시작하고 상태를 확인한다.

GGSCI (HaviPori) 8> start REPLICAT emp_rep

Sending START request to MANAGER ('GGSMGR2') ...

REPLICAT EMP_REP starting

GGSCI (HaviPori) 9> status REPLICAT emp_rep

REPLICAT EMP_REP: STOPPED

상태는 정지된 것(Stopped)으로 나타나지만 C:\OGG11G 디렉터리의 로그 파일

에는 오류가 나타나 있지 않다.

이때 오류를 표시하는 유일한 방법은 명령 프롬프트에서 Replicat를 실행하는 것

뿐이다. 이 방법은 디버깅 목적을 위한 것이다. 이 때 오류는 보고서 파일이 아닌

화면상에 나타난다. 이러한 오류는 우리가 사용하는 테스트 서버의 환경적인 문제

일 가능성이 크며 Oracle GoldenGate for Oracle 11g에서는 이 방법을 통해 문

제를 찾아낼 수 있다. 사용할 명령은 다음과 같다.

C:\OGG11G> replicat paramfile c:\OGG11G\dirprm\emp_rep.prm

*****************************************************************

******

Oracle GoldenGate Delivery for Oracle

Version 10.4.0.19 Build 002

Windows (optimized), Oracle 11 on Sep 18 2009 16:44:02

Copyright (C) 1995, 2009, Oracle and/or its affiliates. All rights reserved.

Starting at 2009-12-09 11:46:28

*****************************************************************

******

Operating System Version:

Microsoft Windows XP Professional, on x86

Version 5.1 (Build 2600: Service Pack 2)

Process id: 1504

Description:

*****************************************************************

******

** Running with the following parameters **

*****************************************************************

******

REPLICAT emp_rep

USERID system@localhost:1521/HRPRD1, PASSWORD ***********

ASSUMETARGETDEFS

HANdlecollisions

Discardfile c:\OGG11G\dirrpt\emp_ext.dsc, purge

MAP hr.employees, TARGET hr.employees;

CACHEMGR virtual memory values (may have been adjusted)

CACHEBUFFERSIZE: 64K

CACHESIZE: 512M

CACHEBUFFERSIZE (soft max): 4M

CACHEPAGEOUTSIZE (normal): 4M

PROCESS VM AVAIL FROM OS (min): 1G

CACHESIZEMAX (strict force to disk): 881M

Database Version:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

PL/SQL Release 11.1.0.6.0 - Production

CORE 11.1.0.6.0 Production

TNS for 32-bit Windows: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 - Production

Database Language and Character Set:

NLS_LANG environment variable not set, using default value

AMERICAN_AMERICA.WE8M

SWIN1252.

NLS_LANGUAGE = "AMERICAN"

Page 13: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

67 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

NLS_TERRITORY = "AMERICA"

NLS_CHARACTERSET = "WE8MSWIN1252"

Warning: NLS_LANG is not set. Please refer to user manual for more

information.

*****************************************************************

******

** Run Time Messages **

*****************************************************************

******

Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:46:35

MAP resolved (entry HR.EMPLOYEES):

MAP HR.EMPLOYEES, TARGET hr.employees;

Using following columns in default map by name:

EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER,

HIRE_DATE,

JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID

Using the following key columns for target table HR.EMPLOYEES:

EMPLOYEE_ID.

이 때 Replicat 프로세스는 화면 출력 상태로 대기 중이다. 새로운 명령창을 열고

GGSCI를 시작한 다음 상태를 확인하면 Replicat 프로세스가 RUNNING(실행 중)

으로 표시된다. Oracle Database 11g에 대한 복제는 이제 작동하기 시작한다.

HANDLECOLLISIONS 및 DISCARDFILE 등과 같은 매개변수는 명령줄에서

Replicat 프로세스를 실행할 때 발생할 수 있는 중복 레코드 오류 때문에 넣은 것

이다. 이 오류는 아래의 출력에 나타나 있는데, 이들은 중복 레코드 때문에 문제가

있음을 나타낸다. 좀 더 살펴보면 사용자가 대상 Oracle 11g 데이터베이스에 직접

레코드를 삽입했고 이 레코드는 Oracle GoldenGate가 Oracle 10g 데이터베이

스에 복제한 데이터와 같다는 것을 알 수 있다. 이로 인해 복제를 중단시키는 레코

드 중복 문제가 발생했다.

*****************************************************************

******

** Run Time Messages **

*****************************************************************

******

Opened trail file C:\OGG10G\dirdat\et000000 at 2009-12-09 11:17:51

Switching to next trail file C:\OGG10G\dirdat\et000001 at 2009-12-09

11:17:51 du

e to EOF, with current RBA 923

Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51

Processed extract process graceful restart record at seq 1, rba 923.

MAP resolved (entry HR.EMPLOYEES):

MAP HR.EMPLOYEES, TARGET hr.employees;

Using following columns in default map by name:

EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER,

HIRE_DATE,

JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID

Using the following key columns for target table HR.EMPLOYEES:

EMPLOYEE_ID.

2009-12-09 11:17:54 GGS WARNING 218 Aborted grouped transaction

on 'HR.EMP

LOYEES', Database error 1 (ORA-00001: unique constraint (HR.

EMP_EMAIL_UK) violat

ed).

2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in

seqno 1.

2009-12-09 11:17:54 GGS WARNING 218 SQL error 1 mapping

HR.EMPLOYEES to HR

.EMPLOYEES OCI Error ORA-00001: unique constraint (HR.

EMP_EMAIL_UK) violated (status = 1), SQL <INSERT INTO

"HR"."EMPLOYEES" ("EMPLOYEE_ID","FIRST_NAME","LAST_N

AME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COM

Page 14: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 68

MISSION_PCT","MANA

GER_ID","DEPARTMENT_ID") VALUES (:a0,:a1,:a2,:a3,:a4,:a5>.

2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in

seqno 1.

….

이 문제를 해결하려면 매개변수 HANDLECOLLISIONS와 DISCARDFILE을 넣고

Replicat 프로세스를 다시 시작해야 한다. DISCARDFILE은 오류가 발생한 레코

드에 대한 추가 정보를 제공한다. 현재 명령 프롬프트에서 실행한 Replicat 프로

세스가 동작 중인데, trail에 대한 모든 처리를 완료할 수 있게 둔다.

그런 다음 Ctrl-C를 눌러 명령창에서 Replicat 프로세스를 정지한다. 이때 다음 내

용이 표시된다.

Enter X to exit or C to continue: X

*****************************************************************

******

* ** Run Time Statistics ** *

*****************************************************************

******

Last record for the last committed transaction is the following:

__________________________________________________________

_________

Trail name : C:\OGG10G\dirdat\et000001

Hdr-Ind : E (x45) Partition : . (x04)

UndoFlag : . (x00) BeforeAfter: A (x41)

RecLength : 196 (x00c4) IO Time : 2009-12-08 13:43:36.000000

IOType : 5 (x05) OrigNode : 255 (xff)

TransInd : . (x03) FormatType : R (x52)

SyskeyLen : 0 (x00) Incomplete : . (x00)

AuditRBA : 11 AuditPos : 1188880

Continued : N (x00) RecCount : 1 (x01)

2009-12-08 13:43:36.000000 Insert Len 196 RBA 1295

Name: HR.EMPLOYEES

__________________________________________________________

_________

Reading C:\OGG10G\dirdat\et000001, current RBA 1604, 2 records

Report at 2009-12-09 11:47:56 (activity since 2009-12-09 11:46:35)

From Table HR.EMPLOYEES to HR.EMPLOYEES:

# inserts: 2

# updates: 0

# deletes: 0

# discards: 0

# insert collisions: 2

Last log location read:

FILE: C:\OGG10G\dirdat\et000001

SEQNO: 1

RBA: 1604

TIMESTAMP: Not Available

EOF: YES

READERR: 400

이제 HANDLECOLLISIONS 매개변수가 동작하지 않도록 주석 접두어 '--'를 앞

에 넣는다. 그런 다음 명령줄에서 Replicat 프로세스를 다시 시작한다. 중복 레코

드 문제가 해결되었기 때문에 이제 프로세스가 제대로 작동하고 앞으로 원본 데이

터베이스에 변경사항이 생기면 정상 복제된다.

복제 시험

HRPRD1, HRPRD2 및 HRPRD3의 3개 데이터베이스 모두 HR.EMPLOYEES 테

이블의 레코드는 < 그림 6 >의 명령창에서 확인할 수 있다. 세 데이터베이스 모두

정확히 107개의 레코드가 있다. 내려진 SELECT 명령은 세 번째 창에 나타나 있다.

이제 원본 데이터베이스 HRPRD2의 HR.EMPLOYEES 테이블에 행을 삽입

(INSERT) 후 커밋한 다음 삽입한 행이 대상 데이터베이스 HRPRD3 및 HRPRD1

에 복제되는지 확인한다. INSERT는 < 그림 7 >에 나타나 있다.

3개 데이터베이스에서 다시 SELECT를 실행하면 모든 데이터베이스에 109개의

레코드가 있다는 것을 알 수 있다(<그림 8> 참조). 즉, Oracle GoldenGate for

Oracle 10g 및 Oracle 11g를 사용한 복제에 성공했다.

Oracle Database 10g에서 10g 데이터베이스로 복제가 제대로 이루어지는 것을

확인했다. Oracle Database 10g에서 11g 데이터베이스로의 복제도 Replicat 프

로세스를 명령 프롬프트에서 "replicat paramfile c:\OGG11G\dirprm\emp_rep.

prm" 옵션으로 시작할 경우 가능했다. Replicat 프로세스를 GGSCI에서 시작하

Page 15: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

69 Summer 2010 DBA : 데이터 웨어하우징 Technology & Developer

면 Stopped 상태로 변한다. 그 이유는 아마 테스트 서버의 환경 오류 때문일 것이

다. 참고로 명령 프롬프트에서 시작하면 오류 없이 제대로 작동한다.

기능, 자원 요구사항 및 영향

앞에서 Oracle GoldenGate의 Extract 및 Replicat 프로세스의 작동을 보았다.

GGSCI 명령 인터페이스에서는 인스턴스(즉, Manager 프로세스 한 개)당 최대

300개라는 엄청난 숫자의 Extract 및 Replicat 프로세스가 지원된다. 그러나 프

로세스 수가 증가한 만큼 메모리 사용량도 증가하는데, Extract 및 Replicat 프로

세스 각각에 약 25~55MB의 메모리가 필요하다. 메모리 사용량은 실제로는 더 증

가할 수도 있으며 동시 트랜잭션 수와 트랜잭션 크기에 따라 달라진다. 이것은 항

상 쉽게 결정하기 어려운 문제이다. 또한 생성되는 redo 로그 수에 따라 Oracle

GoldenGate가 약 3~5% 정도의 CPU 부하가 원본 시스템에 발생한다.

여기서는 단방향 복제만 설정했지만, 양방향 멀티마스터(멀티사이트 업데이트) 복

제를 설정할 수도 있다. Oracle GoldenGate는 동일 레코드에 대한 업데이트 시

점을 파악하여 이러한 환경에서 발생할 수 있는 동시 변경으로 인한 충돌 문제를

해결한다. 충돌 해결을 위한 규칙(타임 스탬프 또는 항상 먼저 작동하는 쪽 등)을

설정하거나 충돌 해결 방법을 user exit으로 작성할 수 있다. Oracle GoldenGate

는 대상 데이터베이스의 테이블에 고유한 키가 없더라도 데이터를 복제할 수 있다.

고유 키가 필요한 삭제 또는 업데이트 작업의 경우에는, 몇 개의 컬럼들 또는 전체

레코드를 고유 키로 사용함으로써 데이터베이스 종류에 상관 없이 이 기능을 지원

할 수 있다.

현재 Oracle GoldenGate는 2바이트 데이터를 복제할 수 없지만 향후 릴리스에

서는 가능하게 될 것이다. 현재로서는 원본 데이터를 그대로 전달하는 방법으로 2

바이트 문자를 처리한다.

Oracle GoldenGate Director

이 제품은 이제 Oracle Management Pack for GoldenGate라고 부르며, GUI

인터페이스에서 Oracle GoldenGate 시스템을 모니터링 및 관리하기 위한

Multi-tier 클라이언트-서버 애플리케이션이다. Oracle GoldenGate Director

의 원격 클라이언트를 인스턴스가 실행 중인 호스트에 설치하면 다수의 Oracle

GoldenGate 인스턴스(Manager 프로세스)를 관리할 수 있다.

클라이언트는 모두 Oracle GoldenGate Director 서버의 중앙 시스템에 연결되

며 애플리케이션 서버로 Oracle WebLogic Server 11g(10.3.1)를 사용한다. 이전

에는 JBoss Application Server 3.2.7을 제공했었다. 지금은 Oracle WebLogic

Server를 대신 제공하는데, Oracle GoldenGate Director 서버를 설치하기 전

에 이 서버를 시스템에 미리 설치해야 한다. Oracle GoldenGate Director 서버

에는 웹 서버가 있으며 기존의 Oracle Database에 최소 200MB의 데이터베이스

< 그림 6 > employee 레코드가 있는 세 데이터베이스

< 그림 7 > HRPRD2 employee 테이블에 삽입하기

< 그림 8 > 다른 데이터베이스에 즉시 복제

Page 16: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer DBA : 데이터 웨어하우징 Summer 2010 70

저장소가 필요하다. 또는 MySql이나 Microsoft SQL Server를 저장소로 사용할

수 있다. 보안을 위해 저장소에 사용되는 데이터베이스 암호는 최소 8문자여야 하

며 최소 숫자 1개와 영숫자 1문자를 포함해야 한다.

GGSCI에서 프로세스를 정의하면 Oracle GoldenGate Director를 사용하여 해

당 프로세스들을 구성하고 모니터링 및 제어할 수 있다. OS 명령줄에서 실행되는

다른 독립형 프로세스(예: DDLGEN 프로세스)는 Oracle GoldenGate Director

로 모니터링할 수 없다. Extract 프로세스, Replicat 프로세스, Manager 프로세

스, trail로컬 또는 원격), 파일(로컬 또는 원격) 및 Extract 및 Replicat 작업은 모

두 Windows, UNIX 및 NonStop 플랫폼 기반의 Oracle GoldenGate Director

로 구성하고 모니터링 및 제어할 수 있다.

결론 및 추가 정보

Manager 매개변수 파일에는 동적 포트 할당, Manager가 시작될 때 복제 프로

세스(Extract 및 Replicat)를 자동 시작하게 해주는 기능, trail에 대한 중앙 관리

등도 지정할 수 있다.

이러한 고급 관리자 매개변수는 The Oracle GoldenGate Administration Guide

Version 10.4에 자세히 설명되어 있다. 이 가이드에서는 Extract 및 Replicat 프

로세스를 여러가지 다른 방법으로 구성하는 방법 즉, Oracle GoldenGate를 Live

Reporting, 실시간 데이터 분산, 실시간 데이터 웨어하우징, Live-Standby 데이

터베이스 유지관리 및 Active-Active HA 등의 여러 목적에 사용하는 방법, 그리

고 DDL 동기화 구성 방법에 대해 설명한다. 또한 Oracle GoldenGate는 데이터

베이스를 다운타임 거의 없이 업그레이드해야 하는 데이터베이스 업그레이드 상

황에서 매우 유용할 수 있다. 즉, 이전 데이터베이스 버전에서 새 데이터베이스 버

전으로 Oracle GoldenGate 복제를 설정한 다음, 준비가 모두 끝나면 모든 클라

이언트를 새 데이터베이스를 가리키도록 전환하기만 하면 된다. 예를 들어 기존

의 모든 데이터베이스 내용을 세계에서 가장 빠른 데이터베이스 환경인 Oracle

Exadata V2 데이터베이스 시스템으로 이동하는 경우 이 방법은 탁월한 선택이 될

수 있다.

또 하나의 유용한 Oracle GoldenGate 참조서로 Oracle GoldenGate

Troubleshooting and Tuning Guide Version 10.4가 있다. 이 참조서와

Administration Guide 둘 다 이 글의 시작 부분에서 다운로드한 문서 zip 파일에

포함되어 있다.

지금까지 설명한 Oracle GoldenGate 복제 환경 구성을 기꺼이 지원해 준(진정

한 오라클 정신으로) Oracle Fusion Middleware 및 Oracle GoldenGate 제품

관리자 여러분께 감사하며, Oracle GoldenGate Director를 Oracle Enterprise

Manager Grid Control과 통합한다는 계획이 신속히 이루어지기를 기대한다.

Oracle Enterprise Manager Grid Control은 오라클의 강력한 엔터프라이

즈 관리 제품이다. 현재 환경의 모든 Oracle RAC 또는 Non-Oracle RAC 데

이터베이스, Oracle Automatic Storage Management(ASM) 인스턴스 및

Oracle Clusterware의 패칭을 자동화하는 방법을 배우려면 필자의 기사 “Patch

a Thousand Databases, Using Oracle Enterprise Manager Grid Control”

(Oracle Enterprise Manager Grid Control을 사용하여 수많은 데이터베이스를

패치하는 방법)을 읽을 것을 권한다. Oracle Enterprise Manager Grid Control

을 사용하여 Oracle Recovery Manager(Oracle RMAN) 백업을 현재 데이터

베이스에 맞도록 쉽게 설정하려면 'Oracle RMAN Backups: Pushing the Easy

Button'(Oracle RMAN 백업: Easy 버튼 누르기)을 읽을 것을 권한다.

그리고 Oracle Enterprise Manager Grid Control이 Oracle Data Guard 설

정 및 모니터링에 사용할 경우 많은 시간과 자원을 어떻게 절약할 수 있는지 이해

하려면 필자의 또 다른 최근 기사 'Easy Disaster Proof Production with Grid

Control'(Grid Control을 이용한 손쉬운 재해 예방 실무)을 읽을 것을 권한다.

오라클의 세계를 즐기시기를!

오라클 ACE 감독(데이터베이스)인 포러스 호미 하베왈라(Porus Homi

Havewala)는 싱가포르의 오라클 플래티넘 파트너인 S & I Systems Pte

Ltd.의 수석 컨설턴트이다. 1994년부터 오라클 기술을 폭 넓게 경험했으

며 실무 DBA, 선임 컨설턴트, e-비즈니스 기술 DBA 겸 시스템 관리자, 개

발 DBA 및 데이터베이스 설계자/모델러(Oracle Designer를 이용한)로 일

해 왔다. 그리고 호주 최대의 통신회사에서 수행한 세계 최초의 실무 Oracle

Enterprise Manager Grid Control 현장에 선임 데이터베이스 설계자 및

기술 팀 리더로 참여했다. 그는 열렬한 Oracle Enterprise Manager Grid

Control 전도사이며 Grid 관리에 관한 여러 OTN 기사를 썼다.

Page 17: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

71 Summer 2010 이클립스 Technology & Developer

이클립스스프링 및 오라클 웹로직 서버로 자바 애플리케이션 만들기

� 저자 - Dustin Marx� 감수 - 윤호성 수석컨설턴트, 한국오라클 퓨전미들웨어 본부 인프라팀 ([email protected])

이클립스 지원을 위한 오라클 엔터프라이즈 팩(Oracle Enterprise Pack for

Eclipse: OEPE)은 핵심 이클립스 IDE와 쉽게 통합되도록 만들어진 인증된 플러

그인으로서 스프링 프레임워크와 오라클 웹로직 서버를 통한 엔터프라이즈 자바

애플리케이션의 개발 및 활용을 지원한다.

이클립스 지원을 위한 오라클 엔터프라이즈 팩 설치

OEPE 11g는 별도로 다운로드 받아 일반적인 플러그인 방식으로 기존의 이클립스

에 추가 설치가 가능하다. 특히, 이미 구성된 OEPE와 함께 이클립스 완성버전을

다운로드할 수 있다는 점이 또 다른 편리한 설치방식이다. 일단 플러그인을 설치

하거나 이미 구성된 OEPE으로 이클립스 완성버전을 설치하면 도움말 메뉴에서

About Eclipse Platform을 선택해서 플러그인 정보를 확인할 수 있다.

모서리가 둥근 다섯 개 직사각형 버튼은 설치된 플러그인 기능을 나타낸다. 이 문

서에서 특별히 염두에 두고 있는 기능은 가장 오른쪽에 있는 버튼 두 개의 기능이다.

가장 오른쪽이 Spring IDE 기능 버튼이고 바로 왼쪽에 있는 것은 OEPE 플러그인

버튼이다.

스프링 프레임워크를 통한 이클립스 지원을 위한 오라클 엔터프라이즈 팩

스프링 프레임워크는 여러 가지 장점 때문에 엔터프라이즈 자바 애플리케이션 개

발에 널리 사용되고 있는 프레임워크다. 스프링 프레임워크로 작업을 할 때 OEPE

에 포함된 Spring IDE 플러그인을 활용하여 개선할 수 있는 부분이 몇 가지 있다.

스프링 프레임워크에 생소한 개발자가 이 프레임워크를 학습하는 과정에서 부딪

히게 되는 어려움의 하나는 XML-기반의 Spring 구성 파일을 이해하고 작업해야

한다는 점이다. OEPE에 포함된 Spring IDE 기능은 Spring XML 작업을 훨씬 더

직관적으로 할 수 있게 해준다. 이 기능에는 Spring XML 구성 파일의 “Design”

보기와 Spring element및 attribute의 자동완성기능, Spring 컨텍스트 파일의

비준수 항목들을 탐지하고 알려주는 기능 등이 포함된다.

OEPE를 통해서 Spring project로서의 새로운 이클립스 프로젝트를 만들 수 있다.

다음의 두 그림은 새로운 프로젝트 마법사에서 Spring project를 선택하는 방법

과 Spring project에 세부사항을 추가하는 방법을 보여준다.

이클립스 지원을 위한 오라클 엔터프라이즈 팩(Oracle Enterprise Pack for Eclipse)은 스프링 프레임워크(Spring Framework) 및

오라클 웹로직 서버(Oracle WebLogic Server)의 응용프로그램을 보다 간편하게 만들어 준다. 이제부터 그 방법에 대해 알아보도록 하자.

Page 18: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 72

스프링 프레임워크가 아주 광범위한 기능들을 제공하기 때문에 Spring 구성에 있

어서도 여러 가지 선택이 가능해 진다. 그러므로 다양한 XML element, attribute,

namespace가 하나의 Spring 구성파일 내에서 어떻게 연관되는지를 모두 학습

하고 기억하는 것은 어려운 일이다.

다음 그림은 새로운 Spring Definition Bean을 만들기 위한 마법사를 선택하는

방법을 보여준다.

일단 'Spring Bean Definition'을 위한 마법사를 선택하면 생성 마법사의 두 단계

를 거치는데 Spring 컨텍스트 파일명을 정하고 해당 스프링 프레임워크의 XSD-

기반 schema를 선택할 수 있다. 다음 두 그림은 이 두 단계를 보여준다.

위의 왼쪽 그림은 Spring이 지원하는 다양한 XSD namespace를 보여준다.

Spring bean을 정의하기 위해서 Spring 컨텍스트 파일에 거의 항상 사용되는

namespace (“bean” namespace)는 이 화면에서처럼 미리 선택돼 있다.

“context,” “util,” 그리고 “p”와 같은 namespace은 Spring 애플리케이션에 주로

사용되는 것들이다.

이와 같이 선택을 하고 위 화면에서처럼 나머지 설정들을 그대로 사용한다고 가정

했을 때 생성된 Spring 컨텍스트 파일은 아래 그림의 이클립스 Source 탭처럼 보

인다.

Spring Bean Definition 마법사를 활용하면 Spring 컨텍스트 구성 파일을 오타

없이 정확하게 생성할 수 있다. 위 화면에서처럼 마법사에서 선택된 namespace

들이 포함돼 있고 적절한 schemaLocation이 주어진다. 위 그림에서 Spring IDE

가 Design 탭을 제공하는 것을 볼 수 있다. 이 탭은 원시 XML이 아니라 2열 시리

즈로 Spring XML 구성 파일을 보여준다. 특별히 이 Design 보기의 유용한 점은

사용 가능한 요소들 목록에서 현재 적용 가능한 attribute, child element, 또는

Spring 구성 파일의 다른 부분들을 선택할 수 있다는 점이다.

다음 그림은 Spring 구성파일의 루트 “beans” element에 대한 해당 child

element들을 나타내는 Spring IDE를 보여준다. Design 보기의 element 이름에

서 오른쪽을 클릭하면 선택 목록이 나온다.

Page 19: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

73 Summer 2010 이클립스 Technology & Developer

이 기능은 “Beans” element에서 사용 가능한 child element를 확인하는데 유용

하다. 이 기능이 없다면 어떤 가능한 child element들이 제대로 작동할 것인지를

외우거나 직접 찾아내야 하며 입력 오류가 없도록 주의해야만 한다. 또한, 위 그림

은 attribute를 추가하는 옵션을 보여준다.

이 방식으로 Spring 구성 element에 attribute를 추가하면 child element를 추

가하는 것과 동일한 이점을 얻을 수 있다.

Design 보기에서보다 XML 소스에서 직접 Spring 구성 파일을 편집하는 것

이 더 편리할 때가 있다. 이 경우 Spring IDE의 또 다른 장점은 Spring 컨텍스트

element와 attribute의 자동-완성 기능이다. 이 자동 완성 기능은 실행 가능한 옵

션을 제공한다는 점에서 Design 보기와 동일한 이점을 제공한다.

다음 화면은 새로운 element를 오프닝 “<”로 표기하기 시작했을 때 권장 child

element들이 제공되는 것을 보여준다. 몇 가지 유효한 선택사항들이 제시되고,

현재 선택된 옵션인 “bean” element에서는 개발자가 적절한 선택을 했는지 파악

할 수 있도록 해당 문서(XML Schema정의로부터)를 가져와 보여준다. Spring

XSD 문서가 포함되어 있다는 것은 곧 개발자가 IDE에만 계속적으로 집중할 수 있

고, 관련된 XML Schema를 뒤지기 위해 IDE와 XML Schema 파일을 왔다 갔다

할 필요가 없다는 것을 의미한다.

Design 보기의 drop-down 선택기능, Source 보기의 자동-완성(Auto-

completion) 및 drop-down 선택기능으로 보다 쉽게 Spring 컨텍스트 파일을

생성할 수 있다. 한편, 구성 경험(Configuration Experience)을 개선하기 위해

Spring IDE이 제공하는 이점은 여기서 그치지 않는다. Spring 구성 파일에서 정

의되지 않은 값이 나왔을 때, 자바 코드에서 부적절한 구문에 빨간 밑줄이 그어진

다. 다음 화면은 “bean” child element의 철자가 잘못됐을 때(“been”)의 상황을

보여준다.

OEPE가 제공하는 Spring 지원은 Spring 2.5 기능 지원을 포함한다.

예를 들면, Spring Bean Definition 마법사로 구성 파일에 포함시키도록 선택할

수 있는 namespace들 중의 하나는 Spring 2.5에서 맨 처음 적용 가능했던 JMS

namespace이다. 다음 그림은 이 2.5 namespace가 JMS 삽입을 위해 선택할

수 있는 namespace들 중 버전 없는 디폴트와는 다른 유일한 버전임을 보여준다.

다른 namespace는 2.5 버전 외에도 2.0 또는 그 이전 버전이 있다.

지금까지 얘기한 다수의 Spring IDE 기능은 element와 attribute 및 이들의 관계

를 제한하는 XML Schema Definitions(XSDs) 덕분에 가능했다.

Page 20: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 74

위 그림에서 Spring IDE는 필자의 Spring 컨텍스트 파일과 관련된 두 가지 오류

항목과 한 가지 경고 항목을 보고하고 있다. Spring 구성 파일의 검증은 Save 과

정에서 수행된다.

첫 번째 오류는 “No setter found for the property ‘another’ in class ‘dustin.

examples.MainApplication’.”를 보고한다. 이는 특정 클래스에 String을 담을

setAnother(String)라는 메소드가 없다는 것을 의미한다. 그 위쪽 라인에서는 어

떤 오류도 보고되지 않았기 때문에 그 클래스에 대해서는 setCalculator(Simple

Calculator)라는 메소드가 구현되어 있다고 추정해도 무방하다.

Spring 구성 파일에 “Referenced bean ‘calculatorBeen’ not found”라는 경

고 메시지는 “calculatorBeen.” 이라는 ID를 가진 어떤 bean도 이 파일에 정의

되지 않았다는 것을 의미한다. “calculatorBean”으로 철자를 수정하면, 다음

번 파일이 저장되는 시점에 경고 메시지가 나타나지 않게 되는데 이는 이 파일에

“calculatorBean” 이라는 bean이 정의되어 있기 때문이다. 이러한 유형의 문제

는 오류 메시지보다는 경고 메시지에 가까운데 그 이유는 이 파일에서는 정의되지

않은 bean이 클래스패스 상에 존재하는 다른 컨텍스트 구성 파일에서 설정되어

있을 가능성이 있기 때문이다. 실제로 스프링 프레임워크 2.5문서에서는 Spring

개발팀이 일반적으로, 파일간의 명확한 연계 없이 하나의 애플리케이션 컨텍스트

생성자(Constructor)를 사용하기 보다는 다수 Spring 컨텍스트 구성파일 방식을

선호한다고 명시하고 있다.

IDE가 해당 Java 클래스에 대한 Spring 구성을 검증해주는 것은 많은 이점이 있

다. 스프링 프레임워크의 의존성 주입(Dependency Injection)은 배치 확장성

(Deployment Flexibility)을 상당히 증가시켜 주긴 하지만, 컴파일 타임 의존성 검

사(Dependency Checking) 대신 런타임 의존성 검사에 필요한 비용이 수반된다.

개발자는 방금 언급한 Spring IDE 지원 덕분에 배치 확장성을 유지할 수 있는 한편

실제 응용프로그램을 구동하지 않고서도 깨지거나 빠진 의존성을 밝혀낼 수 있다.

Spring Explorer는 하나의 프로젝트에서 모든 Spring 특화된 구조를 확인하

는 데 유용하다. 다음 그림은 Spring Explorer를 보여준다. 여기에 보인 어떤

element든 클릭하면 메인 윈도우의 포커스는 선택한 element의 소스 코드로 이

동하게 된다.

Spring Beans Search 툴은 Spring 프레임워크 개발에 필요한 또 다른 유용한

기능이다. Spring 컨텍스트 파일에 포함된 의존성(Dependency) 또는 기타 항목

들과 관련된 문제를 디버그 하고자 할 때, Spring Beans Search 툴은 Spring 컨

텍스트 파일로 검색을 한정한다. 두 번째 장점은 원하는 구성파일 정보를 찾을 때

또 다른 대안을 제공한다는 점이다. 아래 화면처럼, bean name, bean을 뒷받침

하는 Java class, 포함된 property name, child name과 referencing bean에

따라 검색할 수 있다. 이 검색 툴은 다수의 구성 파일로 이루어진 대형 엔터프라이

즈 애플리케이션 작업에 특히 유용하다.

OEPE에는 스프링 프레임워크 2.5.6 번들이 포함된다. 추가 JMS namespace와

같은 Spring 2.5의 새로운 기능을 쉽게 사용할 수 있고 주석 기반의 JMX, 주석 기

반의 자동-연결 기능(Auto-wiring), 주석 기반의 컴포넌트 감지, JDBC 액세스 등

도 훨씬 간편하다.

스프링 프레임워크의 매우 유용한 특징은 일반적인 수준의 일반적인 기능을 수

행하는 다양한 기술들을 채택했다는 점이다. 이와 관련된 예로는 Spring의 Data

Access Objects (DAO) 지원 기능을 들 수 있다. 스프링 프레임워크는 특정 기본

데이터 액세스에 적합한 추상 DAO 클래스를 제공한다. 개발자는 Spring의 DAO

클래스를 확장해 특정 타입의 데이터 액세스를 위한 해당 Spring 기능을 쉽게 활

용할 수 있다. DAO 접근방식의 장점은 특정 데이터 액세스 테크놀로지에 특화된

기능들이 실행 DAO 클래스와 분리된다는 점이다.

스프링 프레임워크의 DAO 기본 클래스(Base Classes) 덕분에 개발자들은 특

정 테크놀로지를 사용하는 데이터 액세스와 관련된 수많은 기능에 대한 부담감을

덜어낼 수는 있지만 여전히 추상 클래스(Abstract Classes)를 확장해야만 한다.

OEPE는 Spring-기반 DAO 클래스를 자동으로 생성하는 방식을 통해 이 문제를

해결하고 있다.

“Generate Spring ORM Classes” 기능은 Spring Facet을 지원하는 프로젝트에

서 실행되어야 한다. 프로젝트가 Facet을 지원하도록 구성되면 Project Explorer

창의 프로젝트명에서 마우스 오른쪽을 클릭한 다음 Properties를 선택하고 나서

Page 21: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

75 Summer 2010 이클립스 Technology & Developer

Project Facets를 선택하고, Spring Facet 확인란을 클릭해서 Spring Facet을

설정한다. Spring Facet이 다른 Facet들의 사용을 필요로 하기 때문에 Facet이

구성되지 않은 상태라면, 우선 Facet을 구성해야 한다.

다음 그림은 Spring Facet을 활용하는데 필요한 Facet configuration창을 보여

준다.

위의 그림처럼, Spring Facet을 활용하려면 J2SE 6의 Java Facet 또는 보다 최

신의 추가적인 Facet이 필요하다. 이 경우, “Utility Module” Facet를 사용하도록

한다. Java 6 facet과 Utility Module facet을 적용되고 나서야, Spring facet을

선택할 수 있다. 다음 화면은 Spring Facet을 클릭한 결과를 보여준다.

마지막 화면은 아직 추가 구성이 필요하다는 것을 보여준다. 빨간 원의 “X” 표시된

아이콘과 “Further configuration required”라고 밑줄 친 텍스트 링크가 이를 말

해주고 있다. 또한, Apply 버튼도 이 시점에서는 비활성화 된다.

Apply 버튼을 활성화하기 위해 “Further configuration required…” 링크를 클릭

하고 적합한 스프링 프레임워크 라이브러리(Library)를 선택한다. 적합한 스프링

프레임워크 라이브러리를 선택하는 마법사가 다음 화면에 나와 있다.

Spring 3.0의 경우 Spring IDE은 프로젝트에 쉽게 추가할 수 있는 Spring 라이브

러리들을 함께 제공한다. Spring의 이 전 버전들은 Facet configuration 스크린

에서 직접 다운로드 받을 수 있다.

일단 스프링 프레임워크 라이브러리가 구성되면, 프로젝트의 Facet configu-

ration을 완료하기 위해 Apply 버튼을 눌러 변경사항들을 적용시킨다.

ORM 클래스가 생성되는 방법을 보여주기 위해, 본 예시는 ORM 구현으로서

Java Persistence API(JPA)를 사용한다. 프로젝트에서 JPA 기술을 가능하게

하는 간편한 방법은 추가 Facet을 포함하는 것이다.

다음 화면에서 이 기능을 확인할 수 있다.

Page 22: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 76

상기 예시의 경우, JPA 엔티티 클래스들이 오라클 데이터베이스 테이블로부터 생

성되며 이 테이블들을 생성하는 SQL은 아래와 같다.

create table address

(

id number(19) primary key,

street varchar2(255),

city varchar2(255)

);

create table person

(

id number(19) primary key,

name varchar2(255),

address_id number(19) references address(id)

);

다음은 Oracle SQL Developer에서 확인할 수 있는 데이터베이스 테이블 결과이다.

데이터베이스 테이블과 JPA facet이 구성되면 JPA 엔티티 클래스(Entity Class)

를 손쉽게 생성할 수 있다. 데이터베이스 테이블에서 엔티티 클래스를 만드는 마

법사를 활용하려면 Project Explorer의 프로젝트명에서 마우스 오른쪽을 클릭하

고 New→Other→JPA→Custom Entities을 선택한다.

마법사창은 다음 화면과 같다.

JPA Custom Entities 마법사를 선택하면 마법사창에는 엔티티가 생성되는 테이

블을 선택하라는 프롬프트가 나타난다.

적절한 테이블을 선택한 후에 Next를 클릭하면 다음 화면에서처럼 Associations

를 설정 또는 수정할 수 있다.

Page 23: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

77 Summer 2010 이클립스 Technology & Developer

Next버튼을 클릭하면, 데이터베이스 테이블들과 이들 간의 Association들이 설

정된다. 다음 마법사 화면에는 엔티티 클래스 생성과 관련된 옵션이 나타난다.

마법사 화면 상단의 경고 메시지처럼 데이터베이스 테이블에서 생성될 엔티티들

에 대해서 디폴트 또는 이름이 없는 패키지는 사용하지 않는 것이 좋다.

다시 말하면 , 패키지는 생성될 엔티티 클래스가 소속될 수 있도록 선언되어야 한

다. 생성된 엔티티 클래스에 대한 최종 패키지의 세부사항은 다음 화면에서 볼 수

있다.

위의 그림에서 보는 바와 같이, 생성된 엔티티 클래스는 otn.examples라고 불리

는 패키지에 자리 잡게 된다. 패키지를 선택하고 다른 일반 엔티티 특성을 설정하

고 난 다음에 개별 엔티티 클래스들에 대한 설정이 지원된다.

다음 그림은 마법사 화면을 보여준다.

위의 그림에서 Address 엔티티 클래스에 대한 구성을 설정했다. 한편, 이 마법사

화면은 칼럼 레벨에 대한 구성 그리고 생성될 각 클래스들에 대한 구성 설정을 지

원한다. Finish를 클릭하면 특정 데이터베이스 테이블을 기반으로 하는 엔티티 클

래스들이 실제로 생성된다. 다음 그림은 Project Explorer 창에 생성된 엔티티 클

래스들을 보여준다.

JPA 엔티티 클래스가 필드 기반의 주석을 사용하는 이유는 바로 생성 과정에서

필자가 이를 명시했기 때문이다. 이 문서의 샘플 코드 다운로드에서 생성된 두 개

의 클래스에 대한 소스 코드를 확인할 수 있다 (Address.java와 Person.java)

일단 프로젝트가 Spring Facet를 사용하도록 구성되고 나서 Project Explorer창

의 프로젝트명에서 마우스 오른쪽을 클릭하면 Generate Spring ORM Classes

에 대한 옵션이 나온다(New >Other 아래).

다음 그림은 이 옵션을 선택했을 때의 화면이다.

Page 24: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 78

그림 28

Generate Spring ORM Classes옵션을 선택하면 이 마법사의 첫 화면이 다음과

같이 나타난다.

녹색의 + 버튼을 클릭하면 다음 그림과 같은 마법사 화면이 나온다.

원하는 ORM DAO 클래스 생성과 관련된 주요 정보들이 여기서 명시된다. 최상단

Service Name필드에 기재되는 사항은 서버, DAO 인터페이스, 클래스에 자동으

로 이름을 붙이는데 사용된다. Persistent Unit을 선택하면 선택 가능한 엔티티

클래스들이 나타나게 된다. 이 예제의 경우, 이 전에 생성된 JPA Custom Entity로

생성시킨 클래스들이 나타날 것이다.

Exception Class는 서비스 인터페이스와 서비스 클래스의 메소드들에 대한

throws 구문에 포함될 예외의 유형이다. 서비스, DAO 인터페이스, 클래스들에

대한 패키지들도 이 마법사 화면에 나타난다. 필자가 예제로 일부 작성한 화면이

다음에 나와 있다.

일단 ORM 서비스와 DAO 객체에 대한 초기 정보가 정의되면 이 마법사의 다음

화면에서는 구현 전략에 관한 정보를 입력한다. 디폴트는 Plain JPA이지만 본 예

시에서는 “Spring’s JpaTemplate and JpaDaoSupport” 클래스를 활용하는 방

식을 선택하도록 하겠다.

Finish를 클릭하면 엔티티 클래스를 기반으로 한 ORM 클래스와 인터페이스가 생

성된다. 새롭게 생성된 클래스는 다음 그림의 Project Explorer에서 볼 수 있다.

Page 25: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

79 Summer 2010 이클립스 Technology & Developer

위의 Project Wizard 보기대로, 필자는 생성된 ORM 서비스, DAO 클래스, 인터

페이스를 otn.examples.services 패키지에 두었다. 생성된 DAO 구현 클래스

는 클래스이름(PeopleJPADao)에 JPA가 포함된 것으로 추측할 수 있듯이 ORM

구현에만 국한된다. 이것은 또한 직접적으로 Spring의 JpaDaoSupport 클래

스를 상속받는 클래스이며, JpaTemplate 클래스를 보다 쉽게 사용할 수 있도록

Spring에서 제공하는 헬퍼 클래스(Helper Class)이기도 하다.

JPA에 특화된 DAO 클래스 이외에도 이 마법사는 그 DAO 클래스의 인터페이스

(ORM 구현에 특화되지 않은)와 서비스 클래스 및 인터페이스를(이 역시 ORM

구현 선택과 무관한) 생성했다. 각각의 생성된 소스 코드(IPeopleService.java,

PeopleSpringService.java, IPeopleDao.java, and PeopleDao.java)는 샘플

코드 다운로드에서 얻을 수 있다.

스프링 프레임워크는 개발자가 자신의 코드에 JpaTemplate를 보다 쉽게 적용

할 수 있도록 JpaDaoSupport을 제공하지만, OEPE가 제공하는 이 기능은 지금

껏 증명했듯이 엔티티 클래스에 기본 CRUD (Create /Read /Update /Delete)를

지원하는 클래스와 인터페이스를 자동 생성해 주기 때문에 이보다 훨씬 편리하

다. 생성된 클래스와 인터페이스는 일반적인 서비스 클래스와 심지어 DAO 인터

페이스로부터 특정 ORM 구현 세부사항을 정확하게 분리한다. 다음의 클래스 도

표는 OEPE Spring ORM 생성 마법사로 생성된 클래스와 인터페이스 및 Spring

의 JpaDaoSupport에 대한 관계를 보여준다. JpaDaoSupport는 Spring의

JpaTemplate 활용을 손쉽게 하려는 목적을 가지고 있다는 사실을 명심해야 한다.

이 클래스 도표에서 Spring이 제공하는 JpaDaoSupport에는 배경색이 녹색인

제목 표시줄이 있는데, 이것은 OEPE의 사용 유무에 상관없이 Spring이 제공하

는 것이다. 상기의 모든 클래스와 인터페이스는 개발자가 직접 작성해야 하지만

OEPE는 “Generate Spring ORM Classes” 마법사의 일부 특성을 기반으로 자동

으로 클래스와 인터페이스를 생성했다.

스프링 프레임워크가 인기가 많은 이유는 엔터프라이즈 자바의 간결함을 지원하

기 때문이다. OEPE 지원을 통해 스프링 프레임워크를 엔터프라이즈 애플리케이

션에 보다 쉽게 적용할 수 있다. 개발자들은 자바 EE 호환 애플리케이션 서버 기능

을 필요로 한다. OEPE는 오라클 웹로직 서버에 애플리케이션을 배치함에 있어서

스프링 컨테이너에 배치하는 것과 유사한 편익을 제공한다. OEPE는 또한, 스프링

프레임워크와 오라클 웹로직 서버를 쉽게 통합하도록 지원한다.

오라클 웹로직 서버를 활용한 이클립스 지원을 위한 오라클 엔터프라이즈 팩

OEPE는 오라클 웹로직 서버를 쉽게 활용할 수 있도록 몇 가지 기능을 제공한다.

이 기능에는 특정 웹로직의 디스크립터 파일(Descriptor File: weblogic.xml and

weblogic-application.xml) 지원, 오라클 웹로직 서버의 FastSwap 기능 지원,

웹로직 서버의 공유 라이브러리(Shared Libraries) 기능 지원 및 여러 버전의 오

라클 웹로직 서버 지원 등이 포함된다.

이클립스를 활용한 웹로직 서버의 인스턴스 연결

OEPE의 오라클 웹로직 서버 기능을 이용하기 위해서는 IDE를 통해 오라클 웹로

직 서버의 하나 또는 그 이상의 인스턴스를 연결할 필요가 있다. 다음 그림에서와

같이, New→Other→Server를 선택하면 실행 가능하다.

Server 항목을 두 번 클릭하거나 Server를 선택하고 Next 버튼을 클릭하면 마법

사는 정의 가능한 서버의 목록을 보여준다. 다음 화면은 이 과정을 보여준다.

Page 26: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 80

위의 왼쪽 그림은 “BEA Systems, Inc.” 그룹핑에 따라 오라클 웹로직 서버의 버

전을 열거하고 있다. 마법사는 선택한 버전에 대해 IDE와 연결하려는 오라클 웹

로직 서버 인스턴스를 체크하는데 만약, IDE를 통해 웹로직 서버 10.3 또는 11g를

사용하고자 한다면 “BEA WebLogic Server v10.0”를 선택해서는 안되고 대신에

“Oracle” 밑의 그룹핑을 찾아 이 그룹에서 적절한 오라클 웹로직 서버를 선택해야

한다.

이러한 과정은 위의 오른쪽 그림에서처럼 OC4J (Java EE용 Oracle Containers)

버전 및 오라클 웹로직 서버(10g R3및 11g R1)버전을 포함하여 오라클에서 활용

할 수 있는 다수의 Java EE 서버가 있다. “Server name” 필드의 “at localhost”는

오라클 웹로직 서버의 로컬 인스턴스(Local Instance)임을 알려준다. OEPE는 원

격에 있는 오라클 웹로직 서버 인스턴스에 대한 개발이 가능하도록 원격 배치와

디버깅 기능을 제공한다. 적합한 호스트를 오라클 웹로직 서버 버전을 선택했던

동일한 마법사창의 최상단 필드에 명시한다.

마지막 그림의 마법사 창에는 보다 더 많은 내용이 있다. Download additional

server adapters Library Provider Framework의 활용에 대한 예이다. 이 경우,

이클립스 사용자는 이클립스와 연결된 추가 서버 지원을 다운로드 받을 수 있다.

가령, 오라클 웹로직 서버의 향후 버전에 대한 이클립스 지원 파일을 다운로드 받

는데 사용될 수 있다.

웹 프로젝트 만들기

IDE에 오라클 웹로직 서버의 인스턴스를 연동함으로써 Java EE 서버에 의존적

인 이클립스 프로젝트 구현에 이 서버 인스턴스를 사용할 수 있게 된다. 웹 애플리

케이션 프로젝트를 생성하는 가장 쉬운 방법은 Project Navigator에서 오른쪽을

클릭하고 New→Project 선택하는 것이다. 그 후 Project 마법사창에 Web 폴더

의 Dynamic Web Project을 선택한다. 다음 화면이 이 과정을 보여준다.

Dynamic Web Project를 선택한 경우 Dynamic Web Project 생성 마법사의 첫

번째 화면은 다음 그림에서 볼 수 있다.

필자가 이전에 설정한 Oracle WebLogic Server 11g R1 인스턴스는 “Target

Runtime”에서 확인할 수 있다. 2.5 버전은 Servlet 2.5버전을 의미한다. 이 경우

“Default Configuration for Oracle WebLogic Server 11R1” 패싯(Facet) 프리

셋을 선택하면 웹 애플리케이션 개발을 위한 기본 facet이 추가된다. 자동 JSF와

웹 서비스 지원 옵션 등의 다른 옵션도 일부 가능하다.

Next를 클릭하면 Dynamic Web Project 생성 마법사에서 Web Module 구성

화면이 나타난다.

Page 27: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

81 Summer 2010 이클립스 Technology & Developer

디폴트로 컨텍스트 루트는 단순히 프로젝트 이름으로 지정된다. 위에서 보는 바

와 같이, 필자는 “SimpleWebProject”에서 “simpleWeb”로 컨텍스트를 변경

했다. 상기 예시는 웹 프로젝트의 content directory 디폴트 세팅과 소스 코드

directory를 활용하고 있다.

마지막으로 Generate deployment descriptor 선택을 체크하면 필수 web.xml

deployment descriptor와 선택적으로 weblogic.xml deployment descriptor

이 만들어진다. Finish를 클릭하면 아래에서 보는 바와 같이, 추가 프로젝트 소스

및 구성 파일과 함께 프로젝트가 만들어진다.

이 Project Explorer 화면을 보면 프로젝트 생성 마법사에서 요청한 대로 web.xml

과 weblogic.xml 디스크립터 파일(Descriptor Files)이 생성됐음을 알 수 있다.

엔터프라이즈 애플리케이션 프로젝트 만들기

Dynamic Web 애플리케이션은 엔터프라이즈 애플리케이션 프로젝트(EAR

Project) 를 사용하지 않아도, 오라클 웹로직 서버에 직접 배치가 가능하다. 엔터

프라이즈 애플리케이션 프로젝트를 원할 때, Project Explorer창의 오른쪽을 클

릭하고 New→Enterprise Application Project를 선택하면 쉽게 만들어진다.

마법사는 다음 화면에 나타난다.

화면에서처럼 “Target Runtime”에서 이전에 정의된 Oracle WebLogic Server

11g R1인스턴스를 다시한번 선택하고 Java EE 버전(“EAR version”)을 5.0으로

지정할 수 있다. 그리고 다시 한 번 Default Configuration for Oracle WebLogic

Server 11g R1을 사용할 것이다. “New EAR Application Project” 마법사 페이

지에서 Next 버튼을 클릭하면, 엔터프라이즈 애플리케이션 프로젝트에 포함되는

Java EE 모듈을 선택할 수 있는 마법사 페이지로 이동한다. EAR 프로젝트는 자

체 소스 코드와 인위 구조를 가진 실제 프로젝트가 아니라 기타 Java EE 프로젝

트를 포함하는 컨테이너 프로젝트(Container Project)다. 이 경우, 필자는 이미

네 가지 해당 프로젝트를 생성했기 때문에 이 네 가지 프로젝트는 EAR 프로젝트

의 포함 가능한 목록에 열거되어 있다. 아래 그림을 보면 알 수 있다.

위의 화면에서처럼, 필자는 이전에 생성했던 dynamic Web project가 이 EAR 프

로젝트에 포함되도록 선택했다. 또한, EJB 프로젝트가 포함되도록 표시했으며 배

포 디스크립터(Deployment Descriptor)가 생성되도록 선택했다.

Finish버튼을 클릭했을 때, 마법사는 종료되고 다음 그림에서 보는 바와 같이 엔

터프라이즈 애플리케이션 프로젝트가 생성되었다.

위 그림을 통해서 새롭게 만든 EAR 프로젝트가 두 개의 디스크립터 파일(Java

EE standard application.xml과 WebLogic Server extensions-specific

weblogic-application.xml)을 포함하고 있다는 것을 알 수 있다.

Page 28: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 82

Java EE 편집과 오라클 웹로직 서버 확장 디스크립터 파일

OEPE 다운로드에 Spring IDE를 삽입해 스프링 프레임워크 구성을 단순화시킨

것처럼 OEPE는 오라클 웹로직 서버 확장을 활용하여 애플리케이션을 보다 쉽게

구성할 수 있다. Java EE표준을 준수하는 서버들은 서버에 특화된 구성 파일들

을 통해서 확장기능들을 제공할 수 있다. 오라클 웹로직 서버의 경우, 웹 애플리케

이션을 위한 구성 파일은 weblogic.xml이 된다. 이와 유사하게 엔터프라이즈 애

플리케이션을 위한 오라클 웹로직 서버 확장 구성 파일은 weblogic-application.

xml이 된다. 에디터는 OEPE를 통해 오라클의 특정 웹로직 서버 디스크립터 파일

을 보다 쉽게 만들고 유지할 수 있다.

표준 Java EE 디스크립터 파일 web.xml과 application.xml을 편집하는 경우, 이

클립스와 OEPE는 앞서 Spring 구성파일 편집에서 보여준 대로 동일한 테이블-기

반의 “Design” 보기를 제공한다. 이 “Design” 보기는 개발자가 drop-down 리스

트를 통해 child element나 XML 파일의 다른 요소들을 선택할 수 있도록 해주기

때문에 유용하다. Spring 구성 작업을 하는 동안 입력 실수는 물론, 지원되지 않는

XML element와 attribute 사용을 줄여준다. web.xml에서 가져온 예시는 다음

과 같다.

이 기능을 활용하여 어떤 옵션이 사용 가능한지를 알 수 있고 element tag와

attribute name에서 발생할 수 있는 입력 오류를 줄일 수 있다. web.xml 파일 지

원 기능은 표준 application.xml 파일에도 동일하게 적용된다. 표준 Java EE 배

포 디스크립터 파일용 에디터는 매우 유용하지만 오라클 웹로직 서버 확장 배포

디스크립터용 에디터는 개발자가 사용하기에 훨씬 더 편리하다. 이러한 에디터를

위한 “Descriptor” 탭은 이전에 제시한 에디터의 “Design” 탭에서 사용된 테이블-

기반 방식보다 훨씬 정교하다.

SimpleWebProject를 만들 때, 필자는 Target Runtime을 WebLogic 11g R1

로 표기했다. 이러한 일부 특정 정보들은 서버와 별개인 web.xml 파일에서 표기

되지 않는다. 그러나 WebLogic 특화된 weblogic.xml 파일에서 서버 버전 정보

를 알고 있는 것은 바람직하다. Dynamic Web Project 마법사에서 생성된 초기

weblogic.xml 파일은 다음과 같은 코드 목록을 갖고 있다.

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-web-app

xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

http://www.bea.com/ns/weblogic/weblogic-web-app

http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-

app.xsd">

<wls:weblogic-version>10.3.1</wls:weblogic-version>

<wls:context-root>simpleWeb</wls:context-root>

</wls:weblogic-web-app>

프로젝트 생성 마법사는 이 파일의 root element에 필요한 namespace 정보들

을 추가했고 오라클 웹로직 서버의 특정 버전과 이 디스크립터를 연결했으며 Web

애플리케이션 컨텍스트를 제공했기 때문에 매우 편리하다. 이 디스크립터 파일

에 표기할 수 있는 여러 가지 추가적인 옵션들도 있다. Spring 구성 파일을 편집

했던 것과 마찬가지로 에디터를 사용할 수 있는 하나의 방법은 사용 가능한 XML

element를 선택할 수 있도록, Source탭에서 XML element 완성 기능을 활용하

는 것이다. 아래 그림의 weblogic.xml 파일에 잘 나와 있다.

앞서 제시한 예시에서처럼 오프닝 “<”을 입력하면 가능한 element를 보여주는 팝

업 창이 뜬다. 이 경우 필자는 wls:fast-swap element를 선택했다.

이 방식은 편리하고, element 이름과 정확한 표기를 기억할 필요가 없어서 좋은

Page 29: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

83 Summer 2010 이클립스 Technology & Developer

반면에 Descriptor 탭은 FastSwap 옵션을 표기하는데 더 간편한 방법이 될 수

있다.

다음 화면은 사용하기 편리한 WebLogic Web Application Deployment

Descriptor의 “Descriptor”에 대해 보여준다. 이 경우 FastSwap이 표기되었다.

Source 탭으로 돌아왔을 때, 체크박스와 사용하기 쉬운 두 개의 텍스트 필드로 명

시한 FastSwap 정보가 weblogic.xml 소스에 추가되었음을 알 수 있다.

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-web-app

xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

http://www.bea.com/ns/weblogic/weblogic-web-app

http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-

app.xsd">

<wls:weblogic-version>10.3.1</wls:weblogic-version>

<wls:context-root>simpleWeb</wls:context-root>

<wls:fast-swap>

<wls:enabled>true</wls:enabled>

<wls:refresh-interval>5</wls:refresh-interval>

<wls:redefinition-task-limit>5</wls:redefinition-task-limit>

</wls:fast-swap>

</wls:weblogic-web-app>

엔터프라이즈 애플리케이션 프로젝트 생성 마법사로 생성한 weblogic-

application.xml 파일은 다음과 같다.

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-application

xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/javaee_5.xsd

http://www.bea.com/ns/weblogic/weblogic-application

http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-

application.xsd">

<!-- server-version: 10.3.1 -->

<wls:application-param>

<wls:param-name>webapp.encoding.default</wls:param-name>

<wls:param-value>UTF-8</wls:param-value>

</wls:application-param>

</wls:weblogic-application>

weblogic.xml 파일처럼 Source 보기에서 직접 편집할 수도 있고 소스 편집을

수월하게 하기 위해 element 및 attribute 완성기능을 사용할 수도 있다. OEPE

가 제공하는 weblogic-application.xml용 에디터는 weblogic.xml과 유사한

WebLogic-specific 파일의 Descriptor 보기를 지원한다. 아래 그림은 이 도구

를 활용해서 description이 얼마나 쉽게 추가되는지 보여준다. 또, 필자가 Enable

Spring extension의 확인란을 선택했다는 것을 주목할 필요가 있다.

Descriptor 보기를 활용하여 weblogic-application.xml를 편집할 때, 소스 코드

는 아래와 같이 변경된다.

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-application

xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"

Page 30: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

Technology & Developer 이클립스 Summer 2010 84

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/javaee_5.xsd

http://www.bea.com/ns/weblogic/weblogic-application

http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-

application.xsd">

<!-- server-version: 10.3.1 -->

<!-- description: This is an example of using Oracle Enterprise

Pack for Eclipse and its handy weblogic-application.xml editor. -->

<wls:application-param>

<wls:param-name>webapp.encoding.default</wls:param-name>

<wls:param-value>UTF-8</wls:param-value>

</wls:application-param>

<wls:component-factory-class-name>org.springframework.jee.

interfaces.SpringComp

onentFactory</wls:component-factory-class-name>

</wls:weblogic-application>

이제 weblogic-application.xml 파일에는 Descriptor 보기에서 표기한 입력 값

들이 포함되지만 소스 코드에 직접 입력하는 것보다 Descriptor 보기를 통해 입

력하는 것이 보다 더 간편했다.

weblogic-application.xml 에디터의 “General” 항목에서 Enable Spring

extension 확인란을 클릭했기 때문에 OEPE는 org.springframework.jee.

interfaces.SpringComponentFactory를 참조하여 디스크립터에 wls:

component-factory-class-name element를 추가했다.

이 옵션을 통해서 오라클 웹로직 서버는 Java EE에서 지원하는 것 이상의 의존

성 주입(DI)과 관점 지향 프로그래밍(Aspect-Oriented Programming: AOP) 기

능을 가진 스프링 프레임워크를 활용할 수 있다. SpringComponentFactory 클

래스는 JSR 250(“Common Annotations for the Java Platform”)을 실행하는

Pitchfork(피치포크)라 불리는 스프링 프레임워크 프로젝트의 일부로서 제공된다.

weblogic.xml 디스크립터 파일 에디터는 웹 애플리케이션에서 스프링 프레임워

크 확장을 동일하게 활용할 수 있도록 해준다.

공유 라이브러리 표시

공유 라이브러리 지원은 OEPE의 활용 편의를 위한 오라클 웹로직 서버에 특화된

또 다른 기능이다. 공유 라이브러리를 통해서 오라클 웹로직 서버에 사용되는 다

수의 애플리케이션은 동일한 라이브러리를 활용할 수 있다. 엔터프라이즈 애플리

케이션 프로젝트에서 공유 라이브러리는 weblogic-application.xml 디스크립터

파일을 통해서 활용된다. 앞서 보여준 대로, 이 파일은 파일 에디터의 “Descriptor”

로 쉽게 편집할 수 있다. 아래 화면은 공유 라이브러리를 표시하기 위해 사용되는

에디터의 Descriptor 보기를 보여준다.

Descriptor 보기의 오른쪽 상단에는 이 세팅을 통해서 애플리케이션 간에 라이

브러리 공유가 가능함을 알려주는 설명 문장이 나타난다. 설명 문장 (Add shared

library references…) 밑줄의 링크를 클릭하면 아래와 같은 화면이 나온다.

위의 예시에서 애플리케이션 간에 공유하기로 선택된 라이브러리에는 Java

Server Faces (JSF), MyFaces의 다수 버전, JavaServer Pages Standard

Tag Library (JSTL)의 다수 버전이 포함된다. 상기에 제시된 것 외에 다른 라이브

러리가 필요한 경우에는, Manage WebLogic Shared Libraries 링크를 통해 공

유할 수 있는 다른 라이브러리를 찾을 수 있다. 이 화면은 아래와 같다.

Add 버튼은 오라클 웹로직 서버에 다수 애플리케이션의 공유 라이브러리로 명시

될 수 있는 기타 라이브러리를 추가하는데 사용된다.

Page 31: 71 이클립스 스프링 및 오라클 웹로직 서버로 자바 애플리케이션 ...unioneinc.co.kr/upload/board/OracleGoldenGate로실시간... · 2011-05-06 · pdf)가 들어있다

85 Summer 2010 이클립스 Technology & Developer

특정 라이브러리가 공유 라이브러리로 선택되면 다음 화면처럼 weblogic-

application.xml descriptor 파일 에디터의 Descriptor 보기에 나타난다.

상기의 예시에서 JSTL 1.2 라이브러리가 공유 라이브러리로 선택되었다. 이에 대

한 실제 소스 코드는 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-application

xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/javaee_5.xsd

http://www.bea.com/ns/weblogic/weblogic-application

http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-

application.xsd">

<!-- server-version: 10.3.1 -->

<!-- description: This is an example of using Oracle Enterprise

Pack for Eclipse and its handy weblogic-application.xml editor. -->

<wls:application-param>

<wls:param-name>webapp.encoding.default</wls:param-name>

<wls:param-value>UTF-8</wls:param-value>

</wls:application-param>

<wls:library-ref>

<wls:library-name>jstl</wls:library-name>

<wls:specification-version>1.2</wls:specification-version>

<wls:exact-match>true</wls:exact-match>

</wls:library-ref>

<wls:component-factory-class-name>org.springframework.jee.

interfaces.SpringCom

ponentFactory</wls:component-factory-class-name>

</wls:weblogic-application>

library-ref element와 sub-element항목이, JSTL 1.2라이브러리가 공유 라이브

러리로 사용될 것이라는 점을 오라클 웹로직 서버에 명시하고 있다. 이러한 방식

으로 공유 라이브러리를 활용할 경우, 서버에 배치되는 각각의 WAR 또는 EAR 파

일에 이 라이브러리를 포함시킬 필요가 없다는 이점을 얻을 수 있다.

FastSwap

특정 오라클 웹로직 서버 확장을 weblogic.xml으로 표기하는 것에 대한 앞선 예

시에서 FastSwap를 예로 들었다. 이 유용한 기능 덕분에 개발자는 전체 애플리케

이션을 재배치할 필요 없이 이미 배치된 애플리케이션(압축이 풀린 형태의 JAR,

WAR 또는 EAR)의 변경사항을 클래스 정의에 “반영”할 수 있다. FastSwap이 새

로운 클래스를 컴파일하지는 않지만, 이클립스는 파일을 저장할 때 컴파일하는 기

능을 지원한다. 저장 시 자동 컴파일해주는 기능과 FastSwap기능이 없을 경우,

특별히 아주 작은 변경사항에 대해서도 전체 Java EE 재배치 과정을 수행해야 하

기 때문에 매우 곤혹스러운 일이 될 것이다. 오라클 웹로직 서버는 오직 개발 모드

에서 확실히 FastSwap을 지원하기 때문에 OEPE를 통한 이클립스의 활용이 적

절하다.

결론

스프링 프레임워크와 오라클 웹로직 서버는 엔터프라이즈 자바에서 가장 많이 알

려지고 널리 사용되는 제품이다. 이클립스를 위한 오라클 엔터프라이즈 팩은 스프

링 프레임워크와 오라클 웹로직 서버의 애플리케이션 개발을 보다 간소화한다. 포

함된 Spring IDE 및 OEPE 덕분에 개발자들은 특정 Spring 및 오라클 웹로직 서

버 구성 세부사항을 연구하고 기억하는 데 소요되는 수고를 줄일 수 있다. 또한, 컴

파일 시간에 시스템 구성의 정확도를 상당히 개선하므로 런타임에 오류가 거의 발

견되지 않는다.

추가 리소스

• 오라클 웹로직 서버 11g Release 1 (10.3.1) 사용자용 주석

• 스프링 프레임워크 프로젝트 피치포크

• weblogic.xml 배포 디스크립터 Elements

• weblogic.xml 파일용 XML Schema 정의

• 엔터프라이즈 애플리케이션 배포 디스크립터 Element

• weblogic-application.xml 파일용 XML Schema 정의

• Spring 컨텍스트 파일용 XML Schemas

원문 : http://www.oracle.com/technology/pub/articles/marx-oepe-spring.html