MongoDB에서 Postgres로

이것은 무엇에 관한 것인가?

회사에서 채용 인터뷰를 보는 동안 다음 질문에 답해 달라는 요청을 받았습니다: 가장 어려웠던 문제를 설명해 주시겠습니까? 요약하자면, 제가 해결한 가장 어려운 문제는 eBay에서 일하던 동안 발생했으며, 2023년 동안 eBay의 대형 내부 프로젝트 중 하나를 MongoDB에서 Postgres로 마이그레이션한 일이었습니다. 그러나 이 질문은 제가 이 어려운 문제를 어떻게 해결했는지에 대해 깊이 생각하게 만들었고 제 개발자 여정을 되돌아보게 했습니다. 그래서 저는 그 질문에 대해 매우 상세하고 철저한 답변을 작성했고, 제 웹사이트에 그 답변을 공유하고 싶었습니다.

질문은 무엇이었나?

가장 어려운 문제를 설명해 주시겠습니까? 응답은 4단락 미만으로 작성하여 다음을 알려주십시오:

  1. 당신이 한 일
  2. 무엇이 그것을 어렵게 만들었는가
  3. 이 경험에서 무엇을 배웠는가
  4. 그 결과 어떻게 성장했는가

제 답변은 무엇이었나?

1 - 당신이 한 일

현재 제 경력에서 제가 해결한 가장 어려운 문제는 eBay에서 현재 직책으로 근무할 때 발생했습니다. 저는 현재 Hitachi Vantara를 통해 계약되어 eBay에서 근무하며 Storage Management System 또는 STMS라는 내부 도구를 개발 및 유지보수하고 있습니다. STMS는 eBay의 Service & Storage Infrastructure(SSI) 팀이 eBay의 데이터 센터 전반에 걸친 장비를 모니터링하고 관리하는 데 사용하는 도구입니다. STMS는 엔지니어가 수많은 어레이, 스위치, 호스트, 디스크 그룹, 클러스터 및 데이터베이스의 메트릭을 모니터링할 수 있게 해줍니다. 또한 스위치 및 어레이에 대한 알림을 처리하고 엔지니어가 호스트 할당과 같은 고급 작업을 쉽게 수행할 수 있도록 합니다. STMS는 분당 150만 개 이상의 메트릭을 수집하며, eBay의 데이터 센터 전반에 걸친 수십/수백 대의 어레이, 스위치, 호스트, 디스크 그룹 및 클러스터를 차지합니다. 이는 SSI 팀이 eBay의 스토리지 인프라를 모니터링하고 관리하는 데 중요한 도구로, eBay의 핵심 서비스와 비즈니스 모델에 필수적입니다. 이러한 모든 점을 고려할 때, 제가 eBay에서 근무하는 동안 해결해야 했던 가장 어려운 문제는 STMS를 MongoDB 데이터베이스에서 Postgres 데이터베이스로 마이그레이션하는 일이었습니다.

2 - 무엇이 그것을 어렵게 만들었는가

이 문제를 어렵게 만든 것은 MongoDB와 Postgres가 근본적으로 다른 데이터베이스라는 점이었습니다. MongoDB는 문서 기반 데이터베이스(NoSQL)로, 데이터가 컬렉션 내의 JSON으로 저장됩니다(파일 캐비닛의 문서와 유사). 반면 Postgres는 관계형 데이터베이스(SQL)로, 데이터가 테이블의 행으로 저장됩니다(스프레드시트처럼). 또한 STMS의 전체 백엔드는 데이터를 JSON으로 처리하고 관리하도록 구축되었으며 데이터베이스 작업을 위해 MongoDB와만 호환되는 패키지들을 독점적으로 사용하고 있었습니다. 또한 이 마이그레이션을 진행할 때 중단 시간이 없어야 했고 STMS가 내부 도구로서 얼마나 중요한지 때문에 거의 모든 기능이 계속 작동해야 했습니다. 이 전체 마이그레이션은 몇 달 안에 완료되어야 했고, 중단 시간 없이 수행되어야 했으며 실행 계획도 명확하지 않았습니다. 저는 이전에 Postgres에 대한 경험이 많지 않았고, 저를 포함한 모든 동료들도 NoSQL에서 SQL 데이터베이스로 대규모 레거시 코드베이스를 마이그레이션한 경험이 없었습니다.

3 - 이 경험에서 무엇을 배웠는가

STMS의 MongoDB에서 Postgres로의 코드 마이그레이션은 거의 모든 기능과 기능성을 유지하면서 중단 시간 없이 성공적으로 완료되었습니다. 이를 위해 광범위한 조사, 학습, 테스트 및 문제 해결이 필요했습니다. 저는 관계형 데이터베이스와 더 효과적으로 작동하도록 데이터 구조를 재구성했고 Postgres와 통합되지 않는 의존 패키지를 대체할 새 패키지를 개발했습니다. 전반적으로 마이그레이션은 원활하게 진행되었고 실질적인 결함 없이 제 기대를 넘어섰습니다. 이 과정에서 저는 많은 것을 배웠습니다. 기술적으로는 Postgres, SQL, 파서 트리, ORM, Sequelize, Prisma, 쿼리 빌더, 동등성 검사, 프라이머리-스탠바이 데이터베이스 설정 및 데이터베이스 관련 단위 테스트에 대해 더 잘 이해하게 되었습니다. 근본적으로는 복잡한 문제를 더 작은 부분으로 효과적으로 분해하고 그 부분들에 대한 효과적인 솔루션을 구현하는 방법을 배웠습니다. 또한 저는 리더로서 많은 제약, 좌절 및 미지수에 직면하면서도 이 프로젝트를 결론까지 이끄는 방법을 배웠습니다.

4 - 그 결과 어떻게 성장했는가

학부 시절 저는 로보틱스 분야에서 경력을 시작했지만 eBay에서 직장을 얻으면서 웹 개발로 방향을 전환했고, 이전에 경험이 없는 분야에 진입했습니다. 이 전환은 끊임없는 학습과 적응성으로 특징지어지는 경력의 기초를 마련해 주었습니다. STMS를 MongoDB에서 Postgres로 마이그레이션하는 도전은 제 경력에서 상당한 도약이었고 제 전문적 성장에 크게 기여했습니다. 단순히 데이터베이스에 대한 이해를 깊게 하거나 문제 해결 능력을 향상시키는 것 이상의 의미가 있었습니다. 이 프로젝트는 저를 새로운 영역으로 밀어 넣었고 세심한 계획과 무중단에 대한 약속을 요구했습니다. 대규모 데이터베이스 전환에 대한 이전 경험 없이 마이그레이션을 이끌면서 저는 명확한 소통, 팀워크 및 복잡한 과제를 관리 가능한 부분으로 나누는 것의 가치를 배웠습니다. 이 경험은 기술적 능력을 확장시켰을 뿐만 아니라 자신감을 높여 보다 야심찬 목표와 프로젝트에 더 나아가도록 했습니다. 이 경력의 이정표는 개발자이자 리더로서, 또한 문제 해결사로서의 저의 성장을 보여주었으며, 미지의 것을 수용하고 성공하는 것이 개인적·직업적 발전의 핵심임을 입증했습니다.

결론은 무엇인가?

제 답변은 그 회사를 향한 인터뷰의 두 번째 단계로 저를 진출시켰고, 팀의 개발자 중 한 명과 기분 좋은 대화를 나눌 수 있게 해 주었습니다. 주로 이 과제는 eBay에서 근무하는 동안 제 경력에서 해결한 가장 도전적인 기술 문제를 되돌아보게 해 주었습니다. 그것은 제가 개발자/엔지니어로서 어떻게 성장했는지 생각하게 했고, 새로운 기술을 개발하게 했으며 복잡한 문제에 적응하고 해결할 수 있다는 자신감을 높여 주었습니다.