-
[ Layered Architecture ] 레이어드 아키텍처 이해하기공부하기/아키텍처 2023. 2. 16. 17:55
레이어드 아키텍처는 소프트웨어 아키텍처의 일종으로, 각 계층(layer)을 엄격하게 분리하여 구성하는 아키텍처 스타일입니다. 이 아키텍처에서 *각 계층은 서로 직접적인 의존성을 가지지 않으며, *높은 결합도와 낮은 응집도를 갖는 것을 지양합니다.
일반적으로 레이어드 아키텍처는 다음과 같은 세 가지 계층으로 구성됩니다.
- 프레젠테이션 계층(Presentation Layer): 사용자 인터페이스를 담당하는 계층으로, 사용자의 요청을 받아 처리하고 응답을 반환합니다. 주로 웹 어플리케이션에서 브라우저나 모바일 앱과 같은 클라이언트와 상호작용하는 부분입니다.
- 애플리케이션 계층(Application Layer): 비즈니스 로직을 처리하는 계층으로, 사용자 요청을 받아 해당 요청에 대한 작업을 수행하고 데이터를 처리합니다.
- 데이터 액세스 계층(Data Access Layer): 데이터베이스와 같은 영속성 저장소와 연결되어 데이터를 읽고 쓰는 역할을 수행합니다.
예) 로그인 요청 그림으로 이해하기
- 유저: '컨트롤러야 나 로그인하고 싶어 ~ 이게 내 정보야' 라고 요청
- 컨트롤러: '알겠어 잠시만 기다려줘, service야 이 사람이 로그인하고 싶다는데 확인좀 해줄래?'라고 유저 정보를 서비스에 전달
- 서비스: '알겠어 repository야 유저 데이터좀 확인해줄래?'라고 repository에 유저 정보를 전달
- 레파지토리는 DB에서 요청 유저의 정보를 찾아본다.
- DB는 찾아본 유저 정보의 결과를 repository에 전달한다.
- 레파지토리: '서비스야 너가 부탁한 결과야 자 받아!'라고 서비스에게 DB에서 찾아본 유저 정보를 전달한다.
- 서비스는 전달받은 유저 데이터를 통해 유저 요청 데이터와 저장되어 있는 유저 데이터를 비교한 후 결과를 컨트롤러에 전달한다.
- 컨트롤러는 서비스에서 전달받은 로그인 성공 여부를 유저에게 전달한다.
레이어드 아키텍처의 장단점
- 레이어드 아키텍처의 장점
- 계층 간의 분리로 인해 유지보수성이 높다
- 각 계층을 독립적으로 개발하고 테스트할 수 있다
- 각 계층의 역할이 분명하게 나뉘어져 있어 코드의 가독성이 높다
- 대규모 어플리케이션에서 확장성이 좋다는 장점이 있다
- 레이어드 아키텍처의 단점
- 계층의 분리로 인해 중복된 코드가 발생할 수 있다
- 성능 문제가 발생할 가능성이 있다
- 계층 간의 의존성을 최소화하는 것이 목적이기 때문에, 특정 기능이 여러 계층에 걸쳐서 구현되어야 하는 경우 유지보수성이 낮아질 수 있다.
* 직접적인 의존성?? 무슨 말이야??
어떤 객체가 협력하기 위해 다른 객체를 필요로 할때 두 객체 사이에 의존성이 존재하게 된다.
- 직접 의존성: 한 요소가 다른 요소에 직접 의존하는 경우를 가리킨다.
- 간접 의존성: 직접적인 관계는 존재하지 않지만 의존성 전이에 의해 영향이 전파되는 경우를 가리킨다.
class 직접의존 { private 의존하는클래스 = new 의존하는클래스(); -> 직접 의존! ... } class 간접의존 { private 의존하는클래스 constructor(의존클래스) { this.의존하는클래스 = 의존클래스 -> 간접 의존! } }
* 높은 결합도 낮은 응집도는 뭐야??
- 높은 결합도(high coupling)
- 하나의 계층이 다른 계층과 강하게 의존하거나 연결되어 있는 상태
- 어떤 계층의 변경이 다른 계층에도 영향을 주어 코드 수정이나 리팩토링 등이 어렵고 복잡해지는 상황
- 시스템의 유연성과 확장성을 떨어뜨리는 요인이 된다.
- 낮은 응집도(low cohesion)
- 하나의 계층 안에 포함된 구성 요소들이 서로 밀접하게 연결되어 있지 않다.
- 기능적인 연관성이 적고 코드가 이해하기 어렵고 유지보수가 어려운 상황
- 시스템의 이해도를 떨어뜨리고 변경사항을 반영하는 것이 어렵게 만든다.
'공부하기 > 아키텍처' 카테고리의 다른 글
[ Hexagonal Architecture ] 헥사고날 아키텍처 이해하기 (0) 2023.02.16