R 패키지 개발의 희노애락

R Packages CRAN dlookr alookr

R 패키지를 개발하고 유지보수하는 패키지 관리자는 여러 이벤트에 접하게 됩니다. 즐겁고 보람있는 일도, 아쉽고 안타까운 일들도 접하게됩니다. 며칠 사이로 발생했던 그 이야기를 공유합니다.

유충현 https://choonghyunryu.github.io (한국알사용자회)
2022-05-26

들어가기

CRAN 패키지 관리자의 푸념
CRAN은 까다로운 관리 기준을 가지고 있기 때문에 유지보수가 어려우면 한없이 어려울 수 있습니다.
그러므로 방심하면 안됩니다. 언제 문제가 발생할 수 있습니다. 그러나 보람있는 일들이라 즐겁게 받아들입니다.

TL;DR

R 오픈소스 생태계에서의 협업

R 패키지 DESCRIPTION 파일을 보면, Depends, Imports, Suggests와 같은 태그를 볼 수 있습니다. 이것은 해당 패키지를 구현할 때, 대그에 기술된 패키지를 사용하였다는 의미입니다. 즉, 패키지의 종속성에 대한 설명입니다.

패키지들의 관계는 거미줄처럼 얽혀있어 네트워크 분석의 주제로 사용되기도 합니다.

이것은 광의적 관점에서의 협업입니다. 어찌 보면 그냥 가져다 사용하는 것 같지만 이 패키지의 생태계에서 보이지 않는 협력이 발생하기도 합니다.

dlookr에 대한 소식

패키지 개발 관리자 입장에서 즐거운 사건이 있었습니다.

dlookr 깃허브에서, tidyverse 패키지군의 하나인 dbplyr 패키지 개발자로부터 dlookr에 대한 Pull Request를 요청받았습니다.

Pull Request는 오픈소스로 공개 개발하고 있는 프로그램의 소스를 수정한 후, 프로그램 관리자에게 “내가 당신의 소스코드를 수정했으니 검토후 반영해주세요.”라는 행위입니다.

dbplyr 패키지는 dplyr 패키지의 백-엔트 패키지로 dplyr의 구문을 SQL로 변환한 후 DBMS의 Table에서 데이터를 질의하는 패키지입니다. 데이터 프레임이 아닌 DBMS의 테이블을 핸들링하는 것이지요. dlookr 패키지에서는 이 기능을 이용해서 DBMS의 테이블에 대해서도 데이터 진단(Diagnose Data)과 탐색적 데이터 분석(EDA)을 수행할 수 있습니다.

Pull Request 내용

다음 Pull Request 메시지를 정리해 봅니다.

이것은 중요한 시사점입니다. 보통 R 패키지의 기능이 변경되서 기존 버전처럼 작동되지 않을 경우에 패키지 관리자는 자신의 패키지를 사용하는 패키지의 관리자들에게 연락합니다.

“언제 기능이 변경된 패키지가 CRAN에 등록되니 기한내에 수정해서 CRAN에 제출하세요. 이런 저런 것들이 영향받습니다.”

일종의 통보지요. ’내 패키지가 변경되니, 내 패키지를 사용하는 당신은 수정해서 영향이 없도록 조치하세요.’라는 메일을 받게 됩니다. 저도 여러번 받아보았습니다.

그런데, 이번처럼 패키지의 개발자가 친절하게 문제가 되는 코드를 수정해서 Pull Request하는 경우는 제 경험상 이례적입니다.

그래서 dbplyr 깃허브 페이지에 방문하였고 다음과 같은 이슈화면을 발경하였습니다.

dbplyr 패키지의 관리자인 Hadley Wickham이 신규 버전을 CRAN에 등록하기 위한 체크리스트에 달린 스레드입니다.

정리하면 다음과 같습니다.

dlookr 패키지는 Hadley Wickham이 특별하게 챙겼다는 것이죠. 나름대로 Tidiverse 패키지 생태계에서 인정받고 있다는 것입니다. 기분 좋은 이벤트였습니다.

alookr에 대한 소식

alookr에게는 기분 좋지 않은 사건이 있었습니다. CRAN에서 삭제되었다가 다시 등록되는 일이 있었습니다.

사건의 원인과 처리 내용을 정리해 봅니다.

문제의 원인

CRAN에 패키지를 등록하기 위해서 만족해야할 기준은 갈수록 늘어나고, 까다로워지고 있습니다. 이전에는 정상적인 상태였지만 새로 만들어진 기준으로 인해서 문제있는 패키지가 될 수 있습니다.

alookr 패키지에서 불균형 데이터(unbalanced data)의 샘플링은 unbalanced 패키지의 몇 개 함수를 사용하고 있습니다. 그런데 이 unbalanced 패키지가 CRAN의 새로운 기준을 충족하지 못한 것 같습니다. 이를 수정하라는 CRAN의 메일이 전달되지 않고 반송되었고, CRAN은 2022-05-23까지 이 문제를 수정하라고 최후 통첩을 한 것입니다.

해당 패키지의 관리자와 그 패키지를 사용하는 관리자(세입자)에게,“너희끼리 알아서 이 문제를 해결하세요. 그렇지 않으면 방 빼!!!”라고, 내용증명을 보낸 것이죠.

문제의 발생

메일을 받은 것을 까맣게 잊고 있다가 방을 뺏겨 버렸습니다. CRAN에서 방을 뺏기면 패키지 홈페이지는 다음과 같이 바뀝니다. CRAN이라는 집주인은 냉혹합니다.

문제의 해결

결국은 다시 입주하기 위해서 집주인이 원하는 조건을 들어 주어야 합니다.

unbalanced 패키지는 마지막 수정일자가 7년이 넘었습니다. 관리자에게 메일이 전달되지 않으면 어찌할 수 없게 됩니다. 그래서 저는 alookr 패키지에서 unbalanced 패키지를 걷어내고 해당 기능을 대체했습니다. 결국에는 다시 Submit하여 현재는 CRAN에 입주한 상태입니다.

CRAN에 등록되더라도, 여러 운영체제의 R 패키지 버전이 빌드되기 까지는 며칠이 걸립니다. 아래 그림의 하단처럼 아직 빌드되지 않은 운영체제가 보입니다. “not available”라고 표시된 것이 아직 빌드되지 못한 운영체제의 버전입니다.

단상

R 뿐만 아니라 오픈소스 생태계에서는 사용자에게는 보이지 않지만 끊임없는 협업과 예기치 않은 문제들이 발생합니다. 대체적으로 확장되고 개선되는 방향으로 움직이지만, 관리가 되지 않고 시나브로 없어져버리는 프로그램도 많습니다. 그래도 여전히 우리는 생태계를 만들어가는 생산자와 사용자의 관계 속에서 오늘도 열매를 따 먹고 있습니다.

저는 사용자이자 생산자이기 때문에 생산자로서 내가 가꾸는 열매가 달고 영양가 있도록 좀 더 책임감을 갖고 임해야겠습니다. 그리고 사용자인 여러분들도 생산자에게 열매에 대한 피드백이나 맛이 없언 던 점 등을 전달해 주면 어떨까 합니다.

개선점이나 문제점을 깃헙 이슈에 올려 주시고, 필요하다면 개선된 코드를 Pull Request해 주면 좋겠습니다. 이럴 때 생산자들은 힘이 나거든요.

이 글을 마무리 하기 전에 dlookr 깃헙 페이지에 올라온 이슈를 공유하고 마무리 합니다. 그리고, 저는 주말에 이 이슈를 우선적으로 개선할 것입니다.

Citation

For attribution, please cite this work as

유충현 (2022, May 26). Dataholic: R 패키지 개발의 희노애락. Retrieved from https://choonghyunryu.github.io/2022-05-26-manage-packages.Rmd

BibTeX citation

@misc{유충현2022r,
  author = {유충현, },
  title = {Dataholic: R 패키지 개발의 희노애락},
  url = {https://choonghyunryu.github.io/2022-05-26-manage-packages.Rmd},
  year = {2022}
}