본문 바로가기

소프트웨어아키텍처5

[소프트웨어 아키텍처 101] Ch.10 레이어드 아키텍처 스타일 레이어드 아키텍처(layered architecture, n티어(n-tiered) 아키텍처)는 가장 흔한 아키텍처 스타일 중 하나이다. 단순하고 대중적이면서도 비용도 적게 들어 모든 애플리케이션의 사실상 표준 아키텍처이다. 시스템을 설계하는 조직은 그 조직의 소통 구조를 그대로 복제한 듯 설계할 수밖에 없다는 콘웨이의 법칙을 떠올려보면, 레이어드 아키텍처는 애플리케이션을 개발하는 아주 자연스러운 방법이다. 그러나 레이어드 아키텍처 스타일은 묵시적 안티패턴, 우발적 아키텍처 안티패턴 등의 몇몇 아키텍처 안티패턴의 범주에 속한다. 1. 토폴로지 레이어드 아키텍처에서 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성되며, 각 레이어는 애플리케이션에서 주어진 역할을 수행한다. 레이어의 개수와 유형은 특별한 제한.. 2024. 1. 11.
[소프트웨어 아키텍처 101] Ch. 9 기초 아키텍처 스타일의 명칭은 숙련된 아키텍트들 사이에서 간명하게 지칭할 수 있는 이름으로 붙여 놓았다. 예를 들어, 한 아키텍트가 레이어드 모놀리스에 대해 이야기할 경우, 그의 목표는 구조적인 측면과 어떤 종류의 아키텍처 특성이 알맞는지 살펴보고 통상적인 배포 모델과 데이터 전략 등 다양한 정보를 이해하는 것이다. 따라서 아키텍트는 기초적인 아키텍처 스타일의 명칭에 익숙해져야 한다. 1. 기초 패턴 소프트웨어 아키텍처의 역사를 통틀어 끊임없이 타나타고 또 나타나는 패턴이 있는데, 이런 패턴들은 코드, 배포, 또는 아키텍처의 다른 부분을 구성하는 시야를 넓혀준다. 예를 들어, 레이어는 기능에 따라 서로 다른 관심사를 분리하는 개념으로, 소프트웨어 자체만큼이나 오래되었다. 1.1 진흙 잡탕 진흙잡탕은 요즘에는 .. 2024. 1. 11.
[소프트웨어 아키텍처 101] Ch.8 컴포넌트 기반 사고 1. 컴포넌트 범위 개발자는 컴포넌트 개념을 다양한 팩터에 세분화하는 것이 유용하다고 생각한다. 컴포넌트는 아티팩트를 한데 묶어 필요시 중첩시켜 계층화하는, 언어에 특정한 매커니즘을 제공한다. 가장 단순한 컴포넌트는 클래스(또는 비객체 지향 언어의 함수)보다 한 단계 높은 수준의 모듈로 코드를 래핑하는 것이다. 이 단순한 래퍼를 보통 라이브러리(library)라고 한다. 컴포넌트 아키텍처에서 서브시스템이나 레이어 형태로도 나타나며, 많은 이벤트 프로세서를 위한 배포 가능한 작업 단위이다. 서비스는 또 다른 종류의 컴포넌트로서 자신의 주소 공간에서 실행되며, TCP/IP 같은 저수준 네트워크 프로토콜이나 REST, 메시지 큐 같은 고수준 포맷을 통해 통신한다. 컴포넌트는 아키텍처의 근본적인 모듈성을 구성하.. 2024. 1. 11.
[소프트웨어 아키텍처 101] Ch. 7 아키텍처 특성 범위 소프트웨어 아키텍처 세계에서는 전통적으로 아키텍처 특성의 범위를 시스템 레벨에 두는 것을 당연시했다. 예를 들어, 아키텍트가 확장성을 논할 때에는 일반적으로 전체 시스템의 확장성을 가리키는 것이다. 10년 전까지만 해도 거의 모든 시스템은 모놀리식이었으니 이것은 안전한 전제였지만, 현대적인 공학 기술의 등장과 마이크로서비스 등의 아키텍처 스타일이 가능해지면서 아키텍처 특성의 범위는 상당히 좁혀졌다. 이렇듯 소프트웨어 개발 생태계가 무서운 속도로 진화를 거듭하면서 기존에 당연하게 여겼던 공식도 서서히 퇴물로 전락하고 있다. 우리가 앞에서 살펴보았던 다양한 메트릭들은 사실 모두 코드에 관한 저수준의 세부만 밝힐 뿐, (특히 운영과 관련된) 아키텍처 특성에 영향을 미치는, (데이터베이스 같은) 코드베이스 외부.. 2024. 1. 11.
[소프트웨어 아키텍처 101] Ch.6 아키텍처 특성의 측정 및 거버넌스 1. 아키텍처 특성 측정 아키텍처 특성을 정의할 때 흔히 발생하는 문제들 물리학이 아니다 : 아키텍처 특성의 대부분은 의미가 모호하다. 정의가 너무 다양하다 : 부서마다 정의를 통일하기 전까지는 원활한 소통이 어렵다. 너무 복합적이다 : 바람직한 아키텍처 특성은 대부분 더 작은 다른 여러 특성들로 구성된다. 이 세 가지 문제는 아키텍처 특성을 객관적으로 정의하면 모두 해결된다. 1.1 운영적 측정 아키텍처 특성은 성능, 확장성처럼 비교적 정확하게 측정할 수 있는 것도 많지만, 팀 목표에 따라 그에 다른 해석은 미묘하게 갈릴 때가 많다. 성능의 여러 가지 맛 대부분의 프로젝트는 (웹 애플리케이션의 요청/응답 시간을 재는 것처럼) 일반적인 성능을 살펴보지만, 아키텍트와 데브옵스 엔지니어는 성능 예산을 책정하.. 2024. 1. 11.