본문 바로가기
Development/개발 습관

System.out.println() 보다는 로깅(Logging)을 습관화 하자.

by bang-geus 2023. 9. 7.

나는 print()문을 좋아한다. 직관적이고 편하고 무엇보다 익숙하다. 근데 이번에 새로운 프로젝트를 시작하면서 느낀건 팀원분들 중에  print()를 쓰는 건 나 밖에 없었다.. 심지어 소스 커밋시에는 print()문을 지우도록 권했다.

그래서 궁금했다.  왜 안해? 왜 지워 ㅠㅠ..

로깅(Logging)이란?

로깅은 프로그램 실행 동작을 일련의 기록인 로그(Log)의 생성을 통해 남겨놓는 일을 말합니다. 로그는 재현하기 힘든 버그나 성능에 대한 통계 등, 프로그램 동작에 있어서 유용한 정보를 제공하기 때문에 로깅 작업은 실제 서비스 개발에 필수적인 부분입니다.

System.out.println() 메서드를 사용했을 때의 문제점

1. 성능 저하의 원인이 된다.

println은 CPU 리소스를 점유하게 된다. 그래서 개발시에 불필요하게 남겨두게 된다면 후에 운영시 계속 작동하여 서버나 프로그램 성능에 영향을 준다. 그래서 반드시 소스 커밋시 지워야 하는 것이다.

2. 로그 출력 레벨을 사용할 수 없습니다.

서버에서 로그는 에러/장애 발생시 문제를 파악하기 위한 중요한 용도이기 때문에  필요한 정보를 남겨한다. 하지만 개발시에 확인 용도로 사용했던 로그들이 남게되면 보안성 및 용량에 문제가 될 수 있다.  따라서 로깅 라이브러리는 환경에 맞게(로컬 개발 환경, 개발 서버, 프로덕션 서버 등) 로그가 출력될 수 있도록 로그 출력 레벨이라는 기능을 제공한다. 많이 사용되는 Logback이라는 라이브러리에서는 TRACE, DEBUG, INFO, WARN, ERROR, FATAL 와 같은 레벨을 제공한다.

3. 로그의 역할을 제대로 하지 못한다.

인자로 전달한 문자열만을 출력한다. 문제가 발생한 날짜, 시각 그리고 문제의 수준, 로그가 발생한 위치 등 최소한의 정보가 기록되지 않는다. 이러면 서버에서 로그를 확인해도 문제해결 도움을 줄 수 없다.

 

[참고]

https://systemdata.tistory.com/21

 

System.out.println 메소드는 실무에서 `절대 사용하지마라.`

목차개요System.out.println 무엇인가?왜 사용해서는 안되는가?로그를 남기면 안되는 것인가?결론1. 개요프로그래밍을 처음 접하면 System.out.println(”Hello World”);같이 콘솔에 출력하는 것을 배울 것이

systemdata.tistory.com

 

https://hudi.blog/do-not-use-system-out-println-for-logging/

 

로깅을 System.out.println() 로 하면 안되는 이유

학습 배경 우테코 레벨3 팀프로젝트 3차 데모데이 요구사항 중 하나는 ‘디버깅할 수 있는 로그 파일 출력’ 이다. 이전까지는 로깅에 대해 전혀 신경쓰지 않고 있었는데, 슬슬 로깅에도 신경써

hudi.blog