1. 왜 intelliJ에서는 log를 properties에 level을 지정해서 구해야 할까?
JavaScript를 배울 때는 console.log() 함수를 사용하여 개발 과정에서 디버깅이나 정보 출력을 했었는데 Java를 배우고부터는 절대? console.log()를 찍으면 안 된다고 해서 그냥 그런가 보다 하고 있었는데 얼마 전에 test case에서 break point를 잡으면 뭐... 시간을 압도적으로 단축시킬 수 있다 해서 이것저것 찾아보다 이것도 알아보기로 했다.
1-1. JavaScript에서의 로그 처리
console.log() 함수는 간단하게 로그를 출력하는 기능을 제공하고 있으며, 로그 레벨을 따로 지정할 수 없다고 한다.
주로 개발자가 필요에 따라 로그를 추가하고, 필요하지 않은 경우 주석 처리하거나 제거하는 방식으로 사용되고 있다고 한다.
- 간편한 디버깅 : console.log() 함수는 간단하고 쉽게 로그를 출력할 수 있는 방법이다. 개발자가 코드 실행 중에 변수의 값을 확인하거나 특정 코드 블록이 실행되는지 확인하기 위해 사용할 수 있다고 한다. 이는 개발자가 코드를 디버깅하고 문제를 해결하는 데 도움을 준다.
- 콘솔 환경 제공 : console.log() 함수는 웹 브라우저의 개발자 도구에서 제공되는 콘솔 환경에서 로그를 출력하는 기능을 제공한다. 콘솔을 통해 JavaScript 코드의 실행 결과와 디버깅 정보를 확인할 수 있다. 이는 개발자가 웹 애플리케이션을 개발하거나 테스트할 때 유용하다.
- 다양한 출력 형식 : console.log() 함수는 다양한 데이터 형식을 자동으로 처리하여 출력할 수 있다. 문자열, 숫자, 객체, 배열 등 다양한 형식의 데이터를 로그로 출력할 수 있고 변수나 표현식을 함께 출력할 수도 있다.
- 간편한 사용성 : console.log() 함수는 JavaScript의 내장 함수로 제공되기 때문에 별도의 라이브러리나 설정이 필요하지 않다. 따라서 개발자는 추가적인 설정 없이 바로 로그를 출력해 줄 수 있게 된다.
1-2. Java에서의 로그 처리
Java에서는 로그 처리를 위해 다양한 라이브러리가 사용되어지고 있다.
대표적으로 Log4 j, Logback, slf4 j 등이 있으며, 이러한 라이브러리는 로그 레벨을 지정하여 로그를 처리하는 기능을 제공해준다.
나는 slf4j만 썼던 거 같은데 요즘은 이거로 통일된 느낌이다.
로그 레벨에는 TRACE, DEBUG, INFO, WARN, ERROR 등 다양한 수준이 있지만 보통 이렇게 5개만 사용한다.
이 5개의 로그 레벨을 필요에 따라 설정해서 출력되는 로그의 상세도를 조절한다고 보면 된다.
- 디버깅 및 문제 해결 : 로그 레벨을 세밀하게 조절하여 필요한 정보를 출력하면서도 불필요한 로그를 최소화할 수 있다. 디버깅 과정에서 로그 레벨을 조정하여 원하는 수준의 로그를 확인하고, 문제를 신속하게 해결할 수 있다.
- 운영 환경 관리 : 로그 레벨을 성정하여 운영 환경에서 발생하는 로그의 양을 조절할 수 있다. 운영 중인 시스템에서는 너무 많은 로그가 발생하면 로그 파일의 크기가 급증하고 성능에 영향을 줄 수 있으므로, 필요한 정보만 출력하도록 로그 레벨을 설정해준다.
- 보안 : 로그에는 민감한 정보가 포함될 수 있기 때문에 로그 레벨을 조정하여 민감한 정보가 로그에 노출되지 않도록 관리할 수 있다. 예를 들어서, 운영 환경에서는 DEBUG 레벨의 로그를 비활성화시켜 민감한 정보가 로그로 남지 않도록 해줄 수 있다.
2. 그래서?
javascript라서 해서 무조건 console.log() 함수를 사용하는 건 아니다. 보통은 개발 과정에서 디버깅과 정보 출력에 사용되는 용도로만 사용하는 게 좋다고 한다. 실제 운영 환경에서는 로깅 라이브러리를 사용하여 로그 레벨을 조절하고 로그를 관리하는 것이 더 바람직하다고 한다. java와 마찬가지로 로깅 라이브러리를 사용하면 로그의 세부 수준을 설정할 수 있고, 로그를 파일 또는 외부 시스템에 저장하는 등 더 다양한 로깅 기능을 활용할 수 있다고 한다. 이렇게 된다면 앞서서 log level로 분류해서 관리했을 때 얻을 수 있는 디버깅 및 문제 해결, 운영 환경 관리, 성능 최적화 그리고 보안에서 많은 이점을 얻을 수 있게 된다.
3. 마치며
그냥 Javascript라서 console.log() 함수를 쓴 게 아니라, 실무가 아니었기 때문에 그런 부분을 고려할 이유가 없었기에 쓴 것 같다.
console.log() 함수 사용하는 것도 서투른데 Spring 와서 레벨별로 분류해서 저렇게 써버리니깐 멀미가 난다🤣
'Framework > Spring' 카테고리의 다른 글
ERD 그게 뭔데 날 힘들게 해 (1) | 2024.01.13 |
---|---|
스프링 프레임워크와 스프링 부트 (0) | 2024.01.03 |
Gradle이 Maven 대신에 많이 사용되는 이유는 뭘까? (0) | 2023.12.21 |
상속과 인터페이스는 언제 써야될까...? (0) | 2023.12.08 |
트랜잭션(Transaction)이 뭐지? (0) | 2023.12.07 |
쓰임 있는 사람이 되기 위해 노력 중입니다.