Machineboy空
클린아키텍처 15장 아키텍처란? 본문
소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태다. 그 모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의사소통하는 방식에 따라 정해진다. 그리고 그 형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수되도록 만들어진다.
이러한 일을 용이하게 만들기 위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다.
아키텍처가 시스템 운영에 미치는 영향은 개발, 배포, 유지보수에 미치는 영향보다는 덜 극적이다. 운영에서 겪는 대다수의 어려움은 소프트웨어 아키텍처에는 극적인 영향을 주지 않고도 안순히 하드웨어를 더 투입해서 해결할 수 있따. 실제로 우리는 이러한 일이 벌어지는 경우를 계속해서 목격해왔다. 소프트웨어 시스템의 아키텍처가 비효율적이라면 단순히 스토리지와 서버를 추가하는 것만으로 제대로 동작하도록 만들 수 있을 때가 많다. 하드웨어은 값싸고 인력은 비싸다는 말이 뜻하는 바는 운영을 방해하는 아키텍처가 개발, 배포,유지보수를 방해하는 아키텍처보다는 비용이 덜 든다는 뜻이다.
그러허더라도 시스템을 운영할 때 아키텍처가 맡는 또 다른 역할이 있따. 좋은 소프트웨어 아키텍처는 시스템을 운영하는 데 필요한 요구도 알려준다.
선택사항 열어 두기
소프트웨어는 두 종류의 가치, 즉 행위적 가치와 구조적 가치를 지닌다. 이 중에서 두 번쨰 가치가 더 중요한데, 소프트웨어를 soft하게 만드는 것은 바로 이 구조적 가치이기 떄문이다.
소프트웨어를 부드럽게 유지하는 방법은 선택사항을 가능한 한 많이, 그리고 가능한 한 오랫동안 열어 두는 것이다. 그렇다면 열어 둬야 할 선택사항이란 무엇일까? 그것은 바로 중요치 않은 세부사항(detail)이다.
모든 소프트웨어 시스템의 두 가지 구성요소
- 정책(policy): 모든 업무 규칙과 업무 절차를 구체화
- 세부사항(detail): 사람, 외부 시스템, 프로그래머가 정책과 소통할 때 필요한 요소. (입출력장치, 데이터베이스, 웹 시스템, 서버, 프레임 워크, 통신 프로토콜 등)
아키텍트의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고 동시에 세부사항은 정책에 무관하게 만들 수 있는 형태의 시스템을 구축하는 데 있다. 이를 통해 세부사항을 결정하는 일은 미루거나 연기할 수 있게 된다.
- 예) 정말 신중한 아키텍트라면, 고수준의 정책을 데이터베이스가 관계형인지, 분산형인지, 계층형인지, 아니면 평범한 플랫 파일인지와는 관련이 없도록 만들어야 한다.
세부사항에 몰두하지 않은 채 고수준의 정책을 만들 수 있다면, 이러한 세부사항에 대한 결정을 오랫동안 미루거나 연기할 수 있다.
장치 독립성
- 의뢰인
- 고객의 이름과 주소를 포함하는 단위 레코드가 기록된 자기 테이프
- 이름과 주소가 빠져있는 문구
- 광고회사
- 이름과 주소를 편지 양식의 정확한 위치에 인쇄하도록 프로그램 작성
- 라인프린터 대신 자기 테이프를 사용하도록 운영체제에게 지시
- 그리고는 오프라인 프린터 다섯대의 테이프 드라이브에 끼워넣었다.
라인프린터 대신 자기 테이프를 사용하도록 운영체제에게 지시하더라도 프로그램 자체는 전혀 문제가 되지 않았는데, 운영체제의 입출력 추상화를 사용해서 작성되었기 때문이었다.
장치 독립성이 지닌 가치는 굉장했다. 어떤 장치를 사용할지 전혀 모른채, 그리고 고려하지 않고도 프로그램을 작성할 수 있었다.
물리적 주소 할당
디스크
- 실린더
- 헤드: 여러 개의 플래터를 읽는 바늘
- 섹터: 작은 저장단위
| 기존 방식 | 노련한 프로그래머 |
| (실린더 번호, 헤드 번호, 섹터 번호) 3차원 좌표로 지정 후 이 번호를 하드코딩 | 디스크를 0~N까지 이어진 긴 배열로 보고 상대 주소를 할당하자! |
| 새 디스크를 사용할 경우, 모든 데이터 주소를 변환하는 주소를 짜야 한다. | 1230번째 섹터를 주세요! 하면 변환하여 실린더 22번, 헤드 2번 섹터 19번 이런식으로 변환 |
| 상위 로직은 디스크의 구조를 전혀 모르며, 물리 구조가 바뀌어도 변환 루틴만 수정하면 된다. |
'Computer > CS' 카테고리의 다른 글
| 클린 아키텍처 7~8강 (0) | 2025.12.04 |
|---|---|
| 클린 아키텍쳐 4~6장 (0) | 2025.12.03 |
| 클린 아키텍쳐 1~3장 (0) | 2025.12.02 |
| 컴파일 언어와 스크립트 언어 (0) | 2025.04.18 |
| Exercism - Strain: 제너릭 메소드, 델리게이트, yield return (0) | 2025.02.13 |