또한 처음으로 누군가의 코드에서 작업합니다.

오픈소스 작업은 회사에서 일하는 것과 정말 다릅니다.



사실 제목을 되돌려야 한다. 누군가의 코드에 대해 작업한 것은 이번이 처음이 아닙니다. 나는 co-op 위치에서 기존 코드 기반에서 작업했습니다. 하지만 아직은 달라서 처음인 것 같은 기분이 들어요. 작업을 하다 보니 코드가 방대하고 모든 기능에 대해 잘 알지 못해서 글을 많이 쓰지 못했습니다. 그래서 저는 버그를 수정하거나 무언가를 개선하기 위해 한 번에 몇 줄의 코드를 작성했습니다. 나는 코드가 작동하는 사람을 파악하는 데 많은 시간을 할애해야 했고, 내가 무언가를 놓치면 많은 사람들에게 영향을 미칠 수 있기 때문에 부작용과 내가 잠재적으로 놓친 것에 대해 생각해야 한다는 압박감에 시달렸습니다. 하지만 이 오픈 소스 경험은 저에게 훨씬 더 많은 자유와 부담을 덜 줍니다. 오해하지 마세요. 또한 코드가 프로덕션으로 배송되었을 때 큰 성취감을 느꼈습니다. 몇 줄에 불과하지만.

Javascript는 재미있고 간결하지만 여전히 더 나은 Java를 작성하고 싶습니다.



이번 주 작업은 누군가의 repo를 선택하고 기존 repo에 마크다운 번역 기능을 추가하는 것입니다. 아주 간단한 임무입니다. 같은 파트너와 함께 일하는 대신 무언가를 배우기 위해 더 많은 프로젝트를 살펴보기로 했습니다. 불행히도 아무도 Java를 사용하지 않았습니다. 지금은 몇몇 놀라운 사람들이 Go, Rust, C++로 작성한 것을 봅니다. 하지만 대부분 자바스크립트. 나는 다른 반 친구들의 레포를 모두 간단히 확인했다. Java의 오버로드된 함수와 달리 Javascript로 작성된 코드는 풍부한 라이브러리 및 프레임워크 세트 덕분에 매우 간결하고 예뻤습니다. 코드를 리팩터링하고 세부 구현을 최대한 숨기려고 했습니다. 여전히 많은 중복 코드를 줄여야 합니다. 간결하고 보기 좋은 Java 코드를 많이 작성할 수 있으면 좋겠습니다.

다른 사람의 코드에서 배우는 것은 훌륭합니다!



Javascript로 돌아가서 몇 개의 저장소가 코드를 멋지게 분해하면서 내 눈을 사로잡았습니다. 결국 저는 Rohan의 저장소에서 작업하기로 결정했고 Rohan도 저를 환영했습니다. 내 부분은 markdown 제목 및 링크 구문 분석 기능을 추가하는 것입니다. 그러나 그는 마크다운을 html로 변환하는 기능을 추가할 다른 파트너가 있습니다. 이는 다른 사람이 마크다운을 html로 변환하는 주요 기능을 구현하는 방법을 알지 못한 채 하위 기능을 개발해야 했기 때문에 약간 복잡합니다.

동일한 기능을 수행하기로 결정했지만 경쟁이 아닙니다.



그래서 저는 제 기능을 구현하고 테스트하기 위해 md 파일을 필터링하고 파일의 내용을 읽는 나만의 방법이 필요했습니다. md 파일을 시뮬레이트하기 위해 하드 코딩된 문자열 변수를 만드는 것에 대해 생각했습니다. 하지만 이 프로젝트로 더 많은 연습을 하고 싶기 때문에 저만의 마크다운 변환 기능을 구현하기로 결정했습니다. 업데이트된 저장소를 가져오고 작업을 다시 실행하는 데 약간의 시간을 할애해야 했지만 기능을 구현하는 것은 좋은 시도였습니다. 나중에 SSG에도 이 기능을 추가하겠습니다. 기여자로서 원래 스타일과 형식을 변경하지 않으려고 노력했습니다. 변화량을 최대한 줄이기 위해 고민하는 과정이 즐거웠습니다. 프로그래밍의 또 다른 재미있는 측면이라고 생각합니다.

정규식을 어떻게 정복해야 합니까?



가장 어려운 부분은 마크다운 링크를 html로 파싱하는 방법을 찾는 것이었습니다. 이렇게하려면 정규식을 찾아야했습니다. 그러나 이것은 이전에 시도한 것보다 더 복잡한 방법입니다. 나는 stackoverflow와 많은 블로그를 검색했습니다. 하지만 내 테스트 케이스를 만족시키는 것을 찾기가 어려웠습니다. 나는 많은 정규식을 테스트했고 마침내 내 경우에 맞는 것을 찾았습니다.

const regex = /\[(.*?)\]\((.*?)\)/g;
line.replaceAll(regex, '<a href="$2">$1</a>')


지금은 테스트 사례가 많지 않기 때문에 완벽한 정규식이 아닐 수도 있습니다. 적어도 여러 개의 링크가 있는 문자열에 대해서도 작동합니다. 이제 PR을 보낼 시간입니다!

신중하게 PR 메시지 작성



내 자신의 저장소에 커밋할 때 크게 걱정하지 않습니다. 나는 내 코드를 알고 있으며 내 저장소에 있어서는 안 되는 것을 빠르게 수정할 수 있습니다. 그러나 이것은 다른 사람의 저장소입니다. 분명히 나는 ​​매우 조심스러워졌고 좋은 PR 메시지를 쓰려고 노력했습니다. PR 전송을 완료하고 나서 언급했어야 할 몇 가지 사항이 마음에 떠올랐습니다. 너무 늦었어. 하지만 다음에는 좀 더 조심스럽게 PR댓글을 쓰겠습니다.

나는 누군가가 나에게 배울 수 있도록 훨씬 간결한 방식으로 내 코드를 리팩토링하는 PR을 보내주기를 바랍니다. 이제 내 SSG에 마크다운 변환 기능도 추가하고 있습니다. Java 코드에서 정규식을 사용하게 되어 매우 기쁩니다!

좋은 웹페이지 즐겨찾기