본문 바로가기
프로그래밍/Java

[Java] System.out.println 메소드는 현업에서 쓰지말라는 이유

by 시간많은백수 2023. 10. 18.
반응형

System.out.println 메소드는 Java에서 표준 출력 스트림(standard output stream)에 메시지를 출력하는 데 사용되는 메소드로, 디버깅이나 간단한 로깅 목적으로는 유용할 수 있습니다. 그러나 현업에서 주로 사용하지 않거나 지양하는 이유는 다음과 같습니다.

 

println()는 콘솔에 결과물을 출력하게 해주는 메서드이다.
위의 그림에서 보면 out은 PrintStream 타입의 인스턴스이며 이 PrintStream 클래스는 io 패키지 내에 있다. 즉 println()은 I/O 작업이며 이는 I/O 시스템콜을 호출하여 커널모드에서 작업한다는 의미이다. 당연히 시간이 많이 드는 작업이며 성능에 좋지 않다.

 

💡 결합성과 유지보수 문제

System.out.println을 코드에 남겨두면 프로그램이 크고 복잡해질 때 디버깅 및 유지보수를 어렵게 만들 수 있습니다. 특히, 이 메소드를 많이 사용하면 코드에 분산된 출력문이 흩어져 있어서 로그 관리와 수정이 어려워집니다.

 

💡 선언적 로깅 부재

System.out.println은 간단한 디버깅용으로는 적합하지만, 실제로 프로덕션 환경에서는 로그 라이브러리를 사용해야 합니다. 로그 라이브러리를 사용하면 로깅 수준 설정, 로그 파일 관리, 로깅 서버 통합 등과 같은 고급 로깅 기능을 활용할 수 있습니다.

 

💡 테스트와 단위 테스트 어려움

System.out.println 출력은 테스트 코드와 단위 테스트 작성을 어렵게 만들 수 있습니다. 로깅 라이브러리를 사용하면 테스트에서 출력을 캡처하고 비교하는 데 도움이 되는 도구를 제공합니다.

 

💡 코드 가독성 감소

System.out.println은 코드 가독성을 떨어뜨릴 수 있습니다. 로깅 라이브러리를 사용하면 로깅 메시지를 형식화하고 원하는 출력 형식으로 조절할 수 있습니다.

 

💡 프로덕션 환경에서의 부적절한 사용

System.out.println은 개발자에게만 출력되며, 프로덕션 환경에서는 표준 출력이나 에러 출력으로 사용해서는 안 됩니다. 이것은 보안 이슈를 유발할 수 있고, 중요한 로그 정보를 놓칠 수 있습니다.

 

 

대신에 현업에서는 로깅 라이브러리를 사용하고, 로깅 레벨을 조절하여 필요한 로그 정보를 수집하고 출력하세요. 대표적인 Java 로깅 라이브러리로는 Log4j, Logback, SLF4J 등이 있습니다. 이러한 라이브러리를 사용하면 로그 관리, 로깅 수준, 로그 파일 관리 등을 더 효과적으로 다룰 수 있으며, 현업에서의 요구 사항에 적합한 로깅 솔루션을 구축할 수 있습니다.

반응형