자바를 처음 배울 시 가장 많이 사용했던 메소드 System.out.println()은 현업에서 사용하지 않는다. 그 이유를 정리해보자.
1. 로그 저장 불가
System.out.println() 은 로그가 표준 출력으로 출력된다. 즉, 파일로 저장되지 않고 휘발된다는 의미이다.
현업에서는 로그를 서버에 모으거나 파일로 저장하는 방법으로 문제가 발생했을 시 열어봐서 확인하는 용도로 사용한다.
표준 출력으로 한번 출력되고 어디에도 저장되지 않으면 로그의 제 역할을 할 수 없다.
로그된 데이터는 실제로 기록되어야 한다. 하지만 System.out.println() 만으로는 불가능하다.
@slf4 log메소드를 사용하자.
2. 동기화 문제
System.out.println() 메소드 내부를 살펴보면
new Line() 에 동기화(synchronized)가 걸려있다.


멀티 스레드 환경에서 첫번째 스레드가 newLine() 메소드를 실행하면 다른 스레드가 접근을 할 수 없다. 다른 스레드는 첫번째 스레드가 모두 사용하고 잠금을 풀어준 뒤에서야 newLine() 메소드를 실행할 수 있다.
System.out.println() 메서드를 여러 스레드가 사용하게 된다면 오버헤드가 발생하여 프로세스 처리가 늦어지게 될 수 있다. = 성능저하
(* 오버헤드(Overhead) : 어떤 처리를 하기 위해 추가로 들어가는 처리 시간, 메모리 등의 컴퓨터 자원)
3. 출력 레벨
로그 출력 레벨을 사용할 수 없다.
trace > debug >info >warn > error
System.out.println()는 info랑 error만 사용할 수 있다.
4. 요약
- 운영 시스템에서는 System.out.println()을 절대 사용해서는 안된다.
- 흔히, 현업에서 로그를 남길때 로깅프레임워크로 logback이나 log4j를 많이 사용한다.
- 로그를 남기고 싶다면 로깅프레임워크를 사용하여 적절한 로그 레벨을 지정하여 출력하자
'Java' 카테고리의 다른 글
| equals와 hashCode (2) | 2023.11.06 |
|---|---|
| String Builder 와 String Buffer (1) | 2023.10.31 |
| HashSet 내부 구현 (8) | 2023.10.26 |