log4j 보안 취약점이 나타난지 벌써 1달 정도가 넘었다. 엄청나게 큰 보안 이슈이다 보니까 빠르게 패치를 끝낸 상황일텐데,
그 상황을 지켜보면서, 내가 모르는게 너무 많아서 아주 짧게나마 공부해보고자 한다.
로그를 찍는다..! 근데 왜 라이브러리로?
로그를 찍을 때, 나는 System.out.println("######## 여기여기 ##########"); 이렇게.. 막 찍었다. 일단 로그를 찍는 라이브러리가 있는지 몰랐다! 그래서 System.out 을 이용하여 나의 로그를 여기저기에 남기고 다녔다.
그러다가 교육을 받으면서 다양한 라이브러리들이 존재함을 알게 되었다.
System.out 으로 쓰는 대신에 사용하라고 했다. 근데 '왜?' 인지는 몰랐던 것 같다. '왜'일까?
~와 같은 다양한 이유들이 있지만, 그 중에서도 성능적인 면에 대해서만 살짝 알고 가려고 한다.
Synchronzied?
println 은 synchronized 하다. 멀티스레드한 환경에서 thread-safe 하도록 만들기 위해 synchronized 를 메소드에 붙이곤 한다. 운영체제에서 중요한 개념인 멀티스레드 2021.06.12 - [CS/OS] - 📌프로세스와 스레드
개념을 공부하다 보면, 스레드가 스택을 제외한 나머지 부분을 공유하다보니 나와야하는 값이 나오지 않는 등과 같은 문제가 나타나는 걸 배웠을 것이다.
이러한 문제를 해결하기 위해, synchronized 를 사용하곤 한다. (난 안해봤지만..) 이를 통해 block - non block을 반복하며 동시 접근을 막는다. 하지만 block과 non block 의 과정이 반복되면, 이는 성능 저하를 불러 일으킬 수 있다! lock을 걸어 block 시키면 다른 스레드가 접근할 수 없기 때문에 lock을 반환할 때까지 기다려야하는 상황이 나타난다.
만약 사용자가 많은 대고객 서비스라고 생각해보자. 잘 돌아가는지 보고 싶어서 바보 개발자인 내가 운영 환경에서 필요한 모든 곳에 System.out.println 을 찍어 확인하려고 한다. 어떻게 될까?! 아마도 엄청 느린 서비스를 제공해서 아무도 우리 서비스를 안 쓰게 될 것이다.
log4j, log4j2, logback, slf4j 등 비교해보는 공부도 같이 하려고 했는데..
너무길어지니까 오래걸리고 하기싫어져서 다음 언젠가로 넘긴다!
급하게 마무리한다.. 안녕!
출처
https://tecoble.techcourse.co.kr/post/2020-07-30-use-logger/
https://m.lawtimes.co.kr/Content/LawFirm-NewsLetter?serial=175171
'Backend > JAVA' 카테고리의 다른 글
🙌JVM이 무엇이고 자바 코드가 어떻게 실행되는가 (수정,,) (0) | 2021.01.19 |
---|