소프트웨어 아키텍처?
소프트웨어 아키텍처는 개발하기 전에 설계 단계에서 결정하는 중요한 요소이다.
소프트웨어 아키텍처는 소프트웨어 시스템의 구조와 구성 요소 간의상호 작용을 설계하고 결정하는 과정이다. 아키텍처는 시스템의 품질(성능, 보안, 확장성 등)을 보장하며, 장기적으로 시스템을 관리하고 유지보수하는 데 있어 중요한 역할을 한다.
이는 소프트웨어 개발의 초기 단계에서 결정되며, 시스템의 복잡성을 분해하고 모듈화하여 개발 과정을 관리 가능한 단위로 나누는 역할을 수행한다.
아키텍처의 대표적인 종류에는
- 레이어드 아키텍처(Layered Architecture)
- 마이크로서비스 아키텍처(Microservices Architecture)
- 서버리스 아키텍처(Serverless Architecture)
- 핵사고날 아키텍처(Hexagonal Architecture)
등이 있다.
오늘은 그 중에서 가장 많이 사용되고 있는 레이어드 아키텍처에 대해 알아보자.
레이어드 아키텍처: 계층적 구조의 설계
레이어드 아키텍처는 소프트웨어 시스템을 서로 다른 논리적 계층으로 분리하여 설계하는 방법론이다.
각 계층은 특정한 역할과 책임을 갖고, 다른 계층과의 인터페이스를 통해 상호작용한다.
이로써 시스템의 유지보수성, 확장성, 재사용성을 높이고 코드의 의존성을 최소화할 수 있다.
주요 레이어드 아키텍처 계층
- 표현(Presentation) 계층: 사용자 인터페이스와 관련된 로직을 처리하는 계층이다. 사용자의 입력을 처리하고 결과를 출력하며, 화면 표시와 관련된 역할을 수행한다.
- 응용(Application) 계층: 비즈니스 로직과 관련된 처리를 다루는 계층으로, 사용자의 요청에 따라 데이터를 가공하거나 처리한다.
- 도메인(Domain) 계층: 핵심 비즈니스 로직이 정의되는 계층으로, 시스템의 핵심 업무 규칙과 도메인 객체를 포함한다.
- 데이터베이스(Database) 계층: 데이터베이스, 외부 시스템과의 연동, 로깅 등과 같은 기술적인 요소를 처리하는 계층이다.
프로젝트를 진행할 때 보통 이렇게 구성한다.
- Presentation Layer : Controller
- Business Layer : Service
- Domain Layer : Entity
- Database Layer : Repository
특징
레이어드 아키텍처의 특징으로는 작고 간단한 서비스를 만들 때, 혹은 임베디드 장치의 경우 이 패턴을 쓰기에 적합하다.
또한 개발에 처음 접할 때 가장 많이 사용되는 아키텍처이다.(복잡도도 낮고 소규모 애플리케이션에 적합하기 때문)
조심해야할 사항으로 싱크홀 안티패턴이 있다.
싱글톤 안티패턴은 요청 한 레이어에서 다른 레이어로 이동할 때, 각 레이어가 아무 비즈니스 로직도 처리하지 않고 그냥 통과시키는 패턴을 말한다.
장점
- 모듈화와 재사용성: 각 계층은 독립적으로 개발하고 테스트할 수 있어 모듈화와 재사용성을 높여준다.
- 유지보수성: 특정 계층의 변경이 다른 계층에 영향을 미치지 않으므로 유지보수가 용이하다.
- 확장성: 필요에 따라 특정 계층을 확장하거나 교체할 수 있어 시스템 확장이 쉽다.
단점
- 계층형 아키텍처는 영속성 계층을 토대로 만들어지기 떄문에, 데이터베이스 주도 설계를 유도한다.
- 계층형 아키텍처에서 ORM 프레임 워크를 사용하면, 데이터베이스 중심적인 아키텍처가 되기 쉽다.
- 영속성 계층에 비즈니스 로직을 추가하고 싶어지기 때문이다.
- 혹은 비즈니스 계층에서 영속성 모델을 비즈니스 모델처럼 사용하게 되어, 비즈니스 계층에 영속성 계층에 대한 로직이 추가될 수 있다.
- 성능 이슈: 계층 간의 통신 비용이 발생할 수 있으며, 복잡한 시스템에서는 성능 저하가 발생할 수 있다.
- 과도한 계층화: 계층의 과도한 분리로 인해 코드 가독성이 저하될 수 있다.
- 테스트: 상위 레이어에서 하위 레이어에 직접 접근하는 코드가 늘어나, 테스트를 하기 어려워 질 수 있다.(컨트롤러에서 직접 엔티티와 레포지토리를 조회하는 경우가 생길 수 있다.)
- 동시 작업이 어렵다.
이와 같은 이유로 레이어드 아키텍처는 규모가 커질 수록 유지 보수가 어려워진다.
대규모 애플리케이션에서는 더 모듈화된 아키텍처가 적합하다.
다음엔 큰 큐모의 애플리케이션에서는 어떤 아키텍처를 사용하는지 공부하고 포스팅해야겠다.
참고
(레이어드 아키텍처)[https://americanopeople.tistory.com/385]
(그림 참조 OREILLY)[https://www.oreilly.com/content/software-architecture-patterns/]
'공부방' 카테고리의 다른 글
LLM 과 임베딩 (1) | 2024.08.26 |
---|---|
앱의 종류(웹 앱, 네이티브 앱, 하이브리드 앱) (0) | 2023.06.15 |
웹 3.0 이 뭘까? (0) | 2023.06.12 |
Copilot 과 유사한 기능을 하는 CodeWhishperer (0) | 2023.05.08 |
[리뷰] 객체지향의 사실과 오해 (0) | 2023.05.07 |