[클린 아키텍처] 12장. 컴포넌트

혀어어언·2025년 7월 31일
0

📖 [12장] 컴포넌트

📘 클린 아키텍처 북스터디 정리입니다

📚 도서: 로버트 C. 마틴 《Clean Architecture》
🧑‍💻 목적: 올바른 설계에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 7월 ~ 매주 2장


✅ 핵심 요약 (Key Takeaways)

이 장의 핵심 문장은?

잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한,
따라서 독립적으로 개발 가능한 능력을 갖춰야 한다.

저자가 전달하고자 하는 메세지 요약

  • 컴포넌트는 소프트웨어를 배포 가능한 최소 단위로 나누는 구조적 단위
    잘 분리된 컴포넌트는 독립적으로 개발, 테스트, 배포될 수 있어 유지보수성과 유연성이 높아짐
  • 컴포넌트의 발전은 하드웨어와 언어 기술의 진보와 함께 이루어져 옴.
  • 하드웨어 발전 초기에는 링킹 로더나 링커를 통해 컴파일된 파일들을 묶었고, 이후 플러그인 아키텍처나 동적 링크를 통해 더 유연한 구조를 갖출 수 있게 됨
  • 오늘날 우리는 '컴포넌트 기반 아키텍처'를 손쉽게 구현할 수 있는 환경에 있음
  • 컴포넌트는 아키텍처의 핵심 단위이며, 독립적이고 유연한 소프트웨어 설계를 위한 필수 요소

💡 내용 정리

서론

  • 컴포넌트: 시스템의 구성 요소로 배포 가능한 가장 작은 단위
  • 여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성 가능
  • 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능해야 함
  • 즉, 컴포넌트의 핵심은 “독립적인 컴파일과 배포 가능성” 이다.

컴포넌트의 간략한 역사

과거의 프로그래밍

  • 과거에는 프로그램을 메모리에 어느 위치에 로드할 지 고민해야 했음
  • 이 시절에는 프로그램의 위치가 한번 결정되면 재배치가 불가능했음
라이브러리 함수에 대한 접근
  • 라이브러리 함수의 소스 코드를 앱 코드에 직접 포함시켜 단일 프로그램으로 컴파일
  • 라이브러리는 바이너리가 아니라 소스 코드 형태로 유지됨
  • 단편화 발생

재배치성

링킹 로더의 탄생

  • 외부 정의를 로드할 위치가 정해지면 외부 참조를 외부 정의에 링크
  • 링킹 로더를 통해 프로그램을 개별적으로 컴파일하ㅗ 로드할 수 있는 단위로 분할할 수 있게 됨

링커

링킹 로더의 한계

  • 프로그램이 커지자 링킹 로더의 속도가 너무 느려짐

해결책

  • 로드와 링크가 두단계로 분리됨
  • 프로그래머는 링크라는 별도의 앱으로 링크 과정을 처리하도록 만듦
  • 링커: 링크가 완료된 재배치 코드 생성 > 로더의 로딩 과정이 빨라짐

고수준 언어 사용의 시작(1980~)

  • 로드 시간은 빨라졌지만 여전히 컴파일-링크 시간이 병목 구간
  • 프로그램 크기와 관련된 머피의 법칙

    컴파일하고 링크하는 데 사용 가능한 시간을 모두 소모할 때까지 프로그램은 커진다

컴포넌트 플러그인 아키텍처의 탄생(1980년대 후반~)

  • 프로그래머가 프로그램을 성장시키는 속도 < 링크 시간이 줄어도는 속도
  • 액티브 X, 공유 라이브러리, .jar 파일 등장
  • 컴퓨터와 장치의 속도가 빨라져 또 다시 로드와 링크를 동시에 할 수 있게 됨

결론

  • 컴포넌트: 런타임에 플러그인 형태로 결합할 수 있는 동적 링크 파일
  • 과거에는 많은 노력을 통해 컴포넌트 플러그인 아키텍처를 적용할 수 있었지만 이제는 기본으로 쉽게 사용할 수 있음

용어 정리

무어의 법칙(Moore's law)

  • 컴퓨터 속도, 메모리, 집적도가 매 18개월마다 두 배로 증가한다는 주장
  • 1950년대부터 2000년까지 유효했지만, 이 이후에는 적어도 클럭 속도 고나점에서는 성장이 둔화됨

링크 분류

정적 링크(Static Linking)

  • 컴파일 타임에 모든 필요한 코드가 하나의 실행 파일로 병합되는 방식

동적 링크(Dynamic Linking)

  • 실행 시점에 외부 라이브러리를 불러오는 방식, 컴포넌트 플러그인 구조에 활용됨

0개의 댓글