[Spring] AOP 관점지향 프로그래밍

2024. 10. 15. 12:07·Spring

AOP를 알아보기 전에 Spring에 대해 다시 복기해보자.

스프링 프레임워크란?

스프링 프레임워크는 IoC(제어의 역전)와 AOP(관점 지향 프로그래밍)를 지원하는 경량 프레임워크다.

스프링은 POJO(Plain Old Java Object) 기반으로 설계되어 있어서 복잡한 설정 없이 간단하게 개발할 수 있게 해준다.

개발자들이 일정한 구조, 틀, 규격을 따르면서 개발하기 때문에 개발 역량이 상향평준화되고, 유지보수가 용이해진다.

IoC: 제어의 역전

원래 객체를 생성하고 관리하는 작업은 개발자가 new 키워드를 통해 직접 수행했지만, IoC를 통해 이 작업을 컨테이너가 대신 맡는다. 이를 통해 개발자는 비즈니스 로직에만 집중할 수 있고, 결합도를 낮출 수 있다.

 

스프링에서는 다양한 객체들(DS, HM, VR, Command 객체들, @Component, @Controller, @Repository, @Service 등)을 컨테이너가 관리한다.

의존성 주입(DI)을 통해 객체 간의 의존성을 생성자 주입, Setter 주입, @Autowired 방식으로 해결할 수 있다. 이 방식 덕분에 결합도가 낮아져 유지보수가 쉬워진다.

 

객체 지향 프로그래밍(OOP)에서는 주어진 '주체'를 중심으로 일을 처리한다.

객체 지향 프로그래밍은 System.out.println(), new Scanner(), sc.nextInt(), student.hello(), memberDAO.selectOne() 같은 방식으로 특정 객체의 메서드를 호출해 작업을 수행한다.

하지만 이렇게만 코드를 작성하면, 모든 기능에 공통적으로 적용해야 할 로직(보안, 로그 등)을 중복해서 작성하게 된다.

AOP(Aspect-Oriented Programming) 관점 지향 프로그래밍

 

AOP는 이러한 공통적인 로직을 '관점' 이라는 개념으로 분리하여 핵심 기능과는 별개로 관리하게 해준다.

로그, 보안, 트랜잭션 처리 같은 공통적인 기능을 핵심 비즈니스 로직과 분리하여 관리하면 코드가 훨씬 깔끔해지고 유지보수가 쉬워진다.

 

AOP는 스프링에서 간단하게 적용할 수 있고, 설정 파일에 정의된 대로 자동으로 적용된다.

 

핵심 관심 vs 공통 관심

AOP는 비즈니스 메서드(CRUD)와 같은 핵심 관심과, 로그나 보안처럼 여러 메서드에서 공통적으로 필요로 하는 공통 관심을 분리해서 관리한다. 핵심 로직은 주로 비즈니스 메서드나 서비스에서 처리하고, 공 관심은 로그, 보안, 트랜잭션 처리처럼 여러 부분에서 필요한 공통 로직을 다룬다.

 

->  Advice(횡단 관심): 공통 관심에 해당하는 공통 로직을 정의하는 것이다. 예시로 로그를 찍는 로직이 이에 해당한다.

->  Pointcut(핵심 관심): 핵심 관심이 발생하는 지점을 정의하는 것이다. 특정 메서드를 호출할 때 적용할 수 있다.

->  Aspect: Advice와 Pointcut을 결합한 개념으로, 설정 파일에서 정의하는 방식이다.

->  Joinpoint: Pointcut이 적용될 수 있는 모든 지점을 의미한다. 모든 CRUD를 의미한다.

->  Weaving: 핵심 로직에 공통 로직을 끼워 넣는 과정이다. 스프링에서는 런타임 시에 위빙 처리가 수행된다.

스프링에서의 AOP 적용

AOP를 잘 활용하면 핵심 로직과 공통 로직을 명확히 분리할 수 있다. 핵심 관심 로직 뒤에 공통 관심 로직을 추가하거나, 전후에 끼워 넣는 방식으로 쉽게 적용할 수 있다.

이를 통해 응집도를 높이고, 스프링이 제공하는 설정 파일로 AOP 기능을 자동으로 처리하게 된다.


정리

스프링은 IoC를 통해 결합도를 낮추고, AOP를 통해 응집도를 높이는 방식으로 유지보수를 용이하게 한다.

개발자는 핵심 비즈니스 로직에만 집중할 수 있게 되고, 공통적으로 필요한 보안, 트랜잭션, 로그와 같은 기능은 별도로 관리할 수 있어 코드의 재사용성과 가독성을 높일 수 있다.

'Spring' 카테고리의 다른 글

[Spring] 커스텀 어노테이션  (1) 2024.10.23
[Spring] AOP와 어노테이션  (0) 2024.10.16
[Spring] Ajax를 이용한 비동기 처리와 아이디 중복검사 구현  (0) 2024.10.14
[Spring] Tomcat Server 기동 시 Listener와 Spring IoC Container의 초기화 과정  (0) 2024.10.10
[Spring] 2-Layered 아키텍처 정리  (0) 2024.10.10
'Spring' 카테고리의 다른 글
  • [Spring] 커스텀 어노테이션
  • [Spring] AOP와 어노테이션
  • [Spring] Ajax를 이용한 비동기 처리와 아이디 중복검사 구현
  • [Spring] Tomcat Server 기동 시 Listener와 Spring IoC Container의 초기화 과정
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    정보처리기사
    생성자
    티스토리챌린지
    html
    MVC
    2-layered 아키텍처
    ViewResolver
    Spring
    @Component
    Di
    aop
    @repository
    @service
    이벤트 스케줄러
    recoverabledataaccessexception
    어노테이션
    객체지향
    오블완
    정처기
    상속
    DispatcherServlet
    오버로딩
    수제비
    정보처리기사 실기
    codeup 4891 : 행복
    스프링 프레임워크
    멘토씨리즈 자바
    정처기 실기
    jsp
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
[Spring] AOP 관점지향 프로그래밍
상단으로

티스토리툴바