리액트(React) 오픈소스 기여, 생각보다 쉽다!

by DD
3개월 전
조회수 6

리액트(React) 기반 라이브러리인 react-simplikit 공식 문서의 예시 코드에서 타입 오류(Type Error)를 발견하고 개선을 시도함

NodeJS.Timeout 타입 사용으로 인해 브라우저 환경에서 타입 에러 발생 가능성을 지적하고, setTimeout 반환값(Return Value)을 활용하는 방식으로 변경

불필요한 ref 제거 및 지역 변수(Local Variable)로 timeoutId를 관리하여 코드 간결성(Code Simplicity)을 확보

깃허브(GitHub) 레포지토리 포크(Fork) 및 PR(Pull Request) 생성, 코드 리뷰(Code Review)를 거쳐 오픈소스 기여(Open Source Contribution) 성공

타입스크립트(TypeScript) 환경에서의 타입 안전성 확보

본문에서 지적한 NodeJS.Timeout 타입 문제는 타입스크립트(TypeScript) 환경에서 흔히 발생할 수 있는 문제이다. 브라우저 환경과 Node.js 환경의 타입 정의가 다르기 때문이다.

해결책: setTimeout의 반환값(Return Value)인 number 타입을 사용하거나, 타입 정의(Type Definition)를 명확히 분리

장점: 불필요한 타입 에러(Type Error)를 방지하고, 코드의 이식성(Portability) 및 유지보수성(Maintainability) 향상

추가 팁: 타입스크립트(TypeScript) 설정 파일(tsconfig.json)에서 `lib` 옵션을 적절히 설정하여 브라우저 환경에 맞는 타입을 사용할 수 있도록 한다.

리액트(React) 컴포넌트 리팩토링(Refactoring) 전략

글에서 제시된 ref 제거 및 지역 변수(Local Variable) 사용은 리액트(React) 컴포넌트상태 관리(State Management) 및 생명주기(Lifecycle) 관리를 단순화하는 좋은 예시이다.

불필요한 ref 사용 지양: useEffect의 cleanup 함수에서 clearTimeout을 호출하는 경우, ref 대신 지역 변수를 사용하는 것이 더 직관적

장점: 코드 가독성(Code Readability) 향상, 메모리 누수(Memory Leak) 방지 및 컴포넌트의 단일 책임 원칙(Single Responsibility Principle) 준수

추가 고려 사항: 복잡한 로직(Logic)을 다루는 경우, 커스텀 훅(Custom Hook)으로 분리하여 코드 재사용성(Code Reusability)을 높일 수 있다.

오픈소스 기여(Open Source Contribution) 과정 상세 분석

저자는 react-simplikit 라이브러리 문서 수정에 기여하며, 오픈소스 기여의 전반적인 과정을 상세히 설명한다. 기여 가이드(Contribution Guide) 숙지는 필수적인 절차이다.

레포지토리(Repository) 탐색: 깃허브(GitHub)에서 해당 프로젝트의 레포지토리(Repository)를 찾아 포크(Fork) 및 클론(Clone)

브랜치(Branch) 생성: 수정 사항에 맞는 브랜치(Branch)를 생성하고, 커밋(Commit) 메시지를 명확하게 작성

PR(Pull Request) 생성: 코드 리뷰(Code Review)를 요청하고, 피드백을 반영하여 최종적으로 머지(Merge)

오픈소스 기여는 코드 품질 향상(Code Quality Improvement)뿐만 아니라, 개발자 커뮤니티(Developer Community) 참여의 기회를 제공한다.

오픈소스 기여 시 커밋(Commit) 메시지 작성 가이드

저자는 커밋(Commit) 메시지를 영어로 작성했는데, 이는 오픈소스 프로젝트에서 일반적인 관행이다. 명확하고 일관성 있는 커밋 메시지는 코드의 이해도(Code Comprehension)를 높이고, 협업 효율성(Collaboration Efficiency)을 향상시킨다.

커밋 메시지 형식: 제목(Subject)과 본문(Body)으로 구분하고, 제목은 간결하게, 본문은 상세하게 작성

커밋 메시지 예시: `feat: Add new feature` 또는 `fix: Resolve issue #123`와 같이 커밋의 목적(Purpose)을 명확히 표현

추가 팁: 커밋 메시지 컨벤션(Commit Message Convention)을 준수하면, 자동화된 도구(Automated Tool)를 활용하여 코드 품질을 관리할 수 있다.

오픈소스 기여, 생각보다 어렵지 않다