Skip to content

6. 소프트웨어 아키텍처

yeon edited this page Jul 23, 2024 · 36 revisions

image

개발 목적

목적
🔹 '티글' 서비스에 비즈니스 요구 사항과 기술적 요구 사항을 조화롭게 통합한다.

🔹 '티글' 서비스 시스템의 성능, 보안, 확장성 등 다양한 측면을 고려한다.

🔹 '티글' 서비스는 대규모 트래픽을 처리하고 접속한 순서대로 티켓을 예매할 수 있어야 한다.

레이어드 아키텍처(Layered Architecture)

정의
🔹 소프트웨어 시스템을 여러개의 계층으로 분리한 아키텍처를 뜻한다.

구성 요소
🔹 Presentation Layer : 사용자와 시스템 간의 상호작용을 처리
🔹 Application Layer : 비지니스 로직 처리
🔹 Domain Layer : 데이터 유효성 검증, 엔티티 간의 관계 처리

주요 특징
🔹 단순성 : 계층화된 구조는 이해하기 쉽고, 전통적인 설계 패턴이므로 익숙하다.
🔹 개발 속도 : 상대적으로 간단한 애플리케이션은 빠르게 개발 할 수 있다.
🔹 역할 분리 : 코드의 가독성이 좋고 역할 분리 하기 쉽다.

헥사고날 아키텍처 도입

헥사고날 아키텍처 도입 이유

🔹 비즈니스 로직의 독립성
헥사고날 아키텍처는 애플리케이션의 핵심 비즈니스 로직을 외부 의존성과 분리한다. 이를 통해 데이터베이스나 외부 API와의 연결을 쉽게 변경할 수 있으며, 새로운 기능이나 비즈니스 요구 사항이 추가될 때 기존 기능에 영향을 주지 않고 통합할 수 있다.

🔹 명확한 책임 구분
각 기능(예: 티켓팅, 교환, 채팅)에 대한 책임이 명확하게 구분되어 소스 코드를 이해하고 유지 보수하는 데 도움이 된다. 이는 팀원 간의 협업을 원활하게 하고, 프로젝트의 확장성을 높일 수 있다.

🔹 유연한 데이터 관리
헥사고날 아키텍처는 영속성 어댑터 외에도 다양한 데이터를 관리할 수 있는 구조를 제공한다. 이는 프로젝트가 성장하면서 여러 데이터 소스나 서비스를 통합하는 데 유리하다.

🔹 의존성 관리
레이어드 아키텍처는 일반적으로 의존성이 위에서 아래로 흐르는 반면, 헥사고날 아키텍처는 포트를 통해 외부와 독립적으로 비즈니스 로직을 작동 시킨다. 이로 인해 기능 확장 시 기존 코드에 대한 영향을 최소화할 수 있다. 새로운 기능을 추가하기 위해 전용 어댑터를 만들어 기존 비즈니스 로직을 변경하지 않고도 기능을 확장할 수 있다.

🔹 독립적 배포
모듈을 독립적으로 배포할 수 있다. 전체 시스템의 가동 중단 없이 업데이트를 진행할 수 있다. 실시간 예매와 사용자 간의 티켓 교환이 이루어지는 티글 서비스에는 실시간 서비스가 중요하므로 핵심 기능 시스템이 중단 없이 가동되는 장점이 있다.

2) 티글 헥사고날 기본 구조

-> 현재 프로젝트의 규모와 복잡성을 고려했을 때, MSA는 여러 개의 마이크로서비스를 관리해야 하므로, 이를 위한 인프라와 운영 비용이 증가하게 되어 과도한 아키텍처라고 판단했다. 현재의 요구 사항을 충족하는 데 헥사고날 아키텍처가 충분하다고 생각했다.

추후 채팅 기능, 게시판, 알람 등 여러 기능을 추가하여 프로젝트를 확장할 계획을 갖고 있기 때문에, 헥사고날 아키텍처의 유연성과 독립성 덕분에 비즈니스 로직을 안정적으로 유지하면서도 필요한 기능을 손쉽게 확장할 수 있어, 우리 프로젝트에 적합한 선택이라고 판단하였다.

3) 도메인 영역

🔹 현실에서 사건이 발생하는 집합의 모델링 -> 서비스 및 시스템의 핵심 로직이다. 비즈니스 로직을 포함한 작업을 처리한다. -> Exchage(교환), Payment(결제), Program(공연 정보), reservation(예약, 좌석, 좌석등급), user(회원 기능) 데이터와 규칙에 관련된 엔티티들로 구성된다.

헥사고날 아키텍처의 적합성

티켓팅 시스템은 예매, 결제, 교환 등 다양한 비지니스 로직을 포함하고 있다.
헥사고날 아키텍처는 이러한 비지니스 로직을 핵심 도메인으로 정의하고, 외부 인터페이스와 분리하여 변경에 유연하게 대응할 수 있다. 티켓팅 사이트는 공연마다, 카테고리마다 예매 방식이 바뀔 수 있고 요구사항이 달라질 수 있다. 이에 새로운 기능을 추가하거나 기존 기능을 수정 시에도 영향을 최소화 할 수 있다는 헥사고날의 장점은 티켓팅 시스템 사이트와 적합하다고 볼 수 있다.