티스토리 뷰

코드 리팩토링

Humble Object Pattern

lkh's 2020. 7. 19. 14:41

오늘은 리팩토팅 작업을 수행하면서 적용했던 디자인 패턴 하나를 소개하려고 한다. 

아래는 리팩토링 이전에 데이터를 화면에 노출하기 위한 간단한 방식을 설명하고 있다.

1. 서버에서 화면 노출에 필요한 데이터를 프론트에 전달

2. 프론트에서는 전달받은 데이터를 가지고 Handlebar를 통해 데이터를 노출

    그러나, 특정 데이터에 대해서는 Handlebar에서 Helper를 통해서 조건문과 특정 로직을 통해 데이터를 노출하는 것을 제어

3. 또는, JSP이기 때문에 JSTL 이용해서 여러 조건과 로직을 통해 데이터 노출하는 것을 제어


위에 설명만 듣고서는 이해가 되지 않을 수 있다. 간단한 예를들자면, 화면에서 쿠폰의 아이콘을 표시하기 위해서 프론트에서 아래와 같이 2단계를 거친다.


  1. 서버에서 전달받은 쿠폰 데이터를 확인해서 발행 가능한 쿠폰인지 확인

  2. 서버에서 전달받은 쿠폰 데이터를 확인해서 아이콘 이름을 확인

  3. 서버에서 전달받은 쿠폰 데이터를 확인해서 해당 쿠폰이 마지막 쿠폰인지 확인하고, 마지막 쿠폰이면 아이콘 미노출

아이콘 하나 노출하는데 프론트에서 위의 3단계를 수행하고 있다. 지금 간단한 설명을 들었을 때, 문제점이 무엇이 있을까?!

  1. 아이콘이 노출되지 않았을 때, 문제를 파악하기 위해 서버로직과 프론트 로직을 모두 확인하고, 추적하는데 쉽지가 않다.
    아이콘을 노출하기 위한 로직이 프론트와 서버 모두에 존재하기 때문에 로직 확인이 복잡함
  2. 위와 같은 스타일로 개발했을 때, 항상 실행을 해야만 데이터의 검증을 확인하 수 있다. 쉽게 말해서 테스트하기가 쉽지가 않다.

이제는 이런 불편함을 개선할 수 있는, 오늘의 핵심인 디자인 패턴을 하나 소개할 타이밍이다! [Humble Object Pattern] 

Humble Object Pattern 은 테스트하기 어려운 로직과 쉬운 로직을 분리하여 테스트하기 쉬운 구조로 개선하기 위한 디자인 패턴이다.

결국은 두개의 클래스로 나누는 간단한 내용이다. 그리고, 테스트하기 어려운 객체를 Humble Object라고 부른다.

위와 같은 상황에서도 Humble Object Pattern 적용할 수 있다. 여기서 테스트하기 쉬운 코드를 Presenter, 어려운 코드를 View 라고 부른다.


  1. View는 단지 화면에 노출하기 위한 데이터를 전달할 뿐, 다른 작업을 수행하지 않는다.

  2. Presenter는 화면에 노출하기 위한 데이터를 생성해서 View Model 이라는 객체에 전달한다.

이전에는 프론트에서 여러 조건문을 통해 처리했던 부분을 Presenter가 서버에서 처리하는 것이다. 그리고 프론트에서는 View Model 에서의 'boolean showCouponIcon' 이라는 필드를 통해서 쿠폰 아이콘의 노출유무를 확인하면 된다. 생각해보면 당연한 내용이다. 지금과 같이 변경을 했을 때는 이전의 문제점이 장점으로 바뀐다.

  1. 아이콘 노출의 로직들이 서버에서 처리하기 때문에 이슈 발생 시 로직 파악이 쉬움
  2. 아이콘 노출에 대한 테스트 가능
  3. 테스트 코드를 통해서 아이콘 노출에 대한 로직을 쉽게 파악 가능



위와 같은 구조로 개선을 했다. PresenterFactory가 View 이다. 단지 VIewModel을 전달하기 위한 목적만 수행할뿐, 별다른 비즈니스 로직이 없다.

그리고, 쿠폰뿐만 아니라 다양한 Presenter를 타입에 맞게 적절하게 호출하는 역할이 있다.


마지막으로 너무나도 당연하다고 생각할 수 있는데, 지금과 같은 구조로 개선하는 것은 엄청나게 쉽지는 않았다.

10년동안 운영되었던 서비스이기 때문에 구조를 개선하고, 코드를 리팩토링하고 개선하는 것이 쉽지가 않다. 그리고 어떻게 보면 굳이 잘 돌아가는 코드를 변경할 필요가 있을까?

라는 생각도 할 수 있다. 그리고 이 로직을 제외하고도 아직 개선해야할 부분이 굉장히 많다! 누가 시켜서 하느냐! 내가 좋아서 하지! 행복해! 행복해! 즐거워! 즐거워! 핳핳핳핳

그리고 링크에 있는 내용에도 Humble Object Pattern 에 대해서도 설명이 있는데, 굉장히 좋다! (https://github.com/msbaek/memo/blob/master/CC-E23-Mocking-Part2.md)


'코드 리팩토링' 카테고리의 다른 글

Chapter3. Claass  (0) 2020.02.08
Chapter2. Function (2)  (0) 2020.01.27
Chapter2. Function (1)  (0) 2020.01.26
Chapter1. 의미있는 변수 사용  (0) 2020.01.08
생성자의 인자가 많을 때 빌더 패턴  (0) 2019.01.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함