유한상태기계 (Finite state machine)
#1 상태변화
FSM은 이름부터가 멋있다.
어디다 쓸지도 모르고 그냥 멋있더라.
이게 쓸 일이 생기더라.
서비스를 오픈하면 이벤트 응모행사 같은 걸 결국 하게 되어 있다.
이벤트행사는 응모한 뒤에 당첨 상태가 되듯이 '상태'가 바뀌는 일이잖아?
(FSM ID, 고객 ID, 상태값)
이렇게 고객의 응모상태를 담을 테이블을 만들었지.
필요할 때 상태를 바꿔주면 되는 거야.
상태 다이어그램(plantuml) 각 노드는 상태(state)를 의미하고, 화살표는 전이(transition)를 의미해.
visited 상태에서 JOIN이 발생하면 joined상태로 전이되라는 설정인 거지. 근데 visited에서 시작하는 전이가 없는 VISIT이나 BUY이벤트는 발생해도 아무 일도 일어나지 않아.
FSM의 단순함 FSM은 상태가 전이될 때 함수도 함께 실행될 수 있거든. 이게 실용성을 강하게 해 줘.
이건 다음에 설명할게.
행사페이지는 고객의 상태에 맞는 화면을 보여주면 되는 거거든. Single Page App이랑 잘 맞아.
페이지내에서는 사용자의 행동에 따라 이벤트만 일으키면 되고, 그 뒤의 상태에 맞는 화면으로 업데이트를 하면 되니까.
현재상태에 맞는 페이지로 업데이트 위 예에서 JOIN은 사용자가 응모버튼을 누를 때 발생하는 것이고, BUY는 물건을 실제로 샀을 때 발생하는 거라고 할게.
결제담당팀 쪽에서 물건 구입 시 FSM 쪽으로
(고객 ID, "BUY")
의 데이터로 이벤트를 발생시켜 주면, 그 고객이 이미 응모를 해서 joined 상태였다면, bought 상태로 넘어갈 수 있는 거야. (모든 FSM ID에 대해 발생시켜도 돼. 안 맞으면 그냥 무시될 테니까)
FSM은 이렇게 이벤트로 다양한 시스템들과 쉽게 연동할 수 있고, 위에서 봤듯이 코딩대신 테이블로 표현할 수 있는 단순함이 강점이야.
다음에는 이 FSM을 프로그래밍 언어만큼 유연하게 쓰는 방법을 알려줄게.