yorkie#1 - 다른 기여자를 위한 기여

pengooseDev·2025년 7월 31일
0
post-thumbnail

Yorkie team에서의 첫 달이다.
1년 동안 오픈소스 활동을 하며 만들어진 나의 철학.

나에게 기여란 PR의 merge뿐 아니라, 팀의 관점에서 그들의 cost를 줄여주는 모든 것들이다.

오픈소스에서 feature나 fix의 PR을 날리는 것은 멋진 경험이었다.

다만, 다른 기여자들이 쉽게 기여를 할 수 있는 환경과 분위기를 조성하고, 더 많은 사람들이 기여의 즐거움을 알도록 하는 것 또한 지속가능성의 기여이다.

그렇기에 예전엔 크게 매력을 느끼지 못했던 Docs를 작성하거나, test를 고치거나 ESLint의 에러를 고치는 등.
프로젝트를 안정화하고 개발 환경 설정의 난이도를 낮추는 것 또한 굉장히 가치있는 일이라고 생각한다.

Yorkie에서의 첫 달은 이것에 집중하기로 했다.


yorkie-js-sdk

#1016 ESLint Error 및 CI Test fail

issue#1016
issue#1023

PR#1023
PR#1027

1. 개요

  1. 해당 project는 최신 pnpm version을 요구하는 환경과 deprecated된 ESLint 버전을 동시에 사용하는 환경이다.
    또한, ESLint의존성이 root와 packages에 따로 존재하여, pnpm의 symlink로 참조되는 하위 패키지의 eslint plugin(@typescript-eslint)들을 적절히 load하지 못해 CI레벨의 참조 실패 warning이 예전부터 발생하였다.

해당 PR을 생성하기 전, 존재하던 CI warning(eslint 의존성 플러그인 참조 실패)
  1. CWD에 따라 서로 다른 ESLint rule(eslint-typescript 또는 로드 실패시 적용되는 fallback rule인 core rule)이 적용되던 현상이 있었다.
    이 문제를 해결하여 기여자들에게 동일한 개발 환경을 제공하고자 한다.
  2. .npmrc의 engine-strict를 사용하여 npm와 nodejs의 버전을 강제하지만, package.json에 pnpm에 버전이 누락되어 있어 pnpm의 버전을 강제하지 않고 있었다. 이러한 문제들을 수정하며 기여자들의 환경을 최대한 동기화 하고자 하였다.

2. Issue 생성 및 토의

직접 issue를 생성하고 바로 해결하는 것도 좋지만, 다른 기여자들이 참고할 수 있는 PR을 생성하고 이를 함께 토론하고 해결해 나아가는 과정은 너무 좋은 기억으로 남아있다.
이러한 과정은 다른 기여자들에게 기여의 첫 발을 내딛게 해주며, 꾸준한 기여로 이어질 수 있는 기회를 제공한다.

확인한 Error Flow

CWD에 따라 Array Contstructor 관련 에러가 발생하였다.
해당 공식문서를 찾아보니, @typescript-eslint에서는 이에 대한 에러를 반환하지 않지만, core rule에서는 에러를 반환하는 차이점을 알게 되었다.
이를 기반으로 @typescript-eslint 플러그인이 로드되지 않아 fallback rule인 core rule을 사용하는 것 아닌가 하는 추론으로 부터 문제를 디깅했고, 관련된 에러나 히스토리 문서들을 추적하기 시작했다.

결론은 아래와 같았다.

  1. root에 eslint가 설치되어있음.
  2. package/sdk에 플러그인들이 설치되어있음.
  3. pnpm i 이후, 하위 workspace에 eslint는 root에, plugin들은 하위 workspace에 존재.
    root에 존재하는 eslint가 plugin을 로드하기 위해 resolver가 돌아가는 과정에서 root의 node_modules를 참조하지만, 이는 하위 workspace에만 존재하고 cwd가 workspace더라도 eslint는 root에 존재(아마 예전 resolver라 symlink관련 파싱 로직이 추가되지 않은 채 deprecated 된 것으로 추론)
  4. 로드 에러
  5. (추론)@typescript-eslint가 정상적으로 override되지 않고 기본 ESLint rule만 사용(recommended의 core rule은 적용되는 것을 확인했기 때문에 최상단 또는 fallback rule로 recommended가 적용되었다고 생각합니다. 또는 IDE rule일 가능성도 존재)
  6. 환경별로 다를 ESLint rule이 적용됨.

이를 수정하는 PR을 날렸고, CI레벨에서 존재하는 ESLint warning 문제와 .npmrc를 사용함에도 engines prop에서 pnpm을 강제하지 않는 오류들을 함께 수정하였다.

결과

  • 모든 환경에서 동일한 ESLint Rule을 보장한다.
  • 모든 환경에서 공식문서에 기재된 pnpm 버전을 보장한다. 조건에 맞지 않을 경우 의존성 패키지 설치를 막고, 경고 메시지를 반환한다.
  • CWD에 따라 발생하던 차이가 있던 ESLint plugin로드 방식을 해결한다.
  • 기존에 검증하지 않던 .tsx 파일들의 ESLInt 에러를 해결한다.

#1020 Upstream package 변경에 따른 deprecated flag 변경

issue#1019
PR#1020

개요:

통합 테스트 진행 시 1332개의 test가 실패하는 것을 확인하였다.

문제점을 파악해보니, Upstream(yorkie) 패키지의 flag가 변경되었음을 확인하였다.

이를 해결해결하고, 다른 패키지들에도 동일한 문제점이 있다는 것을 발견하여 전체적으로 업데이트를 진행했다.


yorkie

#1389 AttachDocument의 예외처리에서 Schema version을 반환하지 않음

issue#1389

개요:

yorkie-js-sdk는 yorkie의 Spec을 그대로 추상화한다.

js-sdk의 test spec에 따르면 AttachDocument의 예외처리에서 Schema의 version을 반환해야 하며, Upstream package의 추상화 코드를 보더라도 이에 대한 추상화가 일부 이루어져 있는 것을 알 수 있다.

따라서, 추상화 누락이라고 판단하여 issue를 생성했다.

PR#1024이 이를 closed하였으나, 회귀 테스트에서 버전을 검증하지 아니하고, equal에서 include 메서드로 검증의 강도를 약하게 만든 변경사항이었다. 즉, 문제의 본질은 해결되지 않았다고 생각해, 관련 이슈를 논의하였다.

이에 대한 답변을 받을 수 있었다.

물론, Issue를 다시 생성하고, 이에 대한 추상화를 진행하는 것도 하나의 방법이 되겠지만 현재 단계에서 굳이 추상화 할 필요가 없는 기능이라는 것에 동의하였다. 추후에 이에 대한 업데이트가 이루어지면 js-sdk에서 version에 대한 테스트를 추가하고자 한다.


yorkie-team.github.io

#222 공식문서 CLI 업데이트

issue#222
PR#223

개요:

변경되어 사라진 CLI flag를 여전히 문서로 제공하고 있었다.
이를 수정한 PR


dashboard

#229 Upstream package 변경에 따른 deprecated flag 변경

issue#229
PR#233

개요:

Issue 생성 후, 다른 기여자를 위해 남겨둔 Issue.

sigmaith님이 PR을 제출하여 Issue를 close 해주셨다.


codepair

#496 docker-compose top-level version 삭제 및 Docker image 최신화

issue#495
PR#496

개요:

  • docker image 버전 최신화
  • Upstream CLI 변경
  • docker-compose의 deprecated된 top-level version 수정


다음 달부터는 CodePair의 Feature와 전체적인 회귀 테스트 보강에 신경써볼까 한다.

0개의 댓글