소프트웨어 아키텍처 동기 (Motivation)
소프트웨어 아키텍처 설계를 잘하면 시스템 구조가 커지더라도 성능 영향을 덜 받게 되고 기능을 추가할 때 확장성이 용이합니다. 반대로 아키텍처를 잘못 설계하게되면 성능 저하와 확장성의 문제가 생기고 이것을 개선하기위해 아키텍처를 다시 설계해야 하기 때문에 재설계 비용이 발생합니다.
- 구조의 중요성: 우리가 개발하는 모든 소프트웨어는 특정한 구조를 가지고 있습니다. 시스템의 기능을 수행하도록 코드를 작성하는 방법은 무한하지만, 설계 방식에 따라 소프트웨어는 서로 다른 특성을 지니게 됩니다.
- 성능과 규모 영향: 소프트웨어 아키텍처는 시스템의 성능과 규모에 직접적인 영향을 미칩니다. 예를 들어, 새 기능을 쉽게 추가할 수 있는지, 오류나 보안 공격에 대한 대응 방법 등에 영향을 줍니다.
- 재설계 비용: 최적으로 설계되지 않은 시스템 구조는 나중에 재설계하는 데 상당한 비용이 들 수 있으며, 특히 큰 규모의 시스템일수록 그 비용이 더욱 증가합니다.
소프트웨어 아키텍처 정의 (Definition)
소프트웨어 아키텍처란 높은 수준의 시스템 구조 개념으로, 각기 다른 요소들 간의 관계를 표현하며 시스템의 요구사항과 제약 사항을 만족시키는 것
소프트웨어 아키텍처 세부 정의 및 설명
1. 높은 수준의 시스템 구조 개념
- 추상화: 시스템을 이해하기 위한 중요한 구성 요소만 설계하고, 세부적인 수행 과정은 정의하지 않은 추상화된 개념을 말합니다.
- 기술과 아키텍처의 구분: 시스템 수행에 사용하는 기술이나 프로그래밍 언어는 소프트웨어 아키텍처에 포함되지 않으며, 이는 수행 과정의 일부에 해당합니다. 기술이나 프레임워크를 잘 선택하는 것은 소프트웨어 아키텍처 설계와는 다릅니다.
2. 구성 요소와 그 관계의 표현
- 구성 요소: 소프트웨어 아키텍처 구성 요소는 행위나 API를 정의하는 블랙박스를 의미합니다.
- 복잡성 관리: 구성 요소 자체만으로도 소프트웨어 아키텍처 다이어그램을 구성할 수 있으며, 복잡한 시스템에서는 이 정의가 재귀적으로 적용될 수 있습니다.
3. 시스템의 요구사항과 제약사항 만족
- 요구사항: 소프트웨어 아키텍처는 시스템의 요구사항에 따라 모든 구성 요소들이 어떻게 결합되어야 하는지를 나타내야 합니다.
- 제약사항: 시스템이 해서는 안 될 일들을 명확히 정의하여 제시해야 합니다.
소프트웨어 아키텍처의 추상화 단계
- Low Level (저수준): 클래스나 구조체 등 프로그래밍 언어에 따른 객체 간의 구조나 관계를 정의합니다.
- Middle Level (중간 수준): 모듈, 패키지, 라이브러리 등 상호 작용하는 방법을 표현합니다.
- High Level (고수준): 서비스, 프로세스, 프로세스 그룹 등 큰 규모의 시스템을 높은 수준에서 추상화하여 개별 구성 요소들이 별도의 서비스로 존재하고, 다른 컴퓨터에서 개별 혹은 그룹으로 실행되는 방식을 나타냅니다.
분산된 다중 서비스 접근의 장점
- 요청 처리량 증가: 더 많은 요청을 효율적으로 처리할 수 있습니다.
- 데이터 처리량 증가: 더 많은 데이터 양을 처리할 수 있습니다.
- 사용자 수용 능력 향상: 매일 수천, 수만 명의 사용자를 원활하게 받아들일 수 있습니다.
대규모 시스템의 예시
- 차량 공유 서비스
- VOD (Video on Demand)
- SNS (Social Networking Service)
- 온라인 비디오 게임
- 투자 플랫폼
- 은행 시스템
규모 있는 서비스 개발 실패 시 결과
- 사람들에게 필요하지 않거나 목적에 부합하지 않는 시스템을 개발하여 시간과 자원을 낭비하게 됩니다.
- 잘못된 시스템을 다시 만드는 것은 매우 어렵고 비용이 많이 듭니다.
- 시스템 유지보수에 대한 부담이 커집니다.
소프트웨어 아키텍처 개발 사이클
- 설계 (Design): 소프트웨어 아키텍처를 정의하는 필수적인 과정으로, 팀 전체 혹은 다른 엔지니어와 함께 구현하며 몇 주에서 몇 달이 소요될 수 있습니다.
- 구현 (Implementation)
- 시험 (Testing)
- 배포 (Deployment)
- 설계 단계의 결과물: 소프트웨어 아키텍처는 구현 단계에 들어갈 입력값으로 사용됩니다.
'공부기록' 카테고리의 다른 글
[베어랜드 Auth 시스템] 1 - 쿠키와 세션 그리고 JWT (0) | 2025.03.01 |
---|---|
[트러블 슈팅] Cannot find module '...../bcrypt/lib/binding/napi-v3/bcrypt_lib.node' (1) | 2025.02.06 |
[시스템 아키텍처] 섹션 2: 시스템 요구 사항 및 아키텍처 드라이버 (1) | 2024.11.27 |
[electron] electron-forge Cannot find module (0) | 2024.11.25 |
[CS] 32 Bit / 64 Bit 차이 (1) | 2024.10.09 |