본문 바로가기

IT개념/프로그래밍상식

디버그 시 System.out.println()을 사용하지 않는 이유

728x90

System.out.println은  예제 프로그램 등 간단한 것에는 무관하나, 실제로 사용자가 있는 프로젝트 환경에서는

사용을 지양하여야 한다.

 

표준 프레임워크 퍼스트북에 설명이 나와있다.

 

System.out.println()을 호출하게 되면 디스크 I/O 동기화 처리가 되기 때문에 전체적인 시스템의 성능이 저하 될 수 있고, System.out.println() 으로 디버그 처리한 부분을 일일이 주석처리, 해제하는 것은 개발 및 운영의 효율을 떨어트릴 수 있다.

 

이해가 안되서 더 찾아보고 정리해보았다.

 

  1. System.out.println()으로 디버그 정보를 출력하면 인자 값만 출력해준다. 최소한의 로그 정보가 없다는 것이다. 로깅 라이브러리(log4j, slf4j 등)를 사용하면 날짜/시간/로그 생성자/타입 등을 함께 출력해주는데 System.out.println()은 그렇지 않다는 얘기다, 이런 기본적인 로그데이터가 장애가 발생했을 때 추적할 수 있게 해주는 정보원이기 때문이다.

  2. 로그 정보를 가져오기 어렵다. System.out.println() 메소드는 콘솔에 로그를 출력하는 API이다. 파일로 가져오거나 서버로 전송하기 어려움이 있다. 억지를 부리면 파일로 못출력할거야 없지만 굉장히 번거로울 것이다.

  3. 성능에 영향을 많이준다. println은 CPU 리소스를 점유하게 된다. 솔직히 말해서 지금은 로깅라이브러리가 찍는 콘솔로그와의 자세한 사이클의 차이는 모르겠지만, 개발시에 로깅라이브러리는 DEBUG레벨로 사용하다가 운영시 INFO레벨로 바꾸면 되겠지만 System.out.println()는 개발시에 실수로라도 남겨두게 된다면 후에 운영시 계속 작동하여 서버나 프로그램 성능에 영향을 끼치게 될 것이다.