[WHY 시리즈 1]E.011 — 순환 참조, OpenAPI, 업무 균형

Mijeong (Rachel)
Nov 3 · 7 min read

‘코드와 서비스 만들기를 좋아하는 소프트웨어 엔지니어’로 일하고 있다. 엔지니어는 문제를 해결하는 사람이다. 문제를 해결하는 과정에는 여러 가지 선택이 존재할 수 있다. 가능한 최선의 결과를 위해, 항상 내 선택의 Why에 답할 수 있는 사람이 되고자 한다. 매주, 한 주 동안 내가 결정한 선택의 Why에 대해 정리하고자 한다.

베트남에서 만들고 있는 프로덕트는 런칭 전 예측보다 더 높은 수치를 보이며 성장하고 있다. 그 과정에서 프로덕트팀도 운영팀도 해결해야 하고 개선해야 하는 수많은 문제를 갖고 있다. 동료도 늘어나고 업무도 늘어나는 상황 속에서 “나, 이건 참 잘 해낸 것 같아” 라는 만족감 보다는 “왜 이제서야 이걸 해결한 거지?” 하는 아쉬움이 더 많은 요즘이다. 많은 동료가 과도기를 겪고 있을 시점이지만 아쉬움에 머물러있어서 뭐가 좋겠는가. 앞으로 함께 더 잘해보자는 마음가짐으로 오랜만에 동료들과 해온 업무에 대해 WHY를 던져본다.


Why?

1. 순환 참조

우리 프로덕트는 사용자(User)에게 주문(Order)에 대한 추가 정보를 제공하기 위한 기능이 필요했다. 이 새로운 기능을 개발하고 테스트할 때는 특별한 문제가 발견되지 않았다. 하지만, 통합 테스트를 실행하니 주문(Order) 관련 기존 기능에서 오류가 발견되었다. 한동안 관련 로직에 대한 수정은 없었고 오류가 보고된 적도 없었기 때문에 당황했다. 동료들과 오류에 대해 논의한 후 순환 참조가 원인이라는 것을 발견했다. 순환 참조를 해결하기 위해 모듈의 참조 순서를 다양하게 변경해보기도 했지만, 근본적인 문제는 현재 모듈의 설계이지 않을까 의심했다.

  • Why? 참조 순서를 변경한 해결책은 또 다른 새로운 기능이 추가될 때 재발할 가능성을 방지하지 못했다. 사용자(User)와 주문(Order)은 우리 프로덕트의 핵심 서비스이고, 빈번하게 기능이 추가된다. 그때 마다, 순환 참조 해결을 위해 참조 순서를 변경해 나가는 것은 좋은 해결책이 아니라고 판단했다.
  • Why? 각 서비스의 역할에 대해 다시 고민한 후, 사용자(User)에게 추가 정보를 제공하는 것은 주문(Order)에 한정된 영역이 아니기 때문에 별도의 서비스로 분리할 수 있다고 판단했다. 즉 사용자에게 추가 정보를 제공하기 위해 사용자(User) 서비스에서 새로운 기능을 구현하는 대신, 별도의 서비스를 생성하니 자연스럽게 순환 참조가 제거되었다.

해당 문제를 계기로 우리 프로덕트에 존재하는 다양한 서비스들(User, Order, Merchant, Coupon 등)이 어떠한 참조 구조로 되어 있는지 점검할 수 있었다. 물론 앞으로는 동일한 문제가 발생하기 전 설계 단계에서 문제점을 발견할 수 있어야겠지만 말이다.

PR 코멘트에서 이렇게 놀기 있기없기.png

Note: ECMAScript 2015를 지원하는 Node.js를 기준으로 이야기함. 모듈의 평가(evaluation)은 최초 한 번만 이루어지며, ECMAScript에서는 존재하지 않는 속성을 참조할 때 오류를 반환한다.

2. OpenAPI 도입

프로덕트 런칭 전부터 런칭 후 초기까지 모바일 클라이언트 개발자와 서버 개발자는 이렇게 일했다. 필요한 API와 기본적인 스펙 및 인터페이스에 대해 함께 논의하고 문서에 기록한다. 서버는 해당 스펙을 기반으로 API를 개발하고, 동시에 모바일 클라이언트에서는 해당 스펙을 가정하고 개발을 진행한다. API 개발이 완료되면 Postman의 특정 Collection에 Request를 추가하고 develop 서버에 반영 후, 모바일 클라이언트 개발자에게 알린다. 하지만 최근, API 스펙을 OpenAPI 3.0으로 모두 이동하는 작업을 진행하고 있다.

  • Why? API가 의도대로 동작하는지 유연하게 확인할 수 있는 도구가 필요하다고 판단했다. API는 처음 개발되어 develop 서버에 반영된 이후에도 필요에 따라 변경될 가능성이 있다. 이때, API를 변경한 개발자가 Postman에 작성된 Request를 항상 동기화해야 하는데 이 부분을 놓치게 되면 모바일 클라이언트 개발자는 실제 구현된 API와는 다른 API 스펙을 Postman에서 확인하고 대혼란을 겪을 수 있다. 즉, 실제 구현된 API를 기반으로 스펙을 유연하게 확인해볼 수 있는 OpenAPI 3.0으로 도구를 이동하여 휴먼 에러를 줄이는 것으로 결정했다.

초반 4–5명의 개발자가 합을 맞추어 개발을 진행할 때는 문제를 인지하지 못했다. API 스펙을 논의해야 하는 기능도, 변경에 대해 커뮤니케이션해야 하는 대상도 한정적이었기에 기존의 방식이 비효율적이라고 생각하지 않았다. 하지만 개발자 동료만 10명이 넘어간 현시점에서는 API 스펙을 논의해야 하는 기능도, 커뮤니케이션이 필요한 대상도 너무나 다양해졌기에 기존의 방식이 매우 비효율적이라는 신호를 충분히 받았다. 그 신호는 명백하게도 개발자 간의 API 스펙 동기화가 계속해서 이루어지지 않았던 것이다 (개발이 한창 진행 중일 때에도 계속해서 각 개발자가 다른 스펙을 이야기한달까..). 조금 늦은 감이 없지 않아 있지만, OpenAPI 3.0으로 도구를 변경하는 작업을 진행하고 있다.

Note: Postman에서도 OpenAPI 3.0을 지원하고 있다.

3. 업무 균형

오랜만에 코딩 시간을 트래킹해주는 WakaTime 대시보드에 접속했다. 코딩 시간을 매일 확인한 것은 아니지만, 최근 업무시간(AM 09:00 — PM 05:30) 내에 코딩한 시간은 한 눈에 봐도 크게 줄어들었다. 물론 업무시간 외에 개발을 진행하면서 개발 욕구도 채우고, 업무가 지연되지 않도록 지내며 WakaTime의 총 코딩 시간을 유지하고 살고 있긴 하다. 플랫폼 팀의 리더로서 그리고 서버 엔지니어로서 업무 균형에 대해 참 많은 시행착오를 겪고 있는 요즘이다. 왜 나의 (업무시간 내) 코딩 시간은 이렇게 줄어들었을까?

  • Why? 플랫폼 팀의 엔지니어가 늘어났고, 팀 업무의 우선순위를 조정하는 일은 매우 높은 우선순위로 처리되어야 한다. 팀의 개인이 각자 생각하는 높은 우선순위의 업무가 다르다면 팀의 결과는 모이지 않고 좋은 성과로 이어지지 않을 것이다. 팀이 이번 주에 처리해야 하는 업무의 우선순위를 동기화하고, 팀원들과 해당 업무를 분배하고, 업무를 처리하기 위한 리소스를 측정하고 조율하는 일은 당연하게도 매우 중요하며 그 중요도만큼 나의 시간을 많이 할애하고 있다. (이 부분에서는 계속 시행착오를 겪고 있으며 참고할 만한 좋은 자료가 있다면 적극적으로 추천해 주시길.)
  • Why? 플랫폼 팀의 엔지니어가 늘어났고, 팀이 처리해야 하는 업무의 범위도 늘어났고, 다양한 이해관계자들과 요구사항에 대한 정리를 진행해야 한다. 동료들이 계속해서 늘어나고 있지만, 여전히 플랫폼 팀의 엔지니어는 한정적이다. 하지만 마케팅, 라이더, 머천트, 정산 등 각 오퍼레이션 팀의 요구사항을 리소스 부족을 핑계로 미룰 수는 없는 일이다. 여전히 각 팀의 요구사항을 최대한 수용하면서 가능한 효율적으로 일을 진행하기 위해 논의하는 일은 나에게 매우 중요한 일이다.

개발도 하면서 매니징 역할을 병행한 것은 분명 나의 선택이었다. 사람에게 관심이 많고, 함께 일을 잘 해내는 것에 관심이 많은 나의 욕심이 투영된 결과일 것이다. 사람에 대해 그리고 일을 하는 방법에 대해 다양한 시도를 진행 중이고 의미 있는 결과들을 수집하고 있다고 믿고 있다. 이 결과들이 충분히 수집되고 실제로 플랫폼 팀에 그리고 프로덕트 팀에 유의미한 결과를 가져왔을 때 좋은 회고 글로 돌아오기를 기대한다.


업무가 복잡해지고 많아지는 건 그래도 내가 컨트롤할 수 있는 문제라고 생각한다. 하지만 사람에 대한 고민은 언제나 어려웠고 지금도 역시 어렵다. 조이와 나누는 대화가 점점 사람에 대한 이야기가 많아지는 걸 보니 분명하다. 팀은 다양한 사람들이 함께 일을 잘 해내기 위해 모인 것이니 아마 이 고민은 끊이지 않을 것 같다.

내가 헬멧만 써도 즐거워하는 프로덕트 팀.png

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade