Logging은 어떤 거로?

Kereu_·2021년 10월 4일
0

Careers 프로젝트

목록 보기
3/4
post-thumbnail

프로그램 개발을 할 때 중요한 요소 중 한 부분은 바로 Logging 처리입니다.

많은 Logging Framework 중에서 어떤 것을 사용하고 각 Log Level을 어떤 게 설정할지를 진행하기 앞서서 프로젝트를 진행하기 앞서서 결정을 해야 합니다.

그럼 최근 읽고 있는 자바 성능 튜닝 이야기책을 통해 알게 된 Log4j, Logback 등에 Logging Framework 들을 직접 프로젝트를 선택하여 적용, 진행할 경우가 좋은지를 Logging과 Logging Framework에 특징을 알아본 후 이들 중 각각의 성능을 비교해보도록 하겠습니다.

Logging?


시스템 동작 시 시스템 상태/작동 정보를 시간의 경과에 따라 기록하는 것을 logging이라 하며
그 기록들을 log라고 합니다.

일반적으로 처음 프로그래밍을 배울 때는 보통 System.out.print 같은 언어에서 제공해주는 메소드를 사용해보셨을 것입니다. 프로그램이 실행되면서 콘솔에 무엇인가가 출력되는데, 이런 것들이 로그가 될 수 있습니다.

System.out.println() 대신 logging을 사용하는 이유
  • System.out.println() 명령어는 I/O Resource를 많이 사용하여 시스템이 느려질 수 있습니다.
  • 로그를 파일로 저장하여 분석할 필요가 있기 때문에 사용합니다.

SLF4J

  • Logging 관련 다양한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공합니다.
  • SLF4J는 로깅 Facade입니다.
  • 로깅에 대한 추상 레이어를 제공하는 것이고 Interface의 모음입니다.

Log4g

  • log4j는 가장 오래된 로깅 프레임워크로써 Apache의 Java기반 로깅 프레임 워크입니다.
  • SLF4J를 기본적으로 지원하지 않아 별도의 의존성 SLF4J-Log4j12를 설치해야 합니다.
  • 2015년 기준으로 개발이 중단되었습니다.

Logback

  • log4j와 유사하면서도 향상된 성능과 필터링 옵션을 제공합니다.
  • SLF4J를 기본으로 지원합니다.
  • Spring Bott의 기본으로 설정되어 있어서 사용시 별도로 라이브러리를 추가하지 않아도 사용이 가능합니다.
  • Automatic Reloading 기능 제공하여 별도에 재시작없이 설정을 변경할 수 있습니다.

Log4g2

  • 기본적으로 Logback이 지원하는 모든 기능을 지원합니다. (다양한 필터링, Auto Reload 등)
  • SLF4J도 기본으로 지원합니다.
  • 비동기 로거를 제공하여 동기방식이었던 Log4j, Logback보다 약 10배 빠르고 대기시간도 줄어들었습니다.
  • Garbage Collector의 사용 빈도를 줄이고, 더 나은 응답 시간을 제공합니다.

비교

각각의 특징들을 비교 후 Log4j는 더 이상 지원하지 않는 부분과 나머지 두 개의 로깅 프레임워크보다는 성능상 떨어진다고 판단하여 제외했습니다.

그렇다면 둘 중 어떤 것을 선택해야 할까요? 정답은 없지만 제가 집중했던 부분은 성능이었습니다. 아무래도 대용량의 트래픽을 처리하는 서비스를 생각하고 있음으로 실제 서비스 로직 이외의 부분들은 최소한의 부담을 주기 위함입니다. Logback과 Log4j2를 성능 면에서 좀 더 자세히 살펴보도록 하겠습니다.

우선 로깅 프레임워크의 성능을 평가하기 위해 몇 가지 용어들을 이해할 필요가 있습니다.

응답 시간 : 메시지를 기록하는데 걸리는 총 시간 (서비스 시간 + 대기 시간)
서비스 시간 : 메시지를 기록하기 위해 걸리는 시간
대기 시간 : 서비스를 시작하기 전 요청이 대기열에서 대기 중인 시간

보통은 응답 시간이 늘어나면 서비스 시간이 원인으로 생각하지만, 실질적으로 보면 작업량이 늘어남에 따라 서비스 시간은 거의 변한 지 않는 경우가 대부분이지만 대기 시간은 서비스 시간에 몇 배까지 늘어나는 경우가 있습니다.

응답 시간과 서비스 시간
즉 응답 시간은 서비스 시간보다 대기 시간에 영향이 크다는 것을 알 수 있습니다.

비동기 처리 시간
우선 비동기 로깅 - 최대 처리량 비교입니다.
그림과 같이 스레드가 증가할 수록 Log4j2에 성능이 Logback을 압도하는 것을 알 수 있습니다.

비동기 응답시간
또한 4개에 스레드를 동시에 로깅 시키는 고정된 환경 테스트에서도 최고의 응답 시간 동작을 보였습니다.

동기 응답시간
그리고 앞선과 다른 동기식 과정에서도 짧은 응답 시간을 확인 할 수 있습니다.

정리하기


  • 3개의 로깅 프레임워크의 성능을 비교한 결과 Log4j2가 동기, 비동기 방식 모두에서 가장 좋은 성능을 보여주었습니다.
  • 응답 시간은 서비스 시간과 대기 시간으로 합쳐진 시간이며 서비스 시간보다 대기 시간 영향력 큰 것을 알 수 있었습니다.
  • Facade Pattern을 이용한 SLF4J를 통해 사용하기 때문에 상황에 따라 쉽게 Logging Framework를 변경 가능합니다.

Careers

신뢰할 만한 사람들이 모인 공간에서 비즈니스 인맥을 만들고,
업무 스킬 및 트렌드 정보를 공유하는 Careerly를 모티브로 한 API 서버 프로젝트입니다.

참조


profile
Issue_Save

0개의 댓글