소프트웨어 아키텍처는 아쉽게도 외부에 드러나지 않습니다.
같은 기능을 수행하는 a, b 프로그램이 있습니다.
a 프로그램은 잘 설계된 아키텍처를 가지고 있습니다. 가격은 200달러 입니다.
b 프로그램은 좋지 못한 아키텍처를 가지고 있습니다. 가격은 100달러 입니다.
프로그램을 구매해야 하는 사람의 입장에서 보면 a, b중 어떤 프로그램을 구매할까요?
b를 구매하는 사람이 많지 않을까 싶습니다.
우리는 물건을 구매할때 비용과 품질의 트레이드오프가 일어납니다. 아반떼와 포르쉐 카이옌의 가격은 다르고 더 좋은 품질을 비싼 가격에 기대하게 됩니다.
프로그램의 내부 아키텍처는 외부에 드러나지 않습니다. 그래서 아키텍처는 간과되기 쉽습니다.
개발자들이 아키텍처의 설계에 아무리 공을 들여도 비용을 관리하는 입장에서는 같은 동작이 수행되니 프로그램에서의 비용과 품질의 트레이드 오프를 이해할 수가 없습니다
프로그램에서의 비용과 품질의 트레이드 오프는 장기적인 관점에서 바라봐야 합니다.
잘 설계된 아키텍처는 기능의 추가와 기존 기능의 수정이 편리합니다.
- 상단의 두 개 옷장에서 같은 옷을 꺼내야 하고 상의와 겉옷 칸의 위치를 바꿔야 한다고 생각해보세요.
- 어떤 옷장이 수월할 까요?
- 그래서 좋은 아키텍처를 가진 프로그램은 장기적으로 유지 보수와 기능의 추가가 상대적으로 매우매우 용이하여 결과적으로는 비용을 줄여줍니다.
- 하지만 초기 비용은 증가합니다.
- 옷이 적을때는 옷장을 더럽게 해도 저의 요청사항들(같은 옷을 꺼내기, 상의와 겉옷 칸의 위치를 바꾸기)들을 수행하기 쉽습니다.
- 오히려 더 빠를 수도 있습니다.
- 그래서 프로그램의 규모, 예산등이 고려되어야 하지 않을까 싶습니다. 그래도 경험상 무조건 좋은 아키텍쳐를 설계하고 가는 것이 좋지 않을까 생각이 듭니다
- 옷은 서로 데이터를 주고 받지 않지만 소프트웨어의 각 모듈들은 서로 데이터를 주고 받아야 합니다.
- 그러니 아키텍쳐를 단순히 분류를 넘어 데이터를 주고 받는 인터페이스 설계가 훨씬 더 중요하기 때문에 앞으로 나올 아키텍쳐 이야기에서는 1)분류와 2)인터페이스 관점을 둘 다 생각하고 읽어 주세요!