클린아키텍쳐 컴포넌트

Developer:Bird·2021년 7월 18일
0

clean-architecture

목록 보기
2/3

[1. 컴포넌트 정의]

클린아키텍쳐에서 정의하는 컴포넌트란 시스템의 구성요소로 배포할 수 있는 가장 작은 단위를 뜻함, 또는 런타임에 플러그인 형태로결합할수있는동적 링크파일을 뜻함
예를들면 자바프로그래밍에서 jar파일

[2. 간략한 역사]

과거에는 개발자가 프로그램을 생성시 메모리 위치를 지정, 이때 한번 지정된 위치에 관해서는 재배치 불가능하였다. 라이브러리 사용원할시, 하나의 파일에 전부 포함시켜, 단일 프로그램으로 컴파일함 또한 라이브러리는 바이너리가 아닌 소스 코드 형태로 유지, 메모리가 작아서 소스 코드 전체를 메모리에 상주 불가능=> 소스코드를 여러 차례 읽어야함->컴파일하는데 몇시간 걸림
이후 컴파일 시간 단축을 위해서 라이브러리, 애플리케이션 코드를 두개의 주소 세그먼트로 분리하였다.

그런데 두개의 주소 세그먼트로 분리해서 개발하다 보면 애플리케이션 크기가 커지다 보면 침범 현상 생길 수 있었다.

재배치성

이에 대한 해결책은 재배치가 가능한 바이너리였다. 지능적인 로더사용->재배치할 수 있는 바이너리 생성하도록 컴파일러 수정, 이때 로더는 재배치 가능한 위치정보 전달 받고 여러개의 바이너리를 입력 받은 후 순차적으로 재배치 가능한 메모리로 로드하면서 작업 처리. 이를 통해 오직 필요한 함수만을 로드, 이때 프로그램이 라이브러리 함수를 호출한다면 컴파일러는 외부 참조로 생성하였고, 외부 함수정의하는 프로그램이라면 컴파일러는 해당 이름을 외부 정의로 생성. 외부 정의를 로드할 위치가 정해지기만 하면 로더가 외부 참조를 외부 정의에 링크시킴.(링킹 로더)

링커

링킹 로더의 등장 프로그래머는 프로그램을 개별적으로 컴파일 하고 로드할 수 있는 단위로 분할, 하지만 링킹 로더 속도 느려서 분할-> 로드와 링크이다.
링크의 경우 수동적으로 해줘야하는데 링커라는 별도의 애플리케이션으로 이 작업 처리하도록 만듦.
링커-> 링크가 완료된 재배치 코드를 만들어 주었고, 그 덕분에 로더의 로딩 과정 빨라짐

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

결론

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

출처:http://www.yes24.com/Product/Goods/77283734

profile
끈임없이 발전하자.

0개의 댓글