시작
흉내만 낼 것인가?
스터디 시작 전 당시 어느 날 평소처럼 개발 결과물을 PR하고 리뷰를 기다렸다. 다양한 리뷰 중 내 마음에 불을 지핀 리뷰가 있었으니...
그렇다. 나는 Repository Pattern을 제대로 알지 않고 사용했다. 한편, 당시 팀에서 여러 고전적인 아키텍처를 기존 제품들에 적용하면서 관련 공부를 해야겠다고 느꼈다. 알고 행동하는 것과 모르고 흉내만 내는 것은 엄연히 다르지 않은가? 그러면서 예전에 추천받은 책 하나가 떠올랐다.
350쪽 남짓한 책으로 DDD, TDD, 이벤트 기반 서비스를 여러 가지 고전적인 아키텍처가 어떻게 지원하는지 Python 코드 예제와 함께 알려주는 책이다. 책을 읽는데 코드 리뷰를 하면서 궁금했던 점들이 점점 해소가 되는 기분이었다.
함께 자랄 사람?
책을 다 읽고 한 가지 생각이 들었다.
나처럼 지식에 목마름을 느꼈던 동료분들도 함께 하면 좋겠다.
그렇게 Slack으로 글을 공지했고 7명 인원이 함께하는 스터디가 시작되었다.
스터디 여정
우리가 정한 규칙
스터디는 매주 1회 시간과 장소를 정해서 1시간 30분 동안 진행했다. 매 회차 2개의 챕터를 진행했으며 챕터마다 호스트를 정했다. 호스트는 챕터에 대해 이야기하고 싶은 주제를 준비해서 스터디 활동 때 공개한다. 그리고 이를 참여자들과 공유하고 논의한다.
한편, 느슨한 스터디에 긴장감을 주기 위해(?) 우리는 재미있는 규칙을 더했다. 바로, 호스트가 챕터에 대한 퀴즈 2문제를 손수 제작하여서 한 챕터라도 모두 틀린 사람이 커피 사기!
스터디 내용
투명한 물에 잉크를 한 방울 떨어트렸을 때 잉크가 퍼지는 현상이 자연스러운 것처럼, 질서를 두지 않으면 소프트웨어 시스템도 혼돈 상태로 향하려는 경향이 있다.
예를 들어, 사용자에게 알림을 주는 웹 서버 기능을 만든다고 하면 API 핸들러 안에 도메인 지식이 있고 이메일을 보내고 로그를 남기는 것이다. 이렇게 되면 모든 요소가 다른 요소와 결합해 있어서 시스템의 일부를 바꾸기가 어렵다. 이 시스템을 큰 진흙 공(big ball of mud) 안티패턴이라고 말한다.
우리는 크게 2단계에 걸쳐서 무질서한 소프트웨어 시스템에 질서를 부여하는 방법을 공부했다. 간단하게 소개하면, 1부는 도메인 모델링을 지원하는 아키텍처 구축에 대해 다룬다. 도메인 모델링으로 간단하게 음미하고 이를 위한 저장소, 서비스 계층, 작업 단위 패턴을 맛보았다. 2부는 확장성 있는 시스템을 위해 1부에서 배운 기법을 활용해서 분산 시스템에 적용하는 방법을 다룬다. 도메인 이벤트, 메시지 버스, 핸들러 패턴을 맛보고 읽기와 쓰기 관심사 분리를 위한 CQRS를 거쳐 여러 어댑터에 의존성을 전달하기 위한 의존성 주입으로 마무리했다.
와우! 포인트
일반적으로 와우 포인트(Wow Point)는 고객이 프로덕트의 가치를 깨닫는 순간으로 일컫는다. 그만큼 놀라운 경험을 했다는 점인데, 개인적으로 스터디 활동을 통해서 와우 포인트를 느꼈었다.
스터디를 통해 여러 아키텍처 패턴에 대한 이해도가 팀 내부적으로 상승하게 되면서 한층 더 깊은 양질의 코드 리뷰와 논의가 이루어질 수 있게 되었다.
- 비즈니스 로직에 집중하기 위해 어떤 패턴을 도입할 수 있을지?
- DB 세션 객체를 인스턴스 화하는 곳을 어떤 계층에 두어야 해야 할지?
동료들과 스터디 여정을 마무리하며
어느 날 일정 주기마다 여러 DAQ로부터 수백 개의 센서 데이터를 수집하고 가공하는 작업을 어떻게 효율적으로 할 수 있을지 의견을 나누었다. 마치 자기 일인 것처럼 너도나도 의견을 주는 점에서 내 주변에 좋은 동료들이 있다는 점을 느꼈다.
서로 다른 환경에서 자라고 배우고 왔지만, 빅데이터 기반의 설비 유지관리 비즈니스를 풀고 싶다는 흥미와 열정으로 한곳에 모인 동료들이다. 동료들과 다음에는 어떤 문제를 풀기 위해 어떤 스터디를 할지 기대가 된다.
여담으로, 제목을 함께 자라기로 지은 이유는 우리의 스터디가 곧 함께 자라기로 이어지기 때문이다.
빅데이터 기반의 설비 유지관리 서비스로 세상을 혁신하고 싶은 분들은 주저하지 마시고 onepredict에 지원해주시길 바란다.
끝으로, 책 내용에 대한 동료들의 스터디 소감으로 글을 마무리한다. 😃
진흙 공을 이미 작성하고 있는 입장에서, 아키텍처 분리에 대한 좋은 가이드가 되었다.
― 김태훈 onepredict PdX-dev팀
평소 아무 생각 없이 적용하던 패턴들에 대해서, 왜 이런 패턴이 나왔는지, 어떤 게 효율적인지에 대해 알고 나니 조금 더 효율적으로 개발할 수 있을 거 같다.
― 김정형 onepredict PdX-dev팀
책에 있는 코드를 실질적으로 활용할 수 있을진 모르겠지만 큰 개념들이 잘 해설되어 있어 적용해 볼 수 있는 것들을 많이 배울 수 있는 책이었다.
― 김현우 onepredict PdX-dev팀
DDD를 도입하고 싶어요 (매우)
― 박기범 onepredict PdX-dev팀
어려운 책이었지만 스터디를 통해 반강제적으로(?) 다 읽을 수 있었다. 업무를 하면서 드는 의문도 책을 통해 해소하기도 하고 실무에서 참고하기 좋은 책이었다.
― 김아별 onepredict TD-BE팀
파이썬 언어답게, 동시에 좋은 아키텍처를 설계하기 위한 방법이 많이 녹여져 있어서 좋았다. 따로 공부했던 여러 기법을 좀 더 구체화하는 느낌.
― 장진수 onepredict TD-BE팀
- 출처는 전국노래자랑 KBS 14.08.24 방송이다.↩