소프트웨어 아키텍팅의 기본
소트프웨어는 점점 커지고, 점점 복잡해진다. 네이버나 카카오톡을 보자. 네이버는 처음에는 지식을 찾아주는 검색 사이트였다. 그러나 지금은 미용실도 예약할 수 있고, 네비게이션으로 이용할 수도 있다. 카카오톡의 경우도 처음에는 친구들과 메시지를 주고 받는 기능만 있었으나 현재는 쇼핑도 할 수 있고, 돈도 보낼 수 있다.
소프트웨어 엔지니어링의 발전은 소프트웨어 규모와 복잡성 증가와 일치해왔다. 어셈블리 언어는 고급 언어(사람에게 더 친화적일 수록 고급 언어라고 부른다. 어쩜 이 개념은 기계어와 구분하기 위하여 만든 것 같다.)와 구조적 프로그래밍에 밀려 특수한 경우에만 사용되며, 절차지향적 프로그래밍은 객체 지향적, 함수형 언어에 밀려 지양해야하는 방식이 되었다. 또한 서브루틴에 불과하던 소프트웨어 재사용은 이제 반드시 고려해야할 설계 원칙이 되었으며 이는 라이브러리와 프레임워크에도 적용이 되었다.
소프트웨어 복잡성은 프로젝트를 실패로 이끄는 주요한 리스크이다.
개발자 도구(이클립스, 인텔리제이, 비주얼 스튜디오 등)의 발전과 version up을 통한 언어의 발전도 있었지만 소프트웨어 아키텍팅 기술의 발전이 가장 큰 영향을 미쳤다.
분할, 지식, 추상화
소트프웨어의 비대화와 높은 복잡도의 위험에서 성공적으로 프로젝트를 이끌려면 "분할", "지식", "추상화"의 기술이 필요하다.
분할(partition)
분할은 다음 두 조건을 만족시킬 때 규모와 복잡도를 극복하는 효율적인 전략이다.
1. 분할한 분량은 한 사람이 해결할 수 있을 만큼 작아야 한다.
2. 어떻게 부품으로 전체를 조립하는지 추론할 수 있어야 한다.
추론에 대한 예시는 인터페이스이다. 외부에 노출되는 인터페이스를 보고 조립할 때 사용한다. 내부 구현을 볼 필요가 없도록 인터페이스를 명확하게 만든다면 현재하는 작업에 더욱 집중할 수 있다.
지식(knowledge)
소프트웨어 개발자는 이전 지식을 활용하여 문제를 해결한다. 지식은 이전 프로젝트나 현재 프로젝트의 문서일 수도 있고, 선지식일 수도 있다. 또한 지식은 클래스의 함수 설명과 같은 구체적인 코드에 대한 설명일 수도 있고, 데이터베이스 테이블 정규화 같은 일반적인 지식일 수도 있다.
추상화(abstraction)
추상화는 문제를 축소하고 추론하기 더 쉬운 작은 문제로 만들기 때문에 규모와 복잡성의 문제를 효과적으로 해결한다. 추상화된 문제는 나무가 아닌 숲을 볼 수 있게 도움을 주는 중요한 도구이다.
위 세 가지 기술은 복잡하고 큰 시스템을 신규로 만들거나 유지보수하는데 없어서는 안될 기술이다.
소프트웨어 아키텍트는 시스템을 더 잘 분할하고, 필요한 지식을 제공하며 잘 정의된 추상화로 문제의 본질을 드러내야 한다.
참고: 적정 소프트웨어 아키텍처
'아키텍처' 카테고리의 다른 글
아키텍처 세 가지 접근 방식 (2) | 2023.01.28 |
---|---|
추정 아키텍처와 레퍼런스 아키텍처 (13) | 2023.01.28 |
소프트웨어 아키텍처의 정의 (12) | 2023.01.24 |
리스크 주도 소프트웨어 아키텍처란? (2) | 2023.01.23 |
아키텍처, 아키텍트, 아키텍팅 용어 바로 알기 (12) | 2023.01.23 |
댓글