티스토리 뷰

Practical 자바 유틸리티 기획을 하면서 어떠한 유틸리티를 설명할까 많은 고민을 했고 이와 관련한 주제를 잡기 위해 출판사 및 자바 관련 분들과 많은 얘기를 나눴다.


개인적으로는 프레임워크라 말할 수 있는 너무 거창한 주제는 다루고 싶지 않았다. 왜냐하면 하나의 책에 모든 것을 담는 것은 무리이며 자칫 잘못 건드렸다가 이도 저도 아닌 졸작이 될 가능성이 높았기 때문이다.

개인적으로는 로깅과 관련해서 하나의 챕터로 설명하고자 했으나 책의 분량 문제도 있었고 아무래도 다른 유틸리티에 비해서 쉽게 사용할 수 있다고 판단해서 책에 포함시키지 않고 최종적으로 제외시켰다. 


하지만 생각보다 로깅과 관련해서 많은 개발자들이 잘 알지 못하는 것이 현실이다. 왜냐하면 대부분의 로깅 설정이 프레임워크 차원에서 처리가 되는 관계로 깊이 있게 고민해 본적이 없고 대부분 공통 개발자나 프레임워크 개발자가 설정을 하고 개발자는 Logger의 API를 호출하는 것으로 모든 것이 끝나기 때문이다.


그래서 다소 아쉬움이 남지만 해당 내용을 블로그에 남기도록 하겠다.


1. 로깅이란 무엇인가?


로깅이란 말그대로 특정한 저장소에 정보를 기록하는 것을 의미한다. 대표적으로 파일에 남기기도 하고 콘솔(Standard Output)에 남긴다. 특이한 경우는 데이터베이스에 남기거나 JMS와 같은 메시지 큐에 남겨야 하는 요건도 발생한다. 

어떤 경우는 특정 로그가 발생하였을 때 이메일로 전송해 달라는 요건들도 있다. 예를 들어 특정 서버에 접속이 안된다거나 서비스에 치명적인 위험이 감지되었을 때 등이다. 이처럼 로깅과 관련된 요건은 프로젝트마다 굉장히 다양하다


특히 서버 환경의 경우 디버깅 도구나 통합 개발 도구를 활용할 수 없기 때문에 로그를 통해 버그를 확인할 수도 있고 비즈니스 적인 진행 상황을 추적해 나갈수도 있다.

이처럼 개발한 어플리케이션의 기록을 남기고 내용을 추적하고 확인하기 위한 일련의 과정을 로깅이라 할 수 있다. 


2. 어떤 것을 사용해야 할까?


가장 많이 사용하는 것은 다양히 아파치 프로젝트의 Log4J 프레임워크이다. 초창기 자바 언어가 사용되어 질 때부터 많이 활용되었고 거의 업계 표준화가 되다시피 했었다. 하지만 개발 환경, 비즈니스적인 요구 그리고 자바 버전의 업그레이드에 비해서 Log4J의 버전업은 매우 더디었고 여러가지 문제점도 많이 발생했다. 대표적으로 로깅을 하기 위한 성능 문제, 환경 설정의 어려움, 설정 정보를 변경한 후에는 WAS나 자바 어플리케이션을 재시작 해야 하는 점, 자바 API의 번거러움 등이다. 

이러한 문제를 해결하기 위해 Log4J 자체를 고치기도 했고 많은 트릭들을 사용하기도 했으며 Log4J가 아닌 SLF4J나 Logback과 같은 다른 프레임워크에 눈을 돌리기도 하였다.


이 블로그에서는 Log4J 2.x 버전에 대해서 설명하도록 하겠다. Log4J 2.x는 2012년 알파 버전이 소개 되었고 정식 버전이 나온 것이 2012년 7월이니 로그의 역사에 비해 발표된지 얼마 되지 않았다. 그리고 본격적으로 알려지기 시작한게 2014년 정도 부터이다.


3. 제약 조건


Log4J가 나온게 2012년 부터이고 필자가 프로젝트에서 적용하기 시작한 것이 2014년 부터이니 발표된지 얼마 안된 따끈따끈한 자바 유틸리티이다.

우선 Log4J 2는 Log4J 1.x 버전과 호환되지 않는다. 사용법이나 API는 유사하지만 전혀 다른 로깅 프레임워크라고 이해하는 것이 좋다.

그리고 2.3 버전까지는 JDK 6 이상이여야 하며 그 이후 버전인 2.4 버전부터는 JDK 7 이상을 요구한다.

"Practical 자바 유틸리티"의 기준으로 JDK 8로 잡았기 때문에 책을 기준으로 진행하고 있는 독자들의 경우 특별한 문제 없이 사용할 수 있다.


참고로 Log4j 1.x는 더이상 업그레이드 되지 않으며 버그 픽스나 문서 업데이트 등도 중단되었다. 하나디로 EOL (End of Life) 되었다.


4. 블로그에서 설명하고자 하는 것


크게 다음과 같이 3가지에 대해서 설명하고자 한다.


- Log4j 2에 대한 구조 및 이해

- 자바 어플리케이션에서 Log4j 2를 사용하는 방법

- 웹 어플리케이션에서 Log4j 2를 사용하는 방법 (톰캣 8버전을 이용할 것이다.)


이의 3가지 주제를 기반으로 블로그에 글을 남길 예정이다.


5. 자세한 정보


- 공식 홈페이지 참조

가장 좋은 정보를 확인하는 방법은 Log4j 2의 홈페이지인 http://logging.apache.org/log4j/2.x/ 에서 확인하는 것이다. 필자도 해당 공식 매뉴얼을 가지고 확인하고 배우기 시작하였다. 비록 예제나 설명이 빈약하긴 하지만 항상 기준이 되는 정보이다.


- 전자정부 프레임워크 (egovframework)

전자정부 프레임워크는 비교적 최신의 자바 유틸리티들을 적용하며 지속적으로 버전이 업그레이드 되고 있다. 로깅과 관련해서도 마찬가지며 이미 2015년도에 Log4j 2를 채용하였고 이에 대한 문서화도 되어 있다. 내용이 잘 정리되어 있고 설명도 친절한 편이다.

이 문서에서 Log4j 2가 properties 파일 기반의 설정이 지원안된다고 했지만 현재 기준으로 지원한다. (과거 2.3 버전까지는 지원하지 않았지만 2.4 버전 이후부터는 지원이 된다.) 아마도 해당 문서가 2.4 버전 이전에 작성된 것으로 보인다.


- 서적 들

현재까지 필자가 확인한 바로는 Log4j 2에 대해 설명한 책은 존재하지 않는다. 과거 1.x 버전의 경우 Apress에서 출판한 "Pro Apache Log4j, Second Edition"이 있지만 2005년에 출판한 책이고 2.x 버전과 호환되지도 않는다. 다만 이 책은 자바에서 로깅과 관련해서 체계적으로 설명하였기 때문에 로깅에 관심이 있다면 한번 읽어볼 만하다.


== 참고 ==========================================================================

1. Practical 자바 유틸리티, 인사이트 장윤기 (2016) 책의 내용을 보완하기 위한 용도로 작성한 문서이다.

2. 책에 지면 관계상 넣지 않은 부분, 추가 기능 설명이 필요한 부분을 중심으로 기술하였다.

================================================================================