될때까지

((SoC, Layered Pattern)) 관심사의 분리, 레이어드 패턴 본문

학습/개념정리

((SoC, Layered Pattern)) 관심사의 분리, 레이어드 패턴

랖니 2022. 9. 27. 17:44
728x90

🧚🏻‍♂️ 관심사의 분리

하나의 파일에 모든 코드를 다 작성하는 경우를 스파게티 코드라고 한다. 스파게티 코드의 단점은 하나의 기능만 수정해야하는데 다른 코드들이 연결되어 있어서 영향을 받을 가능성이 크다는 점이다. 코드가 많아지면 가독성이 떨어지는 것도 단점이다.

코드를 역할에 따라 파일을 분리하는 데, 주로 아래와 같은 기준으로 나눈다.

  1. HTTP Request/Response 처리
  2. Business Logic 처리
  3. Database 통신 처리

분리된 구조로 코드를 구현하면 코드의 가독성과 확장성이 높아진다. 또 파일에 작성된 코드들의 목적과 범위가 명확하기 때문에 구조를 파악하기에도 용이하다. 이렇게 주된 역할과 집중해야하는 기능을 분리해서 서로 다른 기능을 하는 파일은 신경쓰지 않도록 하는 것을 "Seperation Of Concern 관심사의 분리"라고 한다.

코드의 구조를 위처럼 체계적으로 효율적으로 구현하는 것을 코드의 아키텍처라고 하며 이러한 아키텍처를 적용하면 확장성, 재사용성, 유지 보수 가능성, 가독성, 테스트 가능성의 사유로 매우 중요하다.

 

🧚🏻‍♂️ Layered Pattern

레이어드 아키텍처의 핵심 요소는 '단방향 의존성과 관심사분리'다. 

  1. 단방향 의존성 : 각각의 레이어는 자기보다 하위에 있는 레이어에만 의존하고 있는 것을 뜻함
    ex) presentation layer는 business layer에만 의존하기 때문에
    presentation layer에서 persistence layer에 접근하는 일은 있어선 안된다.
  2. 관심사 분리(SOC) : 각 레이어 별 역할이 구분되어 있어서 역할의 중첩이 없음
    ex) business layer에는 데이터베이스 관련 로직이 없다.
    데이터베이스 처리를 위해서는 persistence layer의 코드를 호출해서 사용한다.

Presentation Layer

  • 시스템을 사용하는 클라이언트 시스템과 직접적으로 연결되는 부분
  • API 엔드포인트를 정의
  • HTTP Request를 읽어들이는 로직 구현
  • 실제 시스템이 구현하는 비즈니스 로직들은 다음 layer로 전달

Business Layer

  • 실제 시스템이 구현해야하는 비즈니스 로직들을 구현
    ex) 회원가입 시 비밀번호 8자를 넘는지 확인하기

Persistence Layer

  • 데이터베이스와 관련된 로직을 구현하는 부분
  • 데이터베이스에서 데이터를 CRUD하는 역할

레이어드 아키텍처 사용의 장점은?

  • 확장성 : 각 레이어가 서로 독립적이고 역할이 뚜렷하기 때문에 서로에게 끼치는 영향이 없으며 확장 및 수정이 쉽다.
  • 가독성 : 코드의 구조를 파악하기 쉽고 역할이 명확하기 때문에 가독성이 좋다.
  • 재사용성 : 다른 프레임워크를 사용한 엔드포인트에 사용이 가능하다.
  • 테스트 가능성 : 각 레이어를 테스트하는 코드도 레이어가 나뉜 것처럼 명확하게 나눌 수 있어서 테스트해보기 쉽다.
728x90