IT스러운 공간

Java에서 Log 기록 시 System.out.print를 사용하면 안되는 이유! 본문

기타/기타

Java에서 Log 기록 시 System.out.print를 사용하면 안되는 이유!

nanaing 2016. 2. 23. 10:43
728x90
[출처] : http://kimeunseokit.tumblr.com/post/76965886665/java에서-log-기록-시-systemoutprint를-사용하면-안되는-이유

Posted 2 years ago

대부분의 개발자들은 로그를 찍어보기 위해서 System.out.println을 가장 많이 사용합니다. 일부 개발자들은 log 클래스를 사용하기도 하지만 아마도 Log 클래스 사용보다 System.out.으로 콘솔에 출력해보는 개발자들이 더욱 더 많을 것 입니다. 그 이유는 가장 편하고 확인하기 좋은 방법이기 때문이라고 생각되는데 하지만 이렇게 로그를 찍는 경우 성능에 큰 영향을 주는 경우가 많이 생깁니다. System.out.println으로 로그를 찍는 경우 윈도우의 콘솔을 활성화 시키게 되고, 활성화가 될 때마다 CPU를 많이 점유하게 됩니다. 물론 얼마나 많은 양을 프린트하는가에 따라 다르겠지만 반드시 성능에 영향을 미친다는 것 입니다.

	static String Username(String name){
		System.out.println("전송된 이름은 " + name);
		return name;
	}

이런 코드가 있다고 할 때 위 System.out.println이 한줄로 인해서 성능에는 치명적인 영향을 미치게 됩니다.  위 코드를 프로파일링 했을 때 CPU 시간 (ms)는 75.80이였고, return 부분은 고작 24.13에 불과했습니다. 물론 수행되는 수에 따라서 응답시간은 확실히 달라지겠지만, 약 1,000회 수행 시 1.3초가 소요되었습니다. 이런 결과가 발생하는 이유는 파일에 로그를 남기거나, 콘솔에 로그를 남길경우를 생각해보면, 하나의 프린트 내용이 완전히 프린트되거나 저장되기 전까지 다음 프린트 부분은 대기할 수 밖에 없게 되고, 결국 어플리케이션 전체에 대기시간이 발생하게 됩니다.

더 큰 문제는 System.out.println으로 출력하는 로그는 개발할 때만 사용되지, 실제 서비스에서는 전혀 필요없는 내용임에도 불구하고 릴리즈 시 까지 이런 디버그용 코드를 남겨두는 경우가 많다는 것 입니다. 보통 하나의 프로젝트에 적게는 100여개의 메소드가 많게는 몇 만개의 메소드가 사용되는데, 각 메소드 별로 콘솔에 찍어봐도 이해할 수도 없을 뿐더러 이런 의미없는 일을 위해서 아까운 리소스와 디스크가 낭비되는 것 입니다.

이를 해결하기 위해서 릴리즈 전의 System.out.println이라던지, 혹은 err등 불피요한 코드를 제거 하는 작업을 선행하는 것이 좋습니다. 단순히 정보 공유 용 포스트가 아니라, 저도 System.out.println 등 다양한 로그를 남기는 작업을 하는데 항상 릴리즈 시 이를 제거하는 습관을 아직 들이지 못해 다시 한번 리마인드 하는 의미로 작성해봅니다!


728x90

'기타 > 기타' 카테고리의 다른 글

SQLD Study  (0) 2015.06.25
VMware로 Windows 8.1 설치하기  (0) 2014.07.23
VMware로 Windows-Server 2008 설치하기  (0) 2014.07.11
VMware로 Linux CentOS 설치하기  (7) 2014.07.11