아키텍처의 개념, 종류, 특징(통합본)

728x90

[아키텍처(Architecture)]
아키텍처는 시스템의 물리적 또는 기능적 구조를 말한다. 즉, 서비스의 동작 원리를 나타내는 것. 대표적으로는 하드웨어 아키텍처와 소프트웨어 아키텍처가 있으며, 아키텍처를 설계하고 관리하는 사람을 아키텍트(Architect)라고 한다.

아키텍처는 과거 다른 의미로 사용되었지만, 오늘날에는 첨단 정보기술을 이용한 정보체계, 소프트웨어 내장형 체계, 지휘 통제 통신체계 등을 구축하는데 적용되고 있다. 특히, 컴퓨터나 네트워크에서의 아키텍처는 프로세스, 전체적인 구조와 논리적 요소들, 그리고 컴퓨터와 운영체계, 네트워크 및 다른 개념 간의 논리적 상호 관계 등을 정의하는 모든 곳에 적용되는 용어라고 할 수 있다.
 
[아키텍처의 특징]
아키텍처는 요구하는 것과 구현하는 것 사이의 중요한 다리 역할을 한다. 목표하는 대상에 대하여 그 구성과 동작 원리, 구성 요소 간의 관계 및 시스템 외부 환경과 관계 등을 설명하는 '청사진'이라고 정의된다. 다시 말해, 이론적인 수준이 아니라 실제로 실현 가능한 시스템을 구축한다는 것에 중점을 둔 용어이다. 

아키텍처의 설계 과정에는 정책의 변화, 인력 문제 등의 내부 요인 뿐만 아니라 유저의 행동 경향, 소프트웨어의 동향 및 업데이트 현황 등 외부 요인까지 종합적으로 고려해 다양한 변수에 대응할 수 있도록 하는 것이 핵심이다.
 
[아키텍처 종류]
아키텍처 종류에는 컴퓨터, 네크워크, 소프트웨어, 엔터프라이즈, 람다가 있다.
이것이 아키텍트 종류와 헷갈릴 수도 있는데, 아키텍트의 종류는 엔터프라이즈, 솔루션, 테크니컬, 애플리케이션, 데이터, 글로벌 등, 아키텍처를 설계하는 사람들을 분류한 것이고, 아티텍처 자체의 종류는 앞서 언급한 것으로 나뉜다.

더보기

추가로 조사한 아키텍트의 종류는 다음과 같다.

 

1. 엔터프라이즈 아키텍트(EA)

비지니스 아키텍처를 포함한 전체 아키텍처 설게에 대한 책임을 진다. 비지니스 이해를 바탕으로 전체 아키텍처에 대한 커다란 설계와 장기적인 IT 전략 수립을 담당한다. 단일 프로젝트 뿐만 아니라 회사의 비지니스 전략에 맞춰 앞으로 있을 모든 프로그램의 아키텍처에 대한 책임을 진다. 아래서 설명한 나머지 아키텍트을 통제할 수 있는 권한이 있으며, 팀을 운용한다.

 

2. 솔루션 아키텍트(SA)

특정 솔루션에 대한 아키텍처를 설계한다. 프로젝트 내에 개발팀이 있으면, 해당 솔루션을 사용하는 모든 팀에 대한 아키텍처 설계를 담당한다.

 

3. 테크니컬 아키텍트(TA)

시스템에 대한 하드웨어 및 네트워크 아키텍처를 담당한다.

(우리가 이 포스트에서 알고자 하는 것이 여기에 해당된다.)

 

4. 애플리케이션 아키텍트(AA)

애플리케이션에 대한 표준 가이드 및 아키텍처 구조를 담당한다. 대규모일 경우 개발팀 마다 AA를 배치하고, 소규모일 때는 전체 팀에 대한 애플리케이션 아키텍처 설계를 담당한다.

 

5. 데이터 아키텍트(DA)

프로젝트 전체 팀에 대해 데이터 아키텍처를 설계한다.

 

6. 글로벌 아키텍트(GA)

일반적인 프로젝트 팀에서는 흔하지 않으며, SA,TA,DA,AA에 대한 콩제 권한을 부여한다는 것 까지는 EA와 역할이 비슷하나 비즈니스 중점이 아닌 기술 위주의 아키텍처 설계에 집중한다.

 

참고 자료(https://steemit.com/kr/@parkjp/56sbyw-architecture)

 
1. 컴퓨터 아키텍처
컴퓨터 아키텍처, 쉽게 말해 컴퓨터 구조는 컴퓨터 공학에서의 컴퓨터 시스템의 기능(functionality), 조작(organization), 구현(implementation)을 기술하는 일련의 규칙과 방법의 집합이다. 컴퓨터 구조를 정의하는 기준은 다양하기 때문에, 명령 집합 아키텍처 설계, 마이크로 아키텍처 설계, 논리 설계 및 구현을 포함하기도 한다.
 
즉, 컴퓨터 시스템의 근간이 되는 운영 구조라고도 할 수 있으며 컴퓨터의 여러 부분에 대해 설계적으로 이식되는 것들과 요구 사항들(속도, 상호 연결 등)이 무엇인지 기능적으로 설명되어 있는 청사진이라고 할 수 있다. 주로 중앙 처리 장치(CPU)가 메모리 주소에 어떤 식으로 접근하고 내부적인 수행을 하는지 설명되어 있다.

더보기

컴퓨터 아키텍처의 첫번째 문서는 1837년 찰스 베비지가 고안한 해석기관을 예로 들 수 있다. 실제 제작되지는 않앗지만, 논리적 설계와 실현 가능성이 충분히 있던 것에서 중요한 모델로 평가된다.

 

또한, 1936년 콘라드 추제(Konrad Zuse)가 불 논리 체계와 프로그래밍이 가능한 세계 최초의 기계식 컴퓨터 제트 원(ZI)을 만들 때 사용된, '명령어와 데이터가 동일한 저장장치에 저장되는 프로그램 내장식 컴퓨터 개념'을 최초로 기술하기도 했다.

 

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

현재 공부하고자 하는 system&reversing에서 가장 중요한 아키텍처이다. -
 
폰노이만 아키텍처(Von Neumann Architecture)
폰노이만 구조는 존 폰노이만이 제시한 컴퓨터 구조로, 프로그램 내장 방식이라고도 불린다. 이론적으로는 튜링 머신과 같은 일을 할 수 있으며, 스위치를 설치하고 전선을 연결하여 데이터를 전송하고 신호를 처리하는 식으로 프로그래밍을 했던 이전의 컴퓨터들과는 달리, 저장된 프로그램(stored-program)의 개념이 도입된 구조이다. 즉, 프로그램을 구성하는 명령어를 임의 접근이 가능한 메모리상(램)에 순차적으로 배열하고, 조건 분기를 동시에 제한 없이 허용한다. 오늘날의 컴퓨터들도 대부분 이 폰노이만 구조를 따르고 있다.

더보기

이 구조의 장점은 컴퓨터에 다른 작업을 시킬 때, 하드웨어나 전선을 재배치할 필요 없이 소프트웨어만 교체하면 되기 때문에 범용성이 크게 향상된다는 점이다. 지금 시점에서는 상상도 할 수 없는 일이지만, 과거에는 컴퓨터에게 작업을 시킬 때마다 매번 전선과 하드웨어들을 사람이 직접 뜯고 재배치 했다고 한다.

 

단점으로는 '폰노이만 병목현상'이 있다. 메모리의 값을 읽고 쓰는 구조이기 때문에 기억장치에 병목현상이 생길 수 밖에 없다. 그래서 이러한 문제를 완화하기 위해 메모리 계층 구조, 불균일 기억 장치 접근(NUMA), 기억장치 직접접근(DMA) 등의 기술이 도입되었다. 또한, 코드를 순차적으로 실행하기 때문에 정해진 입력에 따라 정해진 값만 출력하는 '결정적 유한 오토마타(Deterministic Finite automaton)'의 한계에 묶이기 쉽다.

 
하버드 아키텍처(Harvard Architecture)
명령어와  데이터 통로를 저장 공간과 물리적으로 분리한 컴퓨터 구조이다. 릴레이를 기반으로 한 초기의 컴퓨터 Harvard Mark l에서 나온 것이며, 명령어를 펀치 테이프에, 데이터를 릴레이 래치에 저장한다. 즉, 메모리에 동시에 저장되어 순차적으로 일을 끝내야하는 폰노이만 구조와는 다르게 명령을 메모리부터 읽는 것과, 데이터를 메모리로부터 읽는 것을 동시에 할 수 있는 구조인 것이다. 명령의 처리를 끝내자마자 다음 명령을 읽어 들일 수 있어 빠른 속도를 낼 수 있지만 보다 많은 전기 회로를 필요로 한다.

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

더보기

프레임워크(framework): 소프트웨어 개발 시 복잡한 문제를 해결하거나 서술하는 것에 사용하는 기본 개념 구조.

간략히 F/W라고도 표현하며, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용할 수 있도록 일련의 협업화된 형태의 클래스들을 제공하는 것이라고 정의된다.

 

노드(node): 네트워크 연결에서 연결 포인트 혹은 데이터 전송의 종점, 재분배점.

중앙 집중형 서버에 거래 기록을 보관, 관리하지 않고 거래에 참여하는 개개인의 서버들이 모여 네트워크를 유지 및 관리하는 블록체인에서, 이 개개인의 서버(참여자)를 노드라고 한다.

 

블록체인(blockchain): 다수의 거래내역을 묶어 블록을 구성하고 해시를 이용해 여러 블록들을 체인처럼 연결한 뒤, 다수의 사람들이 복사해 분산 저장하는 알고리즘.

이 기술을 이용하면 데이터의 위변조가 불가능하여 신뢰할 수 있는 안전한 거래와 데이터 처리를 할 수 있다. 때문에, 비트코인과 이더리움 등 암호화계에 핵심 기술로 사용된다.

 
OSI 7 계층 (정보보안개론 - 한빛 아카데미 참고)

ISO(International Organization for Standardization, 국제 표준화 기구)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 각 계층으로 구분된 통신 시스템은 위의 계층으로 서비스를 제공하는 유사한 기능들의 모임이며, 바로 아래 게층으로부터 서비스를 받게 된다. 쉽게 말해, 각 계층에서 인스턴스는 서비스를 위의 계층의 인스턴스에 제공하고, 동시에 아래 계층으로부터 서비스를 요성한다.

 

더보기

1. 물리 계층(Physical layer)

실제 장치들을 연결하기 위해 필요한 전기적, 물리적 세부 사항들을 정의. 핀들의 배치나 전압, 전선의 명세 등이 포함된다. 물리 계층에 포함되는 허브(리피터)는 물리적인 정보 전달 매개체에 대한 연결 성립과 종료, 여러 사용자 간의 통신 자원을 효율적으로 분배하는 데 관여한다. 또한, 통신 채널을 통해 전송되는 사용자 장치의 데이터를 광섬유나 구리 선을 통해 전달되는 신호들로 변환/변조한다. 즉, 물리 계층은 네트워크 상에서 데이터 비트를 전송하는 계층이며, 물리적인 연결을 설정, 유지, 해제하기 위한 수단과 그에 상응하는 신호를 보내는 방법을 정의하고 있다.

 

2. 데이터 링크 계층(Data-link Layer)

네트워크 위에서 개체 간의 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아내 수정하는 기능적, 절차적 수단을 제공한다. 이 계층의 주소 체계는 단일 아치텍처이기 때문에 네트워크 카드 생성 시 정해진 물리 주소(MAC address)를 주소값으로 할당 받으며, Point to Point 간 신뢰성 있는 전송을 보장하기 위한 순환 중복 검사(CRC) 기반의 오류 제어와 흐름 제어도 이 계층에서 이루어진다. 가장 잘 알려진 예는 이더넷(Ethernet)이다.

 

3. 네트워크 계층(Network Layer)

여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 한다. 다양한 길이의 데이터를 네트워크를 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공한다. 대표적으로는 라우팅, 패킷 포워딩, 세그멘테이션(segmentation), 인터네트워킹(Internetworking) 등을 수행한다. 간단히 말해 인터넷이 가능하게끔 만드는 계층이다. 네트워크 계층에서는 논리적인 주소 아키텍처와 네트워크 관리자가 직접 주소를 할당하는 아키텍처를 가진다.

 

4. 전송 계층(Transport Layer)

네트워크 구성 요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공. 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 다중화 등 편리한 서비스를 제공한다. 사용자들이 신뢰성 있는 데이터를 주고받을 수 있도록 시퀸스 넘버 기반의 오류 제어 방식을 사용한다. 즉, 패킷들의 전송이 유효한지 확인하고, 전송에 실패한 패킷들을 다시 전송하는 일을 한다. 이 계층은 인터넷 기반의 'TCP/IP'과 일반적인 네트워크 모델 'OSI(개방형 시스템 간 상호 접속)'을 포함하고 있다. 대표적인 전송 프로토콜로는 TCP(전송 제어 프로토콜)과 UDP(사용자 데이터그램 프로토콜)이 있다.

 

5. 세션 계층(Session Layer)

세션 연결의 설정과 해제, 세션 메시지 전송 등의 기능을 제공한다. 연결이 손실되면 연결 복구를 시도하고, 오랜 시간 연결이 되지 않으면 연결을 닫았다 재개하기도 한다. 이 계층에서의 중요한 기능에는 동기화가 있다. 통신 양단에서 서로 동의하에 논리적인 공통처리 지점을 설정하고 동기화를 진행한다.

 

6. 표현 계층(Presentation Layer)

네트워크의 데이터 번역자로서의 역할을 한다. 문맥 계층(Stntax Layer)라고도 불리며 코드 간의 번역을 담당해 사용자 시스템의 데이터 형식 차이를 다루는 부담을 덜어준다. 자세히 설명하면, 수신자의 입장에서 송신자 장치로부터 온 데이터를 해석하기 위해 응용계층 데이터 부호화, 변환을 수행하고, 송신자의 입장에서 수신자 장치에 압축을 풀 수 있도록 데이터를 압축, 전송을 위한 암호화와 복호화를 수행한다.

 

7. 응용 계층(Application Layer)

컴퓨터 네트워크 프로그래밍엥서 인터넷 프로토콜(IP)와 컴퓨터 네트워크를 통하는 프로세스 간 통신 접속을 위해 설계된 계층이다. 가장 윗단에 위치한 만큼, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 응용 서비스의 예로는 가상 터미널이 있다.

 

참고 자료(https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95, http://wiki.hash.kr/index.php/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98#cite_note-9)

 

더보기

패킷 포워딩(packet forwarding): 다양한 네트워크들을 연결하는 스위칭 장비에서 수행되는 동작.

입력된 패킷의 헤더 정보를 이용해 최종 목적지의 네트워크를 향해 패킷을 내보내는 단계이다.

 

라우팅(routing): 네트워크 상의 주소를 이요해, 통신 데이터를 목적지까지 보낼 최적의 경로를 설정하는 과정.

이 과정을 수행하는 장치를 라우터, 최적의 경로를 선택하기 위한 데이터베이스를 라우팅 테이블이라고 한다.

 

세그멘테이션(segmentation): 프로세스를 논리적 내용을 기반으로 나눠 메모리에 배치하는 것을 의미.

 

인터네트워킹(internetworking): 네트워크와 네트워크의 연결을 의미. 연결하는 네트워크 수가 증가할수록 복잡도가 커진다.

 
서버-클라이언트(Server-Client System)
클라이언트와 서버로 나누어지는 네트워크 아키텍처. 사용자의 컴퓨터에 클라이언트가 설치되어 화면을 처리하고, 서버 컴퓨터에 데이터를 처리하는 시스템이다. 클라이언트는 서버 시스템에 연결된 컴퓨터, 스마트폰 등 사용자 측을 의미하고, 서버는 통신망 상에서 다른 컴퓨터에 대하여 회선, 디스크 장치 등에 대한 접속을 제어하는 관리 소프트웨어 혹은 컴퓨터를 의미한다. 클라이언트가 서버측에 정보를 전달하면 서버에서 처리된 정보를 클라이언트 측인 사용자에게 다시 전달한다. 서버는 역할에 따라 웹서버, 데이터베이스 서버, 메일 서버, 백업 서버 등으로 나뉘고, 제조사에 따라 IBM, HP, Dell 등으로 나뉜다. 

 
3. 소프트웨어 아키텍처(Software Architecture)
소프트웨어 골격이 되는 기본 구조, 소프트웨어를 구성하는 요소 간의 관게를 표현하는 시스템의 구조이다. 대규모의 소프트웨어를 개발할 때 복잡성의 문제를 해결하기 위해 전체적인 구조가 유기적으로 잘 구성되어야 한다. 또한 사용자의 요구 분석과 설계 단계에서 부터의 툼질 특성을 고려해 개발해야한다. 이 상황에  쓰이는 것이 바로 잘 정의된 소프트웨어 아키텍처이다.
 

소프트웨어 설계
하드웨어나 소프트웨어의 종류와 분산 시스템으로 구축하는지, 프레임워크는 네트워크 기반인지 등과 같은 상세 내용을 설정하고 계획한다. 또한, 계획에 맞게 비기능적 요구 사항과 제약 사항을 고려하고, 운영체제, 미들웨어, 프레임워크 등의 플랫폼을 결정한다. 소프트웨어 설계의 기본 원리는 다음과 같다.

  • 모듈화 : 소프트웨어 성능 향상 및 유지관리 등이 용이하도록 시스템의 기능을 모듈단위로 나누는 것
  • 추상화 : 전체적이고 포괄적인 개념을 설계한 후에 구체화시켜 나가는 것
  • 단계적 분해 : 상위 개념부터 하위 개념으로 구체화 시키는 분할 기법 하향식 설계 전략
  • 정보은닉 : 모듈 내부에 정보와 자료들을 숨겨서 다른 모듈이 접근하거나 수정 못하도록 하는 기법
더보기

분할과 정복

가장 세분화된 작은 시스템을 개발하고 하나씩 윗단계로 올라가면서 완성하는 방법이다. 클라이언트와 서버로 분할하고, 여러 서브 시스템으로 분할하고, 패키지로 분할하고 다음은 클래스, 메소드 등으로 더욱더 작게 쪼개진다. 무작정 작게 쪼개면 오히려 복잡도가 증가할 수 있으므로, 복잡도로 인한 증가 비용과 처리의 용이성을 고려하여 분할 정도를 결정한다.

 

추상화

사용자의 입장에서 컴퓨터 내부의 작동 원리를 이해하지 않아도 원활한 사용이 가능하도록 만드는 것이다. 소프트웨어의 이용 뿐만 아니라 설계 단계에서도 추상화는 중요한데, 객체들의 공통점을 뽑아 클래스라는 이름을 붙여놓은 것이 바로 추상화이다. 

과정 추상화: 프로그램 전체에 대해 상세 부분을 생략하고 전체 흐름만 파악할 수 있는  알고리즘 형태로 작성. 

자료 추상화: 데이터와 메소드를 클래스 형태로 캡슐화하여 숨겨놓고, 사용자에게 필요한 부분만 개방하는 데이터 구조 형태로 표현.제어 추상화: 프로그래밍 언어에서 쓰는 제어 구조를 포함한 여러 줄의 내요을 간략히 줄여 표현.

 

단계적분해 및 모듈화

분할과 정복과는 반대되는 하향식 설계에서 사용된다. 기능을 점점 작은 단위로 나누어 점차 구체화하는 방법이며, 대표적인 예로, 라이브러리 함수, 서브루틴, 프로시저, 객체, 메소드 등이 있다.

 
품질속성
소프트웨어 아키텍처는 관계자들의 품질 요구 사항을 반영하여 품실 속성을 결정한다. 사용성, 이식성, 유지보수 용이성 등을 고려하며 시스템 품질 속성에는 가용성, 변경 용이성, 성능, 보안성, 사용성, 테스트 용이성 등이 있다. 아키텍처 품질 속성에는 개념적 무결성, 정확성과 완전성, 개발 용이성 또는 구축 가능성 등이 있다.

 
4. 엔터프라이즈 아키텍처(Enterprise Architecture)
전사 아키텍처라고도 불리며 IT 인프라의 각 부분이 어떻게 구성되고 작동되어야 하는 가를 체계적으로 기술한다. 엔터프라이즈 아키텍처 관리시스템(EAMS, Enterprise Architecture Management System)은 정보 기술 프레임워크 수립, 메타데이터 시스템, 품질관리시스템 등 주변 시스템과 연계를 통해 정보 시스템 변경 내용 및 구성 체계를 실시간으로 조회 수성할 수 있다. 또한, 아키텍처 관리 및 활용을 위한 구현 시스템으로 구축, 관리, 활용 등 모든 업무 프로세스 과정을 체계적으로 관리할 수 있는 시스템이다.

더보기
엔터프라이즈 아키텍처에는 모델(참조, 업무 참조, 서비스 참조, 기술 참조, 데이터 참조, 범정부 데이터)과 프로세스, 프레임워크가 포함된다. 현재 공부하고 있는 방향에 그다지 중요한 내용은 아니므로 추가 내용은 아래 사이트를 참고할 것.http://wiki.hash.kr/index.php/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98#.EC.97.94.ED.84.B0.ED.94.84.EB.9D.BC.EC.9D.B4.EC.A6.88_.EC.95.84.ED.82.A4.ED.85.8D.EC.B2.98

 
5. 람다 아키텍처(Lambda Architecture)
실시간 분석을 지원하는 빅데이터 아키텍처. 대량의 데이터를 실시간으로 분석하기 어려워서 batch로 미리 만든 데이터와 실시간 데이터를 혼합해 사용하는 방식이다.

람다 아키텍처는 총 3개의 레이어로 구성된다. Batch 레이어에는 Raw 데이터가 저장되어 있고, Batch 처리하여 배치 뷰가 생성된다. serving 레이어에는 batch로 분석된 데이터가 저장되어 있고, batch 외에는 쓰기가 안 된다. speed 레이어에는 실시간으로 데이터를 집계한다. 실무에 사용되는 예시로는 인터넷에 연결되는 수십만대의 사물인터넷(IOT) 센서 데이터를 실시간 분석할 때가 있다.
 
참고 자료
http://wiki.hash.kr/index.php/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
https://moo-you.tistory.com/218
https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

728x90