아키텍처(Architecture)
아키텍처는 건축 분야에서 유래된 용어로 요구 사항을 만족하는 건물을 짓기 위한 청사진과 같은 역할을 한다.
만약, 특정 건물을 짓는다면 여러 이해 관계자들이 만나 논의를 할 것이다.
이해 관계자들은 건물의 주인, 건물을 설계하는 건축가, 설계를 토대로 건물을 짓는 시공사 등이다.
이처럼 아키텍처는 이해 당사자들을 위한 어떤 건물이나 구조물에 대한 컨셉을 잡는 것으로부터 시작한다고 할 수 있다.
컴퓨터 공학에서도 이러한 아키텍처를 비슷한 의미로 사용하고 있다.
컴퓨터 분야에서는 크게 시스템 아키텍처, 소프트웨어 / 애플리케이션 아키텍처, 웹 애플리케이션 아키텍처 등이 있다.
시스템 아키텍처(System Architecture)
시스템 아키텍처는 하드웨어와 소프트웨어를 모두 포함하는 어떤 시스템의 전체적인 구성을 표현한 것이다.
시스템 아키텍처를 통해 기본적으로 해당 시스템이 어떤 하드웨어를 구성하고, 어떤 소프트웨어를 사용하는지에 대해 대략적으로 알 수 있다.
또한, 해당 시스템 구성 요소들 간의 상호작용이 어떻게 이루어지는지 등, 시스템이 정상적으로 동작하기 위한 동적 원리와 같은 정보를 아키텍처에 표현한다.
시스템 아키텍처 사례
다음은 채팅 서버 시스템의 아키텍처의 예시이다.
위 그림은 채팅 서버를 구축하기 위한 전통적인 시스템 아키텍처라고 할 수 있다.
해당 아키텍처는 단일 서버로 이루어진 아키텍처로 다음과 같은 문제가 발생할 수 있다.
- 단일 서버가 모두 처리하기 때문에 제한적인 요청만을 처리할 수 있다.
- 사용자 요청이 늘어나는 경우, 시스템 확장에 대한 고려사항이 없다.
- 서버에 문제가 생기면 시스템 전체에 문제가 발생할 수 있다.
따라서 다음과 같은 형태로 개선할 수 있을 것이다.
개선된 점
- 로드 밸런서 영역을 통해 사용자의 요청을 분산시켜 서버를 안정적으로 운영할 수 있다.
- 여러 개의 웹소켓 서버를 통해 서버의 부하를 줄일 수 있으며, 서버에 문제가 생기더라도 시스템 전체에 문제 생기는 것을 방지할 수 있다.
- 메시지 브로커 영역을 통해 웹소켓 서버가 다중 서버로 구성이 되어 있더라도 특정 사용자들 간의 메시지를 주고받을 수 있는 공유 채널을 사용할 수 있다.
또한, 채팅 서버의 전송 속도를 향상 시키는 것을 목적으로 아키텍처를 다르게 구성할 수도 있다.
위 아키텍처의 경우 요청과 서버의 응답이 이루어지는 전체 영역에 걸쳐서 Blocking 되는 요소가 없도록 리액티브 시스템을 구성하여 요청을 보다 빠르게 처리할 수 있다.
또한, 웹소켓이 하나의 Connection과 연결되는 것에 반해 RSoket은 하나의 Connection 내에 다중 요청 처리가 가능하여 대량의 요청을 안정적으로 처리할 수 있다.
시스템 아키텍처의 요구사항
- 시스템 구성 및 동작 원리를 나타낸다.
- 시스템 구성 요소에 대해 설계 및 구현을 지원하는 수준으로 자세히 기술한다.
- 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사한다.
- 요구 사양 및 시스템의 전체 생명주기를 고려한다.
- 시스템의 논리적인 기능 체계와 실현하기 위한 구성 방식, 시스템의 최적화 등을 목표로 설계한다.
소프트웨어 아키텍처(애플리케이션 아키텍처)
소프트웨어는 하드웨어를 제외한 컴퓨터 내의 모든 프로그램을 포괄하는 의미를 가지고 있다.
이러한 소프트웨어의 구성을 큰 그림으로 표현한 것이 소프트웨어 아키텍처이다.
다음은 소프트웨어 아키텍처의 대표적인 사례로 Java 플랫폼 아키텍처이다.
Java 플랫폼에 대한 아키텍처는 마치 벽돌을 쌓은 듯한 모습으로 표현되어 있다.
해당 아키텍처는 Java가 어떤 기술들을 지원하고 Java를 통해서 어떤 기능을 사용할 수 있는지 등의 전체적인 Java 플랫폼의 서비스를 확인할 수 있다
웹 애플리케이션 아키텍처
웹 애플리케이션 아키텍처는 웹에서 동작하는 웹 애플리케이션에 대한 아키텍처이다.
애플리케이션은 소프트웨어의 한 종류로 좁게는 데스크톱이나 스마트폰에서 사용하는 응용 프로그램을 뜻하며,
넓게는 클라이언트의 요청을 처리하는 서버 애플리케이션을 의미한다.
애플리케이션의 아키텍처 유형은 다양하지만, 계층형 아키텍처(N-Tier)는 다음과 같이 표현할 수 있다.
위 그림은 웹 애플리케이션을 계층형으로 표현한 아키텍처이다.
API 계층(API Layer)
클라이언트의 요청을 받아들이는 계층으로 표현 계층이라고도 불린다. 하지만 REST API를 제공하는 애플리케이션의 경우 API 계층이라고 표현한다.
서비스 계층(Service Layer)
API 계층에서 전달받은 요청을 업무 도메인의 요구 사항에 맞게 처리하는 계층이다.
애플리케이션의 핵심 로직은 서비스 계층에 포함되어 있어 애플리케이션의 핵심이 되는 계층이다.
데이터 액세스 계층(Data Access Layer)
비즈니스 계층에서 처리된 데이터를 데이터베이스 등을 통해 데이터 저장소에 저장하기 위한 계층이다.
'Computer Engineering > 컴퓨터 과학(CS: Computer Science)' 카테고리의 다른 글
[CS] 도메인 주도 설계(DDD: Domain-Driven Design)란? (4) | 2022.11.25 |
---|---|
[CS] 인증(Authentication)과 인가(Authorization, 권한 부여) (0) | 2022.11.20 |
[CS] 프레임워크(Framework)란 무엇인가? (0) | 2022.10.14 |
[CS] 그래프(Graph)란 무엇인가? (0) | 2022.10.12 |
[CS] 트리(Tree)란 무엇인가? (0) | 2022.10.12 |