인프런 커뮤니티 질문&답변

serverstudymaster님의 프로필 이미지

작성한 질문수

실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD

강사 소개

POJO로 개발했는데 비즈니스 로직을 로깅해야 할 경우, 어떻게 해야 할까요?

24.05.20 13:17 작성

·

147

0

강의 잘 듣고 있습니다!

 

강의 들으면서 문득 궁금한 점이 생겼는데요.

 

POJO로 개발했는데, 도메인 클래스 내의 비즈니스 로직을 로깅을 해야하는 경우가 실무에서 많을까요? 만약, 그런 경우가 있다면, 어떻게 해야 할지 궁금합니다. 공통된 패턴이 있다면, AOP를 사용해볼 수 있을 것 같은데, 그렇지 않은 경우, 어쩔 수 없이 도메인 모델이 로깅 프레임워크에 의존하지 않나 라는 생각이 들어서요. 로깅하고 싶은게 클래스의 메서드의 매개변수와 리턴값이 아닌 내부 로직 함수일 경우가 특히 궁금합니다. 혹시, 이런 경우는 실무에서 잘 발생하지 않아 알 필요가 없을까요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 21. 13:21

안녕하세요, 인프런 AI 인턴입니다.

serverstudymaster님의 질문에 답변 드리겠습니다.

실무에서 POJO 도메인 클래스의 비즈니스 로직 내부를 로깅하는 경우는 상당히 많습니다. 이러한 내부 로직을 로깅할 때 가장 보편적인 방법 중 하나는 AOP(Aspect-Oriented Programming)를 사용하는 것입니다. AOP를 이용하면 비즈니스 로직을 구현하는 도메인 모델이 로깅 프레임워크에 직접 의존하지 않으면서도 로깅을 할 수 있도록 외부에서 관점을 주입할 수 있습니다.

내부 로직 함수의 매개변수와 리턴값뿐만 아니라, 메서드 호출 이전이나 이후, 예외 발생 시점 등 다양한 지점에 로그를 남길 수 있는데, 이는 로깅뿐만 아니라 트랜잭션 관리, 보안 등 다양한 공통된 관심사(Cross-Cutting Concerns)를 처리하는 데에도 유용합니다.

특히, 내부 로직 로깅이 필요한 경우에는, 메서드 실행을 감싸는 형태로 AOP 어드바이스(Advice)를 구성하여 필요한 로직을 실행하게 할 수 있습니다. 이를 구현하기 위해 Spring 에서는 @Aspect 어노테이션을 사용한 AOP 구현을 제공하고 있으며, 이를 통해 비즈니스 로직 실행 전후로 원하는 로깅 로직을 삽입할 수 있습니다.

다만, 실제 코드 내에 AOP를 적용할 때는 성능과 의존성의 관리, 로깅의 범위와 같은 요소들을 고려하여 적절한 로깅 전략을 선택하는 것이 중요합니다. 너무 많은 로그는 오히려 시스템의 성능을 저하시킬 수 있으니, 로깅의 범위와 수준을 사전에 충분히 고려한 후 적용하는 것이 좋습니다.

이 내용 외에도 관련 자세한 내용은 Spring 공식 문서에서 찾아보실 수 있습니다. AOP 관련 내용은 Spring Data JDBC 문서의 용어집 섹션에 AOP(Aspect-Oriented Programming)에 대한 간략한 설명이 포함되어 있으니 참고하시면 도움이 될 것입니다.

링크: https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#glossary

도움이 되셨기를 바랍니다. 추가로 궁금한 사항이 있으시면 언제든지 질문해주세요.