무엇을 공부했나요?
이번 시간에는 Two scoops of Django 27장 ‘로깅: 누구를 위한 것인가?’와 28장 ‘시그널: 이용 사례와 시그널을 피할 수 있는 기술들’을 공부했습니다. 몰아주기 가위바위보에서 패배한 남홍님이 요약과 심화 모두 준비하셨습니다.
로그
- 진단용 로그는 어플리케이션의 동작과 관련된 이벤트를 기록한다. 예를 들어 사용자가 오류 보고서를 남기면, 그 로그를 해당 에러와 관련된 상황을 확인하는데 쓸 수 있다.
- 감사용 로그는 비지니스 분석에 필요한 이벤트를 기록한다. 사용자가 무슨 동작을 했는지 알아낼 수 있으며, 다른 사용자와 무슨 동작을 했는지도 상세하게 알 수 있다. 이를 통해 보고서를 작성하거나 업무적으로 최적화를 할 수 있다.
Print는?
print
가 logging보다 좋은 경우는 커맨드라인 어플리케이션에서 help 구문을 화면에 보여줄 때 뿐이다.log record
는 로그 남기는 이벤트가 발생할 때마다 만들어지는데, 여기에는 로그 남기는 이벤트의 파일명과 경로, 함수, 몇 행에서 문제가 발생했는지 등에 대한 정보가 들어있어 문제를 확인하기에 편리하다.- 내장된 모듈에서 발생한 이벤트들도 로그가 남는데, 이 로그들은
루트 로그 기록기
를 통해 어플리케이션의 로그 스트림으로 보낼 수 있다. - logging.Logger.setLevel() 메소드를 쓰면 로그를 선택적으로 남길 수 있다. logging.Logger.disabled 속성을 True로 설정하면 로그를 끌 수도 있다.
로그 설정하기
- INI 포맷의 파일을 사용하는 방법:
- 이렇게 하자: 소켓에 함수 logging.config.listen() 를 사용해서 어플리케이션이 실행 중일 때에도 설정 변경이 반영될 수 있도록 한다.
- 이렇게 하지 말자: 코드에 로그를 설정할 때 (예를 들면 직접 만든 서브클래스나 로그에) 할 수 있는 설정도 하지 않는다.
- 딕셔너리나 JSON 포맷 파일을 사용하는 방법:
- 이렇게 하자: 어플리케이션 실행 중에도 업데이트를 할 수 있을 뿐만 아니라, 파이썬 2.6부터는 표준 라이브러리에서 json 모듈을 사용하여 파일에서 설정을 불러올 수도 있다.
- 이렇게 하지 말자: 코드에 로그를 설정할 때 할 수 있는 설정도 하지 않는다
- 코드를 사용하는 방법:
- 이렇게 하자: 모든 설정을 완벽하게 한다.
- 이렇게 하지 말자: 소스코드에서 설정 수정이 필요하다.
심화
호성님이 로그와 메트릭 관련해서 보충 발표를 하셨습니다.
메트릭?
(name, numeric)의 형식을 갖는 하드웨어/소프트웨어/서비스의 측정값
로그의 흐름
- 로그를 생성하고 (Application)
- 로그를 가공해서 전달하고 (fluentd)
- 로그를 저장하고 정래해서 (Elastic search)
- 잘 보여준다 (Kibana)
잠깐 생각해 볼 것
- 로그를 남길까 말까?
- 로그는 항상 남긴다.
- 로그 양이 너무 많을 떄에는 메트릭으로 남긴다.
- 로그는 어떤 형식으로 남길까?
- parser/문서를 특별히 만들지 않아도 되도록
key, value
를 포함하는 형식 - json, ltsv
- parser/문서를 특별히 만들지 않아도 되도록
- 로그는 항상 가득차서 문제를 발생 시켜요.
- local에 보관하지 마세요.
- logrotate를 사용하세요.
어땠나요?
개발 초보인 저는 로깅을 하는 것이 테스트와 마찬가지로 생소합니다. 아마 다른 신입 개발자들도 그러리라 생각합니다. 기존에는 늘 print() 메소드 혹은 파이참에서 제공해주는 디버깅 기능을 통해 오류를 확인하고 수정했는데요, 이번 시간 이후로 개발할 때 로깅을 적용하여 친숙해져야하는 친구(?)라고 생각하게 됐습니다. 아직 기획 단계지만, 진행하고 있는 부칸남 갤러리 프로젝트에서 로깅을 사용하는 부분을 지켜봐주세요 ;)
책걸이에서 이미 말씀드렸지만, 두숟갈 스터디를 통해 많을 것을 보고 느꼈습니다. 장고는 물론이고, 먼저 바쁘신 와중에 후배들을 격려하며 스터디를 진행하는 훈훈한 모습, 직급 직위와 같은 격조를 따지지 않고 먼저 열정적으로 배움에 임하시는 선배 개발자들 등 좋은 개발자라면 저렇게 돼야지, 좋은 회사(개발팀)를 보는 눈을 기를 수 있었습니다. 저와 같은 외부인도 같이 스터디를 들을 수 있게 해주신 점 정말 감사합니다. 다음에 기회되면 또 스터디를 함께하고 싶습니다!