LogLab 개발자 참고

여기에는 로그랩을 개발하는 사람들을 위한 설명을 기술한다. 일반 사용자는 읽지 않아도 문제 없을 것이다.

실행 파일 이용과 빌드

로그랩 코드에서 직접 실행파일을 빌드하고 싶다면 PyInstaller 가 필요하다. PyInstaller 홈페이지를 참고하여 설치하자.

참고

PyEnv를 사용하는 경우 빌드시 동적 라이브러리를 찾지 못해 에러가 나올 수 있다. 이때는 macOS의 경우 --enable-framework 옵션으로 파이썬을 빌드하여 설치해야 한다. 자세한 것은 이 글 을 참고하자. 리눅스의 경우 --enable-shared 옵션으로 빌드한다.

윈도우에서 빌드는 로그랩이 별도 venv 없이 글로벌하게 설치된 것으로 전제한다. 설치 디렉토리에서 다음과 같이 한다.

> tools\build.bat

리눅스/macOS 에서는 다음과 같이 빌드한다.

$ sh tools/build.sh

정상적으로 빌드가 되면, dist/ 디렉토리 아래 loglab.exe (윈도우) 또는 loglab (리눅스/macOS) 실행 파일이 만들어진다. 이것을 배포하면 되겠다.

테스트 실행

자동화된 개발 환경 설정 (권장)

새로 개선된 자동화된 테스트 환경을 사용하려면:

# 개발 환경 원클릭 설정 (의존성 설치 + pre-commit hooks 설정)
make setup

# 전체 테스트 및 품질 검사 실행 (포맷팅, 린팅, 테스트, 커버리지)
make all

개별 테스트 명령어

# 기본 테스트 실행
make test

# 커버리지 포함 테스트
make coverage

# 코드 포맷팅 (black, isort)
make format

# 린팅 검사 (flake8)
make lint

# 보안 검사 (bandit, safety)
make security

# 다언어 코드 생성 테스트
make test-python      # Python 코드 생성 테스트
make test-csharp      # C# 코드 생성 테스트 (dotnet 필요)
make test-cpp         # C++ 코드 생성 테스트 (g++ 필요)
make test-typescript  # TypeScript 코드 생성 테스트 (Node.js 필요)
make test-java        # Java 코드 생성 테스트 (Maven 필요)

# 전체 코드 생성 테스트
make test-codegen     # 모든 언어 코드 생성 테스트

기존 방식 (수동)

다음처럼 개발을 위한 추가 의존 패키지를 설치하고,

uv pip install -e ".[dev]"

pytest 로 테스트를 수행한다.

pytest tests/

로그 객체 테스트

여기서는 로그랩을 통해 성성된 언어별 로그 객체 코드를 테스트하는 방법을 설명한다.

Python 로그 객체 테스트

로그 객체를 위한 파이썬 파일을 생성하고

loglab object example/foo.lab.json py -o tests/loglab_foo.py

tests/ 디렉토리로 가서 테스트를 실행한다.

pytest test_log_objects_python.py

C# 로그 객체 테스트

C# 코드 실행을 위한 설치가 필요하다.

sudo apt update
sudo apt install -y wget apt-transport-https software-properties-common

wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update

sudo apt install -y dotnet-sdk-8.0

다음으로 로그 객체 파일을 생성하고

loglab object example/foo.lab.json cs -o tests/cstest/loglab_foo.cs

tests/cstest/ 디렉토리로 이동 후 실행한다.

dotnet run

C++ 로그 객체 테스트

테스트를 위해 먼저 gtest 를 설치가 필요하다.

sudo apt install libgtest-dev

다음으로 로그 객체를 위한 헤더 파일을 생성하고

loglab object example/foo.lab.json cpp -o tests/cpptest/loglab_foo.h

tests/cpptest/ 디렉토리로 가서 테스트 코드를 빌드하고

cd tests/cpptest
g++ -std=c++17 -I. test_log_objects_cpp.cpp -lgtest -lgtest_main -lpthread -o test_log_objects_cpp

다음처럼 실행한다.

./test_log_objects_cpp

Running main() from ./googletest/src/gtest_main.cc
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from StringTest
[ RUN      ] StringTest.Serialize
[       OK ] StringTest.Serialize (0 ms)
[ RUN      ] StringTest.SerializeAfterReset
[       OK ] StringTest.SerializeAfterReset (0 ms)
[----------] 2 tests from StringTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 2 tests.

Java 로그 객체 테스트

Java 코드 실행을 위해 Maven이 필요하다.

sudo apt update
sudo apt install maven

다음으로 로그 객체를 위한 Java 파일을 생성한다.

loglab object example/foo.lab.json java -o tests/javatest/src/main/java/loglab_foo/LogLabFoo.java

tests/javatest/ 디렉토리로 이동 후 Maven을 사용하여 컴파일하고 실행한다.

cd tests/javatest
mvn compile exec:java

성공적으로 실행되면 다음과 같은 출력을 볼 수 있다:

Testing Java Log Objects...
Testing basic log object functionality...
Login JSON: {"DateTime":"2025-07-29T10:02:19.804056945+09:00","Event":"Login","ServerNo":1,"AcntId":12345,"Platform":"ios","Category":1}
✓ Login event serialization test passed
Logout JSON: {"DateTime":"2025-07-29T10:02:19.813285353+09:00","Event":"Logout","ServerNo":1,"AcntId":12345,"Category":1}
✓ Logout event serialization test passed
✓ All Java log object tests passed!

자동화된 테스트 및 CI/CD

LogLab은 포괄적인 테스트 자동화 시스템을 갖추고 있다:

GitHub Actions CI/CD

  • 자동 테스트: 모든 push 및 pull request에서 자동 실행

  • 다중 Python 버전: 3.9, 3.10, 3.11, 3.12 지원

  • 크로스 언어 테스트: Python, C#, C++, TypeScript, Java 코드 생성 검증

  • 품질 검사: 린팅, 보안 검사, 커버리지 리포팅

Pre-commit Hooks

개발 중 코드 품질을 자동으로 보장:

# pre-commit hooks 설치 (make setup에 포함됨)
pre-commit install

# 모든 파일에 대해 수동 실행
pre-commit run --all-files

의존성 자동 관리

  • Dependabot: 주간 의존성 업데이트 자동 PR

  • 보안 업데이트: 취약점 발견 시 자동 알림

  • 그룹화된 업데이트: 개발/프로덕션 의존성 별도 관리

성능 및 통합 테스트

# 성능 테스트 실행
pytest tests/test_performance.py -v

# 전체 통합 테스트
pytest tests/test_integration.py -v

추가 문자열 현지화

개발이 진행됨에 따라 새로이 추가된 문자열들 중 현지화 대상인 것들은 다음처럼 처리한다.

xgettext 가 설치되어 있지 않으면 다음처럼 설치 후,

sudo apt install gettext

다국어 문자열을 출력하는 것은 util.py 에 정의된 함수를 이용하는 것이 관례이다. 다음 명령어로 새로 추가된 문자열을 추출한다.

xgettext -o messages.pot util.py

messages.pot 파일에서 새로 추가된 텍스트를 참고하여 언어별 .po 파일 (예: locales/en_US/LC_MESSAGES/messages.po) 에 번역하여 추가한다.

이후 언어별로 다음처럼 .mo 파일로 컴파일한다.

msgfmt locales/en_US/LC_MESSAGES/base.po -o locales/en_US/LC_MESSAGES/base.mo

버전 업데이트

일정 분량 이상의 새로운 기능이 추가되거나 버그가 수정되면 버전을 업데이트해야 한다. 업데이트는 다음과 같은 절차로 진행된다.

  1. 변경 사항 기록: CHANGELOG.md 파일에 변경 사항을 기록한다.

  2. 버전 번호 업데이트: version.py, docs/conf.pyREADME.md 파일내 버전 번호를 업데이트한다.

  3. 버전 태깅: Git 에서 새로운 버전을 태깅하고 원격 저장소에도 push 한다.