컨트리뷰션 활동을 진행하면서 있었던 나만의 “사연있는 코드”를 소개합니다.
Gallery

처음 발대식날부터 dataclasses 고치겠다고 말씀드리고, 끝나지 않는 버그의 덩굴을 타고 들어가면서 한달 내내 필요한 버그를 모두 고쳤습니다. 그런데 이제 준비가 끝났으니 dataclasses를 고쳐야지! 하고 들어가봤더니 이미 누가 해버렸다는거에요. 범인은 바로 멀리 있지 않은 같은 팀 지홍님이었습니다. 한달동안 씨름하면서 보스 다 잡아놨더니 막타만 치고 가는 지홍님 나빠요. https://github.com/RustPython/RustPython/issues/2623
[웃픈 코드] 사연 3

때는 8월 26일, Challenges 프로그램이 끝나갈 무렵이었습니다. 데브옵스 관련 PR을 끝내고 다음 이슈를 찾던 중, 멘토님께서 저에게 SQL의 CASE 구문을 구현하는 이슈를 주셨습니다. 당시 원래 진행하던 분이 계셨는데 잠시 중단한 상태였습니다. 나름 여러가지 PR을 1달동안 진행해본 터라 자신감 넘치는 타노스 짤을 쓰면서 그 이슈를 Get 해버렸습니다... 앞으로의 고단한 여정은 예상도 못한 채 말이죠. 9월 초 쯤에 간단한 문법들을 사용하여 기능 구현은 완료 했습니다. 그 때 당시에는 CASE 구문의 디테일을 잘 몰랐던 터라 간단한 테스트들은 통과했지만 결과값의 자료형 일치, 구문마다 evaluate 여부를 따지는 로직... 등등 더 신경 쓸게 많다는 것을 멘토님의 리뷰를 통해 알고 차차 코드를 고쳐나갔습니다. 또한 GlueSQL에서 아주아주 중요히 여기는 “no unwrap()”, “no clone()”, “no mutable” 의 엄격한 철칙들을 지키면서 코드를 고쳐나가다 보니 9월 말 즈음 정확히 기능은 같지만 코드는 크고 아름다운(?) 100줄 정도가 되어 있었습니다. 그 100 줄의 코드 속에는 Rust 언어의 다양한 함수형 프로그래밍 기법들, 소유권 개념을 잘 활용하여 deep copy 없이 쓰여진 구문들 등... 지금 다시보다 너무 감격스러운 코드였습니다. 그렇게 몇가지만 더 고치면 끝나가려던 찰나, Maintainer 이신 멘토님께서는 GlueSQL의 확장성을 위해 과감하게 다양한 API에서 Row 마다의 자료형 체크를 하지 않기로 결정하셨습니다. 그 말인 즉슨, 저에게는 다시 9월 초에 작성했던 코드(보다 심지어 덜 엄격하게)로 돌아가면 된다는 말이였습니다. 그렇게 기준을 맞춰서 다시 코드를 짜보니... 100줄이었던 것이 22줄이 되었습니다! 아까 제가 자랑했던 그 Rust의 다양한 아름다움을 보여주던 코드는 아쉽게도 다소 컴팩트하고 노멀하게 바뀌었죠. 이렇게 결국 Merge가 되기까지 약 1달 반이 걸렸습니다 ㅎㅎ
이슈: https://github.com/gluesql/gluesql/issues/140PR: https://github.com/gluesql/gluesql/pull/330
[웃픈 코드] 사연 4

dooboo-ui는 Context API를 통해 테마를 받아 사용하도록 되어있습니다. 그리고 이것은 ThemeProvider로 감싸져 있는 컴포넌트에서만 사용가능한데, 혹시 실수로 그렇게 하지않아 테마값을 받아오지 못하더라도 기본테마가 적용되도록 프로젝트 전반에 걸쳐 관련 코드가 존재했습니다.그런데 어느날 다른 멘티에게 도움을 주려고 간단한 예제를 Codesandbox로 만들었는데, 실수로 ThemeProvider를 사용하지 않았습니다. 이때 기본테마가 전달되지 않는다는 것을 발견했는데, 도저히 왜 그런지 이해할 수 없었습니다.결국 dooboo-ui가 사용하고 있는 emotion 라이브러리의 코드를 뜯어보기에 이르렀고, https://github.com/emotion-js/emotion/blob/d7d768e056e6cd7a10c2de6ecb2b564e6444dac3/packages/react/src/theming.js#L6이 부분 때문에 withTheme의 결과로 테마 기본값이 빈 객체 {} 가 들어갔고, 이것은 falsy한 값이 아니었기 때문에 default prop이 적용되지 않은 것이었습니다.
[삽질 코드] 사연3

지난 1학기에 학교에서 오픈소스 개론 수업을 들었어요. 선배님들이 이뤄놓은 오픈소스 생태계에 대해 배우니 선배님들의 공유 정신이 대단하다고 느껴지면서저런 대단한 사람들만이 오픈소스를 개발하고 기여한다고 생각했어요. 수업 막바지쯤 과제로 오픈소스를 사용해서 뭐든지 만들어 보라고 하셔서 유튜브에서 영화 리뷰 영상에 달린댓글을 수집하고 Keras를 이용하여 간단한 층을 쌓아 영화의 평점을 예측해보는 프록그램을 만들었어요. 정신없이 완성을 하고 나니 오픈소스에 관심이 조금 더 생겼어요.
그러던 중 학교 커뮤니티에서 오픈소스 컨트리뷰톤 모집 공고를 발견했어요! 관심있게 읽어 보았는데 마침 제가 오픈소스 수업에서 경험했던 NLP에 기여하는 팀이 있어서이건 나를 위한 거구나! 하고 바로 지원했죠. 합격하고 나서도 난 그냥 키보드만 투닥투닥 거릴 줄 아는 학부생에 불과한데 뭔가를 할 수 있을까 매일 고민했어요. 오픈소스 레포지토리에 이슈를 넣으면서 오픈소스에 적응하고 있는데 어느날 문득 뭔가 만들어보고싶다! 라는생각이 확 들었어요! 그러면서 제가 저번학기 수업에서 힘들게 Youtube에서 댓글을 크롤링했던게 생각났고제가 귀찮게 자료 찾아가면서 했던 작업을 다른 사람들은 좀 더 편하게 해줄 수 있으면 좋겠어서유튜브 텍스트 데이터 크롤링 라이브러리를 개발하기로 마음먹었습니다!
유튜브는 영상플랫폼 아니야? 라고 생각하시는 분들이 있을수도 있는데, 요즘 가장 많이 사용하는 플랫폼이니만큼 댓글, 제목, 자막, 더보기 등 정말 많은 정보들이 있고 위대한 유튜브 알고리즘 기반으로 관련된 영상을 모아서 가져올 수 있기 때문에 NLP를 연구하시는 분들에게 정말 좋은 소스가되더라고요. 만들겠다고 마음먹자 마자 댓글과 제목 밖에 크롤링 할 수 없던 코드를 자료를 찾아서 더보기란과 자막까지 가져올 수 있도록 추가했어요. 최대한 유튜브에 해가 되지 않는 방향으로 크롤링 하기위해 유튜브 공식 API를 사용하였는데 이 API가 할당량이 다 되면 멈추는 이슈가 있어서 사용자들이 좀 더 편하게 사용하도록 여러개의 API키를 입력하고 할당량이 끝나면 자동으로 바꿔주는 기능까지 추가했습니다. 가장 간단하고 간편하게를 모토로 라이브러리를 만드는데 문득 세부적인 부분까지 조정하길 원하는 사용자도 있을거라는 생각이 들었어요. 그래서 영상을 검색할때 영상의 관련 주제를 선택할 수 있는 파라미터를 추가하려 했는데이게 유튜브 공식 문서에 해당 파라미터는 있는데 예시를 제외하고는 없더라고요? 당황해서 미국, 영국 등 여러나라 공식 사이트에 들어가봐도 다 없었어서 만고의 구글링을 시작했고결국 러시아(잘 기억이 안나는데 러시아 같았어요..) 공식 유튜브 예전 버전에서 그 파라미터를 찾을 수 있었고 이때 뭔가 짜릿했습니다 ㅎㅎㅎ 크롤링 테스트를 완료하고 데이터 프레임의 형태로 변환해주었는데 이를 저장하는 과정에서 문제가 생겼어요. 전 최대한 코드 한줄로 모든걸 완성 시켜주고 싶어서 폴더 생성해서 파일을 저장까지 해주려고 했는데, 파일의 이름을 어떻게 해야할지 모르겠었어요. 본인이 검색했던 검색어로 파일을 만들면사 용자가 어떤 검색어로 검색했는지 몰라서 폴더명 제약에 걸려 오류가 뜰 수 있거든요.. 그렇다고 저장을 안하면 제가 처음에 생각했던(최대한 사용자가 편하게) 방향과는 조금 달라서 고민을 하다 결국 현재 시간을 기반으로 파일을 저장해주기로 했어요 ㅎㅎㅎ(혹시 이에대해 좋은 아이디어각 있으시면 이슈 남겨주세요!)
그렇게 많은 고민 끝에 코드를 완성하고 Pypi에 배포하여 pip install로 간편하게 설치까지 할 수있도록 설정하여 라이브러리 개발을 완료하였습니다. ㅎㅎㅎ 배포를 하고 pip install로 잘 설치되는 저의 라이브러리를 보니 너무 뿌듯했어요. 불과 몇개월 전 까지만 해도 오픈소스는 대단한 사람들만 하는거야 라고 했던 제가 오픈소스를 개발하고 배포해서 사람들의 소중한 시간을 지켜주다니!! 며칠 뒤엔 제가 저희 팀 말고는 어디에 말한적도 없는데 어떻게 알고 많은 분들이 사용해주시고 깃허브 스타를눌러주고 가시더라고요. 정말 몇개 안되지만 이런게 처음인 저는 너무 신났고 내가 정말 도움이 되었구나를 느끼며 뿌듯해했습니다.
이 컨트리뷰션 아카데미가 아니었다면 절대로 누리지 못했을 거에요. 이런 프로그램 만들어 주셔서 감사합니다 ㅎㅎㅎ 그런데 저도 좀 사용하다보니 생각지 못한 오타, 오류가 발생하더라고요 지금 당장 학교 시험기간이라 신경을 못쓰고 있는데한번 사용해주시고 부족한 부분 지적 해주시고 이슈, PR 날려주시면 정말 감사하겠습니다 !!!(스타까지 남겨주시면 더욱 좋고요 ㅎㅎㅎㅎ)
https://github.com/Mo0nl19ht/youtube_crawler 라이브러리 깃허브 주소입니다. 이 기회를 계기로 앞으로 더 멋진 오픈소스 컨트리뷰터가 되고 싶어요여러분 키보드만 투닥거리는 학부생인 저도 해봤어요 여러분도 가능합니다!아무것도 아닌 프로그램이라 생각해도 누군가에겐 도움이 돼요!오픈소스 화이팅!!!
[뿌듯한 코드] 사연1