본 장에서는 Anyframe Query Manager에 대한 간략한 소개를 통해 개략적인 구성 및 주요기능을 알아본다.

Anyframe Query Manager는 삼성SDS의 어플리케이션 프레임워크인 Anyframe 중 Anyframe Core의 Query Service를 사용할 때 필요한 데이터베이스 Query문을 관리하고 활용하기 쉽도록 해 주는 Eclipse 플러그인으로, 다음과 같은 주요 특장점을 통해 개발 속도 및 생산성 향상을 기대하게 해 준다.
Query Wizard를 통해 GUI를 통한 Query 작성 및 테스트/검증 방법을 제공함으로써 Query를 손쉽게 작성할 수 있고, 작성한 Query에 대한 추가적인 테스트 비용을 절감시킨다.
Query 테스트 결과를 이용하여 Result Mapping 정보를 자동생성해 주며, Table 정보를 활용한 Table Mapping 정보 또한 자동으로 생성하게 해 준다. 또한 이와 관련된 Anyframe용 VO class 및 DAO class를 자동으로 생성할 수 있는 기능도 제공한다.
Query ID의 중복여부 및 사용여부를 검사하여 이상 있는 부분을 화면에 출력한다. 존재하는 Query ID에 대해서는 해당 Query가 존재하는 Query 맵핑 XML 파일과 Java 코드 간의 편리한 네비게이션 기능을 제공한다.
사용자의 Eclipse 워크스페이스 내의 수많은 Query를 다양한 옵션으로 검색할 수 있는 기능을 제공하여, Query 관리를 편리하게 해 준다.
Anyframe Query Manager는 삼성SDS의 어플리케이션 프레임워크인 Anyframe Core의 Query Service를 사용할 때 필요한 데이터베이스 Query문을 관리하고 활용하기 쉽도록 해 주는 Eclipse 플러그인으로, 다음과 같은 주요기능을 통해 개발 속도 및 생산성 향상을 기대하게 해 준다.
편리한 Query문 관리를 도와주는 각종 View 및 Context Menu 등을 포함하는 Query Manager Perspective 제공
Anyframe Core의 Query Service를 통해 활용하는 다양한 Query문에 대한 생명주기관리(Life-Cycle Management) 지원
Anyframe Core의 Query Service를 사용할 때 활용할 수 있는 Query 맵핑 XML 파일의 손쉬운 작성
Query Manager Editor 및 Query Wizard를 통한 손쉬운 Query 추가/변경/삭제 기능 제공
GUI 기반의 Query 작성 지원
GUI 기반의 Query 테스트 지원
Query문에 대한 Result Mapping 정보 자동생성
Table에 대한 Table Mapping 정보 자동생성
VO(Value Object) 및 DAO(Data Access Object) 코드 자동생성
Query문에 대하여 다양한 옵션(Query ID, Query statement, 작성자, 작성일시, 수정일시 등)의 검색 기능 제공
Query ID의 중복체크 기능 제공
Query ID를 기반으로 한 Query문 사용여부 정보 제공
Anyframe Core의 Query Service를 활용한 DAO에 대하여 작성한 Query를 손쉽게 활용할 수 있도록 Content Assist 제공
Query와 연관된 특정 VO로 손쉽게 이동할 수 있는 네비게이션 기능 제공
DAO에서 사용한 특정 Query로 손쉽게 이동할 수 있는 네비게이션 기능 제공
본 장에서는 Anyframe Query Manager를 설치하는 방법 및 사용자 인터페이스, 환경설정 등에 대해 알아본다.
Anyframe Query Manager는 압축파일로 배포되며, 다음과 같은 순서에 의하여 설치한다.
Anyframe Query Manager를 설치하기 위한 System Requirements 를 확인한다.
Anyframe Query Manager의 최신 배포판을 http://www.anyframejava.org/download/tools/anyframe/querymanager 에서 확인한다.
Anyframe Query Manager의 최신 배포판("anyframe.querymanager.eclipse_x.x.x-bin.zip")을 사용자의 컴퓨터에 내려받는다.
내려받은 최신 배포판의 압축을 원하는 폴더에 푼다.
압축을 풀어서 나온 플러그인 패키지 파일("anyframe.querymanager.eclipse_x.x.x.jar")을 "[eclipse 설치 폴더]/dropins/anyframe/eclipse/plugins"나 "[eclipse 설치 폴더]/plugins", 혹은 "[eclipse 설치 폴더]/addins/anyframe/eclipse/plugins"로 이동시킨다.
☞ "addins" 폴더에 설치할 때에는 별도의 link 파일 정의가 필요하다. (eg. "[eclipse 설치 폴더]/links/anyframe.link")
Eclipse가 실행중이라면 다시 시작시킨다.
"About Eclipse Platform (또는 About Eclipse SDK) > Plug-in Details"를 통해 정상적으로 설치되었는 지 확인한다.
☞ About Eclipse Platform (또는 About Eclipse SDK) 메뉴는 Windows용 Eclipse의 경우 Help 메뉴에서, Mac OS X용 Eclipse의 경우 Eclipse 메뉴에서 확인할 수 있다.

Anyframe Query Manager의 설치가 완료되었다.
Anyframe DBIO 1.2.x 또는 Anyframe Query Manager 1.3.x 이전 버전에서 Anyframe Query Manager 2.0.0 이상 버전으로 업그레이드를 할 경우에는 다음과 같은 순서를 따른다.
Eclipse SQL Explorer 3.x.x 버전 제거: "[eclipse 폴더]/addins/[Eclipse SQL Explorer 설치 폴더]"를 삭제한 후, 3.5 RC5 또는 RC6 버전을 설치한다.
☞ Eclipse SQL Explorer 3.5 RC6는 RC6 및 RC6-P3를 설치해야 하며, 패키지 구성의 오류로 인하여 Eclipse의 Software Updates 기능을 이용하여 설치하는 것을 권장한다.
Anyframe Common 2.0.0 이상 버전 설치: "[eclipse 폴더]/addins/anyframe/eclipse/plugins/"의 "anyframe.plugins.common_1.0.0.jar" 또는 1.1.x, 1.2.0 버전의 jar 파일을 삭제한 후, 3.0.0 이상 버전("anyframe.common.eclipse_x.x.x.jar"의 형태로 파일명칭이 변경되었다.)을 설치한다.
☞ Anyframe Common 2.0.0 이상부터는 Anyframe Tools 플러그인들에서 공통적으로 사용하는 라이브러리들을 Anyframe Common에서 포함하며, 각 플러그인들은 Anyframe Common을 의존하는 것으로 의존성을 정비하였다.
Anyframe Query Manager 최신 버전 설치: "[eclipse 폴더]/addins/anyframe/eclipse/plugins/"의 "anyframe.plugins.dbio_1.x.x.jar" 파일 또는 "anyframe.plugins.querymanager_1.3.x.jar" 파일을 삭제한 후, 최신 버전을 설치한다.
Anyframe Query Manager 요구사항
Anyframe Query Manager 2.0.0 이상 버전의 경우, Anyframe Tools 설치환경에 추가하여 다음과 같은 요구사항을 충족해야 한다.
Eclipse IDE for Java EE Developers (Europa/Ganymede/Galileo) Anyframe Common 3.0.0 or above Eclipse SQL Explorer 3.5 (RC5 or RC6)
Ecipse IDE for Java EE Developers 이외의 Package를 사용할 경우
Eclipse IDE for Java EE Devlopers 패키지는 다른 패키지에 비하여 개발자에게 유용한 다양한 플러그인을 포함하고 있으며, Anyframe을 활용한 개발을 위하여 권장하는 패키지이다. 다만, 필요에 의하여 이외의 Eclipse IDE 패키지에 Anyframe Query Manager를 설치, 사용하고자 한다면 다음의 플러그인 의존관계(Plug-ins Dependencies)를 확인하여, 해당 플러그인을 설치한 후 Anyframe Query Manager를 설치, 사용한다.
org.eclipse.ui org.eclipse.core.runtime org.eclipse.core.resources org.eclipse.ui.views org.eclipse.ui.ide org.eclipse.ui.editors org.eclipse.ui.workbench.texteditor org.eclipse.jface.text org.eclipse.jdt.ui org.eclipse.jdt.core org.eclipse.wst.xml.ui org.eclipse.wst.xml.core org.eclipse.wst.sse.core org.eclipse.wst.sse.ui org.eclipse.search net.sourceforge.sqlexplorer org.eclipse.core.filesystem anyframe.common.eclipse
Query Manager Perspective 는 Anyframe Query Manager의 활용에 기본적으로 필요한 각종 View와 Editor를 구성하여 보여주며, 다음 그림의 모습과 유사한 형태를 띈다.

Query Manager의 주요 구성화면은 다음과 같다.
Query Navigator View: 사용자의 Eclipse 프로젝트 전체에 대하여 Query의 검색 및 조회 기능 제공
Query Results View: Query 테스트 시 결과값 출력
Query Manager Editor: Query 맵핑 XML 파일을 작성하는 편집기
Connections View: Eclipse SQL Explorer의 확장 기능으로, 데이터베이스 연결 설정 및 해당 연결 관리
Database Structure View: Eclipse SQL Explorer의 확장 기능으로, 데이터베이스 구조 파악 기능을 제공
Anyframe Query Manager의 Query Manager Perspective는 "Window > Open Perspective > Other..." 또는 Eclipse 창의 우상단에 위치한 "Open Perspective" 아이콘을 통해 열 수 있다.

Connections View는 사용자가 DBMS의 특정 데이터베이스에 연결할 수 있는 커넥션 프로파일을 생성할 수 있게 하며, 해당 커넥션을 생성하고 관리할 수 있게 한다. 새 로운 커넥션 프로파일을 생성하려면 Connections View에서 Context Menu를 통해 "New Connection Profile..."을 선택한 후, 필요한 정보를 입력한다. 사용자의 환경에 따라 Eclipse 환경설정에서 JDBC 드라이버를 설정("Preferences > SQL Explorer > JDBC Drivers")할 필요가 있을 수 있다.

또한, 사용자는 Query 맵핑 XML 파일에 실제 Query를 작성하기 전에, SQL Editor를 통하여 해당 Query를 테스트할 수 있다. SQL Editor는 데이터베이스 커넥션이 생성될 때 자동으로 열리며, SQL Editor를 닫았거나 추가적으로 더 열려면 해당 커넥션에 대한 Context Menu에서 "New SQL Editor"를 선택한다.

Database Structure View는 사용자가 연결한 데이터베이스 커넥션에 대한 데이터베이스의 구조를 트리 형태로 보여준다.
Anyframe Query Manager는 Database Structure View에서 Table Mapping 정보를 생성할 수 있는 방법을 제공하며, 해당 기능은 Database Structure View에서 원하는 테이블을 찾아 Context Menu의 "Generate Table Mapping"을 선택함으로써 실행시킬 수 있다.

Query Navigator View는 사용자들이 원하는 Query를 검색하고 조회할 수 있는 기능을 제공한다. Query Navigator View는 Anyframe Query Manager Perspective를 열면 자동으로 뜨며, 다음과 같은 방법으로도 열 수 있다.
Eclipse 메뉴를 통해서 열기
"Window > Show View > Other..."에서 Query Navigator 선택

Context Menu를 통해서 열기
Query Editor에서 Context Menu의 "Search Queries" 선택

Query Navigator View는 다음과 같은 요소들로 구성되어 있다.

검색창 및 검색버튼
검색창에 검색을 원하는 Query의 ID를 입력한 후 검색버튼("Search")을 누르면 해당하는 Query가 검색되며, 빈칸인 채로 검색을 실시하면 모든 Query가 검색된다.
Query Navigator의 Query 검색범위는 사용자의 Eclipse workspace 내의 모든 프로젝트이다.
리셋버튼
리셋버튼("Clear")으로 검색창의 검색어 및 검색결과창의 모든 정보를 깨끗하게 비울 수 있다. 검색창의 검색어의 경우, Delete 키 혹은 Backspace 키 등으로 삭제하고 다시 쓸 수도 있다.
고급검색버튼
고급검색기능은 해당버튼("More")을 클릭하여 실행시킬 수 있으며, 다양한 검색조건을 Any(OR 조건) 또는 All(AND 조건)으로 조합하여 검색할 수 있다.
고급검색기능을 통하여 조합할 수 있는 검색조건은 다음과 같다.
Name: Query ID에 대하여 해당 문자열을 기준으로 검색한다.
Contents: Query statement에 대하여 해당 문자열을 기준으로 검색한다.
Author: Query의 작성자를 기준으로 검색한다. (본 기능은 Query 맵핑 XML 파일의 주석정보를 이용하며, Query Wizard를 통하여 작성한 Query의 경우 기본적으로 해당 주석문이 추가된다.)
Last modified date: Query의 최종변경일을 기준으로 검색한다. (본 기능은 Query 맵핑 XML 파일의 주석정보를 이용하며, Query Wizard를 통하여 작성한 Query의 경우 기본적으로 해당 주석문이 추가된다.)
Create date: Query의 최초작성일을 기준으로 검색한다. (본 기능은 Query 맵핑 XML 파일의 주석정보를 이용하며, Query Wizard를 통하여 작성한 Query의 경우 기본적으로 해당 주석문이 추가된다.)

검색결과창
검색결과는 Query Navigator의 하단 검색결과창(Query Search View)에 나타나며, Query문 등의 길이가 길어서 결과창에 모두 표시되지 않더라도, 마우스를 해당 결과에 위치시키면 Tooltip 창을 통해 전체 텍스트를 볼 수 있다.

Query Results View는 Query Wizard를 통한 Query 작성 시 수행한 Query 테스트의 결과를 표시하는 기능을 제공한다. Query Results View는 다음과 같은 방법으로 열 수 있다.
"Window > Show View > Other..."에서 Query Results 선택

Query Manager Editor는 Query 맵핑 XML 파일을 Anyframe Query Manager Perspective에서 열 때 기본적으로 사용하는 에디터로, Query Wizard 및 수작업으로 Query를 추가, 변경, 삭제할 수 있도록 하는 기능을 제공한다. 원하는 Query 맵핑 XML 파일을 Query Manager Editor를 통하여 열기 위해서는 해당 파일의 Context Menu에서 "Open With > Query Manager Editor"를 선택한다.

Query Manager Editor는 Design 탭과 Source 탭의 두가지 표시방법을 제공한다.
Design 탭
Query 맵핑 XML 파일의 구조적인 형태를 그리드를 통하여 표시해 준다. Context Menu를 통해 Query의 추가/변경/삭제, Query 검색 및 특정 어트리뷰트 등을 추가할 수 있다.

Source 탭
Query 맵핑 XML 파일의 XML 태그를 소스형태로 표시한다. Context Menu를 통해 Query의 추가/변경을 위한 Query Wizard 실행 및 Query 검색, Java 클래스 네비게이션 등을 수행할 수 있다. 또한, 숙련된 사용자를 위해 Query 맵핑 XML 파일에서 사용이 가능한 각종 태그를 Content Assist 를 통해 제공함으로써 빠르고 편리한 파일 편집을 도와준다.

Anyframe Query Manager의 환경설정은 Eclipse Preferences 창을 통해 수행한다. 환경설정에서 정의한 접두사(prefix) 및 접미사(suffix)는 Anyframe Query Manager가 AbstractDAO를 상속받은 DAO에 대하여 Content Assist 를 정상적으로 수행할 수 있도록 하는데 사용된다.

환경설정을 통해 저장된 정보는 AbstractDAO에서 정의한 Query 및 VO(Value Object) 등의 접두사(prefix) 및 접미사(suffix)를 특정 개발환경에서 사용자화한 내용을 반영해야 한다. 참고로, "접두사(prefix) 및 접미사(suffix)에 대한 사용자화"는 AbstractDAO에 대한 bean 설정을 통해 이루어지며, 이를 활용하기 위해 사용자는 다른 코드의 수정없이 Anyframe Query Manager의 환경설정창을 통해 해당 내용을 반영할 수 있다.
본 장에서는 Anyframe Query Manager를 활용하여 Query XML 파일을 생성하고, 해당 Query XML 파일에 원하는 Query를 추가/변경/활용/삭제하는 방법에 대해 알아본다. 이를 위해 Query Editor 및 Query Wizard 등을 통한 Query 추가/수정에 대해 살펴보고, Content Assist를 이용한 Query 활용방법에 대해서도 살펴본다.
사용자는 새로운 Query 맵핑 XML 파일을 Eclipse 메뉴 혹은 Context Menu를 통해 생성할 수 있다.
Eclipse 메뉴를 통해서 열기
"File > New > SQL XML File" 선택
Context Menu를 통해서 열기
Eclipse Package Explorer 등에서 Context Menu의 "New > SQL XML File" 선택
새로운 Query 맵핑 XML 파일을 생성할 때에는 다음과 같은 사항을 확인한다.
Eclipse 프로젝트 및 폴더 이름을 확인한다. 지정된 위치에 Query 맵핑 XML 파일이 생성된다.
Query 맵핑 XML 파일의 확장자는 반드시 ".xml"이어야 한다.
고유한 파일이름을 부여했는 지 확인한다. Query 맵핑 XML 파일의 이름은 지정된 프로젝트 및 폴더 내에서 고유해야 하며, 해당 사항은 파일 생성 시 자동으로 검증된다.

Query 맵핑 XML 파일에 Query를 추가하는 방법은 크게 두가지가 있다.
숙련된 사용자의 경우, Query Manager Editor에서 직접 Query를 작성하는 것이 더욱 편리하고 빠를 수 있으나, 관련된 내용을 일일이 확인하고 별도의 테스트를 수행해야 하므로 오류의 위험이 다소 존재한다. Query Wizard를 활용할 경우에는 매 Query 작성 시 마다 Query Wizard를 실행시켜 작성해야 하므로, 일정 기간이 지나면 번거로움을 느낄 수 있다. 그러므로, Anyframe Query Manager를 활용할 경우, 개발의 초반부 어느 정도의 Query문 작성 때까지는 Query Wizard를 활용하고, 이후 Query 작성이 패턴화되어 기존의 Query를 Copy and Paste하여도 큰 무리가 없다고 판단되면 직접작성하는 것을 권장한다.Query Wizard를 통한 Query문 작성은 데이터베이스/테이블/컬럼 등의 정보를 GUI를 통해 마우스 조작으로 입력할 수 있고, 작성하고 있는 Query문을 Query Wizard를 종료하지 않고서도 테스트해 볼 수 있는 장점이 있다. 또한, Anyframe Core의 Query Service에서 제공하는 각종 Mapping 방법 및 VO(Value Object), DAO(Data Access Object) 등의 코드를 자동생성할 수 있는 기능을 제공한다.
Query Wizrd를 활용하여 Query문을 작성하는 절차는 다음과 같다.
Query Wizard 실행
Query Wizard는 Query Manager Editor의 Design 탭 및 Source 탭에서 모두 실행이 가능하며, <queryservice> 태그에서 Context Menu를 통해 실행한다.
Design 탭에서 Query Wizard 실행하기

Source 탭에서 Query Wizard 실행하기
Source 탭에서 Query Wizard를 실행하기 위해서는 아래 화면과 같이 <queryservice> , <queries> 등의 태그 이름을 마우스 더블클릭 등으로 선택(하이라이트 반전)한 후 Context Menu를 통해 Add Query를 선택한다.

Query문 작성 및 테스트
Query를 작성하기 위해 Query ID, Query문 등을 입력하고 작성한 Query문을 테스트하면, "Finish" 버튼을 눌러 Query Wizard를 완료시켜 Query 맵핑 XML파일에 Query문을 추가할 수 있고, 추가적으로 VO/DAO를 생성하기 위해 다음단계로 넘어갈 수도 있다.

Query ID를 부여할 때에는 고유한 Query ID를 부여해야 하며, 그렇지 않을 경우 Query Wizard에서 오류메시지를 제공한다. Query문을 작성할 때에는 "Query Statement" 텍스트필드에 Query문을 작성하며, 테이블명이나 컬럼명 등은 우측의 "Database Browser"의 해당 테이블명 혹은 컬럼명을 더블클릭하면 자동으로 Query문 작성영역에 입력된다.
Dynamic Query를 작성할 경우, "Input Parameter Information"의 "Get Parameters" 버튼을 클릭하여 Query문의 변수와 동기화를 시킬 수 있으며, Velocity 문법을 활용한 Dynamic Query일 경우에는 "Dynamic Query" 체크박스가 자동으로 체크된다.
Query문 작성이 완료되면 적절한 테스트값을 부여하여 Query문을 테스트한다. 이 때 테스트 결과는 Query Results View 에 나타나며, 데이터 개수가 많을 경우에는 "Row Limit"의 값을 변경시켜 출력개수를 적절하게 조절할 수 있다.
Query문을 Query 맵핑 XML 파일에 생성하기 할 때 맵핑 정보를 추가할 때에는, Query Wizard 하단의 "Mapping" 카테고리의 체크박스와 라디오버튼을 조작하여 다음과 같은 4가지 맵핑 조건에 따른 Query문을 생성할 수 있다.
이상의 조건들에 따른 Query Wizard의 흐름을 도식화하면 다음과 같다.

참고로, 카멜케이스를 따르는 변수명 지정을 위해서는 "camelCase Option" 체크박스를 선택하며, 위와 같은 조건을 만족하는 VO 및 DAO를 생성하고자할 때에는 "Generate VO/DAO" 체크박스를 선택한 후 다음 단계로 진행한다.
Query Wizard에서는 사용자에게 자유도를 부여하기 위해 해당 기능을 강제하지는 않으나, Anyframe Core의 Query Service에서는 해당 맵핑 방식의 경우, 기본적으로 테이블의 컬럼명을 카멜케이스화한 것으로 맵핑하는 것을 가정하고 동작하므로, 카멜케이스를 지정하지 않을 경우, 의도하지 않은 오류가 발생할 수 있다.
맵핑 정보를 수록하지 않고, Anyframe Core의 Query Service가 자체적으로 Map을 통해 정보를 얻도록 하는 방법
"Do Mapping" 체크박스를 선택하지 않는다.
Result Class만을 지정하여 Anyframe Core의 Query Service가 맵핑정보를 얻도록 하는 방법
"Do Mapping" 체크박스를 선택하고, "With result class only" 라디오버튼을 선택한다.
Result Class와 Table Mapping 정보를 통해 Anyframe Core의 Query Service가 맵핑정보를 얻도록 하는 방법
"Do Mapping" 체크박스를 선택하고, "With table mapping" 라디오버튼을 선택한다.
☞ 만약 Query 작성을 하지 않고 Table Mapping 정보만을 생성하고자 한다면, Table Mapping Wizard 를 활용하도록 한다.
Result Class와 Result Mapping 정보를 통해 Anyframe Core의 Query Service가 맵핑정보를 얻도록 하는 방법
"Do Mapping" 체크박스를 선택하고, "With result mapping" 라디오버튼을 선택한다.
VO 및 DAO 생성
앞단계에서 "Generate VO/DAO" 체크박스를 선택하고 다음 단계로 진행했을 경우, VO 및 DAO를 생성하기 위한 화면이 나타난다.

기존에 작성한 VO를 활용하고자 할 때에는 "VO Exists" 체크박스를 선택하여 기존의 VO를 검색하여 지정하며, 신규로 작성하고자할 때에는 패키지명과 폴더명을 선택하여 지정할 수 있다.

VO 및 DAO 이름을 부여할 때 고유한 이름을 부여해야 하며, 기존에 존재하는 이름을 부여하였을 경우에는 코드 생성 중 기존 파일을 대체할 것인지를 묻는 경고창이 뜬다. 또한, 다른 Eclipse 파일 생성관련 Wizard와 마찬가지로 확장자를 부여하지 않아도 되지만, 만약 확장자를 부여할 경우에는 .java로 지정하도록 한다. 그 밖의 경우에는 오류 경고가 뜬다.
VO 및 DAO의 생성을 위한 정보입력을 마친 후 "Finish" 버튼을 눌러 Query Wizard를 완료시키면, "Progress Inforamtion"이 수초 정도(작업의 복잡도 및 사용자의 시스템 사양에 따라 다름) 나타난 후 생성한 코드들이 Eclipse의 Editor에서 자동으로 열린다.

Query Wizard를 통해 Query 맵핑 XML에 해당 Query문이 추가되며, 사용자가 "Generate VO/DAO" 체크박스 선택을 통해 Query Wizard의 두번째 단계로 진행했을 경우에는 VO 혹은 DAO 등이 추가로 생성된다. 이러한 코드들은 Query Wizard가 정상적으로 종료되면 자동으로 Eclipse의 Editor에서 열리므로, 사용자가 손쉽게 확인할 수 있다.
Query Wizard를 통해서 생성한 query가 포함된 Query 맵핑 XML 파일은 Query Wizard 종료 후 저장되지 않은 상태이므로, Query Wizard 종료 후 사용자가 반드시 해당 파일을 저장해야 한다. 저장하지 않을 경우, 해당 정보를 잃을 수도 있으며 관련 query를 활용하는 DAO 등에서 "존재하지 않는 query" 로 오류 표식이 표시될 수 있다.

비록 GUI 환경의 이점을 살릴 수는 없지만, 숙달된 사용자나 재사용할 수 있는 Query문이 어느정도 이상 축적되었을 경우에는 Query Manager Editor를 활용한 Query문의 직접 작성이 작업의 효율을 더욱 높일 수 있다. 또한, Query Manager Editor는 Content Assist를 통해 Query 맵핑 XML의 DTD에 정의된 각종 태그 및 어트리뷰트 등을 제공하므로, 기존 Query문에 대한 손쉬운 응용 및 개선이 가능하다.
Query 맵핑 XML의 구조, 각 태그 및 어트리뷰트에 대한 상세설명은 Anyframe Core 매뉴얼의 Query Service 부분을 참고한다.
다만, Query Navigator에 서 제공하는 고급검색기능(Query Navigator > More) 중 일부 조건들의 경우, Query Wizard를 통해서 생성되는 주석문을 참고하므로, 해당 기능을 활용하고자 할 경우에는 다음과 같은 주석문을 해당 Query문의 <query> 태그 바로 다음에 추가하도록 한다. 본 주석문에 대한 보다 자세한 내용은 "Query Wizard가 생성하는 주석정보"를 참고한다. <!-- @date.created 2009/01/12 08:00:00 @date.modified 2009/01/12 17:00:00 @author Jihwan Rhie -->
Query 맵핑 XML 파일에 존재하는 기존의 Query를 수정하는 방법은 크게 두가지가 있다.
Query Wizard를 통한 Query문 수정은 Query 맵핑 XML 파일의 Design 탭 혹은 Source 탭에서 <query> 태그의 Query ID를 선택하고 Context Menu를 통해 실행한다. 실행된 Query Wizard에서 Query문을 수정할 때에는 Query Wizard를 활용한 Query문 추가 와 동일한 방법을 따른다.

Query Manager Editor를 통한 Query문 수정은 기존의 Query문을 편집한다는 점만 제외하고는 새로운 Query문을 추가하는 것과 동일한 방법을 따른다. 보다 자세한 사항은 Query Manager Editor를 활용한 Query문 추가 를 참고한다.
Query 맵핑 XML 파일에 존재하는 기존의 Query를 삭제하는 방법은 크게 두가지가 있다.
Context Menu를 통해서 Query문을 삭제하고자 할 때에는 Query Manager Editor의 Design탭에서 해당 Query를 선택하고, Context Menu의 "Remove"를 실행한다.

Query문을 직접 삭제하고자 할 때에는 Query Manager Editor의 Source 탭에서 해당하는 Query를 선택한 후 삭제한다. 이때, 선택할 범위는 삭제하고자 하는 Query문이 포함된 <query>와 </query> 로 묶인 범위이다.

Anyframe Query Manager는 Content Assist 기능을 제공함으로써 사용자가 보다 편리하고 빠르게 Query문을 편집하고 활용할 수 있도록 한다. 사용자는 Eclipse의 다른 Content Assist와 동일하게 키보드 단축키(기본값으로 Ctrl+Space)를 통해 Anyframe Query Manager의 Content Assist가 제공하는 기능을 활용할 수 있다.
Content Assist의 환경설정은 Eclipse Preferences의 "Java > Editor > Content Assist > Advanced"에서 설정하며, Anyframe Query Manager의 Content Assist가 단축키의 호출대상이 될 지의 여부를 정한다.

Eclipse Java Editor에서 Anyframe Core의 Query Service를 활용한 DAO(IQueryService를 활용하거나 AbstractDAO를 상속받았을 때)에 대하여 Content Assist가 Query ID에 대한 후보목록을 보여준다. 이 기능은 Query Service의 메소드가 인자로 받는 Query ID(String 타입으로 " "로 묶인 부분) 입력부분에서 키보드 단축키를 통해 Content Assist를 호출했을 때 제공된다.

해당하는 메소드가 AbstractDAO로 부터 상속받는 create(), findByPk(), findListWithPaging(), update(), remove() 등일 경우, Anyframe Query Manager의 Preferences 에서 정의한 prefix와 suffix 규칙을 따르는 Query문만 Content Assist를 통해 조회된다.
Anyframe Query Manager의 Query Manager Editor의 Source 탭에서 Query 편집 시Query 맵핑 XML의 태그 및 어트리뷰트에 대한 후보목록을 보여준다.

Anyframe Query Manager는 Context Menu를 통해 DAO와 관련된 Query문이나 Query문과 관련된 VO를 손쉽게 찾아서 열 수 있는 기능을 제공한다.
DAO에서 사용하는 특정 Query문의 내용을 확인하고 싶을 때, Query 맵핑 XML 파일이 너무 많거나 Query문이 너무 많다면 해당 Query문이 어디에 있는 지 알기 어려울 수 있다. 이를 위해 Anyframe Query Manager는 Context Menu를 통해서 해당 Query문을 바로 열 수 있는 기능을 제공한다.
본 기능을 활용하는 방법은 다음과 같다.
DAO에서 활용하고 있는 Query문 중 바로 열고자 하는 Query ID를 마우스 더블클릭 등을 통해 선택하여 반전(하이라이트)시킨 후, Context Menu에서 "Open Query in Query Manager Editor"를 선택한다.

바로 열고자 선택한 Query ID가 Query Manager Editor를 통해 열리고, 해당 Query ID가 반전되어 있는 것을 확인할 수 있다.

Query문에서 사용하는 특정 VO의 내용을 확인하고 싶을 때, VO가 너무 많거나 하여 해당 VO를 찾아가기 번거로울 수 있다. 이를 위해 Anyframe Query Manager는 Context Menu를 통해서 해당 VO를 바로 열 수 있는 기능을 제공한다.
본 기능을 활용하는 방법은 다음과 같다.
Query문에서 활용하고 있는 VO를 마우스 더블클릭 등을 통해 선택하여 반전(하이라이트)시킨 후, Context Menu에서 "Open Class in Java Editor"를 선택한다.

바로 열고자 선택한 Query ID가 Java Editor를 통해 열린다.

본 장에서는 사용자의 Eclipse 프로젝트에 Anyframe Query Manager의 Nature를 적용하여 유용한 정보를 얻는 방법에 대하여 알아본다.
프로젝트 네이쳐(Nature)는 플러그인이 해당 프로젝트를 특별한 종류의 프로젝트로 간주하게 한다. Anyframe Core의 Query Service를 활용하는 프로젝트는 Anyframe Query Manager의 Nature를 설정함으로써, 해당 프로젝트에 대해 유용한 기능을 제공할 수 있게 한다.
Anyframe Query Manager Nature를 설정하는 주된 목적은 Anyframe Query Manager가 제공하는 Anyframe Builder의 기능을 해당 프로젝트(Java Project)에서 사용하게 하는 것이다.
Anyframe Query Manager Nature를 특정 Java 프로젝트에 적용하기 위해서는 해당 프로젝트의 Context Menu에서 "Anyframe Query Manager > Add Anyframe Query Manager Nature"를 선택한다. Anyframe Query Manager Nature가 활성화되어 적용되면, "Anyframe Builder"의 기능이 해당 프로젝트에 적용된다. 이미 적용한 Anyframe Query Manager Nature를 해제하기 위해서는 Context Menu에서 "Anyframe Query Manager > Remove Anyframe Query Manager Nature"를 선택한다.

Anyframe Builder는 Eclipse 프로젝트 안의 중복된 Query ID 를 찾아내며, 중복된 Query ID가 있을 경우에는 붉은색 오류(Error) 표식을 Query Manager Editor 의 해당 Query문 부분에 표시하며, Eclipse의 Problems View에 해당 오류를 출력하게 한다.
또한, 특정 Query가 어떠한 DAO에서도 활용되지 않았을 경우에는 노란색 경고(Warning) 표식을 마찬가지 방법으로 Query Manager Editor 및 Problems View에 표시한다.
Anyframe Query Manager Nature 가 해당 프로젝트에 대하여 적용(활성화; "Context Menu: Anyframe Query Manager > Add Anyframe Query Manager Nature")되었을 경우, 다음과 같은 조건을 만족할 때 Anyframe Builder의 작업이 수행된다.
프로젝트 내의 리소스 추가 이벤트가 발생하였을 때
프로젝트 내의 리소스 변경 이벤트가 발생하였을 때
프로젝트 내의 리소스 삭제 이벤트가 발생하였을 때
프로젝트 내부 혹은 외부로부터 특정 리소스를 Copy and Paste 하였을 때
위의 모든 경우에 대하여 "리소스"는 Query 맵핑 XML 파일을 의미하며, 표시된 오류나 경고에 대해서는 사용자가 직접 문제점을 해결하기 전까지는 해당 표식은 사라지지 않는다.
Anyframe Builder에 의해서 제공되는 중복 Query ID 표시는 사용자에게 Query ID에 대한 현상황을 효과적으로 표시해 준다. 다음 화면은 각각 Anyframe Query Manager Nature의 적용 전후를 나타내며, 이를 통해 중복된 Query ID에 대하여 오류 표식의 유무가 달라짐을 알 수 있다.

Anyframe Core의 Query Service를 활용하는 DAO 파일이 존재하지 않는 Query ID를 참조할 때, 해당 DAO 파일의 Query ID 위치에 붉은색 오류(Error) 표식이 표시된다.
Anyframe Query Manager의 Anyframe Builder 는 Query 맵핑 XML 파일의 변경사항을 추적하기 때문에, 유효하지 않은 Query ID를 참조하고자할 때에는 오류 표식이 나타나게 되며, 이를 통해 사용자는 다음과 같은 이점을 얻을 수 있다.
Anyframe Core의 Query Service를 활용하는 DAO에서 참조하는 Query ID가 모두 존재하는 것을 확인할 수 있다.
유효하지 않은 Query ID로 인해 발생하는 Run-Time 오류를 사전에 방지할 수 있다.
DAO에서 활용하는 특정 Query ID의 Query문으로 바로 이동하거나, Query 맵핑 XML 파일에서 정의한 Query ID에서 활용하는 특정 VO를 열기 위해서는 "Context Menu에서 파일 열기" 를 참고한다.