오픈그록 OpenGrok 고급진 사용법 기술 이야기 2016.10.24 23:25

오픈그록 OpenGrok 고급진 사용법에 대해서 간단하게 글을 써보려고 합니다. 특별히 어려운 것은 없지만, 막상 찾아보면 잘 안나와있는 내용을 정리해 봅니다!

간단한 소개

쉽게 설명하자면, 웹 브라우저에서 코드 검색을 쉽고 빠르게 할 수 있는 프로그램입니다. Java와 Servlet Container 그리고 Exuberant Ctags를 이용하여 구성되며, 다양한 언어와 형상관리툴들의 정보를 색인할 수 있습니다.

OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. OpenGrok github

설치하는 방법만 빠르게 보고 싶으신 분은 아래 다른 블로거님의 글을 참고하세요.
OpenGrok 설치

구조

공식사이트의 설치 안내페이지를 보면 설명이 되어 있는데, 사실 저는 처음엔 구조가 잘 이해가 안되더라구요. 그래서 저 같은 누군가를 위해서 글을 남깁니다.ㅎ

이 그림이 핵심입니다. 근데, 이건 프로그램의 구조이지 실제 구동되는 구조는 아닙니다!!

SRC_ROOT

색인indexing 할 소스코드가 있는 곳입니다. 어디에 있던지 상관없습니다. 색인할 때 위치를 지정할 수 있습니다.

$ ./OpenGrok index <absolute_path_to_your_SRC_ROOT>

opengrok.jar

그림에서 보듯이 SRC_ROOTDATA_ROOT로 만들어 주는 jar 파일입니다. OpenGrok 코드를 받아서 ./OpenGrok index 이 명령어를 실행하면 결국 java -jar opengrok.jar 가 실행 되는 것이죠. 배치파일에 설정된 값으로...

DATA_ROOT

이게 제일 헷갈렸던 부분입니다. DATA_ROOT는 색인된 정보들의 들어있는 폴더의 위치입니다. 즉, 색인을해야 생성됩니다. 그래서 Database 아이콘이 그려져 있네요. SRC_ROOT처럼 위치를 지정할 수 있습니다!

 $ OPENGROK_VERBOSE=true OPENGROK_INSTANCE_BASE=/tank/opengrok ./OpenGrok index /tank/source

OPENGROK_INSTANCE_BASE=/tank/opengrok 이부분이 DATA_ROOT의 위치가 됩니다.

configuration.xml

색인 데이터에 관련된 기본 정보를 가지고 있습니다. DATA_ROOT/etc/configuration.xml에 위치합니다. 여러개의 프로젝트를 관리하고 싶을때는 해당 파일에 대한 정보만 수정해 주면 됩니다. (아래 다시 설명...)

source.war

Web Application 입니다. .jsp와 서블릿으로 구성되어있으며 아래 deploy 명령을 통해서 Tomcat webapp 폴더 아래로 복사됩니다. 실제 사용자가 브라우저를 통해서 접근하면 Tomcat에서 구동되어 동작하는 Web Application입니다. 당연히 이름도 내용물도 변경 할 수 있습니다~

$ ./OpenGrok deploy

실행되는 구조

실제 실행되는 구조는 아래와 같습니다.


  1. 브라우저에서 /source 경로로 접근하면 Tomcat에서 Web Application 이 실행됩니다.
  2. Web Application /WEB-INF/web.xml에서 DATA_ROOT의 경로를 확인합니다.
  3. 2번에서 찾은 경로의 DATA_ROOT를 사용하여 OpenGrok이 구동됩니다!

고급진 사용법

위 내용을 바탕으로 응용 사용법에 대해서 소개합니다.

여러 프로젝트를 여러 Web Application으로 구성하기

단순하게 따라 설치하면 /source 경로에 1개의 DATA_ROOT 정보를 갖는 구성이 됩니다. androidxref.com 를 보면, 버전별로 구성이 되어 있는데 구성 방법을 소개합니다.

우선 아래 명령어를 통해 다른 경로에 DATA_ROOT를 생성합니다.

 $ OPENGROK_VERBOSE=true OPENGROK_INSTANCE_BASE=/tank/opengrok ./OpenGrok index /tank/source

OPENGROK_INSTANCE_BASE=/tank/opengrok 이부분이 DATA_ROOT의 위치!

source.war를 복사해서 다른 이름으로 하나 더 만듭니다. source2.war 이렇게 하면 war파일 압축이 풀리면서 /source2 폴더가 생기고, 그 쪽으로 접근하면 다른 Web Application이 실행됩니다. 사실 war는 그냥 압축파일이고, 복사해서 /webapp 폴더에 놓으면 Tomcat이 자동으로 압축을 풀어서 deploy 합니다. (자동 deploy 안되면 강제 deploy 하던지 reboot 하면 됨)

그리고 새로 만든 Web App 폴더에 들어가서, /WEB-INF/web.xml 파일을 열어서 아래에서 configuration.xml 경로를 아까 만든 DATA_ROOT 위치로 변경해주면 됩니다!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>OpenGrok</display-name>
    <description>A wicked fast source browser</description>
    <context-param>
        <param-name>CONFIGURATION</param-name>
        <param-value>/tank/opengrok/etc/configuration.xml</param-value> // 여기를 수정!
        <description>Full path to the configuration file where OpenGrok can read it's configuration</description>
    </context-param>
...

화면 내용 변경하기

tizen.msalt.net 요건 제가 만든 사이트인데요. 타이젠 온라인 샘플 코드를 검색해보기 위해 만들어 보았습니다. 화면을 조금 바꿨는데요. /source 에서 .jsp 파일들을 수정하면 됩니다. 아...이건 더 설명을 못 하겠네요. 아마 열어보면 아실거에요.


마치며...

막상 정리를 다하고 나니까 쓸떼없는 일을 한것 같다는 생각이 듭니다...;; 왜냐하면 이정도 정보를 확인해서 처리 할만한 분이라면 굳이 제가 이렇게 주절주절 설명을 안해도 코드랑 구조보고 이해할 수 있을텐데 싶네요. 반대로 웹이나 서블릿을 잘모르는 분이라면 제 설명이 부족할 수도 있을것 같구요... 누군가에게 도움이 되었으면 좋겠네요.ㅠ

  1. 2016.11.25 18:47

    비밀댓글입니다

    • 2016.11.25 23:34

      비밀댓글입니다


  2. 지나가는사람 2017.09.08 15:41

    "/WEB-INF/web.xml 파일을 열어서 아래에서 configuration.xml 경로를 아까 만든 DATA_ROOT 위치로 변경해주면 됩니다!"
    위부분에서 configuration.xml경로가 DATA_ROOT가 아닌 DATA_ROOT/etc 로 해야 되는것 같습니다.

    indexing하는데 시간이 너무많이 걸려 source list가 커질수록 제 고심도 커졌는데 님 블로그 도움을 많이 받고 갑니다.
    감사합니다.