오늘도 삽질중

클린코드 책을 읽고서 Chapter. 시스템 with 횡단관심사란? 본문

기타

클린코드 책을 읽고서 Chapter. 시스템 with 횡단관심사란?

Choi3950 2021. 1. 20. 15:15
반응형

본 포스팅은 개인정리 목적으로 작성된 글입니다.

잘못된 정보가 있을 수 있으며, 피드백은 겸허히 받겠습니다.





클린코드의 시스템 챕터를 읽어봤는데 생소한 내용이 굉장히 많았다.

지연초기화, 의존성주입, 도메인, 프록시 등등 평소에 들어봤지만 막연하게

알고있는 부분이 많았다.


그중에서도 횡단관심사란 내용이 잘 이해되지 않아 해당 키워드를 정리해보려고 한다.

참고로 모든 내용을 설명하기엔 내용이 상당히 방대하기 때문에 횡단 관심사가 무엇인지 이해하는데 포커스를 맞춘다.




횡단 관심사(Cross-cutting Concerns)란?

위키백과

다른 관심사에 영향을 미치는 프로그램 애스펙트이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 분해되지 못하는 경우가 있을 수 있으며 분산(코드 중복)되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다.



위키에서 말한 관심사란 것은 프로그래밍 관점에서 보면 하나의 기능이나 모듈이라고 이해하면 쉬울꺼 같다.


은행 프로그램을 예로 들면 입금,출금,이체 등 하나의 기능 자체를 관심이라 표현하며, 이를 핵심관심사항 이라고 한다.



그럼 관심을 횡단한다는 말은 무엇일까?


우선 그전에 위의 은행 예시에서 입금,출금,이체 기능에서 공통적으로 들어가는 로직이 무엇인지 생각해 보자. (가정)

1. 입금,출금,이체 기능이 동작될 땐 암호화와 같은 보안처리가 들어가야 한다.

2. 입금,출금,이체 기능이 동작될 땐 세션이 유지되어 해당 사용자가 실 거래자임을 인지해야 한다.

3. 입금,출금,이체 기능이 실패할 경우를 대비해 예외처리를 한다.

4. 입금,출금,이체 기능이 실패 또는 성공한 경우 해당 내용을 기록한다. (로그)



위 4가지는 모든 핵심관심사항(입금,출금,이체) 에 필요한 처리 사항이다.


모든 핵심관심사항에 공통적으로 들어가는 코드가 된다. 이것을 횡단 관심사항 이라고 부른다.


아래 그림을 보면 좀 더 이해가 쉬울것이다.


이제 횡단관심사라는 것이 무엇인지 대충 이해는 했으리라 생각한다.


결국 횡단관심사도 프로그래밍 관점에서 보면 중복 이라는 문제가 존재한다.


그래서 이러한 문제점을 해소하기 위해


AOP(관점지향 프로그래밍 , Aspect Oriented Programming) 기법이 나오게 되었다.



AOP가 나오게 된 배경에 대해 간단히 설명을 하자면

최초 프로그램이 생길 땐 규모가 매우 작아 프로그램을 효율적으로 작성하는 법이 고려되지 않았다.

이때의 프로그래밍 기법이 위에서 아래로 실행되는 절차지향 방식이다.

하지만 시간이 지나면서 프로그램이 복잡해지고 거대해지면서, 

절차지향 방식은 비효율적이며 여러 문제점이 나타나게 시작했다.

이러한 문제점을 극복하기 위해 객체지향 방식인 OOP(Object Oriendted Programming)가 나오게 되었다.

객체를 사용하여 재사용성과 중복 코드를 모듈화하여 어느정도 효율성을 달성했으나,

프로그램이 점점 더 거대해지면서 모듈화자체에도 중복코드가 생기며 문제점이 발견되었다.

이러한 문제점을 해결하기 위해 나온 프로그래밍 방식이 AOP다.

여기서 오해하면 안되는것이 AOP 와 OOP 는 다른 방식이 아니라,

OOP가 더 효율적이도록 일종의 서포트 느낌으로 나온것이 AOP 라는 점을 기억해야 한다.

즉 AOP 는 OOP를 더 OOP 답게 만들어 준다. 결국 OOP에 기반한다.



그래서~~~~


AOP(관점지향 프로그래밍 , Aspect Oriented Programming) 란?


횡단관심사항의 기능을 모듈화하여 중복을 최소화하면서, 핵심관심사항에 집중하도록 하는 프로그래밍 기법



위 그림에서 Class A,B,C (핵심관심사항) 에서 중복되는 사항을


이렇게 모듈화하여 관리한다.


그외 디테일한 내용은 내용이 너무나 방대하여 여기까지....















반응형
Comments