0. 들어가기 전에
안녕하세요. 2021년 12월에 입사한 플랫폼본부 코어뱅킹팀의 파이썬 백엔드 개발자 이경준입니다. 저는 입사 후 8퍼센트의 TIL 문화를 접하고, 이를 적극 활용하고자 했습니다. 덕분에 회사 업무 파악을 유연하게 할 수 있었죠.
제가 문제 해결 과정에서 어떤 점을 배웠고, 이를 기반으로 8퍼센트의 TIL문화를 어떻게 적극 활용했는지 소개하고자 이 글을 쓰게 되었습니다.
1. 8퍼센트의 TIL 문화(feat. 코드리뷰)
TIL은 Today I Learned 의 약자입니다. 한마디로 오늘 내가 배운 것을 뜻합니다. 만약 8퍼센트 플랫폼본부에 신규 입사하시게 되면, 직무와 경력에 상관없이 한 달 동안 회사 업무를 수행하는 과정에서 알게된 하나의 배움을 회사 내 TIL 채널에 공유하게 됩니다.
저 역시 플랫폼본부 내 코어뱅킹팀에 입사하게 되어, 기존의 코어뱅킹 시스템의 고도화 작업을 수행하는 업무(ex. 플랫폼 이용료, 세금, 수수료의 정산 주기 변경 등)를 수행하고 있습니다. 이 과정에서 기존의 시스템 형상 파악부터, 특정 기능의 소스코드, 도메인 지식을 습득하게 되었습니다.
최근에는 기존 Model 대신 새로운 Model에 데이터를 적재하는 업무를 수행했습니다. 해당 작업은 상용환경에 반영되기까지 다양한 피드백이 있었습니다.
처음에 작성한 코드(before)
for commission in get_commission(date):
commission = Commission(
deal_id=commission['deal'],
amount=commission['amount'],
)
commission.save()
코드 리뷰를 반영한 코드(after)
for commission in get_commission(date):
Commission.objects.create(
deal_id=commission['deal'],
amount=commission['amount'],
)
그 중 Queryset API의 .save
와 .create
에 사용 방식에 대한 review를 받게 되었습니다. 새로운 데이터를 INSERT
하는 과정에는 .create
를 사용하는 것이 적절하고, .save
를 사용해서 향후 사용되지 않을 변수를 생성하는 것이 적절하지 않다는 생각이 든다는 리뷰였습니다. (cf. 참고로 제가 재직하는 동안 제가 받은 코드리뷰의 내용의 성격은 다음과 같았습니다. 코드리뷰 문화 역시 제가 사랑하는 8퍼센트의 개발 문화입니다.)
- 공통으로 사용될 수 있는 부분인가? (향후 사용될 여지가 있는가?) – 안영님
- 코드의 응집도를 높일 수 있는 부분은 어떤 것일까? – 호성님
- 코드는 암묵적인 것보다 명시적인 것이 훨씬 좋다. – 민기님
- 서비스의 확장 가능성을 고려한 코드인가? – 재영님
- 코드 자체의 스타일이 간결한 성격을 지닌 것인가? – 호성님
- 데이터베이스에 부하를 미치지 않는 코드인가? – 안영님
- 유지보수가 하기 좋은 코드인가? – 호성님
- 네이밍 컨벤션이 다른 팀원이 보기에도 이해하기 쉬운가? – 재영님
- 의도하지 않은 버그가 발생할 여지가 있는가? – 호성님
리뷰를 확인하기 전에는, 저는 단순하게 .create
와 .save
의 역할을 동일하다고 생각했습니다. 하지만 리뷰 내용을 조금 더 꼼꼼히 확인하기 위해 Django
공식문서와 공식 소스코드 저장소를 확인 후 .create
호출 시에는 .save
와 달리 내부적으로 매개변수(force_insert)
를 True
로 설정한다는 사실과 해당 method들의 정확한 구현방식을 습득하게 되었습니다. 이 때 저는 8퍼센트의 TIL 문화를 적극 활용했습니다. 제가 배운 사실과 제 경험을 같은 팀원분들이 이해하기 쉽게 1차 가공을 한 뒤 공유를 했습니다.
보통 이것에 대해 걱정할 필요가 없습니다.그러나 모델에 사용자가 설정한 manual primary key value가 있고 해당 value가 데이터베이스에 이미 존재하는 경우, primary keys가 unique해야 하므로Integrity Error와 함께 craete() 호출이 실패합니다. manual primary keys를 사용하는 경우 예외를 처리할 수 있도록 준비해야 합니다.
.create
와 .save
()은 다릅니다.즉.create
와 .save
(force_insert =True)이 같습니다.더 나아가 해당 내용을 기반으로 추가적으로 공부해야하는 부분을 함께 정리할 수 있었습니다. 예를 들어, 1) .create
와 .save
는 force_insert
, force_update
라는 파라미터로 인해서 SQL Query문의 INSERT, UPDATE가 뭔지 정확하게 이해할 필요가 생겼고, 2) .create
와 .save
같이 기본적인 method 중 .update
는 .save
와 어떤 차이가 있는지 알아보게 되었고, 3) manual primary keys를 사용해서 데이터를 INSERT
하는 경우, Mysql
과 Postgresql
은 각각 어떤 방식으로 순차적인 primary key를 생성하는지 알아보게 되었습니다.
때로는 이러한 소스를 TIL 채널에 과거에 다른 팀원 분들이 올려준 자료를 참고하기도 합니다. 즉 TIL이 누적되면 누적될수록 플랫폼본부 내부의 자산으로 더욱 가치를 발휘할 수 있는 것 같습니다.
2. 8퍼센트의 TIL 문화의 가치
8퍼센트의 플랫폼본부에 입사하시는 분들은 TIL 문화를 진행하면서 자신이 겪은 어려움이나, 공부한 내용을 공유해줌으로써 더욱 활발한 공유의 장을 만들 수 있습니다. 다른 팀원 분들이 내용을 살펴보고 관련 경험을 공유해주시기도 하고, 코멘트를 달아주시기 때문입니다. 이를 통해 플랫폼본부에 융화될수 있고, 빠르게 회사에 적응할 수 있습니다.
TIL이라는 말에는 ‘나 혼자 오늘 배웠다’는 뜻이 내포되어 있었지만, TIL을 통해서 8퍼센트 팀원들은 TWL – Today We Learned(오늘 우리가 배웠다)을 실현하고 있고, 앞으로도 계속될 예정입니다.
글 이경준
8퍼센트 플랫폼본부 채용 정보가 궁금하다면?