99클럽 11일차 TIL: AOP

2024. 4. 14. 18:41개발 공부

728x90
반응형

#1. 오늘의 학습 키워드

자바 스프링에서 AOP 의 개념

  • 회사 내 백엔드 로직의 캐시를 도입하는 도중, 캐시 처리된 로직을 테스트 하던 중 redis 서버과의 연결이 안 된 상황에서 테스트가 된 적이 있었다.
    • 그때 디비와의 연결은 문제가 없는데도, 캐시가 처리된 로직은 redis 서버만 다운되면 api 호출 시 에러가 났다.
    • 개인적으로는 당연히 캐시 서버가 다운되면 디비로부터 정보를 가져와야 되는 게 아닌가라는 생각을 했다. 안타깝게도 그런 기능은 직접 구현해야됐던 상황이었다.
    • 해당 기능을 구현하는 상황에서 모든 캐시 어노테이션 쪽에 디비와의 연결을 보장하는 로직을 공통적으로 적용되는 코드로 추출하고 싶었는데, 이러한 개념을 AOP 라고 한다는 것을 깨달았다.
      • 사실 이미 공통적으로 사용되는 날짜, String, 통화든 메서드들은 공용 Util 로 따로 구현해 클래스를 만들고 있었는데, 이 개념이 AOP 라는 것을 깨달은 것 뿐이다.

#2. 공부한 내용

  • AOP
    • Aspect Oriented Programming
      • 관점 지향 프로그래밍
    • 모듈의 비즈니스 로직은 크게 핵심과 부가 기능을 나눌 수 있다.
      • 핵심 기능
        • 해당 모듈만이 제공하는 고유의 기능
      • 부가 기능
        • 핵심 기능을 보조하기 위한 기능
        • 여러 모듈에서 제공되고 있음
    • 부가 기능의 로깅 처리 등이 있으며, 전체 프로젝트에 로깅을 도입한다고 하면, 이 부가 기능은 여러 모듈에서 추가가 될 것이다.
      • 이런 부가 기능은 횡단 관심사라고 불린다.
    • 이런 부가 기능은 모든 모듈의 따로 코드를 작성하는 것이 아닌, 부가 기능을 핵심 기능에서 분리해 한 곳에서 관리하여, 여러 모듈들에게 해당 기능을 보조하도록 하는 것이 AOP 라는 개념을 접목 시키는 것이다.
      • 이렇게 함으로써 아래와 같은 장점을 얻을 수 있겠다.
        • 코드 재사용성 향상
        • 코드 중복 최소화
        • 코드 유지보수성 향상
        • 개발 공수 하락
  • 참조:

#3. 오늘의 회고

  • 요즘 회고는 스프링의 기초 개념의 관한 것이 많았다. 스프링이라는 프레임워크을 사용할 수록 유독 이런 새로운 개념을 익혀하는 것 같다.
    • 그만큼 획기적인 프레임워크였다는 얘기지 않을까 싶다.
  • 사실 AOP는 개발을 하다보면 자연스럽게 체득되는 개념인 것 같다.
    • 로깅, 트랜잭션, 보안(암호화, 복호화), 캐싱 등 공통적인 로직을 별도로 구현하고 관리를 하여, 적용하는 부분은 최대한 간단히 하는 것은 해당 기능등을 개발 초기부터 도입하지 않기에, 개발자들 스스로 지향하려한다.
      • 이미 각자 모듈들을 어느정도 개발한 상태이기에, 이런 공통적인 부분을 도입하기 위해, 모듈 내코드를 수정을 많이하는 것은 당연히 기피하고 싶어할 것이기 떄문이다.
728x90
반응형