본문 바로가기
IT,과학/IT용어풀이

[IT 용어 풀이] 아키텍처

by 오우너 2018. 5. 3.
728x90
반응형

[IT 용어 풀이] 

소프트웨어에서의 아키텍처란?

소프트웨어 아키텍처의 프로세스는 고객의 요구 사항을 파악하여 이를 분석하고, 고객의 요구 사항을 충족할 수 있는 소프트웨어를 설계합니다. 성공적인 소프트웨어 설계는 상충되는 요구 사항으로 인해 발생하는 불가피한 절충의 균형을 유지해야 하며, 시간이 지남에 따라 발전한 설계 원칙과 우수 관리 기법을 준수해야 한다. 강력한 소프트웨어 아키텍처에는 이론적 주제와 실제 주제 모두에 대한 상당한 경험이 포함되며, 모호한 비즈니스 시나리오와 요구 사항을 견고하고 실용적인 작업 설계로 전환하는 데 필요한 비전도 포함됩니다.
소프트웨어 아키텍처에는 성능, 보안 및 관리성과 같은 일반적인 품질 특성을 최적화하면서 모든 기술 및 운영 요구 사항을 충족하는 구조화된 솔루션을 정의하는 작업이 포함됩니다. 그것은 다양한 요소에 기초한 일련의 결정을 포함하며, 이러한 결정 각각은 소프트웨어의 품질, 성능, 유지 관리성 및 전체적인 성공에 상당한 영향을 미칠 수 있습니다.
최신 소프트웨어는 거의 독립적이지 않다. 최소한 대부분의 경우 소프트웨어 사용자가 작업하는 정보를 공개하는 회사 데이터베이스와 같은 데이터 소스와 상호 작용합니다. 또한 일반적으로 최신 소프트웨어는 인증을 수행하고 정보를 획득 및 게시하며 통합 사용자 환경을 제공하기 위해 다른 서비스 및 네트워크 기능과 상호 작용해야 합니다. 적절한 아키텍처가 없으면 소프트웨어를 다른 시스템에 성공적으로 배포, 운영, 유지 및 통합하기가 어렵거나 불가능할 수 있으며 사용자 요구 사항을 충족하지 못할 수도 있습니다.
소프트웨어 아키텍처는 소프트웨어 요소가 달성해야 하는 것과 구현의 세부 사항 사이의 매핑으로 간주될 수 있습니다. 아키텍처를 올바르게 구성하면 요구 사항과 결과 간에 최적의 일치를 보장할 수 있습니다. 잘 설계된 소프트웨어는 원래 요구 사항의 매개 변수 내에서 특정 작업을 수행하며 성능, 보안, 신뢰성 및 기타 많은 요소를 극대화하는 방식으로 수행합니다.
가장 높은 수준에서, 구조 설계는 시스템의 구조를 노출시켜야 하지만 구현 세부 사항을 숨기고, 모든 사용 사례와 시나리오를 실현하고, 모든 이해 관계자들의 요구 사항을 해결하며, 가능한 모든 기능적 요구 사항을 만족시켜야 합니다.

키텍처의 중요도

사용자가 애플리케이션에서 더 많은 것을 기대함에 따라 최신 소프트웨어에 대한 요구 사항이 점점 더 복잡해지고 있습니다. 단순한 독립형 데스크 톱 애플리케이션은 대부분의 비즈니스 및 상업적 시나리오에서는 더 이상 충분하지 않습니다. 연결된 환경에서는 애플리케이션이 다른 애플리케이션 및 서비스와 상호 작용하고 클라우드 및 휴대용 장치와 같은 다양한 환경에서 실행되어야 합니다. 과거에는 단일 설계가 프레임워크, 운영 체제, 런타임 호스트 및 네트워크를 사용하여 몇년 전에는 들어 보지 못 했던 기능을 구현하는 서비스 지향 소프트웨어로 대체되었습니다.
이러한 복잡성은 소프트웨어의 설계뿐만 아니라 배포, 유지 관리에도 영향을 미칩니다. 소프트웨어의 총 소유 비용(TCO)은 현재 주로 구축 후 비용으로 구성됩니다. 잘 설계된 애플리케이션은 애플리케이션을 구현하고, 실행을 유지하고, 변화하는 요구 사항을 충족하도록 업데이트하고, 문제를 해결하는 데 필요한 비용과 시간을 줄여 TCO를 최소화합니다. 또한 사용자 지원 및 관리를 단순화합니다.
소프트웨어는 또한 성공하기 위해서는 몇가지 필수적인 기준을 충족시켜야 합니다. 또한 응용 프로그램과 데이터가 악의적인 공격과 우발적인 오류로부터 보호될 수 있도록 보안 기능을 제공해야 합니다. 장애 및 관련 비용을 최소화할 수 있도록 강력하고 신뢰할 수 있어야 합니다. 최대 응답 시간 또는 특정 워크 로드 용량과 같은 고객의 요구 사항을 충족하기 위해 필요한 매개 변수 내에서 수행해야 합니다. 관리 및 지원 비용을 최소화하기 위해서는 유지 관리가 가능해야 하며, 시간이 지남에 따라 불가피한 변경과 업그레이드가 필요할 정도로 충분히 확장 가능해야 합니다.
이 모든 요소들은 어느 정도의 절충을 수반합니다. 예를 들어, 복잡한 암호화를 통해 가장 안전한 메커니즘을 구현하면 성능에 영향을 미칩니다. 광범위한 구성 및 업그레이드 옵션을 구현하면 구축과 관리가 더욱 복잡해질 수 있습니다. 또한 설계가 복잡할수록 구현 비용이 더 많이 소요됩니다. 좋은 아키텍처는 특정 시나리오에 대한 최적의 결과를 도출하기 위해 이러한 요소들의 균형을 맞추는 것을 목표로 할 것입니다.

키텍처의 역활

소프트웨어 아키텍처는 일련의 요구 사항으로 시작합니다. 이러한 작업은 도표, 프로세스 흐름도, 모델 또는 소프트웨어가 수행해야 하는 작동 태스크의 문서화된 목록으로 표현될 수 있습니다. 일반적으로 고객이나 파트너 또한 인상과 느낌 또는 특정 사용자 인터페이스 일반적인 작업을 위해 일하는 방법 같은 덜 정확한 요건을 표현할 것입니다. 또한 요구 사항에는 새 소프트웨어가 연결될 기존 소프트웨어, 시스템, 하드웨어 및 네트워크에 대한 정보와 배치 및 유지 보수 계획과 같은 기타 요소 및 프로젝트에 사용할 수 있는 예산이 포함되어야 합니다.
소프트웨어 설계자는 고객의 요구를 고려해야 합니다. 그러나"고객"이라는 용어는 일반적으로 비즈니스 요구 사항, 사용자 요구 사항 및 시스템 요구 사항이라는 세가지 상충되는 책임 영역으로 구성됩니다. 비즈니스 요구 사항은 일반적으로 비즈니스 프로세스, 성능 요소(예:보안, 안정성 및 처리량), 예산 및 비용 제약 사항과 같은 다양한 요소를 정의합니다. 사용자 요구 사항에는 인터페이스 설계, 운영 기능 및 소프트웨어 사용 편의성이 포함됩니다. 시스템 요구 사항에는 하드웨어, 네트워킹 및 런타임 환경 기능과 제약 조건이 포함됩니다.
소프트웨어 설계자는 각각 요구 사항을 수집 및 분석하고 아키텍처를 정의하기 위한 고유의 접근 방식을 가지고 있습니다. 그러나 이들이 일반적으로 대답해야 하는 질문에는 "애플리케이션을 어떻게 처리할 것인가?","애플리케이션이 운영 및 관리에 어떻게 영향을 미치는가?","애플리케이션의 품질 속성 요구 사항(예:보안)
이 마지막 질문은 흥미롭기도 하고 중요하기도 합니다. 좋은 소프트웨어 설계는 현재 고객의 요구 사항을 충족시킬 뿐만 아니라 가까운 미래에도 계속될 것이다. 이는 설계자가 하드웨어, 구성 요소, 프레임워크, 런타임 플랫폼, 관리 소프트웨어 시스템 및 소프트웨어에 내장되거나 소프트웨어와 통합되어야 하는 기타 많은 기능에 대해 내려야 하는 결정에 영향을 미칩니다.
소프트웨어 설계 및 개발 세계의 대부분의 태스크와 마찬가지로, 아키텍처 설계도 초기 단계이자 반복 프로세스입니다. 요구 사항 분석, 기술 연구 및 목표 확인과 같은 많은 초기 작업은 일반적으로 프로세스 시작 시점에 수행된다. 다음 단계는 설계의 주요 시나리오를 파악하는 것 입니다. 소프트웨어를 만나서 꼭 이런 주요한 요건, 내부에서 그것을 운용할 수 있는 제약 조건. 이 정보를 통해 설계자는 응용 프로그램의 개요를 생성할 수 있습니다. 이 개요에는 애플리케이션 유형(웹, 전화, 데스크 톱 또는 클라우드), 배포 아키텍처(일반적으로 하드웨어 및 네트워크 경계를 통해 통신하는 구성 요소가 포함된 계층형 설계), 적절한 아키텍처 스타일(예: n계층, 클라이언트/서버, 또는 서비스 지향)이 포함됩니다.
여기서 설계자는 앞서 설명한 높은 수준의 중요한 요구 사항을 충족하는 후보 설계를 생성할 수 있습니다. 그런 다음 이 설계는 최적의 솔루션을 제공하는지 확인하기 위해 고객의 피드백과 함께 주요 시나리오를 검토하고 테스트합니다. 이것은 첫번째 반복 중에는 가능하지 않지만, 반복 주기가 반복됨에 따라 설계가 요구 사항과 주요 시나리오에 수렴될 것입니다.

설계가 점점 더 세분화되고 개별 작업 및 구성 요소가 식별됨에 따라 설계자는 각 단계에서 세부 사항을 더욱 세분화하고 추가할 수 있습니다. 예를 들어, 건축가는 구조적 스타일과 배치 접근 방식을 확인한 후에 계층과 구성 요소 간의 통신에 대한 결정을 내릴 수 있습니다. 여기에는 현재 및 미래 요구 사항에 기초한 프로토콜 선택과 향후 표준에 정의된 새로운 기술 및 기능의 미리 보기가 포함될 수 있습니다.
설계자 작업의 최종 산출물은 일반적으로 응용 프로그램을 여러 관점에서 정의하는 설계도, 모델 및 문서로 구성되어 있으므로, 통합하면 개발자, 시험 팀, 관리자 및 관리자에게 필요합니다. 이 정보에서는 구성 요소 부품 및 애플리케이션 계층의 구조 및 레이아웃, 로깅 및 검증과 같은 문제를 해결하는 방법, 테스트 및 배포 계획, 개발자, 관리자 및 지원 문서를 설명합니다.
또한 최종 설계에서는 응용 프로그램이 충족해야 하는 품질 속성을 지정해야 합니다. 이것들은 건축가가 고객과 상의하여 내린 의사 결정과 트레이드 오프의 결과이다. 여기에는 보안 요구 사항 및 보안 구현 계획에 대한 정의, 대상 플랫폼에 구축할 때 필요한 확장성 및 성능, 유지 보수 및 확장성을 구현하는 방법, 기타 상호 운용성을 포함합니다.

소프트웨어 설계자에게 필요한 기술은?

소프트웨어 설계자에게는 다양한 기술이 필요하다는 것은 분명합니다. 요구 사항 분석 및 검토 단계에서 설계자는 고객과 협력하고, 파트너 및 다른 팀원과 상의하여 관리자, 사용자 및 시스템 관리자의 중개자 역할을 해야 합니다. 이러한 소프트 스킬을 지나치게 활용하면 초기 계획과 요구 사항을 더 정확하게 수립하여 나중에 시간과 노력을 절약할 수 있습니다.
또한 소프트웨어 설계자는 최신 소프트웨어 시스템, 프레임워크 및 하드웨어가 요구 사항을 어떻게 지원하는지, 네트워킹 및 운영 체제 요소가 설계 결정에 미치는 영향, 이러한 영역의 추세 및 변화가 설계에 미치는 영향을 이해해야 합니다. 초기 요구 사항 분석 후 소프트웨어 설계자는 설계 패턴, 통신 및 메시징 표준, 코드 기능, 보안 문제 및 성능 제약 조건에 대한 기술을 적용해야 합니다. 이 모든 것은 최종 소프트웨어를 구현하는 데 사용될 기술에 대한 깊은 지식을 필요로 합니다.
물론 소프트웨어 아키텍처에는 비전도 필요합니다. 시스템이 어떻게 결합되고 상호 운용되는지, 시스템이 분할되고 배치되는 방법 및 사용자와 상호 작용하는 방법을 확인할 수 있는 것은 설계자가 전체 솔루션을 고려한 후에만 결정할 수 있다. 이를 위해서는 조직화된 접근 방식과 모든 요구 사항과 제약 조건을 수집하고 이해하고 이를 유창하고 포괄적인 기술 설계로 점진적으로 전환하기 위한 많은 주의가 필요합니다. 그러나 최종 결과를 시각화한 다음 이상적인 솔루션을 향해 체계적으로 작업하려면 재능과 상상력도 필요합니다.

728x90
반응형

'IT,과학 > IT용어풀이' 카테고리의 다른 글

[IT 용어 풀이] 컴퓨터 비전  (0) 2018.05.04
[IT 용어 풀이] SSL(SecureSocketsLayer)  (0) 2018.05.04
[IT 용어 풀이] CUDA  (0) 2018.05.04
[IT 용어 풀이] OpenGL  (0) 2018.05.03
[IT 용어 풀이] OpenCV  (1) 2018.05.03

댓글