Search

감사 로그를 남겨보자.

태그
작성 상태
키워드 정리중
작성일
2025/05/25
참고 링크
참고 링크 2

감사 로그란?

시스템 상에서 누가, 무엇을, 언제, 어디서, 어떻게 했는지 남긴 기록을 감사 로그라 한다. 쇼핑몰을 운영한다고 생각해보자. 여러명의 쇼핑몰 운영자가 상품을 추가하거나 가격이나 재고 등을 수정할 수 있을 것이다. 이때, 누군가 어떤 상품의 가격을 1원으로 수정했다고 하자. 이건 분명히 쇼핑몰에 엄청난 손해를 가지고 오는 행위다. 그런데, 그걸 어떤 직원이 했는지 알 수 없다면? 정말 난감할 것이다. 또, 쇼핑몰에서 계좌이체, 카드결제, 토스 페이, 카카오 페이, 네이버 페이를 지원한다고 하자. 이런 결제 연동 시스템은 쇼핑몰 입장에선 외부 시스템을 사용하는 것이기 때문에 비용을 내야 한다. 이때, 네이버 페이의 그런데, 실제로는 전체 고객 중 1%만 네이버 페이로 결제하는데 연동 비용이 가장 크다면? 당연히 네이버 페이 연동을 굳이 할 필요가 없을 것이다.
앞서 말한 사례들은 모두 감사 로그를 활용하는 사례들이다. 이런 사례들을 분류하면 크게 4가지 정도로 분류할 수 있다.
보안 및 규제 준수: 누가 언제 로그인했는지, 중요한 데이터를 언제 수정했는지 등의 기록을 통해 불법적인 접근이나 비정상적인 활동을 감지하고, GDPR, HIPAA 등 각종 규제 요건을 충족하는 데 필수적입니다. 문제가 발생했을 때 책임 소재를 파악하는 데 결정적인 증거가 됩니다.
문제 진단 및 추적: 시스템 오류나 비정상적인 동작이 발생했을 때, 감사 로그를 통해 어떤 순서로 이벤트가 발생했는지를 파악하여 문제의 원인을 신속하게 진단하고 해결할 수 있습니다.
운영 모니터링: 시스템의 주요 기능이 어떻게 사용되고 있는지, 특정 기능의 사용 빈도 등을 파적하여 서비스 개선이나 운영 전략 수립에 활용할 수 있습니다.
비즈니스 프로세스 검증: 특정 비즈니스 프로세스가 의도한 대로 수행되었는지 확인하고, 누락되거나 잘못된 부분이 없는지 검증하는 데 사용될 수 있습니다.
이렇기 때문에 감사 로그를 남기는 행위는 대단히 중요하다.

감사 로그와 비즈니스 로직

감사 로그는 사실상 시스템의 거의 모든 기능들에 추가적으로 붙어야 한다. 즉, 여러 기능들을 적절한 기준으로 분리하여 코드를 작성하는 일반적인 프로그래밍 방식에서, 각 기능마다 이를 따로 통합해 작성하는 것은 문제가 있다.

횡단 관심사

감사 로그 처럼 시스템 전반에 걸쳐 영향을 주고 사용되는 것을 횡단 관심사를 가진다고 표현한다.

AOP

Java + Spring 진영에서의 감사 로그

Spring AOP

모던 자바를 이용한 AOP

Kotlin + Spring 진영에서의 감사 로그

Spring AOP의 한계

모던 자바의 한계

Kotlin 으로 극복해보기