AOP, DI란?

|

DI 컨테이너란?

프레임워크에서 컨테이너란?

예를 들면, 애플리케이션에서 코드를 작성할 때 특정기능이 필요하면 이미 기능이 구현되어 있는 라이브러리를 호출하여 사용하곤 합니다.

프로그램의 흐름을 사용자가 제어합니다. 하지만 프레임워크 기반 개발에서는 프레임워크가 흐름의 주체가 되어 필요할때마다 코드를 호출하여 사용합니다.

즉 프레임워크에서 이 제어권을 가지는 것이 바로 컨테이너입니다. 객체에 대한 제어권이 개발자로부터, 컨테이너에게 넘어가면서 객체의 생성부터 생명 주기 관리까지 모든 것을 컨테이너가 도맡아서 하게 됩니다.

DI(Dependency Injection)란?

DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로, 컨테이너가 자동적으로 연결해주는것을 얘기합니다. 개발자들은 제어를 담당할 필요없이, 빈 설정 파일에 의존관계가 필요하다는 정보만 추가해주면 됩니다.

한마디로 뭔가 필요한 인스턴스가 있으면, 내가 가서 찾아오던가 직접 만드는 대신 무엇이 필요한지 선언만 하면 외부에서 자동으로 제공해준다는 뜻입니다.

AOP란?

AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용 하도록 지원하는 것입니다.

기존에 OOP에서 바라보던 관점을 다르게 하여 부가기능적인 측면에서 보았을때 공통된 요소를 추출하자는 것입니다. 이때 가로(횡단) 영역의 공통된 부분을 잘라냈다고 하여, AOP를 크로스 컷팅(Cross-Cutting) 이라고 불리기도 합니다.

요약하자면 아래와 같습니다.

  • OOP : 비지니스 로직의 모듈화 모듈화를 하는 핵심단위는 비지니스 로직

  • AOP : 인프라 혹은 부가기능의 모듈화 로깅, 트랜잭션, 보안 등등

그렇게 하는 이유는, DI는 컨테이너가 할테니 나머지 서비스 / 컴포넌트 / 비즈니스에 신경써라. 프로그래머는 비지 니스 로직에나 집중해라. 이걸 정제해서 얘기하면 관심의 분리라고도 이야기합니다.

결국 AOP는 기존 OOP의 방식으로는 깔끔하게 중복된 코드를 제거하고 모듈화를 하기 어려운 공통된 기능을 재사용하기 편하게 한 기법입니다.

AOP의 장점은 크게 2가지입니다.

  • 어플리케이션 전체에 흩어진 공통 기능이 하나의 장소에서 관리된다는 점
  • 다른 서비스 모듈들이 본인의 목적에만 충실하고, 그외 사항들은 신경쓰지 않아도 된다는 점

Comments