ETC

지속 성장 가능한 코드를 만들어가는 방법 (정리)

ch-yang 2022. 12. 30. 14:15

영상 링크 : https://www.youtube.com/watch?v=RVO02Z1dLF8&ab_channel=%ED%86%A0%EC%8A%A4

토스 페이먼츠

  • 코드 품질에 관심을 갖고 확장 가능한 방식으로 코드를 관리하고 있다.
  • 처음부터 최고의 설계나 품질을 유지하기 보다는, 최소 규칙을 지켜 동작하는 소프트웨어를 빠르게 만들고 코드에 관심을 두고 성장시켜 나간다.

Import 문을 통해 알아보는 세 가지 개선 방향

  • Package, Layer, Module

1. Package

  • 패키지 전략은 고정되지 않고 유연해야 한다.
  • 패키지는 현재 상황을 계속 점검하며, 전략에 따라 응집에 대해 유연하게 지켜야 한다.
    • 햄버거도 한 세트 주문할 때와 100 세트 주문할 때 포장 패키지가 달라질 것이다.
  • 너무 분산 되지 않도록 작성한다. (영상에서는 비슷한 개념끼리 패키지를 응집했다)
    • 같은 개념을 응집하니 Import 문이 많이 줄어든 것을 볼 수 있다.
  • 한 개념 (패키지)에 클래스가 너무 많다면 어떻게 해야 할까?
    • 개념의 범위가 너무 커진다면, 그 속에서 구체적인 개념화를 진행하면 된다.

2. Layer

토스 페이먼츠 표준 Layer 구조 및 규칙

  1. Layer는 위에서 아래로 순방향으로만 참조되어야 한다.
  2. Layer는 건너뛰지 않는다.
  3. 참조 역전 예시) 
    1.  프레젠테이션 로직 코드
    2. 비즈니스 로직 코드

1. 프레젠테이션 로직 코드 / 2. 비즈니스 로직 코드

  • 빨간색 비즈니스 로직 코드를 보면, 프레젠테이션 로직을 참조하고 있다.
  • Layer 참조 역류가 일어났다.
  • 참조 역전 수정)
    1. 수정한 프레젠테이션 로직 코드
    2. 수정한 비즈니스 로직 코드

1. 프레젠테이션 로직 코드 / 2. 비즈니스 로직 코드

  • 프레젠테이션 로직에서 비즈니스 로직으로 전달할 때 개념화된 클래스로 전달했다.
  • 또한 비즈니스 로직이 어떤 다른 개념에 의존적인지도 알 수 있다.
  • Layer의 잘못된 참조는 장기적으로 코드의 복잡도를 높이고 확장에 문제를 만든다.
  • 비즈니스 로직을 보면 Layer의 역류가 일어나지 않음을 알 수 있다.

3. Module

  • 토스 페이먼츠 표준 Module 구조
    1. 화살표 방향은 Gradle 구성에서 의존하는 방향을 의미
    2. Runtime 시에는 Runnable한 Module을 중심으로 의존성이 주입되어 실행된다.
    3. 회색 원은 외부 기능을 확장할 때, 새로운 모듈을 만들어 간다는 의미
  • 모듈 분리의 장점
    1. 기술을 격리할 수 있다.
    2. 각 모듈별로 테스트가 가능하다.
    3. 역할과 경계를 뚜렷하게 정의할 수 있다.
    4. 의존성 침투를 막을 수 있다.
      • 라이브러리에 대한 부분을 격리하여, 비즈니스 로직에서 특정 라이브러리에 대한 Import 자체를 막을 수 있다.
    5. 추후 라이브러리가 변경되더라도 비즈니스 로직에 영향 없이 작업할 수 있게 된다.
  •