검수요청.png검수요청.png

"아키텍처"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
잔글
1번째 줄: 1번째 줄:
'''아키텍처'''(Architecture)는 [[시스템]]의 물리적 또는 기능적 구조를 말한다. [[하드웨어]] 아키텍처와 [[소프트웨어]] 아키텍처가 있으며 '아키텍쳐’가 아닌 ‘아키텍처’가 올바른 표기법이다. 아키텍처를 설계하고 관리하는 사람을 [[아키텍트]](Architect)라고 한다.  
+
'''아키텍처'''(Architecture)는 [[시스템]]의 물리적 또는 기능적 구조를 말한다. [[하드웨어]] 아키텍처와 [[소프트웨어]] 아키텍처가 있으며 '아키텍쳐’가 아닌 ‘아키텍처’가 올바른 표기법이다. 아키텍처를 설계하고 관리하는 사람을 [[아키텍트]](Architect)라고 한다.
 +
 
 
==개요==
 
==개요==
 
아키텍처는 고대 그리스어에서 건축 혹은 석공 명인(Master)을 의미하는 아키텍톤(Architecton) 이라는 용어로부터 유래되었다. 당시의 아키텍처는 건축물의 골격을 제공하는 설계도 역할을 했다. 좋은 아키텍처는 훌륭한 건축물을 탄생시켰고, 이들은 인류의 훌륭한 유산으로 남겨지고 있다. 고대의 아키텍처 개념이 화강암과 대리석으로 건축물을 짓는데 적용되었다면, 산업 시대에는 건축뿐만 아니라 첨단 과학기술을 이용하여 항공기, 자동차, 선박 등을 개발하는데 적용되어 왔다. 오늘날 디지털 정보화 시대에는 첨단 [[정보기술]]을 이용하여 정보체계, [[소프트웨어]] 내장형 체계, 지휘 통제 [[통신]]체계 등을 구축하는데 적용되고 있다. 특히 [[컴퓨터]]나 [[네트워크]]에서 말하는 아키텍처란, 프로세스와 전체적인 구조나 논리적 요소들 그리고 컴퓨터와 운영체계, 네트워크 및 다른 개념 간의 논리적 상호관계 등을 생각해내고 정의하는 등, 모든 곳에 적용되는 용어이다. 아키텍처는 [[OSI 7 계층]]처럼 하나의 참조 모델이 될 수도 있지만, 특정 제품의 구조를 위한 모델을 의미하거나, 특정 제품의 구조가 될 수도 있다. 또한 아키텍처는 대상에 대한 구조뿐만 아니라, 대상 구조의 유지 관리를 위한 원칙과 지침, 그리고 향후 목표 아키텍처로 가기 위한 계획을 포함하고 있다.<ref >architecture ; 아키텍처 텀즈 - http://www.terms.co.kr/architecture.htm</ref> <ref>kej_0209 , 〈[https://blog.naver.com/kej_0209/221320624064 9.1아키텍처 개요]〉, 《네이버 블로그》, 2018-07-17</ref> <ref>〈[http://www.dbguide.net/db.db?cmd=view&boardUid=12720&boardConfigUid=9&boardIdx=25&boardStep=1 전사아키텍처 개념]〉, 《디비가이트넷》</ref>
 
아키텍처는 고대 그리스어에서 건축 혹은 석공 명인(Master)을 의미하는 아키텍톤(Architecton) 이라는 용어로부터 유래되었다. 당시의 아키텍처는 건축물의 골격을 제공하는 설계도 역할을 했다. 좋은 아키텍처는 훌륭한 건축물을 탄생시켰고, 이들은 인류의 훌륭한 유산으로 남겨지고 있다. 고대의 아키텍처 개념이 화강암과 대리석으로 건축물을 짓는데 적용되었다면, 산업 시대에는 건축뿐만 아니라 첨단 과학기술을 이용하여 항공기, 자동차, 선박 등을 개발하는데 적용되어 왔다. 오늘날 디지털 정보화 시대에는 첨단 [[정보기술]]을 이용하여 정보체계, [[소프트웨어]] 내장형 체계, 지휘 통제 [[통신]]체계 등을 구축하는데 적용되고 있다. 특히 [[컴퓨터]]나 [[네트워크]]에서 말하는 아키텍처란, 프로세스와 전체적인 구조나 논리적 요소들 그리고 컴퓨터와 운영체계, 네트워크 및 다른 개념 간의 논리적 상호관계 등을 생각해내고 정의하는 등, 모든 곳에 적용되는 용어이다. 아키텍처는 [[OSI 7 계층]]처럼 하나의 참조 모델이 될 수도 있지만, 특정 제품의 구조를 위한 모델을 의미하거나, 특정 제품의 구조가 될 수도 있다. 또한 아키텍처는 대상에 대한 구조뿐만 아니라, 대상 구조의 유지 관리를 위한 원칙과 지침, 그리고 향후 목표 아키텍처로 가기 위한 계획을 포함하고 있다.<ref >architecture ; 아키텍처 텀즈 - http://www.terms.co.kr/architecture.htm</ref> <ref>kej_0209 , 〈[https://blog.naver.com/kej_0209/221320624064 9.1아키텍처 개요]〉, 《네이버 블로그》, 2018-07-17</ref> <ref>〈[http://www.dbguide.net/db.db?cmd=view&boardUid=12720&boardConfigUid=9&boardIdx=25&boardStep=1 전사아키텍처 개념]〉, 《디비가이트넷》</ref>
53번째 줄: 54번째 줄:
  
 
;모듈화
 
;모듈화
소프트웨어 개발에서 모듈은 다음과 같이 말할 수 있다. '규모가 큰 것을 여러 개로 나눈 조각' 과 '소프트웨어 구조를 이루는 기본적인 단위'라고도 말한다. 더 구체적으로는 '하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합'이라고도 말할 수 있다. 따라서 독립 프로그램도 하나의 모듈이 될 수 있고, 함수들도 하나의 모듈이 될 수 있다. 그러나 모듈이 되려면 가장 중요한 특징들이 있는다. 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위(unit)이며 유일한 이름을 가져야 한다. 독립적으로 컴파일이 가능해야 하고 모듈에서 다른 모듈을 호출할 수 있다. 마지막으로 다른 프로그램에서도 모듈을 호출할 수 있다. 모듈은 완전한 독립 프로그램이고, 다양한 크기의 집합에 대해서 모듈이라고 부를 수 있다. 모듈은 다음과 같이 다양한 형태로 존재한다. '용도가 비슷한 것끼리 묶어놓은 라이브러리 함수' 와 그래픽 함수 추상화된 자료, 서브루틴(subroutine), 프로시저(procedure), 객체, 메서드(method)이다.
+
소프트웨어 개발에서 모듈은 다음과 같이 말할 수 있다. '규모가 큰 것을 여러 개로 나눈 조각' 과 '소프트웨어 구조를 이루는 기본적인 단위'라고도 말한다. 더 구체적으로는 '하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합'이라고도 말할 수 있다. 따라서 독립 프로그램도 하나의 모듈이 될 수 있고, 함수들도 하나의 모듈이 될 수 있다. 그러나 모듈이 되려면 가장 중요한 특징들이 있는다. 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위(unit)이며 유일한 이름을 가져야 한다. 독립적으로 컴파일이 가능해야 하고 모듈에서 다른 모듈을 호출할 수 있다. 마지막으로 다른 프로그램에서도 모듈을 호출할 수 있다. 모듈은 완전한 독립 프로그램이고, 다양한 크기의 집합에 대해서 모듈이라고 부를 수 있다. 모듈은 다음과 같이 다양한 형태로 존재한다. '용도가 비슷한 것끼리 묶어놓은 라이브러리 함수' 와 그래픽 함수 추상화된 자료, 서브루틴(subroutine), 프로시저(procedure), 객체, 메서드(method)이다.<ref> newamsterdam99  , 〈[https://blog.naver.com/newamsterdam99/221803654884 소프트웨어 아키텍처]〉, 《네이버 블로그》, 2020-02-10</ref>
 
 
 
 
<ref> newamsterdam99  , 〈[https://blog.naver.com/newamsterdam99/221803654884 소프트웨어 아키텍처]〉, 《네이버 블로그》, 2020-02-10</ref>
 
  
쉽게 배우는 소프트웨어 공학  2015.11.30  저자 김치수(출처)
 
 
===전사===
 
===전사===
 
 
 
  
 
===람다===
 
===람다===
 
 
 
 
 
 
 
 
 
 
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
http://www.terms.co.kr/architecture.htm
+
* 김치수 저, 《쉽게 배우는 소프트웨어 공학》, 2015-11-30
https://terms.naver.com/entry.nhn?docId=3532950&cid=58528&categoryId=58528
+
* http://www.terms.co.kr/architecture.htm
 
+
* https://terms.naver.com/entry.nhn?docId=3532950&cid=58528&categoryId=58528
file:///C:/Users/C550/Downloads/2020-08-03%20%EC%95%84%EC%82%AC%EB%8B%AC%20SI%20%EC%9A%A9%EC%96%B4%EC%A7%91%20%EC%A0%9C1%ED%8C%90%20(%EC%84%9C%EC%B0%BD%EB%85%95)%20(2).pdf
+
* http://www.dbguide.net/db.db?cmd=view&boardUid=12720&boardConfigUid=9&boardIdx=25&boardStep=1
 
+
* https://imcreator.tistory.com/69
http://www.dbguide.net/db.db?cmd=view&boardUid=12720&boardConfigUid=9&boardIdx=25&boardStep=1
 
 
 
https://imcreator.tistory.com/69
 
 
 
  
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[아키텍트]]
 
* [[아키텍트]]
 
* [[프로그래밍 언어]]
 
* [[프로그래밍 언어]]
 
  
 
{{프로그래밍|검토 필요}}
 
{{프로그래밍|검토 필요}}

2020년 8월 6일 (목) 12:55 판

아키텍처(Architecture)는 시스템의 물리적 또는 기능적 구조를 말한다. 하드웨어 아키텍처와 소프트웨어 아키텍처가 있으며 '아키텍쳐’가 아닌 ‘아키텍처’가 올바른 표기법이다. 아키텍처를 설계하고 관리하는 사람을 아키텍트(Architect)라고 한다.

개요

아키텍처는 고대 그리스어에서 건축 혹은 석공 명인(Master)을 의미하는 아키텍톤(Architecton) 이라는 용어로부터 유래되었다. 당시의 아키텍처는 건축물의 골격을 제공하는 설계도 역할을 했다. 좋은 아키텍처는 훌륭한 건축물을 탄생시켰고, 이들은 인류의 훌륭한 유산으로 남겨지고 있다. 고대의 아키텍처 개념이 화강암과 대리석으로 건축물을 짓는데 적용되었다면, 산업 시대에는 건축뿐만 아니라 첨단 과학기술을 이용하여 항공기, 자동차, 선박 등을 개발하는데 적용되어 왔다. 오늘날 디지털 정보화 시대에는 첨단 정보기술을 이용하여 정보체계, 소프트웨어 내장형 체계, 지휘 통제 통신체계 등을 구축하는데 적용되고 있다. 특히 컴퓨터네트워크에서 말하는 아키텍처란, 프로세스와 전체적인 구조나 논리적 요소들 그리고 컴퓨터와 운영체계, 네트워크 및 다른 개념 간의 논리적 상호관계 등을 생각해내고 정의하는 등, 모든 곳에 적용되는 용어이다. 아키텍처는 OSI 7 계층처럼 하나의 참조 모델이 될 수도 있지만, 특정 제품의 구조를 위한 모델을 의미하거나, 특정 제품의 구조가 될 수도 있다. 또한 아키텍처는 대상에 대한 구조뿐만 아니라, 대상 구조의 유지 관리를 위한 원칙과 지침, 그리고 향후 목표 아키텍처로 가기 위한 계획을 포함하고 있다.[1] [2] [3]

특징

아키텍처는 요구사항과 구현 사이 중요한 다리 역할을 한다. 시스템의 추상적 묘사를 통해 아키텍처는 다른 것들을 숨기고 어떤 속성들을 노출하는데 이상적으로 이런 표현은 전체 시스템을 따라갈 수 있는 가이드를 제공하며 설계자가 시스템이 어떤 중요한 요구사항을 만족시킴에 대한 근거를 제공할 수 있게 한다. 또한 명시적으로 설계를 지배하는 의도나 원리를 잡아내어 시스템의 구조와 조합에 대한 청사진을 보여준다.

시스템에 대한 가이드를 제공하는 것은 이해관계자나 개발 동료 간 의사소통에 도움을 주는 장점이 있다. 성능이나 보안, 안정성, 이용 가능성, 유지 가능성 등에 대한 만족 근거를 제공하는 것에 더 큰 목적을 가진다. 구현이라는 비용 리스크가 큰 프로세스 이전에 설계를 통해 요구사항을 달성할 수 있음을 보이는 것은 프로젝트의 리스크를 줄이는 데 큰 도움이 된다. 그리고 설계 의도와 원리에 대해 청사진을 명시적으로 보여줌으로써 만들고자 설계 목적과 방향에 대한 합의를 이룰 수 있게 된다. 이 외에도 대규모 재사용(Large-scale reuse)을 가능하게 하며 특히, 같은 도메인에서는 비슷한 아키텍처가 적용 가능하다는 점에서 아키텍처 설계를 잘하는 것이 비즈니스적으로도 이득이 되는 자산이 될 수 있게 된다. 마지막은 진화(Evolution)로, 이 부분은 생산라인(Product line)과 같이 하나의 제품을 계속해서 발전 시켜 나가거나 그 제품에 기반해 또 다른 새로운 제품을 만들어 내는 경우 설계 시 확장할 수 있는 바운더리에 대한 분석도 같이하게 되는데 그런 점에서 판단을 도울 수 있고, 그 외 기능을 확장하는 서비스의 경우에도 미리 확장 가능성을 고려해서 설계해 영향력을 판단할 수 있다.[4]

종류

컴퓨터

컴퓨터 아키텍처는 컴퓨터 공학에서 컴퓨터 시스템의 기능(functionality), 조직(organization), 구현(implementation)을 기술하는 일련의 규칙과 방법의 집합이다. 아키텍처의 일부 정의는 특정 구현이 아닌 컴퓨터의 기능 및 프로그래밍 모델을 기술하는 것으로 정의한다. 다른 정의에서 컴퓨터 아키텍처는 명령 집합 아키텍처 설계, 마이크로 아키텍처 설계, 논리 설계 및 구현을 포함한다. 컴퓨터 구조의 첫 번째 문서는 1837년 찰스 배비지(Charles Babbage)가 고안한 해석기관으로 실제 제작되지는 않았지만, 논리적 설계는 범용 컴퓨터의 모습을 예측한 중요한 모델로 평가된다. 1936년, 불 논리 체계와 프로그래밍이 가능한 세계 최초의 기계식 컴퓨터 제트원(Z1)을 만들 때, 콘라트 추제(Konrad Zuse)는 향후 자신의 프로젝트에 대한 두 가지 특허 출원서에 명령어와 데이터가 동일한 저장장치에 저장하는 프로그램 내장식 컴퓨터 개념을 최초로 기술하였다. 이 개념은 1945년에 컴퓨터 구조의 두 가지 중요한 발자취로 이어진다.[5]

마이크로 아키텍처

마이크로 아키텍처(micro architecture)는 씨피유(CPU) 아키텍처라고도 하며 컴퓨터의 중앙 처리 장치 또는 이와 관련하여 디지털 신호 처리기의 전자 회로에 대한 설명으로 하드웨어의 운영에 대해 세세하게 기술되어 있다. 학술 모임에서는 컴퓨터 시스템이라는 용어가 쓰이지만, 컴퓨터 산업에서는 마이크로 아키텍처라는 용어가 더 자주 쓰인다. 마이크로 아키텍처와 명령어 집합 구조(ISA)는 함께 컴퓨터 아키텍처의 분야를 구성하고 있다.[6]

폰노이만 구조

폰 노이만 구조(Von Neumann architecture)는 존 폰노이만이 제시한 컴퓨터 구조로, 프로그램 내장 방식이라고도 불린다. 이론적으로는 튜링 머신과 같은 일을 할 수 있다. 그 이전의 컴퓨터들은 스위치를 설치하고 전선을 연결하여 데이터를 전송하고 신호를 처리하는 식으로 프로그래밍하였다. 폰노이만 구조의 디지털 컴퓨터에서는 저장된 프로그램(stored-program)의 개념이 도입되었다. 이는 프로그램을 구성하는 명령어를 임의 접근이 가능한 메모리상()에 순차적으로 배열하고, 동시에 조건 분기를 제한 없이 허용한다는 것을 뜻한다. 폰노이만 구조에서는 같은 메모리 속에 실행 코드와 데이터가 따로 구분되지 않고 함께 섞여 있다. 이후에 나온 컴퓨터는 대부분 폰 노이만의 설계를 기본 구조로 따르고 있다.

이 구조의 장점은 컴퓨터에 다른 작업을 시키려고 할 때 하드웨어(전선)를 재배치할 필요 없이 소프트웨어(프로그램)만 교체하면 되기 때문에 범용성이 크게 향상된다는 것이다. 전선을 일일이 교체할 경우 교체 인원도 많이 필요하고 시간도 많이 잡아먹는 등 여러모로 불편함이 있지만, 폰노이만 구조를 도입하면 프로그램을 교체하는 것으로 모든 일이 끝난다. 이 편의성 때문에, 현재 거의 모든 컴퓨터는 폰노이만 구조를 따르고 있다. 단점으로는 '폰노이만 병목현상'이 있다. 메모리의 값을 읽고 쓰는 구조이기 때문에 기억장치에 병목현상이 생길 수밖에 없다. 메모리 계층 구조나 불균일 기억 장치 접근(NUMA), 기억장치 직접접근(DMA) 같은 기술이 모두 이러한 문제를 완화하기 위해 도입된 기술이다. 또한 코드를 순차적으로 실행하기 때문에 정해진 입력에 따라 정해진 값만을 출력하는 '결정적 유한 오토마타'(Deterministic finite automaton)의 한계에 묶이기 쉽다.[7]

하버드 아키텍처

하버드 아키텍처(Harvard architecture)는 명령어와 데이터 통로를 저장 공간과 물리적으로 분리한 컴퓨터 아키텍처를 말한다. 이 용어는 릴레이를 기반으로한 하버드 마크 I(Harvard Mark I) 이란 초기 컴퓨터에서 나온 것이다. 이러한 초기의 컴퓨터는 명령어를 펀치 테이프에, 데이터를 릴레이 래치에 저장한다. 폰 노이만 구조에서는 중앙 처리 장치는 메모리로부터 명령을 읽고, 메모리로부터 데이터를 읽고 쓰기도 한다. 명령과 데이터는 같은 신호 버스와 메모리를 사용하기 때문에 이러한 액세스하는 경우 동시에 발생할 수가 없다. 하지만 하버드 아키텍처의 컴퓨터에서는 명령을 메모리로부터 읽는 것과 데이터를 메모리로부터 읽는 것을 동시에 할 수 있다. 하버드 아키텍처의 컴퓨터는 명령의 처리를 끝내자마자 다음의 명령을 읽어 들일 수 있어서 더욱더 빠른 속도를 낼 수 있다고 말할 수 있다. 그렇지만 이러한 처리 속도를 높이려면 보다 많은 전기 회로가 필요하다.[8]

네트워크

네트워크 아키텍처(network architecture)는 컴퓨터 네트워크의 디자인이다. 네트워크의 물리적인 요소들과 기능 조직, 구성, 동작 원칙, 절차, 사용되는 통신 프로토콜의 사양을 위한 프레임워크이다. 전기 통신에서 네트워크 아키텍처의 사양은 통신 네트워크를 통해 전송되는 제품과 서비스의 자세한 설명, 그리고 서비스가 보상되는 세세한 속도와 지불 구조를 포함할 수도 있다. 인터넷의 네트워크 아키텍처는 네트워크의 상호 연결 네트워크나 노드를 위한 특정한 모형이 아닌, 인터넷 프로토콜 스위트의 이용 또는 특정한 유형의 하드웨어 링크의 이용을 통해 대부분 표현된다.

OSI 7 계층

OSI 7 계층은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층 모형이라고 한다. 계층으로 불리는 더 조그마한 부분들로 통신 시스템을 구분시키는 방법으로, 계층은 위의 계층으로 서비스를 제공하는 유사한 기능들의 모임이며 바로 아래의 계층으로부터 서비스를 받게 된다. 각 계층에서 인스턴스는 서비스를 위의 계층의 인스턴스에 제공하고 아래의 계층으로부터 서비스를 요청한다. 1계층인 물리 계층(Physical layer)은 실제 장치들을 연결하기 위해 필요한 전기적, 물리적 세부 사항들을 정의한다. 예를 들어, 핀들의 배치나 전압, 전선의 명세 등이 이 계층에 포함된다. 허브(리피터)가 물리 계층의 장치이다. 물리적인 정보 전달 매개체에 대한 연결의 성립과 종료, 여러 사용자 간의 통신 자원을 효율적으로 분배하는 데 관여한다. 통신 채널을 통해 전송되는 사용자 장치의 디지털 데이터를 이에 상응하는 신호들로 변환, 변조하며 이 신호들은 구리 선이나 광섬유 선을 통해 전달되는 신호들이다. 또 한 물리계층은 네트워크상에서 데이터 비트를 전송하는 계층이다. 데이터 링크 개체 간의 비트 전송을 위한 물리적 연결을 설정, 유지, 해제하기 위한 수단을 제공한다. 전송 매체는 신호 보내는 방법을 정의한다.

2계층인 데이터 링크 계층은 포인트 투 포인트(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층으로 순환 중복 검사(CRC) 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공한다. 주솟값은 물리적으로 할당 받으며 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다.

3계층, 네트워크 계층은 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크를 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워크 계층은 라우팅, 패킷 포워딩, 세그멘테이션(segmentation/desegmentation), 인터네트워킹(Internetworking) 등을 수행한다. 라우터가 이 계층에서 동작하며 스위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조, 네트워크 관리자가 직접 주소를 할당하는 구조를 가진다. 4계층, 전송 계층은 양 끝단(End to end)의 사용자들이 신뢰성 있는 데이터를 주고받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 시퀀스 넘버 기반의 오류 제어 방식을 사용한다. 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고 연결 기반이다. 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다.

세션 계층은 5계층으로써 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반 이중 방식(half-duplex), 전 이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 티씨피 아이피(TCP/IP) 세션을 만들고 없애는 책임을 진다. 통신하는 사용자들을 동기화하고 오류복구 명령을 일괄적으로 다룬다. 6계층인 표현 계층은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. 표현 계층은 수신자 장치에서 적합한 애플리케이션을 사용하여 송신자 장치로부터 온 데이터를 해석하기 위한 응용계층 데이터 부호화, 변환하고 수신자에서 압축을 풀 수 있는 방식으로 된 데이터 압축하고 전송을 위한 암호화와 복호화를 제공한다. 7계층 응용 계층은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다. 응용 서비스의 예로, 가상 터미널 등이 있다.[9]

서버-클라이언트

서버-클라이언트(Server-Client System) 시스템은 클라이언트와 서버로 나누어지는 네트워크 아키텍처를 말한다. 넓은 의미로 인터넷 시스템 전체를 서버-클라이언트 시스템으로 볼 수 있지만, 일반적으로 시스템이란 웹 시스템이 나오기 전에 사용자의 컴퓨터에 클라이언트가 설치되어 화면을 처리하고, 서버 컴퓨터에서 데이터를 처리하는 시스템을 말한다. 클라이언트는 서버 시스템에 연결된 컴퓨터나 스마트폰 등 사용자 측을 말한다. 예를 들어, 컴퓨터 및 스마트폰에 설치된 웹브라우저는 클라이언트 소프트웨어의 일종이다. 사용자가 특정 웹사이트를 방문했을 때 만들어지는 쿠키(Cookie) 정보는 서버 측이 아니라 클라이언트 측에 저장된다. 서버는 통신망 상에서 다른 컴퓨터에 대하여 회선, 디스크 장치 등에 대한 접속을 제어하는 관리 소프트웨어 또는 컴퓨터를 말한다. 서버의 역할에 따라 웹서버, 와스(WAS) 서버, 디비(DB) 서버, 메일 서버, 이미지 서버, 네임 서버, 백업 서버 등이 있다. 서버의 제조사에 따라 아이비엠(IBM) 서버, 에이치피(HP) 서버, 델(Dell) 서버 등이 있다. 서버에서 처리된 정보를 클라이언트 측인 사용자에게 전달한다.[10]

소프트웨어

소프트웨어 아키텍처는 소프트웨어 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 요소 간의 관계를 표현하는 시스템의 구조 또는 구조체이다.

설계

소프트웨어 설계는 사용자의 요구 사항에 따라 요구 분석 명세서가 만들어지면 개발팀은 이 명세서를 참조하여 설계서를 작성한 뒤 이를 기반으로 구현한다. 여기서 요구 분석 명세서를 기반으로 만든 설계서는 건축의 다양한 도면처럼 상위 설계, 하위 설계, 아키텍처 설계, 사용자 인터페이스 설계 등의 여러 가지 형태로 된 구체적인 사양서이다. 분석 단계에서는 사용자의 요구 사항을 토대로 요구 분석 명세서를 작성한다. 그런데 이 요구 분석 명세서는 하드웨어나 소프트웨어 종류는 무엇인지, 그리고 분산 시스템으로 구축하는지, 프레임워크는 네트워크 기반인지 등과 같은 사항은 고려하지 않고 독립적이다. 따라서 개념적이고 추상적인 성격이 강하다. 설계 단계에서는 분석 단계에서 고려하지 않았던 상세 내용을 충분히 반영하여 구현할 수 있는 수준으로 준비해야 한다. 분석 단계에서 파악한 비기능적 요구 사항과 제약 사항을 고려하고, 운영체제, 미들웨어, 프레임워크 등의 플랫폼을 결정해야 한다. 그리고 이에 따라 구체적인 설계서를 만들어야 한다.

분석 단계에서 사용자의 요구를 무엇(what) 관점에서 바라보았다면, 설계 단계에서는 어떻게(how) 관점에서 생각한다. 즉 설계의 목적은 요구 분석 명세서를 기반으로 어떻게 구축할 것인가를 결정하는 것이다. 따라서 설계자는 여러 방법 중 다양한 제약 조건을 만족시킬 수 있는 최적의 설계안을 만드는 것이 중요하며, 설계를 평가할 수 있는 기준도 정량적으로 명시해야 한다. 좋은 설계가 되려면 요구 분석 명세서의 내용을 설계서에 모두 포함해야 한다. 또한 유지보수가 용이하도록 추적이 가능해야 하며, 변화에 쉽게 적응할 수 있어야 한다. 그리고 시스템 변경으로 인한 영향이 최소화되도록 국지적이어야 하고 설계서는 읽기 쉽고, 이해하기 쉽게 작성해야 한다. 이런 조건을 만족하여 좋은 설계가 되려면 결국 모듈이 독립적이어야 하고, 모듈 내 요소 간의 응집력은 높게 설계되어야 하며, 모듈 간의 결합력은 낮게 설계되어야 한다.

분할 및 정복

가장 세분된 작은 시스템을 개발하고, 하나씩 위로 올라가면서 완성하는 방법으로 개발하는 것을 '분할과 정복의 원리'라고 한다. 이 원리는 하나의 일을 수행할 때 작은 단위로 나누고 각 작은 단위를 하나씩 처리하여 전체 일을 끝낸다는 의미이다. 소프트웨어 개발에 분할과 정복의 원리를 적용하려면 우선 쪼개는 작업을 해야 한다. 소프트웨어를 나눌 때는 분산 시스템은 클라이언트와 서버로 분할한다. 그리고 시스템은 여러 서브 시스템으로 분할하고 서브 시스템은 하나 이상의 패키지로 분할한다. 패키지는 여러 클래스로 분할하며 클래스는 여러 메서드로 분할한다. 하지만 무작정 작게만 쪼개면 통신으로 인해 오히려 복잡도가 증가할 수 있음으로 설계자는 어느 수준으로 쪼갤지를 결정해야 한다. 즉 복잡도로 인한 증가 비용과 처리의 용이성을 고려하여 결정해야 한다.

추상화

추상화는 복잡한 세부 사항을 모두 다루는 것이 거의 불가능하고 필요도 없으므로 복잡한 현상을 이해하는 과정에서 인간의 이해력을 도와주는 강력한 도구로 사용된다. 어떤 문제를 해결하기 어려운 대표적인 이유는 규모가 크고 매우 복잡하기 때문이다. 이러한 문제는 설계에서도 발생한다. 이럴 때 추상화 개념을 사용하면 문제의 핵심을 쉽게 파악할 수 있고, 문제의 본질을 쉽게 이해하는 데 도움이 된다. 객체들의 공통점을 뽑아 클래스라는 이름을 붙여놓은 것이 추상화이다. 반대로 클래스로부터 객체를 생성하는 과정을 인스턴스화(instantiation)라고 한다. 추상화하는 방법에는 프로그램 전체에 대해 알고리즘 형태로 작성하는 과정 추상화, 데이터를 모아 데이터 구조 형태로 표현한 자료 추상화, 여러 줄의 내용을 간략히 줄여서 표현한 제어 추상화가 있다. 과정 추상화는 대부분 주어진 문제에 대해 프로그래밍하기 전에 상세 부분은 생략하고 전체 흐름만 파악할 수 있는 알고리즘 형태로 작성하는 것을 과정 추상화라고 한다. 데이터 추상화는 데이터와 메서드를 클래스 형태로 캡슐화하여 숨겨놓고, 사용자에게는 꼭 필요한 기능만 사용할 수 있게 개방한 구조이다. 제어 추상화는 프로그래밍 언어에서 쓰는 제어 구조를 추상화하는 것이다.

단계적 분해

단계적 분해는 하향식 설계에서 사용되는데, 기능을 점점 작은 단위로 나누어 점차적으로 구체화하는 방법이다. 단계적 분해를 설명하기 위해 구조적 분석 방법에서 사용하는 자료흐름(DFD: Data Flow Diagram)는 문제를 처음에 원 하나로 나타낸 후 단계가 낮아질수록 분해하여 작은 단위로 구체화한다. 이렇게 단계적 분해를 통해 큰 문제를 작게 구체화하여 실제 프로그램을 작성할 수 있게 된다.

모듈화

소프트웨어 개발에서 모듈은 다음과 같이 말할 수 있다. '규모가 큰 것을 여러 개로 나눈 조각' 과 '소프트웨어 구조를 이루는 기본적인 단위'라고도 말한다. 더 구체적으로는 '하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합'이라고도 말할 수 있다. 따라서 독립 프로그램도 하나의 모듈이 될 수 있고, 함수들도 하나의 모듈이 될 수 있다. 그러나 모듈이 되려면 가장 중요한 특징들이 있는다. 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위(unit)이며 유일한 이름을 가져야 한다. 독립적으로 컴파일이 가능해야 하고 모듈에서 다른 모듈을 호출할 수 있다. 마지막으로 다른 프로그램에서도 모듈을 호출할 수 있다. 모듈은 완전한 독립 프로그램이고, 다양한 크기의 집합에 대해서 모듈이라고 부를 수 있다. 모듈은 다음과 같이 다양한 형태로 존재한다. '용도가 비슷한 것끼리 묶어놓은 라이브러리 함수' 와 그래픽 함수 추상화된 자료, 서브루틴(subroutine), 프로시저(procedure), 객체, 메서드(method)이다.[11]

전사

람다

각주

  1. architecture ; 아키텍처 텀즈 - http://www.terms.co.kr/architecture.htm
  2. kej_0209 , 〈9.1아키텍처 개요〉, 《네이버 블로그》, 2018-07-17
  3. 전사아키텍처 개념〉, 《디비가이트넷》
  4. Jane Park , 〈소프트웨어 아키텍처 이론과 현실〉, 《네이버 블로그》, 2016-06-18
  5. Computer architecture 위키피디아 - https://en.m.wikipedia.org/wiki/Computer_architecture
  6. 마이크로아키텍처 위키백과 - https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
  7. 폰노이만 구조 나무위키 - https://namu.wiki/w/%ED%8F%B0%EB%85%B8%EC%9D%B4%EB%A7%8C%20%EA%B5%AC%EC%A1%B0
  8. 쌩혁 , 〈하버드 아키텍처 VS 폰노이만〉, 《네이버 블로그》, 2011-04-19
  9. OSI 모형 나무위키 - https://namu.wiki/w/OSI%20%EB%AA%A8%ED%98%95
  10. client/server ; 클라이언트/서버 텀즈 - http://www.terms.co.kr/clientserver.htm
  11. newamsterdam99 , 〈소프트웨어 아키텍처〉, 《네이버 블로그》, 2020-02-10

참고자료

같이 보기


  검수요청.png검수요청.png 이 아키텍처 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.