8퍼센트 프로덕트팀 2018년 워크숍 후기
2018년 가을에 다녀온 프로덕트팀의 4번째 워크숍 후기를 조금 늦게 쓴다. 프로덕트팀 워크숍은 지금까지(첫 번째, 두 번째) 자유주제로 전원 발표를 해왔다. 나름 각자의 관심사를 공유하고, 새로운 세상을 알게 되는 재미가 있었지만 이번에는 주제를 정해서 워크숍을 진행하기로 하였다. (사실 몇 달째 이 워크숍을 벼르고 있었다.)
앞으로 변화될 데이터베이스 구조에 대한 심도 있는 논의를 나눈다.
다르게 말해 보면 이 글의 제목처럼 "우리의 아름다운 데이터베이스를 찾아서"이다. 지금도 8퍼센트의 데이터베이스는 하루에 한 번꼴로 변경이 일어나고, 일주일에 한 번 꼴로 테이블이 추가되거나 사라진다. 하지만 그 변화가 늘 최선을 향해 나아가야 하는데 우리는 그것이 뭔지를 잘 모르는 상태였다. 그래서 "최선이란 무엇인가?"에 대한 이야기를 집중해서 나눠보고 방향성에 대한 공감대를 형성하고 싶었다.
우선 팀을 나눴다. 데이터엔지니어링을 담당하고 계신 광윤님, 막내 건령님과 내가 워크숍을 준비하고 나머지 분들께는 파트를 나눠서 설계를 맡겼다. 사업개발을 하시는 허성님과 디자이너 선영님도 예외는 아니었다. 사실 이 정도 레벨의 데이터베이스 설계에는 기술적인 것보다 비즈니스에 대한 이해가 더 중요하다. (물론 워크숍을 마칠 때 선영님은 다음 워크숍에서는 모두 UX 설계를 시키겠노라고 말씀하셨다.)
워크숍에는 발표와 토론이 위주가 되기 때문에 그전에 팀끼리 모여서 DB 설계를 미리 진행했다. 다음과 같은 가이드라인이 제공되었다.
각 테이블은 테이블명, FK, 핵심이 되는 필드 3개를 포함해야 한다.
구조가 동일하게 반복되는 것은 생략한다.
외부 데이터만을 담는 테이블 생략한다.
마이그레이션은 고민하지 않는다. (마이그레이션 생각하면 끝도 없고 답도 없다)
https://dbdiagram.io 에 결과물을 작성한다.
워크숍 장소는 회사에서 멀지 않고 저렴한 곳으로 정했다. 어차피 모여서 발표만 하는 것이니 큰 화면과 화이트 보드만 있으면 충분하다.
워크숍 날 아침이 되어 모두 워크숍 장소로 모였다. 다들 표정이 밝다. 역시 회사가 아닌 곳에서 만나면 다들 표정이 좋다. 발표 순서는 그곳에 있던 해적 뽑기로!
순서를 정하고, 크게 3단계로 나눠서 워크숍을 진행하였다.
첫 번째는 준비해온 데이터베이스 설계안을 소개하고 피드백을 받는다.
두 번째는 받은 피드백을 바탕으로 설계안을 수정한다.
세 번째는 수정된 설계안을 다시 소개한다.
데이터베이스 설계안을 공유하기 위해서는 그전에 설명해야 할 것이 많다. 현재의 비즈니스 구조, 앞으로의 비즈니스 변화의 방향, 고객의 사용 플로우, 데이터의 특성에 대해서 이야기해야 한다. 또한 왜 이렇게 현재의 구조가 만들어졌는지에 대한 히스토리도 필요하다.
연오님은 대출자가 상환하는 여러 가지 케이스를 FSM을 그려서 설명해 주셨다. 대출자는 정상, 단순 연체, 개인회생, 신용회복 등 다양한 상태가 가능하다. 상태별로 일부만 상환하는 경우 중도 상환하는 경우, 연체 후 상환하는 경우 등 다양한 이벤트들이 발생한다.
영민님은 대출신청 과정을 먼저 설명하고 이런 대출 신청 과정을 잘 담을 수 있는 구조를 설명해 주셨다. 창업 초기부터 지금까지 다양한 상품과 프로세스를 실험했기 때문에 상당히 더러운(!) 녀석이다. 앞으로 우리가 실험할 다양한 상품과 그에 대한 심사를 고려했을 때 어떤 구조가 좋은지를 설명해 주셨다.
발표를 하면서 질답이 이어졌다. 주로 실제로는 이런 상황이 발생될 수 있는데 이런 것들을 설계한 구조에서 어떻게 소화할 수 있는가? 에 대한 이야기다. 실제로 금융 서비스를 개발하다 보니 다들 데이터를 정확하고 적절하게 남기는 것에 대한 기준이 높아졌다는 것이 느껴졌다. (고생들을 많이 해서 그렇겠지...)
점심시간이 되어 피자를 먹으면서도 토론이 계속되었다. 사실 회사에서도 조금씩 이런 논의들이 이뤄지지만 논의의 결과가 잘 전파되지는 않는다. 미래에 대응하는 큰 그림은 역시 모여서 이야기를 나눠야 한다.
점심시간 후 투자/대출팀의 발표까지 마치고는 발표 때 받은 피드백을 팀별로 개선해 보는 시간을 가졌다.
나는 "깍두기"를 맡아서 이 팀 저 팀을 다니면서 주로 우리의 사업이 어떻게 변화될 것이고 우리의 프로덕트가 어떻게 대응이 되어야 하는가에 대한 이야기를 해주었다.
초기와 달리 지금 우리가 더 나은 DB 설계를 할 수 있는 이유는 그때는 몰랐던 여러 가지 지식들을 알고 있기 때문이다. 개인신용, 워크아웃이 어떻게 되는지와 같은 도메인 지식, 대출 신청 과정에서 어떤 예외가 발생할 수 있는지에 대한 경험, 키 값을 무엇으로 설정하는 것이 좋고 정보를 중복하는 것이 필요한 때에 대한 기술적인 지식 까지. 이런 부분들에 대한 지식의 범위와 깊이가 서로 다르기에 함께 모여서 이야기를 나누는 것이 더욱 의미가 있다.
개발자는 종종 이런 생각을 한다.
아오! 이거 내가 처음부터 다시 만들면 진짜 잘할 수 있는데
데이터베이스 설계를 할 때에도 마찬가지다.
아오! 서비스 처음부터 다시 시작하면 진짜 좋은 구조로 시작할 텐데
코드도 차근차근 리팩터링 해서 최선에 다가갈 수 있는 것처럼 데이터베이스도 조금씩 변경해 가면서 최선에 다가갈 수 있다. 물론 이번 워크숍에서는 그 험난하고 힘든 마이그레이션에 대해서는 일부러 제외하고 "진짜 좋은 구조"에 대해서만 이야기를 나눴으니, 참 재미있었다. (현실은...)
예정보다 팀별 논의 시간을 오래 가졌다. 사실 피드백을 받아서 변경안을 만드는 것이 잠깐 동안에 될 일은 아니다. 하지만 할 수 있는 범위까지 반영을 한 후 다시 돌아가며 발표를 했다. 이런 부분을 반영했고, 이런 부분은 문제점은 인식했지만 아직 결론은 내지 못했다는 이야기였다.
워크숍을 마치고 저녁을 먹으러 가기 전에 좋은 발표를 한 팀을 선정해서 시상을 하고 (내가 어딘가에서 받은 상품을 잘 사용했다. ㅎㅎ) 간단히 회고를 했다.
주로 자신이 맡는 부분 외의 다른 부분들에 대한 고민을 알게 되어서 좋았다는 이야기였다. 또한 "좋은 것"이라는 것이 무엇인가에 대해서 서로 이야기 나눌 수 있는 것이 좋았고 그 방향으로 차근차근 가보자는 각오도 함께 다지게 되었다.
특히 데이터베이스 설계는 대부분 경험이 있는 분들이 주로 하게 되기 때문에 주니어는 그 설계의 과정에 다가가지 못하는 경우들이 있다. 현실세계를 데이터베이스 테이블로 설계 해 내는 것에는 다양한 경험이 뒷받침되어야 한다. 이번 워크숍을 통해서 이런 노하우들이 잘 전달되었다면 더욱 의미 있는 자리였겠다.
워크숍의 공식 일정은 식사를 하면서 그동안 나누지 못했던 이야기들로 끝을 내었지만 사실 우리가 해야 할 일은 이제 시작이다. 며칠 뒤에 광윤님이 사람들이 설계한 것들을 짜 맞춰 주셨다.
이 아름다운 구조까지 언제 도달할 수 있을까 싶지만 우리가 가고 싶은 곳을 알게 되었으니 이제 차근차근 그곳을 향해 가야 하는 일만 남았다. 다들 파이팅!