본문 바로가기
IT/mendix

로깅을 통한 애플리케이션 동작 추적 - 로그 메시지의 구성 요소 설명

by 가능성1g 2024. 8. 1.
반응형

Mendix 로그 소스

로그 메시지의 소스 필드는 클라우드에서 생성된 로그에만 존재합니다. 이 필드의 정확한 내용은 사용하는 클라우드에 따라 달라질 수 있습니다. 이 필드에는 로그 메시지를 생성한 Mendix 런타임의 특정 인스턴스가 표시됩니다. 이는 다중 서버 환경에서 오류를 분석할 때 유용할 수 있습니다. 앱의 단일 인스턴스를 실행하는 경우에는 이 필드를 무시해도 됩니다.

 

Mendix 로그 레벨

로그를 만들 때는 가능한 한 많은 세부 정보를 캡처하고 싶지만, 로그의 크기는 관리하기 쉬운 수준이어야 합니다. 또한 로그 메시지 작성은 성능에 영향을 미친다는 점을 기억하는 것도 중요합니다. 하나의 메시지에 대한 이러한 영향은 무시할 수 있지만, 앱이 메시지를 자주 로깅하는 경우 그 영향이 빠르게 누적될 수 있습니다. 로그 수준은 이러한 균형을 찾는 데 도움이 됩니다. 

 

로그 레벨의 개념은 1980년대에 Sendmail 프로젝트(세기 전환기에 가장 인기 있었던 메일 서버)가 syslog라는 새로운 로깅 도구를 시작하면서 도입되었습니다. 이 도구는 '오류', '경고', '정보'와 같은 설명이 포함된 단어 목록과 관련 설명으로 구성된 심각도 수준이라는 개념을 도입했습니다. 이 심각도 수준 개념은 이후 많은 애플리케이션 로깅 프레임워크에서 로그 수준으로 채택되었습니다.

 

로그 수준은 심각도에 따라 정렬되며 이러한 방식으로 표시합니다. 각 후속 레벨에는 위의 모든 레벨의 메시지가 포함되므로 가장 심각함에서 덜 심각함 순으로 아래에 표시됩니다.

 

  • Critical: 이 수준은 가장 심각한 메시지에 사용되며 애플리케이션이 제대로 작동하지 않을 수 있는 오류를 나타냅니다. 컴포넌트가 이 수준의 메시지를 기록하면 메시지는 빨간색 배경에 흰색 텍스트로 표시됩니다. 이 수준의 로그 메시지가 발생하면 즉시 조사해야 합니다. 이러한 메시지는 앱의 알림 섹션에서 중요 로그 아래에 표시됩니다. 이메일 알림이 설정되어 있으면 이메일이 트리거됩니다. 

 

  • Error: 이 수준은 애플리케이션이 일부 기능을 수행하지 못하게 하는 문제가 발생했음을 나타내는 메시지에 사용됩니다. 애플리케이션은 계속 실행할 수 있지만 문제를 조사해야 합니다.

 

  • Warning: 이 수준은 예상치 못한 일이 발생했거나 가까운 시일 내에 애플리케이션을 실행할 수 없는 문제가 발생했음을 나타냅니다. 예를 들어 애플리케이션의 디스크 공간이 부족합니다. 이 메시지가 표시되면 애플리케이션은 계속 정상적으로 작동합니다.

 

  • Info: 이 레벨은 정상 작동 중 주목할 만한 이벤트에 대해 보고합니다. 이러한 메시지는 일반적으로 런타임이 시작되었다는 표시 또는 시작 시 적용된 라이선스 유형과 같은 정보를 제공합니다. 이 수준의 메시지가 표시될 때는 별도의 조치가 필요하지 않습니다.

 

  • Debug: 이 레벨은 문제를 진단할 때 사용됩니다. 앱이 정상적으로 작동하는 동안 앱이 수행하는 단계에 대한 인사이트를 제공합니다. 앱에서 오류 또는 경고 수준의 로그 메시지가 생성되고 이러한 메시지의 정보가 문제를 진단하기에 충분히 명확하지 않은 경우에 유용합니다.

 

  • Trace: 가장 장황하거나 상세한 로그 수준입니다. 디버그보다 훨씬 더 많은 정보를 추가하며 디버그 수준에서 충분한 정보를 제공하지 않을 때 이해하기 어려운 문제를 분석하는 데 사용할 수 있습니다. 이 로그 수준에서 생성되는 정보의 양이 압도적일 수 있으므로 이 수준은 아껴서 사용하는 것이 가장 좋습니다.

로그 수준은 로그 메시지의 컨텍스트에서 중요한 부분입니다. 로그 수준을 통해 로그 메시지의 중요도를 알 수 있습니다. 또한 로그 메시지를 읽는 컨텍스트에 따라 변경될 수 있습니다. 예를 들어 애플리케이션이 정상적으로 작동하는 동안에는 가장 세부적인 수준의 로그 메시지에 많은 주의를 기울일 필요가 없습니다. 더 좋은 방법은 정상 작동 중에는 로그 수준을 가장 세부적인 수준으로 설정하지 않는 것입니다. 그렇게 하면 시스템에서 너무 많은 로그 정보를 생성하여 중요한 로그 메시지를 확인하기 어렵습니다. 최악의 경우 앱이 너무 많은 로그 정보를 생성하여 저장 공간을 가득 채우게 됩니다. 

 

그러나 애플리케이션의 문제를 디버깅하는 경우 애플리케이션이 수행하는 모든 작업을 설명하는 매우 상세한 로그 메시지를 많이 확보하는 것이 매우 유용할 수 있습니다. 이렇게 하면 오류가 발생한 시점을 파악하여 해결책을 찾는 데 도움이 될 수 있습니다. 일반적으로 정상 작동 중에는 로그 수준을 정보로 설정하고 버그를 수정해야 할 때만 디버그 또는 추적으로 변경하는 것이 좋습니다. 

 

로그 레벨 변경하기

애플리케이션이 실행 중일 때 Run > Default Log Level을 클릭하고 원하는 레벨을 선택하면 Studio Pro에서 로그 레벨을 변경할 수 있습니다. 

Mendix 포털의 Deploy > Environments > View Live Log에서 이 옵션을 찾을 수 있습니다. 그런 다음 표시되는 로그 수준 옵션을 사용하여 로그 수준에 따라 표시되는 로그를 변경할 수 있습니다.

앱을 출시할 때 알림 창을 사용하여 로그를 면밀히 모니터링할 수 있습니다. 이를 통해 오류를 조기에 발견할 수 있습니다. 많은 사용자가 앱을 처음 사용할 때 오류가 발생하면 오류를 신고하기보다는 앱 사용을 중단하므로 이 모니터링을 설정하는 것이 좋습니다. 알림에 대한 자세한 내용은 설명서를 참조하세요. 앱이 일정 기간 사용되면 정기 로그 모니터링으로 전환할 수 있습니다. 

 

Mendix 로그 노드

로그 노드는 애플리케이션의 어느 부분에서 로그 메시지를 생성했는지를 나타내며, 로그 메시지를 해석하는 방법에 대한 중요한 컨텍스트를 제공합니다. 예를 들어 애플리케이션이 객체를 만들지 못했다는 사실을 알려주는 로그 메시지가 있다고 가정해 보겠습니다. 해당 로그 메시지가 마이크로플로우에 의해 생성된 것이라면 Log 노드는 마이크로플로우를 살펴보도록 안내합니다. 로그 메시지가 데이터 그리드에 의해 생성되었다면 조사에 접근하는 방식이 완전히 달라졌을 것입니다. Mendix에서 가장 중요한 로그 노드를 알면 어떤 로그 수준을 설정하고 애플리케이션의 어느 영역을 조사할지 파악하여 로그 메시지를 해석하는 데 도움이 됩니다.

 

Mendix의 로그 노드는 중앙 로깅 구성 요소에 동적으로 등록됩니다. 따라서 전체 런타임을 업데이트하지 않고도 로그 노드를 추가할 수 있어 유연성이 뛰어납니다. 이는 자신만의 로그를 만들고자 할 때 유용합니다. 단점은 Mendix 앱에서 발생할 수 있는 모든 로그 노드에 대한 명확한 목록이 없다는 것입니다. Mendix 런타임에서 사용하는 로그 노드 목록은 문서에서 찾을 수 있습니다. 가장 많이 사용되는 몇 가지 로그는 다음과 같습니다.

 

마이크로플로우 엔진
이 로그 노드에 보고되는 메시지는 모두 마이크로플로우와 관련된 것으로, 여기에는 마이크로플로우에서 발생할 수 있는 오류에 대한 로그 메시지도 포함됩니다. 이 로그 노드가 로그 수준 추적으로 설정되어 있으면 마이크로플로우가 실행되는 모든 단계를 볼 수 있습니다. 오류가 발생하기 전에 어떤 작업이 실행되었는지 확인할 수 있으므로 프로덕션에만 존재하는 문제를 디버깅할 때 이상적입니다. 하지만 추적 로그 수준은 앱 환경을 빠르게 압도할 수 있으므로 현명하게 사용해야 합니다.

 

ConnectionBus
이 로그 노드는 애플리케이션과 데이터베이스의 연결에 대한 일반적인 정보를 보고합니다. 연결의 특정 부분을 분석할 수 있도록 이 연결의 특정 부분을 처리하는 관련 로그 노드가 있습니다. 이러한 로그 노드도 ConnectionBus로 시작하기 때문에 알아볼 수 있습니다. 이러한 로그 노드의 이름은 ConnectionBus로 시작하고 그 뒤에 밑줄과 해당 로그 노드가 보고하는 내용을 설명하는 사양이 있습니다:

 

  • ConnectionBus_Mapping: XPath와 SQL 간의 변환기에서 사용됩니다.
  • ConnectionBus_Retrieve: 데이터 검색 구성 요소에서 사용
  • ConnectionBus_Security: 데이터 액세스 시 보안 엔진에서 사용
  • ConnectionBus_Update: 데이터 업데이트 컴포넌트에서 사용합니다.
  • ConnectionBus_Validation: 데이터베이스에서 엔티티를 관리하는 컴포넌트에서 사용합니다.

REST_Publish 및 REST_Consume
이러한 각 로그 노드는 앱이 REST API와 수행하는 통신에 대해 보고합니다. Publish 노드는 앱이 노출하는 모든 것을 보고하며, Consume 노드는 REST를 통해 앱으로 가져오는 데이터에 중점을 둡니다. 이 로그 노드의 좋은 기능은 REST_Consume 로그 노드를 추적하도록 설정하면 들어오는 데이터를 검사할 수 있다는 것입니다. 이를 통해 데이터를 올바르게 수신하고 있는지 확인할 수 있으며 디버깅에 큰 도움이 될 수 있습니다. 

 

이제 로그 노드에 대해 더 잘 이해하셨으니 로그 분석 도구에서 로그 노드를 어떻게 사용할 수 있는지 살펴보겠습니다. 마이크로플로우가 올바르게 실행되고 있는지 모니터링하고 싶다고 가정해 보겠습니다. 로그 수준이 오류인 로그 메시지를 추적하는 것이 매우 유용할 것입니다. 모든 오류를 모니터링한다면 마이크로플로우의 오류뿐만 아니라 다른 모든 오류도 캡처할 수 있습니다. 마이크로플로우 엔진 로그 노드에서만 오류를 설정하면 마이크로플로우와 관련된 오류만 캡처할 수 있습니다. 이렇게 하면 마이크로플로우 중 하나가 잘못 작동할 때 특별히 트리거되는 경고를 설정할 수 있습니다. 

 

로그 노드에 대한 로그 수준 설정하기

이제 Mendix가 기본적으로 제공하는 로그 노드와 해당 로그 노드가 수행하는 작업을 자세히 설명하는 목록을 어디서 찾을 수 있는지 알게 되었습니다. 하지만 모든 마켓플레이스 모듈은 사용자 정의 로그 노드를 등록할 수 있습니다. 이 로그 노드는 목록을 완벽하게 유지하는 것이 거의 불가능하기 때문에 목록에 포함되지 않을 것입니다. 그렇다면 앱에 어떤 로그 노드가 존재하는지 어떻게 알 수 있을까요? Mendix Studio Pro에는 이를 위한 좋은 도구가 있는데, 바로 로그 수준 설정 도구입니다. 여기에는 앱 내의 모든 활성 로그 노드와 해당 로그 수준 목록이 포함되어 있습니다. 

이 화면에 액세스하려면 애플리케이션이 로컬로 실행 중일 때 콘솔 창에서 Advanced > Set log levels...을 클릭합니다. 애플리케이션이 아직 시작되지 않은 경우에는 작동하지 않습니다! 이는 Studio Pro가 런타임과 직접 통신하여 모든 활성 로그 노드를 검색하기 때문입니다. 로그 노드의 동적 로딩으로 인해 애플리케이션이 실행되지 않을 때는 로그 수준 설정 화면에 액세스할 수 없습니다. 

 

Mendix 포털의 로그 수준

Mendix 포털에서 각 환경에 대한 로그 수준을 설정할 수 있습니다. Mendix 포털의 배포 섹션에서 환경 링크를 클릭하여 환경에 액세스할 수 있습니다. 로그 수준을 변경하려는 환경에 대한 세부정보 버튼을 클릭할 수 있습니다. 

세부정보 페이지에 도달하면 로그 레벨 탭을 클릭하여 해당 환경에 대한 로그 레벨을 찾습니다. 각 노드에 대한 로그 수준을 개별적으로 설정할 수 있습니다. 여기에서 설정한 로그 수준은 재설정할 때까지 설정된 상태로 유지됩니다. 

 

반응형