본문 바로가기
세지의 상식 생활

SW 아키텍처를 묻다

by 세지_Seji 2023. 4. 1.
반응형

Q.

SW 개발에서 말하는 아키텍처가 뭘까?

 

A.
소프트웨어 아키텍처(software architecture)는 소프트웨어 시스템을 설계하고 구축하는 과정에서 시스템의 구조와 구성요소들 간의 상호작용을 결정하는 원칙과 관련된 결정들의 집합체입니다.

소프트웨어 아키텍처는 소프트웨어 시스템을 이해하고 유지보수하며, 시스템을 개선하거나 확장하는 데 필요한 기반을 제공합니다. 소프트웨어 아키텍처는 시스템의 기능적 요구사항, 성능 요구사항, 보안 요구사항 등을 고려하여 시스템을 설계하고, 소프트웨어의 모듈화와 재사용성, 확장성, 유지보수성, 이식성 등을 고려합니다.

소프트웨어 아키텍처는 일반적으로 시스템의 구성요소와 그들 간의 관계를 그림이나 다이어그램으로 나타내어 설명하며, 이를 통해 시스템의 설계와 구현을 이해하는 데 도움이 됩니다. 소프트웨어 아키텍처는 소프트웨어 개발의 초기 단계에서 결정되며, 시스템의 기반이 되는 중요한 결정으로, 개발 프로세스 전체에서 중요한 역할을 합니다.

 

Q. 

그 종류는 뭐가 있지?

 

A.
소프트웨어 아키텍처는 시스템의 특성과 목적에 따라 다양한 종류가 있습니다.

일반적으로 사용되는 몇 가지 소프트웨어 아키텍처 유형은 다음과 같습니다.

 

- 클라이언트-서버 아키텍처: 클라이언트는 서버에 요청을 보내고, 서버는 해당 요청에 대한 응답을 제공하는 구조입니다.

- 계층형 아키텍처: 계층적 구조를 갖는 아키텍처로, 각 계층은 다른 계층에게 서비스를 제공하고 다른 계층에서 제공하는 서비스를 사용합니다.

- 이벤트 기반 아키텍처: 시스템 내에서 발생하는 이벤트에 의해 작동하며, 이벤트가 발생하면 이벤트 핸들러가 이를 처리합니다.

- 마이크로서비스 아키텍처: 각기 독립된 기능을 수행하는 작은 서비스들이 조합되어 전체적인 시스템을 구성하는 구조입니다.

- 모노리스 아키텍처: 모든 기능을 하나의 애플리케이션 내에 포함하는 구조로, 단일 애플리케이션으로 전체 시스템을 관리합니다.

이 외에도 여러 가지 유형의 아키텍처가 있으며, 각각은 특정한 상황에서 적합한 아키텍처입니다.

 

Q. 

이벤트 기반 아키텍처에서 이벤트 핸들러란 뭘까?

 

A.
이벤트 기반 아키텍처에서 이벤트 핸들러(event handler)란, 시스템 내에서 발생하는 이벤트를 처리하기 위한 코드 블록 또는 함수를 의미합니다.

이벤트 기반 아키텍처에서는 시스템의 각 구성 요소가 이벤트를 발생시키며, 이벤트 핸들러는 이러한 이벤트를 감지하고 해당 이벤트에 대한 작업을 수행합니다. 이벤트 핸들러는 일반적으로 비동기적으로 동작하며, 이벤트가 발생하면 해당 이벤트를 처리하는 데 필요한 모든 정보를 제공받습니다.

예를 들어, 온라인 쇼핑몰 시스템에서는 주문이 생성될 때마다 이벤트가 발생합니다. 주문 생성 이벤트를 처리하기 위한 이벤트 핸들러는 해당 주문에 대한 결제 처리 및 배송 처리 등을 수행합니다.

이벤트 기반 아키텍처에서는 각 구성 요소가 느슨하게 결합되어 있기 때문에, 시스템의 유연성과 확장성이 높아지며, 이벤트 핸들러의 재사용성도 높아집니다. 또한 이벤트가 중심적인 역할을 담당하기 때문에 시스템의 상태를 추적하고 디버깅하는 데도 용이합니다.

 

Q.

모노리스란 뜻은 뭐야?

 

A.

모노리스(monolith)란, "단일 돌출물"이라는 뜻의 그리스어 단어 "μονόλιθος"에서 유래된 용어로, 소프트웨어 개발에서 하나의 애플리케이션으로 모든 기능을 포함하는 아키텍처를 의미합니다.


모노리스 아키텍처는 전통적인 방식의 아키텍처 중 하나로, 애플리케이션 내에 필요한 모든 기능과 서비스가 포함되어 있습니다. 이러한 아키텍처에서는 애플리케이션의 전체 코드 베이스가 하나의 단일 실행 파일로 빌드되며, 이를 통해 각각의 기능이 상호작용하고 통신할 수 있습니다.


모노리스 아키텍처는 초기 개발 단계에서는 간단하고 쉽게 구축할 수 있으며, 전체 시스템을 쉽게 이해하고 관리할 수 있습니다. 또한 개발자들이 애플리케이션 내에서 어떤 코드도 쉽게 찾을 수 있고, 코드를 수정하고 업데이트하기도 용이합니다.


하지만 시스템의 규모가 커지고 기능이 복잡해질수록 모노리스 아키텍처는 다음과 같은 문제점이 발생할 수 있습니다.

  • 기능 추가나 수정 시 전체 애플리케이션을 다시 빌드하고 배포해야 하므로, 배포 시간이 길어지고 신뢰성이 낮아질 수 있습니다.
  • 서비스 간의 의존성이 높아져, 기능 추가나 수정 시에 시스템 전체에 영향을 미칠 가능성이 높아집니다.
  • 코드의 복잡도가 높아져 유지보수가 어려워지고, 새로운 개발자가 프로젝트에 참여하는 데 어려움이 있을 수 있습니다.


이러한 이유로 모노리스 아키텍처는 대규모 애플리케이션에서는 사용이 적합하지 않을 수 있습니다. 대신, 마이크로서비스 아키텍처와 같이 애플리케이션을 작은 기능 단위로 분해하여 개발하고 운영하는 것이 권장됩니다.

반응형

댓글