
Architecture - 아키텍쳐

아키텍쳐란 목표하는 대상에 대하여 그 구성과 동작원리, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계 등을 설명하는 설계도 혹은 청사진을 말한다.
시스템에서의 아키텍쳐는 시스템의 구조, 행위, 더 많은 뷰를 정의하는 개념적 모형으로 시스템 목적을 달성하기 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지, 정보가 어떻게 교환되는지를 설명한다.
Layerd Architecture
소프트웨어 시스템의 구성요소 간의 관심사 분리(관심사 별로 계층화)한 아키텍처로, 특정 계층 내의 구성 요소는 해당 계층과 관련된 논리만 처리한다.
관심사 분리를 통해 계층의 응집도를 높이고 결합도를 낮출 수 있으며 이를 통한 재사용성과 유지보수의 향상을 기대할 수 있다.
서비스의 크기에 따라 3개의 계층이 될 수도 있고, 5개 이상의 계층이 될 수도 있지만, 표준 계층을 예시로 공부했다.
Presentation Layer
사용자의 요청, 응답을 처리하는 계층 - Controller
Business Layer
비즈니스 로직을 수행하는 계층 - Service
트랜잭션을 보장해야함
Persistence Layer
DB와의 상호작용을 하는 계층 - Dao / Repository
Database Layer(Infrastructure Layer)
DB 계층 - ORM, JPA 등

각 계층은 상호작용하지만, 특정 비즈니스 로직을 수행하기 위한 작업에 대한 추상화를 형성하여 다른 계층에서 발생하는 로직을 신경쓰지 않아도 된다.
예를 들어 Presentation Layer에서는, 사용자에게 특정 형식으로 화면에 해당 정보를 View하기만 하면 된다.
또한 Business Layer는 Persistence Layer에서 데이터를 가져오고, 데이터에 대해 연산을 수행하여 전달만 하면 된다. 데이터의 형식을 지정하는 방법이나, 출처에 대해 신경 쓸 필요가 없다.
Point
중요 포인트는, 단방향 의존성이다. 각 계층은 하위 레이어에만 의존해야한다.
Presentation Layer에서 직접 Persistence Layer에 엑세스하도록 허용한다면 Business, Presentation Layer 모두에 영향을 미치기 때문에, 결합도가 높아진다. 이는 유지보수 및 확장성 측면에서 굉장히 불리하다.

예시
아래의 예시는, Layered Architecture를 사용하여 특정 개인에 대한 정보를 검색하는 Application이다.

참조
https://namu.wiki/w/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
아키텍처 - 나무위키
자세한 내용은 건축학 문서 를 참고하십시오. 한국에서 건축학은 건축학이라 부르지 굳이 영어로 부르지 않는 경우가 대부분이라, 이보다는 아래의 뜻이 더 많이 쓰인다.
namu.wiki
https://ko.wikipedia.org/wiki/%EC%8B%9C%EC%8A%A4%ED%85%9C_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
시스템 아키텍처 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 시스템 아키텍처(system Architecture)는 시스템의 구조, 행위, 더 많은 뷰를 정의하는 개념적 모형이다.[1] 시스템 목적을 달성하기 위해 시스템의 각 컴포넌트가 무
ko.wikipedia.org
https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch01.html
Software Architecture Patterns
Chapter 1. Layered Architecture The most common architecture pattern is the layered architecture pattern, otherwise known as the n-tier architecture pattern. This pattern is the de facto standard for most … - Selection from Software Architecture Pattern
www.oreilly.com
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!