'2011/05'에 해당되는 글 4건

  1. 2011.05.24 Toad TeamCoding - Integration with SubVersion - part2
  2. 2011.05.24 Toad TeamCoding - Integration with SubVersion - part1
  3. 2011.05.16 실전 데이터모델링(비트컬럼으로 컬럼레벨 데이터통합) 기법 및 오라클 비트연산 가이드 (3)
  4. 2011.05.11 Toad의 강력한 기능을 eclipse 안에서 - Toad Extension for eclipse
2011.05.24 16:23

Toad TeamCoding - Integration with SubVersion - part2




Toad TeamCoding part 1에 이어서...

이전 글을 못보신 분은 아래링크 클릭!!
2011/05/24 - [데이터베이스/Toad] - Toad TeamCoding - Integration with SubVersion - part1

4. Toad Team Configuration

자… 이제 필요한 SW는 모두 설치했으므로 Toad Team Coding을 위한 설정 작업만 하면 된다.

4-1. Toad Team configuration

Server-side Object Install 과정에서 생성한 TOAD 계정으로 로그인 한다. TOAD 계정은 Team Coding에 필요한 Role을 모두 가지고 있기 때문이다.

상단 툴바에서 우측 마우스 클릭 > Team Coding 을 선택해 관련 툴바를 활성화 시킨다. 물론 Menu > Utils > Team Coding > 하위 메뉴를 이용해도 동일하다.



툴바 중 체크 아이콘인 “View Team Coding Status with this Session” 버튼을 클릭한 후 나타난 화면에서 Setting 버튼을 누른다.



위 화면처럼 체크하여 Team Coding 과 버전컨트롤 기능을 활성화 한다. 버전 컨트롤 Provider로 Subversion을 선택한 후 하단의 Provider Options 버튼을 클릭한다



Subversion 설정화면에서 SVN Executable 항목에는 이전 화면에서 설치한 SlikSvn 설치폴더의 svn.exe를 선택한다.



Server 설정탭에서는 SVN 서버에 대한 정보(서버명만)를 입력한다. 별도의 서버가 있다면 그 서버에 대한 정보를 입력하고, 나는 위에서 로컬에 설치한 Visual SVN 서버를 사용할 것이므로 나의 로컬 컴퓨터 명을 서버항목에 입력하였다.



옵션탭에서는 기본설정을 그대로 사용해도 무방할 듯 하다. OK>

4.2. local repository setting & init sync

실제 소스코드가 저장될 로컬 디렉토리를 생성한다. 그리고 해당 디렉토리와 svn 레파지토리와 한번은 싱크를 맞춰야 하므로 check out 한다.

먼저, 로컬에 프로젝트 소스를 저장할 디렉토리를 생성한다. 예제: C:\project_ws

해당 디렉토리를 선택한 후 우측 마우스 클릭 > SVN CheckOut… 클릭

(* 필자의 경우에는 위에서 Tortoisesvn을 설치했기 때문에 탐색기와 SVN이 통합되어 있다. 다른 툴을 사용한다면 여하튼 svn repository와 최초 한번 Checkout을 해야 한다는 것만 잊지말자)


4.3 Subversion Login

이제 마지막 작업만 남았다. Toad에서 Team Coding 툴바 중 “Log on To VCS Provider” 아이콘은 선택하자.



 

로그인 창에서 Repositorys는 그림처럼 입력한다. VCS Provider 설정화면에서 서버명까지 입력했기에, Repository의 나머지 이름을 입력한다. 프로젝트명은 빼고 레파지토리명까지만 입력한다. Working Directory 항목에는 좀전에 생성하고 Checkout한 로컬 폴더 경로를 입력한다.

유저명과 패스워드는 SVN Server에 생성한 계정정보를 입력한 후 OK 버튼을 누르면 Toad에서 SVN 서버로 로그인한다.


 


로그인이 정상적인지 확인하려면 Team Coding Toolbar 중 “View Team Coding Status for this session” 툴바를 클릭해서 위 그림처럼 모든게 녹색 체크이면 정상인 것이다.

4.4. Configure Code Control Groups

이제 정말 마지막 작업들만 남았다. Toad Team Coding Toolbar에서 “View/Configure Code Control Groups” 버튼을 클릭한다.

Code Control Group에서는 버전관리나 Team Coding할 Oracle Object와 Subversion Project와 매핑을 해준다.

Code Control Group 팝업창에서 첫번째 아이콘인 “Add Group” 아이콘을 클릭한다.


하단의 VCS Project를 우리가 생성한 SVN 프로젝트를 선택하고 Group name 항목은 프로젝트명과 동일하게 입력한다. (사실 아무거나 입력해도 상관없다.)


추가한 Code Control Group에서 관리할 Oracle Object를 지정하는 화면이 실행된다. 관리할 스키마 등의 정보를 추가 하자.


끝으로 이미 Code Control Group 화면에서 관리하고자 지정했던 스키마가 가진 PL/SQL Object를 VCS Provider 및 Team Coding 환경에 Export 하면 Toad, File, SVN 모두 싱크가 맞아진다.

Code Control Groups 화면에서 Group 명을 선택한 후 “Export to VCS” 버튼을 클릭한다.



클릭하면 미리 매핑한 스키마가 소유한 package, function, trigger, procedure, type 등의 object 목록이 나타나며 OK 버튼을 누르면 아래 그림처럼 SVN에 Commit할 때 버전을 어떻게 처리할 것인지 묻는 대화상자가 나온 후 동기화 작업이 진행된다.



두번째 옵션을 선택하자.



해당 Oracle Object가 정상적으로 Subversion에 추가되었다는 메시지가 출력된다.

모든 설정 작업은 끝났다.

5. Test & Others View

5.1. Version Control Browser

Version Control Browser는 Subversion에 저장된 파일(Oracle Object 스크립트) 목록을 조회하고, 버전 히스토리를 볼 수 있으며 해당 파일을 체크아웃/체크인 할 수 있는 일종의 VCS Provider Client이다.


아래 버전별 소스 비교 화면은 위의 “Version Control Browser” 화면의 우측 하단의 History 목록에서 우측마우스 클릭> “View Differences” 메뉴 선택 후 나타난 비교화면이다. Compare 기능도 다양하고 아주 쓸만하다.


5.2. Team Coding Options

Menu > View > Toad Options 항목 중 Source Control 부분은 Team Coding에 대한 몇 가지 설정을 할 수 있다.


5.3. Team Coding Viewer

Team Coding Viewer는 버전관리하는 oracle object에 대한 status를 조회하는 화면이다. Team Coding Viewer는 위 화면의 Version Control Browser 보다 훨씬 로딩 속도가 빠르다.

 

5.4. Source 편집.

5.4.1. 체크아웃

스키마 브라우저나 에디터에 열리는 스크립트를 편집하려고 시도해 보라. Code Control Group에 지정된 Object는 편집이 안된다. 편집을 하기 위해서는 Team Coding Toolbar에서 Check Out 버튼을 클릭해야한다. 체크아웃하면 토드는 SVN에서 소스를 가져와 파일에 싱크를 맞춘후 에디터에 로드한다.

만일 신규 스크립트의 경우에는 스크립트를 작성 후 컴파일하여 Oracle에 반영한 후 체크아웃 하면 토드는 신규이므로 SVN에 먼저 Commit하여 저장한 후 로컬레파지토리 경로로 파일을 생성한다.

체크아웃을 하면 SVN과는 달리 Toad는 Oracle 객체를 Lock을 한다. 다른 사람은 Lock한 사람이 체크인 하지 않는 한 소스를 편집할 수 없다.

5.4.2. 체크인

소스 개발 및 수정이 끝났으면 컴파일하여 Oracle에 반영하고 체크인 버튼을 눌러 SVN에 Commit 작업이 이루어 지도록 한다. 체크인시에도 토드는 로컬 레파지토리의 파일을 먼저 싱크하고, svn에 commit 하게 된다. 체크인 된 소스는 다른 사람이 편집할 수가 있다.

 


Conclusion

Toad Team Coding을 이용 하기 위해서 이렇게 많은 작업을 해야 한다니 힘이 들긴 한다.

구성이 복잡한 것 외에 또 다른 단점을 꼽으라면 체크아웃/체크인시에 생각보다 Load가 많이 발생한다. 파일과 SVN, Toad Repository까지 모두 싱크 작업을 하려니 시간이 조금 걸릴 듯 싶기는 하지만.. 그래도 빠르게 팍팍 소스가 로드되던 팀 환경 없는 방식과 비교하면 느린 것은 틀림이 없다.

하지만, PL/SQL 소스 관리는 정말 편리하다. SVN의 모든 잇점을 모두 다 누릴 수는 없지만 핵심적인 기능은 전부 이용가능하며, Toad Team Coding이 주는 혜택까지.. 반드시 사용해 볼만한 기능임에는 틀림없다.




* subversion이 아닌 cvs와 연동시 command-line tool 지정시 cvs.exe는 나만 그런지는 모르겠지만 cvs 서버(유닉스 환경)에 접속이 제대로 되지 않았다. cvsnt를 설치하여 cvsnt 폴더에 있는 cvs.exe를 지정하니 cvs 서버 접속이 정상적으로 잘 되었다. 이것을 몰라 한참 고생했던거라  cvs와 연동하실 분은 먼저 cvs.exe로 접속해보고, 잘 안되면 바로 cvsnt로 갈아타시길..

Trackback 0 Comment 0
2011.05.24 15:44

Toad TeamCoding - Integration with SubVersion - part1




현대 프로그램 개발환경에서 CVS, SVN 같은 버전관리 툴은 필수 툴이 되어 버렸다. 그러나 DB 개발언어인 Oracle의 PL/SQL 언어로 함수나 패키지, 프로시저 등을 개발할 때 버전관리 툴을 사용할까? 대부분 잘 사용하지 않는다.

사용하지 않는 원인을 보면 거의 모든 버전관리시스템이 파일기준으로 동작을 하는데 비해 PL/SQL 개발은 따로 파일에 저장을 하지 않고 DB에 바로 저장을 하기 때문일 것이다. 물론 부지런한 개발자는 항상 PL/SQL 소스를 로컬 파일에 저장해 두고, 로컬 파일 정보를 별도의 버전관리 시스템의 클라이언트를 이용해서 버전관리를 할 수는 있을 것이다. 그렇지만, 그게 얼마나 귀찮은  일인가? 개발할 때 마다 수많은 PL/SQL 코드를 매번 파일로 저장하고, 별도로 COMMIT을 해야 한다면? 혹시라도 단 하나의 파일이라도 COMMIT해야 하는걸 잊어버린다면?
이런 귀찮은 작업을 DB 클라이언트 툴이 다 해준다면 쉽게 PL/SQL 같은 프로그램도 버전관리를 할 수 있을 텐데.. 그런 툴이 없다 보니 대부분의 DBA나 DB 개발자들은 버전관리를 잘하지 않는것이다.

그런데, 그런 기능을 지원해주는 툴이 예전부터 있었다.
“Toad for Oracle” 대부분의 Oracle 개발자들이 알고 있는 두꺼비. 그러나 이런 기능이 있는지 알고 있는 사람은 정말 몇 안되며 이 Team Coding 기능을 필드에 적용하는 곳은 더더욱 적을 것으로 생각된다.

Toad에서 Team Coding 기능을 활성화하고, 서드파티 버전관리 시스템(CVS, SVN 등)과 연동한 후 Toad의 스키마 브라우저에서 Oracle에 저장된 프로그램을 편집하려고 에디터로 오픈하면 (정확히는 수정을 위해 소스를 Toad에서 체크아웃하면) Toad는 버전관리시스템에서 최신의 소스를 가져와 로컬 파일 정보도 수정 반영한 후 에디터에 로드한다. 그리고 소스 내용을 Toad에서 수정한 후 컴파일하여 Oracle에 반영한 다음 소스를 체크인하면 Toad는 자동으로 로컬파일을 수정하고 수정된 내용을 버전관리시스템에 COMMIT 한다. 버전관리시스템과 연동이 얼마나 편리한가? 별도로 파일저장 버튼 한번 클릭하지 않고 Toad에서 체크인과 체크아웃만 하면 된다. (Toad는 두 명 이상이 동시에 PL/SQL 소스를 수정하지 못하게 하도록 Team Coding 기능 lock을 사용하여 막는다. 체크아웃 한 사람만 수정이 가능하다)

Toad Team Coding Overview

Toad의 초기 제품은 Microsoft의 Microsoft SCC API를 지원하는 툴만 버전관리를 지원 했었다.
그 후 Microsoft SCC (Source Code Control)API로 CVS와 SVN을 지원하는 Component가 나와  CVS나 SVN과 연동은 가능하도록 변경되었다.

Toad v10.5에 이르러 CVS와 SVN의 경우 별도의 SCC 지원 컴포넌트 없이 command-line client만 설치하면 쉽게 연동되도록 코드가 개선되었으며, 이전보다는 쉽게 형상관리 툴과 연동을 할 수 있게 되었다.

Toad v10.6 현재 Direct Supported되는 버전관리 툴은 다음과 같다.

 Version Control Provider  Version
 Concurrent Versions System (CVS)*  CVS 1.11.9 and later
CVSNT 2.08 and later
 Microsoft Team Foundation Server  2005, 2008, and 2010
 Microsoft Visual SourceSafe  5.0, 6.0, and 2005 (8.0)
 Perforce*  2009.2 (command-line client)
 PVCS  Note: PVCS 6.6.1 and 6.8.0 are specifically not supported with Team Coding.
 Subversion*  1.6.5 and later

* 표기가 있는 버전 컨트롤러는 command-line client를 이용하여 접속함.

이 목록에 없는 제품이라 하더라도 Microsoft SCC API를 지원한다면 Toad를 통해 버전관리를 할 수 있다.

Toad에서는 Team Coding 전략을 아래 표에 나와있는 세가지 방식 중 하나를 선택해서 사용할 수 있다. Toad의 팀 코딩 기능과 서드 파티 버전관리 시스템 연동의 조합에 따라 달라지며, 그에 따라 Setup 자체가 다르므로 개발팀에게 가장 잘 맞는 방식으로 설정하는 것이 좋을 것이다

 소스 컨트롤 방식 장점   단점
 Toad 팀 코딩 (X)

서드파티 소스컨트롤 (O)

버전 히스토리 관리 가능

추가적인 database object 설치가 필요 없음.
Editor와 Project Manager에서만 사용이 가능

Database Object를 lock 할 수 없음.
 Toad 팀 코딩 (O)

서드파티 소스컨트롤 (X)

Check out을 통해 database object를 lock 할 수 있음.

Code Control Group을 통해 lock 관리해야 될 객체를 지정할 수 있음.

Toad내의 database object가 열리는 어떤 화면에서도 사용가능.
Team Coding을 위해 추가적인 Object를 설치해야 함.

버전 히스토리 관리가 불가능.
 
Toad 팀 코딩 (O)

서드파티 소스컨트롤 (O)
 위 두 방식의 장점을 모두 가짐.  설치 및 설정이 가장 복잡함.

*Toad Team Coding : 팀 코딩은 Oracle Object를 lock/unlock 하여 의도하지 않는 변경을 예방할 수 있는 기능. 이 기능을 위해 Toad Server-side Object(테이블, 패키지 등)을 설치해야 한다.

*서드파티 소스컨트롤 : svn, cvs, Team Foundation Server 같은 서드파티 버전 컨트롤 시스템을 이용하여 일반적인 소스의 버전 관리 기능을 이용할 수 있다.


Toad Team Coding & Version Control Integration Setting

Toad에서 Team Coding과 서드파티 소스컨트롤을 모두 이용하기 위해서는 아래와 같이 크게 4가지 단계에 따라 설치 및 설정을 해야 한다.

1. Toad Server Side Object Install
2. SVN Server Install & Setting
3. SVN Command Client Install
4. Toad Team Configuration

Team Coding을 위해 좀 많은 설치 및 설정을 해야 하는 게 귀찮기는 하다. 하지만, 투입되는 비용과 노력에 비해 얻는 효과가 크다면 한 번 해 볼만 하지 않을까?

1. Toad Server Side Object Install

Toad Team Coding을 이용하기 위해서는 Oracle에 Toad 계정과 몇 개의 테이블 및 관련된 Object  등이 생성되어야 한다. 이 것을 해주는 것이 Toad Server-side Objects Wizard다. Oracle 서버에 테이블 및 Object를 설치함으로써 Team Coding 뿐만 아니라 보안관리, 튜닝 등 Toad의 고급 기능을 활용할 수 있으므로 Team Coding과 상관없이 구성하는 것도 좋다.

Server Side Objects Wizard 실행 시 일반적으로 System 계정으로 로그인하여 실행해야 한다. System 계정이 꼭 필요한 것은 아니며 꼭 필요한 몇 개의 권한만 가지고 있다면 어떤 계정으로도 실행해도 상관없다.

메뉴 > Database > Administrator > Server Side Objects Wizard 클릭

첫번째 항목을 선택. Next >

기존에 이미 TOAD 스키마가 있는 경우 업그레이드하며, 신규 설치도 할 수 있는 첫번째 옵션을 선택. NEXT>

TOAD 계정이 없다고 생성을 한다는 메시지가 나온다. OK>



TOAD 스키마에 생성할 기능들을 선택하는 화면이다. Team Coding을 위해서는 Team Coding 항목만 선택하면 되지만, 추후 Toad의 다양한 기능을 경험하기 위해서 전부 다 선택하도록 하겠다. Next >



TOAD Space Manager 기능을 사용하기 위해서 권한이 필요하다는 메시지가 출력된다. 그림처럼 선택 후 Next >

 

Toad Profiler 기능을 사용하기 위해서 몇몇 권한이 필요하다고 메시지가 출력됨. 그림처럼 선택 후 Next >



이 화면에서는 TOAD 계정의 패스워드와 테이블스페이스를 지정해야 한다 Next >

테이블 스페이스가 생성되지 않았거나 Toad 전용으로 테이블 스페이스를 하나 생성해야 한다면, 현 화면을 그대로 둔 채 SQL Editor를 열어 아래 그램처럼 간단한 테이블 스페이스를 생성하면 된다.
* 데이터파일 경로 및 테이블 스페이스 명은 각자의 시스템에 맞게 수정해야 한다.


 


Toad Team Coding을 위한 Role 생성 화면. 신규 생성이니 전부 Create New를 선택한 후 Next >



Toad Server Side Objects 나머지 기능 설치를 위한 테이블 스페이스 지정화면. 전부 이전 화면에서 생성한 테이블스페이스 “TOAD_DS”를 선택. Next >



앞에서 설정한 모든 것들이 스크립트로 만들어 졌다.. Run Script 버튼을 누르면 바로 실행이 된다.
Run Script >

에러 없이 스크립트가 실행되었다. 확인>



스크립트가 실행될 때 생성된 메시지가 출력된다. 성공적으로 설치되었으니 그냥 Next >


Toad Security Administrator를 지정하는 화면. 일단 이 화면은 Next >
추후 필요할 때 설정하도록 하겠다.


Setup 이 끝났다.



현 상태에서 TOAD 계정으로 로그인하여 Menu > Utilities > Team Coding >Team Coding Status 선택 시 나타난 화면이다. Team Coding에 대한 필요사항이 Install 되었다고 나오며, VCS(Version Control System)에 대한 정보가 설치되지 않았다고 보여주고 있다.

화면이 많아서 복잡한 듯 보이지만 실제는 TOAD 계정 생성하고 몇몇 테이블 및 패키지 설치하고, TOAD 계정에 몇몇 권한만 할당해주는 단순 작업이다.

2. SVN Server Install & Setting

이제 Team Coding 을 위한 서브버전 서버를 설치한다. 로컬이든 네트워크 환경이든 상관없다. 필자는 로컬 환경에 Subversion Server를 설치 할 것이다.

윈도우용 Subversion Server로는 가장 사용이 편리한 VisualSVN Server를 설치할 것이다. 서브버전 서버로 다른 어떤 툴을 사용해도 무방하다.

http://www.visualsvn.com/server/download/ 이곳에서 VisualSVN Server를 다운받아서 설치한다.

2-1 SVN Server Install


VisualSVN Server와 관리콘솔 모두 설치를 선택한 후 Next>


설치위치, SVN Server과 관리할 Repository 위치, 접근 포트를 설정한다. 인증은 서브버전 인증을 사용하도록 설정한다. Next 하시면 설치 완료..

2-2. SVN Server Setting

먼저 SVN에 접속할 유저 계정을 하나 생성한다.
좌측 트리에서 Users를 우측마우스 클릭 > Create Users.. 선택. 계정명과 패스워드를 입력한 후 OK 버튼 클릭.


다음은 그룹 생성 단계.

유저 생성과 동일한 방식으로 Groups를 우측 마우스 클릭한 후 Create Group.. 선택. 그룹명을 입력한 후 멤버를 Add 버튼을 클릭하여 생성한 계정을 멤버로 등록한다.


이제 VisualSVN 내에서 Repository를 생성해야 한다.
VisualSVN 관리콘솔에서 좌측메뉴의 Repositories 우측 마우스 클릭 > Create New Repository.. 선택.


Repository 명을 입력합니다.
Create default Structure를 선택하시면 Oracle 폴더 하위에 trunk, branches, tags같은 서브폴더가 생성된다.

일반적으로 SVN의 레파지토리 구성은 레파지토리 > 프로젝트 > trunk/branches/tags 같은 방식으로 구성을 하지만 Toad는 프로젝트 하위에 디렉토리를(예: trunk 등) 만들어서 해당 디렉토리 레벨을 Check Out하면 제대로 인식하지 못하는 문제가 있다. 
그러므로 레파지토리나 하위 프로젝트 생성시 “Create default structure” 체크를 반드시 끄고 만든다.


프로젝트 생성:
생성된 레파지토리명(Oracle) 우측 클릭 > 새로 만들기 > Project Structure를 클릭.


프로젝트명을 입력하고 OK버튼을 클릭.

이렇게 프로젝트를 생성하면 프로젝트 폴더 하위에 trunk, branches, tags 세 폴더가 생성된다.
위에서 언급했듯이 이렇게 폴더가 있더라도 Toad에서 제대로 처리하지 못하므로 VisualSVN Sever의 좌측 트리에서 각각의 trunk, branches, tags 폴더를 삭제한다.
물론, 삭제하지 않아도 사용상의 문제는 전혀 없다.

3. SVN Command Client Install 

3-1. SVN Command Client Install (sliksvn)

Toad는 command-line subversion client tool이 반드시 필요하다. SVN command tool이 여러가지 있지만 필자는 그 중 silksvn를 설치하여 팀개발 환경을 구성할 것이다.

http://www.sliksvn.com/en/download 에서 자신의 컴퓨터 환경(x32, x64)에 맞는 sw를 다운받아서 설치하면 된다. 설치는 간단하다.

Choose Setup Type에서 Custom을 선택한다.


 


 

Subversion Client를 제외하고는 다 설치하지 않도록 설정을 바꾼 다음 Next를 눌러 설치를 진행한다. Team Coding 환경 구성 시 Toad svn.exe만 필요로 한다.

그리고 sliksvn command-line tool이므로 조작이 불편해 추가적으로 GUI Client tool tortoisesvn을 설치할 것이므로 다른 설치 옵션은 모두 빼고 설치한다. 물론 별도의 .GUI 클라이언트를 설치하지 않고 sliksvn만으로 사용한다면 좀 더 많은 옵션으로 설치하는 게 좋을 것이다.

 

끝으로 GUI 환경의 subversion client도 하나 설치한다. 여기서는 가장 많이 사용하는 tortoisesvn 을 설치한다. 별도의 svn client 는 최초 checkout 할 때만 사용하므로 tortoisesvn 설치여부는 각자 판단해서 설치하면 된다.

 

http://tortoisesvn.net/downloads.html 이곳에서 버전에 맞는 설치파일을 다운받아서 설치하시면 된다. 워낙 단순한 install이라서 별도의 설명은 생략하도록 하겠다.


한참을 달렸지만, 아직 중요한 Toad에서의 Team 환경 및 SVN 연동을 위한 설정 부분이 남았다. 이 부분은 part2 에서 살펴보도록 하겠다.

 

Trackback 0 Comment 0
2011.05.16 17:10

실전 데이터모델링(비트컬럼으로 컬럼레벨 데이터통합) 기법 및 오라클 비트연산 가이드




비트컬럼으로 속성레벨의 데이터 통합

이번 포스트에서는 비트값으로 구성된 컬럼으로 컬럼 수준의 데이터 통합에 대한 가이드 및 비트 컬럼을 SQL로 조작하는 방안에 대해 살펴볼까 합니다.

먼저, 일반적인 샘플 ERD를 하나 보겠습니다.


좌측은 Logical 엔터티이며 우측은 Physical 테이블 설계안 입니다.

지극히 간단한 테이블입니다. 웹 화면을 구성하는 메뉴가 있고, 메뉴의 속성으로는 ID, 명, 그리고 화면을 제어하는 4개의 여부 컬럼이 있습니다. 간단하지만 전혀 문제가 없습니다. 요구사항도 명확히 반영했다고 한다면 정말 문제가 없는 모델링 입니다.

프로젝트팀이 프로젝트를 완료하고 난 후 운영팀에서 운영중에 새로운 고객 요구사항들이 나오기시작합니다. 메뉴ID를 화면에 무조건 보여주지 말고 사용자가 보여줄지 말지를 선택하게 해달라는 군요. 그러면 컬럼을 추가하면 됩니다 “메뉴ID디스플레이여부” 란 컬럼이 추가됩니다.

또 다른 고객이 이와 유사한 요구를 해 옵니다.
얼마 지나지 않아 “~여부” 컬럼만 6개나 추가되었군요. 그래도 컬럼만 추가하고 프로그램 코드를 수정하면 요구사항을 반영하는 데에는 큰 문제는 없습니다.

하지만 일 하기 싫은 DBA가 고민합니다.(바로 저 입니다.)
“이런 식의 고객 요구사항이 들어와도 컬럼 수정, 테이블 수정 없이 처리할 순 없을까?”

방법은 아래 그림과 같이 모든 여부 컬럼을 비트값의 합으로 표현하여 하나의 컬럼으로 통합해버리면 됩니다.


4개의 여부 컬럼을 “디스플레이비트값” NUMBER 하나의 컬럼으로 통합했습니다. 기존 모델의 각각의 컬럼은 2진수로 표현했을 때 하나의 비트값에 대응됩니다.

예를 들어
“배너디스플레이여부” 컬럼은 2^0 = 1로 설정하면 되며,
“메뉴이미지사용여부” 컬럼은 2^1 = 2,
“컨텐츠표시여부” 2^2 = 4,
“Hybrid메뉴여부” 2^3 = 8 이 됩니다.

그리고 실제 디스플레이비트값은 각각의 값을 BITWISE OR 연산을 하여 저장을 하게 됩니다.

예를 들어
“배너디스플레이여부” = “Y” ,
“메뉴이미지사용여부”= “N”,
“컨텐츠표시여부” = “Y”,
“Hybrid메뉴여부” = “Y” 값을 갖는 다면 실제 디스플레이비트값 컬럼에 저장되는 값은
1(2^0) + 4(2^2) + 8(2^3) = 13이 됩니다.

각각의 통합전 컬럼에 해당 되는 비트값을 부여할 때 2의 승수로만 부여하기 때문에 실제 bitwise or 연산의 결과나 단순 더하기 결과나 결과는 동일해 집니다.

0001(1) + 0010(2) + 1000(8) = 1011(13)

이 모델의 장점은 고객의 새로운 요구사항이 있을 때 컬럼의 추가 없이 프로그램만 수정하면 됩니다. 좀 있어보이는 말로는 “시스템의 유연성을 높이는 설계 방법” 이라고 하죠. 쉽게 말해 DBA가 편해지는 군요. 제가 바라는 바입니다.

제가 운영하는 시스템의 사례를 얘기할까 합니다.

제가 운영하는 시스템은 마케팅 사이트로 Global 시스템이지만 국내 한 서버에서 전세계 사이트를 모두 서비스 합니다. 시스템 사양에 비해서 Request가 많기 때문에 서버는 항상 바쁩니다. 글로벌 사이트라서 고객은 일년의 단 10분도 시스템이 정지되는걸 원하지 않습니다.

그럼에도 불구하고 위의 사례처럼 자잘 하지만 “~여부” 같은 컬럼을 추가해야만 처리될 수 있는 요구를 합니다. 컬럼 추가하고 개발하면 되겠죠. 하지만 문제가 있습니다. 대부분의 테이블은 문제가 없지만 시스템의 Main Entity인 2~3개의 테이블은 거의 모든 SQL이 집중되고, 수많은 PL/SQL이 참조하고 있어서 컬럼을 추가하는 순간 library cache pin 및 lock 등의 waiting이 걸리면서 오라클이 처리를 빨리 하지 못하게 되며, WAS에서는 DB 요청에 대한 리턴을 빠르게 받지 못하게 되니 계속계속 새로운 요청마다 새로운 Oracle Connection을 맺다가 Connection Pool Max size를 넘어서게 될 때 시스템이 거의 죽어버린답니다.

이런 상황에서는 컬럼 추가 작업 자체가 online에서 쉽게 alter table 명령어로 처리할 수 없으며, 컬럼을 추가하기 위해서는 수많은 결재와 보고를 해야 하고 휴일에 특정 시간대에 시스템을 내리고 컬럼 추가하고 다시 시스템을 기동하는 식으로 처리를 합니다.

어휴~ 컬럼 추가 작업이 장난이 아닙니다. 그러니, 제가 컬럼 추가 안하고 설계할 수 있는 방안을 고민하지 않을 수 없습니다.

하지만 이 모델의 단점도 만만치 않습니다.
단점은 첫째, 가독성이 떨어집니다. DA#으로 모델링을 하면 통합전 컬럼의 비트값을 서브타입으로 표현할 수 있어서 그나마 낫지만 Erwin 같은 툴을 쓰면 속성설명 정도에만 표현할 수 밖에 없어 모델의 가독성이 떨어져 문제가 됩니다.
두번째 단점은 SQL이 복잡해 집니다. 초급 개발자들은 설명을 해줘도 잘 이해를 못하더군요.

간단하지만 위 두 모델에 대해 무엇이 좋고 나쁘다라고는 말할 수 없을 것 같습니다. 다만, 비트값으로 속성을 표현하여 통합할 수 있는 방법도 있다라는 것을 알고, 시스템의 상황에 맞게 가장 적합한 방법을 사용하시면 됩니다. 저 같은 경우는 위의 컬럼 추가가 문제가 되는 테이블, 그리고 자주 업무 요건이 변경되는 테이블은 비트값으로 컬럼을 통합하는 방식을 많이 사용하며, 그렇지 않는 테이블은 사용하지 않습니다.

비트연산 기초

비트값 형식으로 속성을 모델링 했을 때 화면 UI와 이 UI를 처리하는 DML에 대해 살펴보도록 하겠습니다. 그전에 기초로 돌아가서 비트 연산에 대해 알아보겠습니다. 요즘 개발자 분들이 처음부터 웹 개발을 하신 분들은 비트 연산을 할 일이 없어서인지 비트연산을 헷갈려 하더군요.

비트 연산(Bitwise operation)은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산입니다.

NOT : NOT 연산은 각 자릿수의 값을 반대로 바꾸는 연산입니다.

NOT 0111
= 1000

OR : OR 연산은 두 값의 각 자릿수를 비교해, 둘 중 하나라도 1이 있다면 1을, 아니면 0으로 계산됩니다.

0101
OR 0011
= 0111

XOR : XOR 연산은 두 값의 각 자릿수를 비교해, 값이 같으면 0, 다르면 1으로 계산 합니다.

0101
XOR 0011
= 0110

AND : AND 연산은 두 값의 각 자릿수를 비교해, 두 값 모두에 1이 있을 때에만 1을, 나머지 경우에는 0으로 계산합니다

0101
AND 0011
= 0001


예전에 공부했던 게 기억이 나십니까?

비트속성 컬럼값 DML 가이드

화면 UI에서 비트컬럼값을 처리하는 DML 가이드입니다.



다음과 같은 화면이 있다고 가정합니다. 위 메뉴 테이블을 관리하는 화면입니다.

각 비트값에 해당되는 항목마다 라디오 버튼을 가진 하나의 항목으로 UI는 구성될 것입니다. 물론 다른 방식으로도 가능하겠지만요. 일단 이렇게 된다고 가정합니다.

이 화면의 특징은 한 화면에서 비트컬럼값이 사용하는 모든 비트값을 다 관리를 한다는게 특징입니다.

이런 케이스에 대해서는 처리 로직은 간단합니다.

먼저, 화면을 구성하기 위한 SELECT 문을 보겠습니다.

SELECT MENU_ID
            ,MENU_NM
            ,DECODE(BITAND(DISPLAY_BV,1),1,'Y','N') AS "배너디스플레이여부"
            ,DECODE(BITAND(DISPLAY_BV,2),2,'Y','N') AS "메뉴이미지사용여부"
            ,DECODE(BITAND(DISPLAY_BV,4),4,'Y','N') AS "컨텐츠표시여부"
            ,DECODE(BITAND(DISPLAY_BV,8),8,'Y','N') AS "Hybrid메뉴여부"
FROM MENU2;

오라클에서 제공하는 BITAND 함수를 가지고 해당비트값이 1인지를 판단할 수 있습니다.

이 경우 값을 INSERT, UPDATE 할 때는 각각의 항목에 대한 값(Y/N)을 판단해서 아래와 같이 처리할 수 있습니다.

UPDATE MENU2
      SET DISPLAY_BV = DECODE('배너디스플레이여부','Y',1,0)
                                + DECODE('메뉴이미지사용여부','Y',2,0)
                                + DECODE('컨텐츠표시여부','Y',4,0)
                                + DECODE('Hybrid메뉴여부','Y',8,0)
 WHERE MENU_ID = :MENU_ID;

하지만, 위의 경우처럼 Y/N으로 INPUT TYPE=”RADIO”의 값을 구성하는 것 보다는 VALUE로 각각의 컬럼이 갖는 비트값으로 바로 지정하는게 효율적일 수 있습니다. 웹으로 구성한다면 value >0 면 checked를 지정하면 될 것 같군요.


SELECT MENU_ID
            ,MENU_NM
            ,DECODE(BITAND(DISPLAY_BV,1),1,1,0) AS "배너디스플레이여부"
            ,DECODE(BITAND(DISPLAY_BV,2),2,2,0) AS "메뉴이미지사용여부"
            ,DECODE(BITAND(DISPLAY_BV,4),4,4,0) AS "컨텐츠표시여부"
            ,DECODE(BITAND(DISPLAY_BV,8),8,8,0) AS "Hybrid메뉴여부"
  FROM MENU2;

INSERT, UPDATE문은 각각의 항목값을 모두 더해서 처리하면 됩니다.


UPDATE MENU2
      SET DISPLAY_BV = 1 + 4 + 0 + 8
 WHERE MENU_ID = :MENU_ID;

이번에는 좀 더 난이도가 높은 UI를 보겠습니다.

원칙적으로는 비트속성값 모두를 한 화면에서 핸들링 해야 하지만, 업무요건상 그렇게 될 수 없다고 가정합니다. 아래 그림을 보시면 메뉴관리 화면에서는 Menu Image Use 항목과 Is Hybrid menu 항목은 메뉴관리 화면에서 관리하고, 나머지 2개의 컬럼은 다른 화면에서 관리한다고 가정합니다.



이 경우에는 2^1(2) 과 2^3(8)만 화면에서 관리하므로 다른 비트값 2^0(1), 2^2(4) 값은 이 화면에서 핸들링하면 안됩니다.

SELECT문과 INSERT문은 이렇게 화면을 구성하더라도 기존과 동일하게 처리하면 된다. 하지만 UPDATE문은 다른쪽 화면에서 나머지 값에 대한 핸들링을 하므로 영향을 받지 않도록 다르게 처리해야 합니다.

현재 DIPLAY_BV 값을 7 (2^0(1) + 2^1(2) + 2^2(4))이라고 가정하겠습니다.

즉, 배너디스플레이여부=Y, 메뉴이미지사용여부=Y, 컨텐츠표시여부=Y, Hybrid메뉴여부=N인 상태입니다.
위의 메뉴화면에서 사용자가 Save 버튼 클릭시 값이 메뉴이미지사용여부=N, Hybrid메뉴여부=Y로 상태값이 변경되었다고 하면


현재값:                                      0111 (7)
화면에서 관리안하는 비트값의 합 : 0101 (5)
----------------------------------------------
두값의 BITAND 값                     : 0101 (5)

현재 설정값(비관리항목은0으로)  : 1000 (8)
----------------------------------------------
두값의 BITOR                           : 1101 (13)

먼저 현재값과 화면에서 관리하지 않는 항목에 해당되는 비트값의 BITWISE OR 값 (단순 더하기)을 구해서 두 값을 BITAND 합니다.
즉, 현재값인 7인 값과 화면에서 관리하지 않는 항목의 값 (배너디스플레이여부 2^0(1) + 컨텐츠표시여부 2^2(4))을 더한 값과 서로 BITAND 연산을 합니다. 결과가 0101 (5)가 나오는군요.
이 값과 현재화면에서 설정값(단, 관리안하는 UI항목에 대해서는 전부 0으로 비트값처리, 메뉴이미지사용여부=N이므로 0, Hybrid메뉴여부=Y이므로 8)의 합을 서로 BITOR 연산합니다. 5 BITWISE OR 8 = 13가 나오는군요.
13값을 저장하면 됩니다.

다음과 같은 UPDATE문이 나올 수 있습니다.


UPDATE MENU2
   SET DISPLAY_BV = PKG_UTILS.BITOR(BITAND(DISPLAY_BV,5),DECODE('메뉴이미지사용여부','Y',2,0) + DECODE('Hybrid메뉴여부','Y',8,0))
 WHERE MENU_ID = 1;

* DECODE 부분은 UI 값을 대응되는 비트값으로 구성했다면 DECODE없이 바로 더하면 됩니다.

 BITOR 함수는 오라클에서는 DEFAULT로 제공하지 않습니다. 그래서 아래와 같은 PL/SQL 패키지에서 BIT관련 함수를 구현했습니다.

그리고 패키지 주석을 보시면 이해하시겠지만, 특정 비트자리수의 값을 0으로 혹은 1로 설정할 수 있는 BIT_SET 함수도 만들어 두었습니다.
이 함수를 위 사례에 적용해서 만일 현재값과 상관없이 Hybrid메뉴여부(2^3=8) 항목을 CHECKED로 만들려고 하면 BIT_SET(컬럼값, 8, 1)로 함수를 호출하면 됩니다. 마지막 인자값은 두번째 인자값에 해당되는 비트자리수의 값을 1 혹은 0으로 설정하도록 하는 값(1/0)이 인자로 넘어갑니다.

좀 전에 사용했던 UPDATE문을 동일하게 BIT_SET 함수로 처리할 수 있습니다.

UPDATE MENU2
      SET DISPLAY_BV = PKG_UTILS.BIT_SET(PKG_UTILS.BIT_SET(DISPLAY_BV,2,0), 8,1)
 WHERE MENU_ID = 1;


BITWISE 관련 오라클 유저 함수 (패키지)

다음의 패키지(스크립트)는 오라클에서 BITAND 함수만을 제공하기 때문에 원할한 BIT연산을 위해서 관련 함수를 구현한 코드입니다. 참고하시기 바랍니다.


CREATE OR REPLACE PACKAGE PKG_UTILS AS
/******************************************************************************
   NAME        : PKG_UTILS
   PURPOSE     : 시스템 공통으로 사용되는 함수, 프로시저 등을 제공하는 패키지
   DESCRIPTION : UTILITY OPERATION PACKAGE
   REVISIONS   : 1.0
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        2011-04-01  Jinook,lee       1. Created this package.
******************************************************************************/
 
    -------------------------------------------------------
    -- DESC : X, Y 값을 서로 BIT OR 연산한다.
    -- OR 연산은 두 값의 각 자릿수를 비교해, 둘 중 하나라도 1이 있다면 1을, 아니면 0을 계산한다
    -- x, y : 비트 연산할 숫자
    -- return   : bit or 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITOR(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC;
   
    -------------------------------------------------------
    -- DESC : X, Y 값을 서로 BIT XOR 연산한다.
    -- XOR 연산은 두 값의 각 자릿수를 비교해, 값이 같으면 0, 다르면 1을 계산한다
    -- x, y : 비트 연산할 숫자
    -- return   : BIT XOR 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITXOR(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC;
   
    -------------------------------------------------------
    -- DESC : X 값을 BIT NOT 연산한다.
    -- NOT 연산은 각 자릿수의 값을 반대로 바꾸는 연산이다.
    -- x : 비트 연산할 숫자
    -- return   : BIT NOT 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITNOT(x NUMBER)
    RETURN NUMBER DETERMINISTIC;
   
    -------------------------------------------------------
    -- DESC : 닷컴의 비트 컬럼값의 특정비트를 0으로 만드는 함수이다.
    -- 내부적으로 X & ^Y 로 연산한다.
    -- x, y : 비트 연산할 숫자
    -- return   : BIT 마스크 연산한 결과값
    --------------------------------------------------------
    FUNCTION BIT_MASK(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC;
   
    -------------------------------------------------------
    -- DESC : 닷컴의 비트 컬럼값의 특정비트를 주어진 값으로 만드는 함수이다.
    -- x,y : 비트 연산할 숫자
    -- z : x값의 y자리수를 값을 설정할 값 (0 or 1)
    -- return   : BIT SET 연산한 결과값
    --------------------------------------------------------
    FUNCTION BIT_SET(x NUMBER, y NUMBER, Z NUMBER)
    RETURN NUMBER DETERMINISTIC;
   
END PKG_UTILS;
/


CREATE OR REPLACE PACKAGE BODY PKG_UTILS AS
/******************************************************************************
   NAME        : PKG_UTILS
   PURPOSE     : 시스템 공통으로 사용되는 함수, 프로시저 등을 제공하는 패키지
   DESCRIPTION : UTILITY OPERATION PACKAGE
   REVISIONS   : 1.0
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        2011-04-01  Jinook,lee       1. Created this package.
******************************************************************************/
 
    -------------------------------------------------------
    -- DESC : X, Y 값을 서로 BIT OR 연산한다.
    -- OR 연산은 두 값의 각 자릿수를 비교해, 둘 중 하나라도 1이 있다면 1을, 아니면 0을 계산한다
    -- x, y : 비트 연산할 숫자
    -- return   : bit or 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITOR(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC
    IS
    BEGIN
        RETURN x + y - BITAND(x, y);
    END;
   
    -------------------------------------------------------
    -- DESC : X, Y 값을 서로 BIT XOR 연산한다.
    -- XOR 연산은 두 값의 각 자릿수를 비교해, 값이 같으면 0, 다르면 1을 계산한다
    -- x, y : 비트 연산할 숫자
    -- return   : BIT XOR 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITXOR(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC
    IS
    BEGIN
        RETURN BITOR(x,y) - BITAND(x,y);
    END;
   
    -------------------------------------------------------
    -- DESC : X 값을 BIT NOT 연산한다.
    -- NOT 연산은 각 자릿수의 값을 반대로 바꾸는 연산이다.
    -- x : 비트 연산할 숫자
    -- return   : BIT NOT 연산한 결과값
    --------------------------------------------------------
    FUNCTION BITNOT(x NUMBER)
    RETURN NUMBER DETERMINISTIC
    IS
    BEGIN
        RETURN (0 - x) - 1;
    END;
   
    -------------------------------------------------------
    -- DESC : 닷컴의 비트 컬럼값의 특정비트를 0으로 만드는 함수이다.
    -- 내부적으로 X & ^Y 로 연산한다.
    -- x, y : 비트 연산할 숫자
    -- return   : BIT 마스크 연산한 결과값
    --------------------------------------------------------
    FUNCTION BIT_MASK(x NUMBER, y NUMBER)
    RETURN NUMBER DETERMINISTIC
    IS
    BEGIN
        RETURN BITAND(x, BITNOT(y));
    END;
   
   
    -------------------------------------------------------
    -- DESC : 닷컴의 비트 컬럼값의 특정비트를 주어진 값으로 만드는 함수이다.
    -- x,y : 비트 연산할 숫자
    -- z : x값의 y자리수를 값을 설정할 값 (0 or 1)
    -- return   : BIT SET 연산한 결과값
    --------------------------------------------------------
    FUNCTION BIT_SET(x NUMBER, y NUMBER, z NUMBER)
    RETURN NUMBER DETERMINISTIC
    IS
    BEGIN
        IF z = 1 THEN
            RETURN BITOR(x, y);
        ELSIF z = 0 THEN
            RETURN BITAND(x, BITNOT(y));
        ELSE
            RAISE PKG_GLOBAL.ERR_WRONG_PARAMETER;
        END IF;
    END;
END PKG_UTILS;
/

* BIT_SET 함수에서 RAISE PKG_GLOBAL.ERR_WRONG_PARAMETER; 부분은 제가 자주 사용하는 ERROR를 별도의 GLOBAL 패키지에 선언해두고 참조해서 사용할 수 있도록 구성한 부분입니다.  해당 부분 삭제하시고 패키지 컴파일 하시거나 일반적인 PL/SQL ERROR RAISE 하는 구문으로 대체하시면 됩니다.


Trackback 0 Comment 3
  1. 신.. 2011.09.09 01:09 신고 address edit & del reply

    참기발한 방법이군요.
    여부컬럼하면 11100111 혹은 YYYNNYYY 만 알고 있는데 이런 방법도 있군요.
    잘 봅니ㄴ다..

  2. 땅콩맨 2012.05.14 15:36 신고 address edit & del reply

    안녕하세요
    MSSQL에서 SQLite로 쿼리를 바꾸려고 하는데
    sql = "declare @num245(4), @num345 char(4) select @num245=autogubun from staff.dbo.ONR_TV_Station_tbl where num=245 select @num345=autogubun from staff.dbo.ONR_TV_Station_tbl where num=345 거든요. 원래 쿼리가...

    바꾸려고 하니깐 declare도 그렇고 select 문 2개 이어서 쓰는방식도 그렇고
    바꾸는 방법을 못찾겠는데, 혹시 이것에 대해서 답변좀 부탁드릴께요~

    이럴줄 알았으면 SQLite 공부좀 해둘껄 그랬어요... 홀홀홀...

  3. 천일몽 2018.05.10 13:57 신고 address edit & del reply

    만들어주신 패키지를 잘 이용 중에 있습니다.
    감사합니다.

    암호화,복호화 패키지에 이용하였습니다.
    (http://userpark.net/126)

2011.05.11 16:01

Toad의 강력한 기능을 eclipse 안에서 - Toad Extension for eclipse




Toad의 강력한 기능을 Toad를 실행하지 않고 eclipse내에서 이용할 수 있다면 개발자들에게는 유용할 것이다. Quest사의 Toad Extension(freeware)를 이용하면 eclipse 뿐만 아니라, Visual Studio에서도 툴 환경 내에서 Toad의 강력함을 이용할 수 있다.

Toad Extension for eclipse를 설치해보자.

1. Eclipse 실행 – Help > Install New Software 메뉴 선택

2. Install 대화상자의 Work with 부분에 다음의 주소를 입력

http://toaddownload.quest.com/toadextensions/eclipse/freeware/
다음, 다음 눌러서 설치하시고 re-start 하면 설치가 끝납니다.

Toad Extension은 Toad 없이도 구동 가능합니다. 다만, 기존에 Toad가 설치되어 있다면 toad User Files 디렉토리를 읽어서 현재 설정된 Connection정보를 Connection window에 자동으로 설정해 줍니다. 다만, 저장된 패스워드 정보를 읽어오지 못해서 패스워드는 다시 설정해 줘야 합니다.

Toad Extension 실행해 보자.

Eclipse 실행 후 window > Open Perspective > Other 선택 후 Toad Extension을 선택하면 됩니다.


Toad Extension Overview

Connections View

Toad Connections View에서는 신규 접속을 만들거나 기존 Connection 정보를 이용하여 Oracle에 접속할 수 있습니다. Oracle 접속은 Direct TCP/IP를 이용해서 접속할 수도 있으며 Oracle Tnsname 정보를 이용하여 접속할 수도 있습니다.

Schema Browser & Detail Browser

좌측의 Schema Browser에서 Database Object 항목들을 선택하면 우측에 상세정보가 나타납니다.
기본적인 Object만 나오는군요. Freeware라 그런지 dba들이 사용하기에는 좀 기능이 약해 보입니다. 그렇지만 왠만한 프로젝트에서는 이 툴 하나만 있어도 무방할 듯 보입니다.

좌측 Schema browser에서는 기본적으로 트리구조로 보이지만 Tree/Multi Tab/Category 방식의 UI를 지원합니다. (스키마 브라우저의 트리 아이콘을 클릭해 보시면 레이아웃이 바뀐답니다.)

스키마 브라우저에서 각각의 Object를 클릭하면 Detail View에 선택한 Object에 대한 상세한 내용이 나옵니다. 나름 필요한 정보는 모두 잘 나오는 것 같습니다.

SQL Editor


SQL Editor에서는 SQL을 실행하고 결과 및 실행계획 등을 볼 수 있습니다. 단축키가 eclipse 기준으로 설정되어 있어서 토드 사용자에게는 약간 헷갈릴 수 있습니다. 익숙한 키를 사용하려면 eclipse 설정에서 단축키 매핑 정보를 변경하시면 됩니다.

SQL Editor에서는 무엇보다 Code Intelligence 기능이 토드보다 빠릅니다. .(dot)을 입력하면 바로 바로 Object 목록이 나타나는 군요.  무척 맘에 듭니다.

PL/SQL Editor


 PL/SQL 뷰어에서 Edit를 누르면 수정화면으로 넘어갑니다.
제가 사용하는 쪽의 DB는 Character Set이 UTF-8 환경인데.. PL/SQL 뷰어에서는 주석문이 안깨지고 잘 보이는데.. 수정화면에서는 스크립트의 주석 부분이 깨지는 군요. Eclipse의 character set을 UTF-8로 변경해도 여전히 깨지는 군요. 이 부분은 약간 이슈가 있는 듯 합니다.
한글 환경의 DB를 사용하는 곳은 별 문제가 없을것보입없을 것, 테스트를 못해봐서.. 장담은 못하겠습니다.

SQL Monitor


하단의 SQL Monitor View에서 Enable Output 아이콘을 클릭하신 후 detail view나 Schema Browser를 클릭하면 Toad Extension이 해당 데이터를 화면에 뿌리기 위해서 오라클에 보내는 SQL을 모니터 할 수 있습니다. Toad의 spool 기능과 동일한 기능이라고 보면 될 것 같습니다.

Session Browser


개발용 Toad Extension임에도 불구하고 Session Browser가 있다니 놀랍습니다. 해당 세션을 선택하고 세션을 Kill 시킬 수도 있군요.

Oracle Parameter View


오라클 파라미터를 조회할 수 있는 뷰도 제공 됩니다.


Toad Extension은 자바 개발시에 Toad와 Eclipse를 번갈아 가면서 개발하지 않고 eclipse 환경 내에서 왠만한 개발을 할 수 있다는 점은 매우 매력적인 요소입니다. 다만, Toad와 같이 많은 기능을 담고 있지 않아서 DBA가 사용하기에는 조금 무리가 따릅니다.
Eclipse 환경이라서 토드에 익숙하지 않은 개발자들에게 매우 유용할 듯 보이며, 특히 프리웨어라는 점은 ㅋㅋ 무지 좋습니다.
프로젝트에서 DBA만 정품 Toad를 구매하고, 나머지 개발자들은 Toad Extension을 사용한다면 비용이 많이 절감되겠네요.

데이터를 조회하고 핸들링 할 수 있는 다른 eclipse plug-in 들과 비교해 보더라도 개인적으로는Toad Extension이 가장 맘에 드는 툴입니다. 물론 아직은 버그도 있고 기능도 부족하지만 점점 더 좋아지리라 막연한 기대를 해봅니다.

제 글을 읽고 맘에 드신다면… 한번 사용해 보세요.^^

Trackback 2 Comment 0