코드없는 개발이야기 #8
존재의 가치는 사물(object)이 아닌 사건(event)에서부터 나온다.
인과율에 기인한 이야기다. 모든 일이나 행동이 반드시 모종의 이유나 원인, 즉 '인과'가 있기에 발생하며 그런만큼 아무런 인과 없이 생기는 일은 있을 수 없다는 사고방식이다. 불교의 주요 사상 중 하나이다.
개발에서도 그렇다. 객체지향개발에선 객체가 있고 객체는 상태가 있다. 객체에게 메시지를 전달할때마다, 객체의 상태가 바뀌게 된다. 주로 이 상태를 데이터 베이스에 저장한 후 비즈니스를 운영한다.
그러다보면 어느순간 객체의 상태가 걷잡을 수 없이 다양해지는 시점이 온다. 그 즈음이면 상태들이 상호배타적이지 않고, 여러 중복된 의미의 상태를 나타낼 가능성이 높다. 개발자들은 이런 상태가 많은 객체를 수정하려할 때 큰 스트레스를 받게된다.
다르게 생각해보자. 객체의 상태는 하나의 결과지표라고도 볼 수 있다. 결과 지표에는 ‘왜’가 빠져있기 마련이다. 상태는 늘 현상만 나타내기때문에 어쩌다 이 상태로 변경 되었는지, 객체의 상태만 놓고 보기엔 다소 무리가 있다.
헌데 비즈니스에선 주로 객체의 최종 상태가 아닌, 상태가 바뀌게된 이유들이 관심사일 가능성이 높다. 그러다보니 비즈니스에서 필요한 여러 상태를 나타내기 위해 상태가 점점 늘어나고 중복되는 것이다.
이벤트 주도 개발에서 이를 해결해준다. 객체의 상태가 변경될때마다, 어떤 일이 발생했는지 사건을 발생시키는 것이다.
객체로부터 발생한 여러 이벤트들을 차례대로 따라가다보면 자연스레 객체의 최종 상태만으로 해결할 수 없던 여러가지 비즈니스 문제들을 해결할 수 있게 되는것이다.
(한편으로 켜켜이 쌓인 이벤트들을 특정 구간까지만 확인하여 비즈니스의 특정 시점을 스냅샷으로 볼 수도 있는데, 이를 이벤트 리플레이 기법이라한다. 더 궁금하면 이벤트 소싱 패턴을 참고하면 좋다.)
다시말해 객체만으로 해결할 수 없던 것이 인과율에따라 연관된 사건을 함께 봤을 때, 다양한 문제를 해결하게 해준다.
개발세상에서 의미가 있다는것은 비즈니스에서 해결하고자 하는 문제가 있고 그 문제가 사용자들에게 가치로 전달되는 것이다.
존재의 가치는 사물(object)이 아닌 사건(event)에서부터 나온다.