로그프레소 아키텍처

로그프레소 플랫폼은 OSGi 애플리케이션 서버에서 구동됩니다. OSGi(Open Service Gateway Initiative)는 자바 기반의 동적 모듈 시스템을 위한 표준 프레임워크입니다. OSGi는 애플리케이션을 모듈로 분할하여 개발, 배포, 관리할 수 있는 기능을 제공합니다.

로그프레소 플랫폼은 OSGi 프레임워크 구현체 중 Apache Felix 프레임워크를 기반으로 사용합니다. 로그프레소 앱은 OSGi 번들로 정의되므로, 런타임에 로그프레소 플랫폼에 설치하거나 제거할 수 있습니다. 로그프레소 앱은 정적 리소스와 자바 바이트코드가 포함된 JAR (Java Archive) 파일입니다. 로그프레소 플랫폼은 로그프레소 앱을 설치하는 시점에 번들에 내장된 정적 리소스를 설치하고 OSGi 서비스를 시작합니다.

로그프레소 플랫폼은 SSH(7022/tcp) 및 텔넷(7004/tcp) 프로토콜을 통해 셸을 제공합니다. 로그프레소 셸에 로그인하여 bundle.list를 입력하면 아래와 같이 수백 개의 OSGi 번들을 확인할 수 있습니다.

logpresso> bundle.list
[ ID] Symbolic Name                             Version   Status
------------------------------------------------------------------
[  0] org.apache.felix.framework                6.0.5     ACTIVE
[  1] org.araqne.ipojo                          1.2.1     ACTIVE
[  2] org.apache.felix.ipojo                    1.12.1.asm8       ACTIVE
[  3] org.araqne.msgbus                         1.13.1    ACTIVE
...

기본 설치된 번들과 마찬가지로 로그프레소 앱 역시 하나의 OSGi 번들입니다. 아래는 샘플 앱 번들에 포함된 파일 목록을 조회한 예입니다.

logpresso> bundle.resources 141
Bundle Resources
-------------------
META-INF/
com/

META-INF/MANIFEST.MF 파일은 OSGi 매니페스트를 포함합니다. 아래는 중요한 OSGi 매니페스트 엔트리를 선별한 것입니다.

logpresso> bundle.manifest 141
Bnd-LastModified: 1686382446996
Bundle-Name: Logpresso Sample App
Bundle-SymbolicName: com.logpresso.sonar.sample
Bundle-Version: 1.0.2306.0

번들 목록에 표시되는 이름은 Bundle-SymbolicName 항목의 값입니다. 번들 버전은 Bundle-Version 항목으로 정의합니다. 로그프레소 플랫폼에서 OSGi 번들의 이름과 버전은 유일해야 합니다.

아래는 OSGi 번들에 포함된 클래스 바이트코드의 예입니다.

bundle.resources 141 com/logpresso/sonar/sample/query
Bundle Resources
-------------------
com/logpresso/sonar/sample/query/SampleCreateSubnetGroupCommand.class
com/logpresso/sonar/sample/query/SampleCreateSubnetGroupCommandParser.class
com/logpresso/sonar/sample/query/SampleDriverQueryCommand.class
com/logpresso/sonar/sample/query/SampleParams.class
com/logpresso/sonar/sample/query/SampleQueryCommandParser.class
com/logpresso/sonar/sample/query/SampleSubnetGroupsCommand.class
com/logpresso/sonar/sample/query/SampleSubnetGroupsCommandParser.class

로그프레소 앱은 로그프레소 플랫폼이 제공하는 OSGi 서비스를 호출하여 기존 기능을 사용하거나, 로그프레소 플랫폼의 기능을 확장할 수 있습니다.

다음 절에서는 실제 앱 예제를 통해 REST API를 호출하는 쿼리 명령어를 어떻게 확장하는지 설명합니다.