본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[책 정리] 12장. 컴포넌트 - Clean Architecture

by 돼지왕왕돼지 2020. 4. 16.
반응형

-

SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해준다.

대규모 소프트웨어 시스템은 작은 컴포넌트들로 만들어진다.



-

컴포넌트는 배포 단위다.

컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다.

자바의 경우 jar 파일이 컴포넌트다. 루비에서는 gem, 닷넷에서는 DLL 이다.

컴파일형 언어에서 컴포넌트는 바이너리 파일의 결합체다.

인터프리터형 언어의 경우는 소스 파일의 결합체다.



-

컴포넌트가 마지막에 어떤 형태로 배포되든 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다.




컴포넌트의 간략한 역사




재배치성


-

과거 고정된 메모리 위치에만 라이브러리를 로드할 수 있었다.

그래서 앱이 커지면서 라이브러리 메모리 위치를 침범하는 문제가 생겼다.

이에 대한 해결책은 재배치가 가능한 바이너리(relocatable binary)였다.




링커


-

기술이 발전하며 소스 모듈은 .c 파일에서 .o 파일로 컴파일된 후 링커로 전달되어 빠르게 로드될 수 있는 형태의 실행 파일로 만들어졌다.

각 모듈을 컴파일하는 과정은 상대적으로 빨랐지만, 전체 모듈을 컴파일하는 일은 꽤 시간이 걸렸다.

이후에 링커에서는 더 많은 시간이 소요되었다.

그러나 하드웨어의 발전으로 링크 시간은 문제가 되지 않게 되었다.

그래서 액티브 X 와 공유 라이브러리 시대가 열렸고, .jar 파일도 등장하기 시작했다.

이렇게 컴포넌트 플러그인 아키텍처(component plugin architecture)가 탄생했다.




결론


-

런타임에 플러그인 형태로 결합할 수 있는 동적 링크 파일이 소프트웨어 컴포넌트에 해당한다.

과거에는 초인적인 노력을 들여야만 컴포넌트 플로그인 아키텍처를 적용할 수 있었지만, 이제는 기본으로 쉽게 사용할 수 있는 지점까지 왔다.


반응형

댓글0