Languages/Java

[JAVA]로깅에 System.out.println()을 사용하지 않는 이유

MoonSta 2023. 1. 12. 00:03

System.out.println()을 사용하면 안되는 이유

 JAVA 프로그래밍을 하다 보면 로깅을 하기 위해 사용하는 입출력 구문은 단연 System.out.println()일 것이다. 필자도 개발자가 되고, 실제 운영 중인 시스템에 대한 개발을 진행할 때 System.out.println() 정말 많이 사용하였고, 가장 많이 지적받는 이유 중 하나였습니다. 그래서 이번 포스팅에서는 왜 이 구문을 사용하지 말하야 하는지에 대해 정리해보도록 하겠습니다. 우선 로깅(logging)에 대해 알아보도록 하겠습니다.

 

로깅(logging)이란?

 실제 운영하는 시스템에서 예상치 못한 문제가 발생하였을 때 개발자는 문제를 찾아야 합니다. 이러한 문제를 빠르게 해결하기 위해서는 날짜, 시간, 로직에 대한 정보가 필요합니다. 중요 기능이 실행되는 지점에 로그(log)를 남겨야 하는데 이러한 활동을 로깅(logging)이라고 한다. 위의 System.out.println()도 로깅(logging)의 한 종류입니다. 

 

System.out.println()이 시스템에 미치는 영향

로깅(logging) 방법의 하나인 System.out.println()를 사용하지 않는 자세한 이유를 하나씩 알아보자.

 

💥기록이 되지 않는다

 시스템에 문제가 발생하였을 경우 로깅 후 남겨진 정보를 통해 문제를 대처하는 로깅의 기본 목적과 달리 System.out.println()으로 출력된 정보는 어디에도 기록되지 않는다.

 

💥로그 출력 레벨을 사용하지 못한다

 현재 로그 통상적으로 사용하는 로그 라이브러리에는 로그 출력 레벨이 존재한다. 하지만 System.out.println()에는 로그 출력 레벨을 사용하지 못하기 때문에 모든 정보를 출력한다. 그러한 이유로 필요한 정보 외에 민감한 정보 또는 필요 없는 데이터가 함께 출력이 된다.

 

💥성능의 저하가 발생한다

 System.out.println()의 표준 출력 방식은 동기화 상태로 출력이 된다. 그러므로 한 스레드가 종료되는 시점까지 다른 동작은 일어나지 않는다. 그렇기 때문에 대량의 표준 출력을 할 때에 전체를 출력하는 데까지 많은 시간이 소요되기 때문에 성능 저하로 이어진다.

'Languages > Java' 카테고리의 다른 글

[JAVA]ArrayList의 동작 및 내부 구현  (2) 2023.01.13
[JAVA]equals()와 hashcode()는 무엇인가?  (5) 2023.01.12
[JAVA]Iterator란?  (16) 2023.01.09
[JAVA] 생성자(Constructor)  (4) 2023.01.05
[JAVA]Error & Exception  (9) 2022.12.28