Clean Code - 11. 시스템

다용도리모콘·2021년 1월 28일
0

Clean Code

목록 보기
10/14

시스템 제작과 사용의 분리

  • Main 분리: main 혹은 main에서 호출하는 모듈에 생성 코드를 분리
  • 팩토리(abstract factory pattern): 추상화를 통한 분리
  • 의존성 주입: DI 컨테이너에서 모든 생성을 관리하며 다른 모듈에 주입하는 방식으로 분리

횡단 관심사(cross-cutting)

객체 경계를 넘나드는 관심사. 영속성, 보안, 트랜잭션의 처리 방식 등이 이에 속함.
해당하는 코드에 대해 모듈성을 확보하는 방법으로 AOP(Aspect-Oriented Programming)가 있다.

관점 지향 프로그래밍(AOP)

특정 관심사에 대해 Aspect라는 개념의 모듈을 통해 특정 지점들이 동작하는 방식을 일관성 있게 바꾸는 방식의 프로그래밍 방법

자바에서의 사용되는 AOP 메커니즘

  • 자바 프록시
  • 순수 자바 AOP 프레임워크(AspectJ 사용 X) - 스프링 AOP, JBOSS AOP
  • AspectJ: 언어 차원에서 관점을 모듈화 구성으로 지원하는 자바 언어 확장

장점

  • 테스트 주도 시스템 아키텍처 구축이 가능해진다.
  • 단순한 아키텍처로 시작해 복잡한 아키텍처로 키워갈 수 있다.
  • 지엽적인 관리와 결정이 가능해진다.

DSL

간단한 스크립트 언어나 표준 언어로 구현한 API
도메인과 코드 사이의 '의사소통 간극'을 줄여준다.

내 생각

AOP 부분을 읽으면서 어디서 많이 본 개념이라 생각했는데 Nest.js의 Interceptors 가 AOP에서 영감을 받아 만든 것이었다. Nest.js의 Interceptors는 request를 controller 앞에서 잡아 특정 작업을 진행하는 클래스인데 AOP와 유사하다.
그 외에도 POJO로 구현되는 모듈을 단위로 어플리케이션을 구성하는 방식이 Nest.js의 Entity를 중심으로 모듈을 분리하는(물론 부가적인 모듈들도 존재하지만) 방식과 유사한 것, EJB3으로 작성된 Bank class의 형태가 typeORM으로 만들어진 Entity와 비슷한점 등 여러모로 익숙하게 느껴졌다.
언어와 프레임워크에 관계 없이 이러한 방식의 개발이 대세?인가 보다.

0개의 댓글