{{위키데이터 속성 추적}}
{{소프트웨어 개발 프로세스}}
'''소프트웨어 구조''' 또는 '''소프트웨어 아키텍처'''(software architecture)는 [[소프트웨어]]의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다.

== 역사 ==
소프트웨어 설계와 구조 간의 비교는 1960년대 말에 처음 그려졌지만<ref>{{웹 인용 |editor-first1=Peter |editor-last1=Naur |editor-link1=Peter Naur |editor-first2=Brian |editor-last2=Randell |editor-link2=Brian Randell |title=Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7–11 Oct. 1968. |publisher=NATO, Scientific Affairs Division, |location=Brussels |year=1969 |url=http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF |accessdate=2012-11-16}}</ref> 소프트웨어 구조라는 용어는 1990년대에 모습을 드러냈다.<ref>{{웹 인용|author1=P. Kruchten, H. Obbink  |author2=J. Stafford |lastauthoramp=yes |title=The past, present and future of software architecture|url=http://dx.doi.org/10.1109/MS.2006.59 |year=2006|accessdate=2012-11-12}}</ref>

== 동기 부여 ==
소프트웨어 아키텍처는 복잡한 시스템을 "지적으로 이해할 수 있는" 추상화이다.<ref>{{웹 인용|제목=Software Architecture in Practice|url=https://books.google.com/books?vid=ISBN9780321815736&newbks=0&redir_esc=y|확인날짜=2023년 11월 2일|출판사=books.google.com}}</ref> 이러한 추상화는 여러 가지 이점을 제공한다:
*소프트웨어 시스템을 구축하기 전에 소프트웨어 시스템의 동작을 분석할 수 있는 프레임워크를 제공한다. 미래의 소프트웨어 시스템을 실제로 구축하지 않고도 이해관계자의 요구 사항을 충족하는지 확인할 수 있어 상당한 비용 절감과 위험 감소 효과를 제공한다.<ref>{{웹 인용|제목=Software Architecture Review and Assessment (SARA) Report|url=https://pkruchten.files.wordpress.com/2011/09/sarav1.pdf|확인날짜=2023년 11월 2일|출판사=pkruchten.files.wordpress.com}}</ref> 효과적인 아키텍처는 이러한 요구 사항을 충족할 뿐만 아니라 향후 확장성 및 유지 관리도 용이하게 해준다.<ref>{{웹 인용|제목=Softwarearchitektur: Der ultimative Leitfaden|url=https://tectrain.ch/de/software-architektur-ultimative-leitfaden|확인날짜=2023년 11월 2일|출판사=tectrain.ch}}</ref>
*아키텍처는 요소와 솔루션을 재사용할 수 있는 프레임워크를 제공한다. 전체 소프트웨어 아키텍처 또는 개별 아키텍처 전략 및 솔루션과 같은 일부 요소를 이해관계자가 유사한 품질 속성 또는 기능을 요구하는 여러 시스템에서 재사용할 수 있으므로 설계 비용을 절감하고 설계 오류의 위험을 줄일 수 있다.<ref>{{웹 인용|제목=Foundations for the Study of Software Architecture|url=https://users.ece.utexas.edu/~perry/work/papers/swa-sen.pdf|확인날짜=2023년 11월 2일|출판사=users.ece.utexas.edu}}</ref>
*시스템의 개발, 배포 및 수명에 영향을 미치는 초기 설계 결정을 지원한다. 일정과 예산 초과를 방지하려면 영향력이 큰 초기 의사 결정을 올바르게 내리는 것이 중요하다.
* 이해관계자와의 커뮤니케이션을 용이하게 하여 이해관계자의 요구를 더 잘 충족하는 시스템을 만드는 데 기여한다. 이해관계자의 관점에서 복잡한 시스템에 대한 정보를 제시하면 이해관계자가 명시된 요구사항의 의미를 이해하고 이를 기반으로 설계 결정을 내리는 데 도움이 된다.
*이는 리스크 관리에도 도움이 된다. 소프트웨어 아키텍처는 위험과 실패 확률을 줄이는 데 도움이 된다.<ref>{{웹 인용|제목=Just Enough Software Architecture: A Risk-driven Approach|url=https://books.google.com/books?id=ITsWdAAzVYMC&num=20&redir_esc=y|확인날짜=2023년 11월 2일|출판사=books.google.com}}</ref>
*비용 절감에 도움이 된다. 소프트웨어 아키텍처는 복잡한 IT 프로젝트에서 위험과 비용을 관리하는 수단이다.<ref>{{웹 인용|제목=RCDA: Architecting as a risk- and cost management discipline|url=https://zenodo.org/records/896159|확인날짜=2023년 11월 2일|출판사=zenodo.org}}</ref>

== 같이 보기 ==
* [[소프트웨어 설계]]
* [[하드웨어 구조]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* [http://www.sei.cmu.edu/architecture/start/definitions.cfm 소프트웨어 아키텍처 정의]
* [http://www.softwarearchitectureportal.org/ SoftwareArchitecturePortal.org]
* [http://blog.softwarearchitecture.com/ Software Architecture]
* [http://www.softwarearchitectures.com/ SoftwareArchitectures.com]

{{소프트웨어 공학}}
{{전거 통제}}
{{토막글|기술}}

[[분류:소프트웨어 구조| ]]
[[분류:소프트웨어 개발 프로세스]]
[[분류:에츠허르 데이크스트라]]