Jayce님 안녕하세요. 좋은 강의 감사합니다.
강의 주제 정말 좋습니다. 딕션도 좋으셔서 강의 퀄리티가 배가 되는듯 합니다. 코드 스타일도 깔끔해서, 많은 도움이 됩니다
강의 구성이 Git의 전체적 아키텍쳐와 기능 구현으로 구성되어있습니다. 서비스로직을 작성하듯, API 엔드포인트의 요구조건을 보고 구현 및 설계를 하신 것 같습니다.
다만, 실제 Git 프로젝트의 코드 설계는 강의에서 언급하지 않습니다.
코드간 역할 분리
(클래스 기반 프로젝트라면) 클래스간 역할 분리
로직 상 세부적 알고리듬 적용
최적화 알고리듬 등
등
document로 분석을 마무리하는 것은 좋은 접근이지만, 오픈소스 내부의 번뜩이는 아이디어는 코드는 직접 볼 수 없는 아쉬운 방법이라고 생각합니다.
오픈소스(방대한 양의 코드로 이루어진 프로젝트)를 분석할 능력을 길러 더 깊게 이해하고 싶은데, 강의자체가 학습 능력 코칭이 아니기에 글로 남겨봅니다. 물론, document도 보고 소스코드도 보면서 능력을 기르는 것이겠으나, Jayce님의 생각이나 조언을 들어보고 싶습니다.
안녕하세요! 피드백 정말 감사드립니다. 강의가 코드를 잘 쓰는 방법을 설명하고 있지는 않아서 코드 설계에 대해서는 부족함이 느껴지신 것 같다는 생각이 드네요. 사실 Go의 문법을 아예 몰라도 볼 수 있게 하기 위해 단순한 형태로 짜려고 노력하다보니 그렇게 됐는데, 말씀하신대로 그런 부분들은 제가 좀 더 보완할 수 있었을 것 같네요.
방대한 양의 코드를 분석하는 능력을 키우는 방법에 대해 제 생각을 들어보고 싶으시단 글로 이해하고 말씀드리겠습니다. 너무 뻔한 방법이 떠올라서 죄송스럽지만 제 개인적인 생각으로는 잘 관리되는 오픈소스를 직접 뜯어보는 방법이 가장 좋은 것 같습니다. 저같은 경우는 etcd, Mattermost를 조금 들여다본 적이 있는데, 이때 이런 능력이 그래도 향상되지 않았나 싶습니다. 직접 코드 기여까지 할 수 있으면 좋을 것 같아요. 특히 Mattermost는 DB나 인프라같은 게 아니라 서비스 오픈소스라 프로덕트를 만드는 개발자에게도 직접적인 도움이 된 것 같아요.
제가 예시로 든 걸 보시면 느껴지시겠지만, 어느 정도 언어의 생태계나 Usage에 익숙한 것으로 시도해보는 게 효과가 좋은 것 같아요. 저의 경우는 Go가 가장 익숙한 상태여서요. Redis, 리눅스 같은 코드도 본 적이 있는데 솔직히 어려운 제품이라는 장벽도 있지만 언어에 익숙하지 않아 생기는 장벽도 무시하기 어려운 것 같아요.
첨언하자면 저는 그러한 능력이 부족하고 특히 코드를 잘 설계하는 영역이 제가 자신있는 부분은 아니긴 합니다. 오히려 평균 이하가 아닐까하는 고민을 하는 편이고 공부가 필요합니다. 요즘도 여전히 설계를 자주 바꾸고 있습니다 ㅎㅎ... 다른 고수분들의 의견이 여기 추가된다면 좋을 것 같네요.
답글
지기성
2024.04.12Jayce님의 코드 설계의 부족함을 느끼지 않았습니다. "핵심 아이디어를 클론"하는 강의 자체는 매우 만족했습니다. 👍
다만, document 기반으로 핵심 아이디어 설명이후, 구현체(https://github.com/git/git) 는 직접 보지못해 아쉬웠습니다. 실제 구현체에서 어떻게 구현하고 있는지, 핵심적인 흐름을 따라가면 좋지 않았을까 하는 생각입니다. 오픈소스의 설계가 무조건 정답이진 않겠으나, 설계를 분석(의도를 유추하고 트레이드 오프 등을 고려)하는 과정에서 좋은 팁이나 아이디어를 전해주실수 있을 것 같습니다. (짧은 강의 본 것이지만, Jayce님의 깊은 내공이 보입니다 👁)
언어 종속적인 문제도 있고 핵심 로직 외의 디테일을 더하는 로직들이 많이 존재하겠으나, 분석하는 과정을 따라해보며 오픈소스와 같이 거대한 프로젝트를 분석하는 능력도 기를 수 있을 것 같습니다.