스프링을 쓰다보면 SonarLint가 System.out.println 같은걸 쓰면 노란줄을 그어서 logger를 사용하라고 경고를 계속 띄워준다. 이건 왜그럴까?
1. 성능 문제
- sout은 동기적으로 출력되고 출력이 발생할 때마다 I/O가 일어나기 때문에 성능이 떨어질 수 있다.
- 특히 고성능이 요구되는 서비스에서는 불필요한 I/O가 시스템 전체의 성능에 영향을 줄 수 있다.
2. 레벨별 로그 관리의 부재
- sout은 단순히 표준 출력에 메시지를 출력하는 것이기 때문에 로그의 레벨을 구분하지 못한다.
- 로깅 프레임워크는 로그를 상황에 맞게 레벨별로 관리할 수 있어, 환경에 따라 디버깅 정보는 출력하지 않고 에러 정보만 기록하는 등의 유연한 관리가 가능하다.
3. 로그의 출력 위치 관리
- 로깅 프레임워크를 사용하면 콘솔, 파일, 원격 서버 등 다양한 곳에 로그를 보낼 수 있다.
- 밤년 sout은 기본적으로 콘솔에만 출력할 수 있어 로그의 저장 및 관리가 제한된다.
- prod 환경에서는 로그를 파일로 남겨 두거나 외부 모니터링 툴에 전송해야 하기 때문에 로깅 프레임워크를 사용하는 것이 훨씬 효과적이다.
4. 로그 포맷 및 정보 추가
- 로깅 프레임워크는 로그 메시지에 타임스탬프, 클래스명, 메서드명, 스레드 정보 등을 자동으로 포함할 수 있어, 로그의 가독성과 디버깅 효율을 높인다.
- sout은 이러한 정보를 출력하려면 직접 추가해야 하므로 유지보수가 어렵다.
5. 환경에 따른 설정 가능
- sout은 별도의 설정 없이 모든 메시지를 동일하게 출력한다.
- 반면, 로깅 프레임워크를 사용하면 개발, 테스트, 프로덕션 등 환경 별로 로그 레벨이나 출력 위치를 쉽게 설정할 수 있다.