ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Layered Architecture ] 레이어드 아키텍처 이해하기
    공부하기/아키텍처 2023. 2. 16. 17:55

    레이어드 아키텍처는 소프트웨어 아키텍처의 일종으로, 각 계층(layer)을 엄격하게 분리하여 구성하는 아키텍처 스타일입니다. 이 아키텍처에서 *각 계층은 서로 직접적인 의존성을 가지지 않으며, *높은 결합도와 낮은 응집도를 갖는 것을 지양합니다.

    일반적으로 레이어드 아키텍처는 다음과 같은 세 가지 계층으로 구성됩니다.

    1. 프레젠테이션 계층(Presentation Layer): 사용자 인터페이스를 담당하는 계층으로, 사용자의 요청을 받아 처리하고 응답을 반환합니다. 주로 웹 어플리케이션에서 브라우저나 모바일 앱과 같은 클라이언트와 상호작용하는 부분입니다.
    2. 애플리케이션 계층(Application Layer): 비즈니스 로직을 처리하는 계층으로, 사용자 요청을 받아 해당 요청에 대한 작업을 수행하고 데이터를 처리합니다.
    3. 데이터 액세스 계층(Data Access Layer): 데이터베이스와 같은 영속성 저장소와 연결되어 데이터를 읽고 쓰는 역할을 수행합니다.

     

    예) 로그인 요청 그림으로 이해하기

     

    1. 유저: '컨트롤러야 나 로그인하고 싶어 ~ 이게 내 정보야' 라고 요청
    2. 컨트롤러: '알겠어 잠시만 기다려줘, service야 이 사람이 로그인하고 싶다는데 확인좀 해줄래?'라고 유저 정보를 서비스에 전달
    3. 서비스: '알겠어 repository야 유저 데이터좀 확인해줄래?'라고 repository에 유저 정보를 전달
    4. 레파지토리는 DB에서 요청 유저의 정보를 찾아본다.
    5. DB는 찾아본 유저 정보의 결과를 repository에 전달한다.
    6. 레파지토리: '서비스야 너가 부탁한 결과야 자 받아!'라고 서비스에게 DB에서 찾아본 유저 정보를 전달한다.
    7. 서비스는 전달받은 유저 데이터를 통해 유저 요청 데이터와 저장되어 있는 유저 데이터를 비교한 후 결과를 컨트롤러에 전달한다.
    8. 컨트롤러는 서비스에서 전달받은 로그인 성공 여부를 유저에게 전달한다.

     

    레이어드 아키텍처의 장단점

    • 레이어드 아키텍처의 장점
      • 계층 간의 분리로 인해 유지보수성이 높다
      • 각 계층을 독립적으로 개발하고 테스트할 수 있다
      • 각 계층의 역할이 분명하게 나뉘어져 있어 코드의 가독성이 높다
      •  대규모 어플리케이션에서 확장성이 좋다는 장점이 있다
    • 레이어드 아키텍처의 단점
      • 계층의 분리로 인해 중복된 코드가 발생할 수 있다
      • 성능 문제가 발생할 가능성이 있다
      • 계층 간의 의존성을 최소화하는 것이 목적이기 때문에, 특정 기능이 여러 계층에 걸쳐서 구현되어야 하는 경우 유지보수성이 낮아질 수 있다.

    * 직접적인 의존성?? 무슨 말이야??

    어떤 객체가 협력하기 위해 다른 객체를 필요로 할때 두 객체 사이에 의존성이 존재하게 된다.

    • 직접 의존성: 한 요소가 다른 요소에 직접 의존하는 경우를 가리킨다.
    • 간접 의존성: 직접적인 관계는 존재하지 않지만 의존성 전이에 의해 영향이 전파되는 경우를 가리킨다.
    class 직접의존 {
    	private 의존하는클래스 = new 의존하는클래스(); -> 직접 의존!
        ...
     }
     
     class 간접의존 {
     	private 의존하는클래스
        
        constructor(의존클래스) {
        	this.의존하는클래스 = 의존클래스 -> 간접 의존!
        }
    }

     

    * 높은 결합도 낮은 응집도는 뭐야??

     

    • 높은 결합도(high coupling)
      • 하나의 계층이 다른 계층과 강하게 의존하거나 연결되어 있는 상태
      • 어떤 계층의 변경이 다른 계층에도 영향을 주어 코드 수정이나 리팩토링 등이 어렵고 복잡해지는 상황
      • 시스템의 유연성과 확장성을 떨어뜨리는 요인이 된다.
    • 낮은 응집도(low cohesion)
      • 하나의 계층 안에 포함된 구성 요소들이 서로 밀접하게 연결되어 있지 않다.
      • 기능적인 연관성이 적고 코드가 이해하기 어렵고 유지보수가 어려운 상황
      • 시스템의 이해도를 떨어뜨리고 변경사항을 반영하는 것이 어렵게 만든다.
Designed by Tistory.