━━━━ ◇ ━━━━
-/conf

[CONF] if(kakao)2020: 유한상태기계로 밀려드는 프로모션 감당하기

👀 유한상태기계로 밀려드는 프로모션 감당하기

카카오 개발팀이 유한상태기계를 사용해 프로모션을 서비스하는 방법을 알아본다

✔ 프로모션의 특징

프로모션은 고객을 유치하여 행동 유도를 하고 보상을 주는 일련의 과정을 말한다. 프로모션은 세가지의 큰 특징을 갖는데, 희소성, 한시성, 신속성이 그것이다.

  • 희소성: 고객들은 늘 새로운 자극을 원하므로 재사용이 어렵다.
  • 한시성: 프로모션은 한시적으로 이루어지는 이벤트와 비슷하므로 잠깐 쓰고 쓸모없어지게 된다.
  • 신속성: 프로모션은 보통 짧은 기간 내에 이루어지므로 신속하게 이루어져야 한다.

카카오 개발팀은 이러한 프로모션의 특징 속에서 변하는 부분을 부정하는것이 아니라 쉽게 변하는 프로그램을 만들고자 생각하던 중 유한상태기계를 떠올리게 된다

✔ 유한상태기계의 적용

유한상태기계는 Finite State Machine의 줄임말로, 어떠한 입력이 들어오면 입력에 따라서 정해진 유한한 상태로 변환하는 기계를 지칭하는 말이다.

유한상태기계는 무어머신과 밀리머신으로 나눌 수 있다.

  1. 무어머신: 출력이 현재의 상태에만 의존
    (문이 닫힌 상태, 문을 열어라) -> (문이 열리는 중, 모터를 작동해라) -> (문이 열린 상태, 모터를 멈춰라)
  2. 밀리머신: 출력이 현재의 상태와 입력에 의존, 이동하는 경로에서도 동작이 실행된다
    (문이 닫힌 상태, 문을 열어라) -> <모터를 작동해라> -> (문이 열린 상태)

카카오 개발팀에서는 행위를 단순화 시킬 수 있는 무어머신을 사용했다.
* FSM에 대해서 더 알아보고 싶다면 Spring FSM을 찾아보기를 권해주었다.

유한상태기계에는 기본적으로 State, Event, Transition, 그리고 Action이 존재한다. 개발팀에서는 다음과 같은 일련의 과정들을 통해 유한상태기계를 작동시켰다.

  • 사용자 로그인
    • Event를 HTTP 요청
    • 사용자의 지정된 State를 복원 (존재하지 않을 시 새롭게 생성)
      • Event를 이용해 State 전이
      • State의 Action 실행
      • Action이 Event를 리턴
      • Transition이 정의되어 있으면 State 전이
      • 일련의 과정 반복
    • 변경된 State를 저장
  • 변경된 State를 HTTP 응답

위와 같은 방법을 통해 프로그램을 통제가능하며 재사용 가능한 상태로 만들었고, State가 많아지는 단점이 있지만, 실수와 오작동을 현저하게 줄일 수 있었다고 말한다.

정리하자면, 유한상태기계를 사용함으로써

  • 흐름제어코딩을 따로 할 필요가 없어졌고,
  • DB 변경을 할 필요가 없어졌고,
  • 액션만 새롭게 개발하면 되게 되었다

물론 화면의 구성을 매번 달라지므로 여전히 어렵지만, 점진적으로 템플릿화 해 나가면서 더 쉽고 빠른 개발 환경을 만들고 있다고 한다.

👍 참고 사이트

  1. 유한상태기계로 밀려드는 프로모션 감당하기
  2. 유한 상태 기계 - 위키백과
COMMENT
1 2 3 4 5