서론
오픈소스를 분석해보았다.
----------------------------------------
// pokedex origin 저장소.
https://github.com/skydoves/Pokedex
// 옮기기 시작한 commit. (forked from pokedex)
https://github.com/hhyeok1026/Pokedex
// 내가 빈프로젝트에서 시작해서 코드 옮겨둔 저장소.
https://github.com/hhyeok1026/Pokedex-Meltdown
----------------------------------------
깃허브를 돌아다니다가, 보게된 pokedex라는 저장소. ReadMe를 보았을 때, 내가 공부해야 될 게 다 있어보였다. 좋은 예제의 앱으로 공부하여, 내 포트폴리오화 하려는 부푼 꿈을 가지게 되었다.
이 저장소에 있는 것을 내 실력으로 meltdown. 녹이려고 했지만, 실제로는 내 머리가 meltdown 붕괴 되었다. 이렇게 공부하면 안 된다는 것을 깨달았다. 앱을 실행해보면 화면이 2개밖에 없어보여서, 뭐 없겠지 생각을 했다. 약간 이해되는 부분도 있긴 했지만, 내 수준으로는 소스가 거의 이해되지 않았다. 기존에 써보았던, Room, retrofit도 잘 모르겠던데, '이것들도 제대로 모르던 게 아닐까?'라는 생각이 들었다. 힐트랑 mvvm이 이해 안되는 게 큰 문제인 것 같고, 코드를 무지성으로 옮기고, 코드흐름을 따라 가보지 않아서 그런 것 같다.
모르는 걸 하나씩 공부해서 이해 할 수도 있겠지만, 모르는 게 워낙 많다보니 인내심은 바닥을 향했다. 공부를 할 때는 항상 'step by step'이라는 것을 다시금 깨닫게 되었다. 이때 조언을 구했는데, 삽질을 하면 배우는 게 있다 + 컨텍스트 스위칭에는 비용이 발생 한다는 것이다
인내심 바닥으로 코드 부분은 무지성으로 옮기게 되었고,
- bulbasaur(이상해씨)가 오탈자가 있어서 unit test에 실패
- manifest에 activity 태그를 빼먹어서 에러
를 제외하면 별다른 에러 없이 앱이 잘 실행되었다.
소스 파일 분리가 잘 되어있어서, 코드 옮기기가 좋았던 것 같다.
(이 초보에게는 모듈, 파일분리되서 정신이 없기도 했다ㅜㅜ)
예전 회사를 다닐 때, 나에게 딱! 필요한 깃허브 예제가 있었고, 그것을 회사 앱에 적용하려고 시도했던 적이 있다. 하지만, 소스를 하나씩 떼다 붙이다보니 커플링 때문에? 소스가 넝쿨째 옮겨지게 되고, 결국 이해가 되지 않아 적용하지 못했었다. 이때 회고나 블로그를 썼었더라면, 지금 같은 경험을 줄일 수 있었을 텐데, 인간은 같은 실수를 반복한다.
그 유명한 더닝크루거 효과의 그래프를 보면 우매함의 봉우리가 있다. 그런데 우매함의 봉우리는 한 두개가 아닌 것 같다. 새로운 라이브러리를 배울 때마다 봉우리가 생긴다. 첩첩산중, 사실 그 그래프는 여러 개 겹쳐져 있던 것이었다. 파이어베이스 문서의 get start부분은 쉽고, 뭔가 더 응용 하려고 하면 힘들어 지던 것이 이런 이치일까?
이 pokedex저장소에 대해서 좀 더 이야기를 적어 볼 것인데, 혹시나 이 저장소의 원작자분이 이 글을 보시게 된다면 기분 나빠하실까 봐 행여나 걱정이 든다. 어디까지나 코딩 초보의 입장에서 작성된 글이라는 점에서 양해를 바래봅니다.
본론
// 이 pokedex 저장소를 볼만한 사람.
- 기존에 skydove님이 만드신 라이브러리들을 여러 개 써봤으면서, 그것들이 어떻게 활용 되는지 보고 싶은 사람.
느낌적인 느낌으로 skydove님이 만들어두신 라이브러리들을 봤을 때, 상용구 코드나 코드라인을 줄이고 가독성을 높여, 생산성을 높이려는 라이브러리들인 것 같다. 그래서 저것들을 안 써봤다면 바로 이해가 안 될 것이니, 사용법을 공부를 해야 할 수도 있겠다. 또한 직접 만들어두신 커스텀뷰 라이브러리가 있었다. 정확한 사용법이나 기능은 안 찾아봐서 모르겠지만, 대충 느낌이 이러했다.
그래서, 그냥 디자인패턴 잘 만들어진 예제를 보고 싶다면, 이 저장소보다는 구글이 만들어둔 now in android (요새 컴포즈로 개발된거로 알고있음)나 sunflower 예제를 보면서, 공부하는 게 나을 것 같다. (이것들도 아직 보진 않았지만.)
- mvvm, 힐트에 대해서, 대충 아는 것이 아니라 익숙해야 할 것으로 보인다.
익숙하지 않다면 가장 간단한 예제로 시작하는 프로젝트를 만들면서, 공부를 하는 게 더 나을 것 같다.
- ReadMe적힌, dependnecies들에 대해서 많이 알고 있을수록 좋다.
그것들이 어떻게 돌아가는지 모르면, 사용법을 찾아봐야한다거나, 코드 흘러가는 것을 대충 이해 할 수 밖에 없다.
- 멀티모듈 사용에 대해서 궁금한 사람.
- 벤치마크는 뭘까? 궁금한 분.
- dependencies 버전 관리하는 buildSrc, version catalog가 뭔지 궁금한 분.
// 오픈소스 분석하기 노하우 & pokedex 분석하기 순서.
1) 프로젝트 구조를 잘 이해해야한다.
- gradle이 빌드를 관리하기 때문에, 기본 생성되는 gradle 디렉토리에 대해서 어느 정도 지식이 있어야한다.
- manifest는 앱 실행 시, 안드로이드 os가 알고 있어야 할 프로그램에 대한 여러 정보가 적혀있다.
- 안스 프로젝트 창에서 android탭 <-> project탭을 오가며 파일을 보고, 디렉토리와 소스 셋을 생성 할 수 있어야 한다.
- gradle의 version catalog로 디펜던시 버전들이 관리 되는데, (이거 찾느라 한참 걸렸다.)
gradle/libs.version.toml파일이,
안드로이드스튜디오
돌핀에서는 android탭 - gradle script으로 묶여서 쉽게 찾을 수 있지만,
칩멍크에서는 project탭으로 열어서 gradle폴더를 열어봐야 저 파일을 확인할 수 있다.
2) 모듈 구조 파악하기 (오픈소스 만든 사람이, 구조에 대해서 그려둔 그림이 있는지 찾아본다.)
처음에 App모듈을 그냥 옮기고 있었고, 소스코드는 불바다였다.
ReadMe파일을 보니, 모듈구조가 있는 그림이 있었고, 의존성이 가장 없는 모듈부터 옮기면, import가 편해진다.
3) 소스 파일을 넣을 때,
이것도 모듈처럼, 인터페이스 -> impl된 클래스 순으로 넣으면 import가 잘된다. 분석도 전체적인 흐름을 본 다음에, 세부적으로 보려면 의존성 없는 파일부터 봐야하는 듯하다.
개발 할 때, 의존성이 없는 것에서 -> 구현으로 나가는 방법이 있을 테고,
먼저 사용할 코드를 작성 해놓고, 거꾸로 구현하거나 재활용해 나가는 방법이 있을 텐데, 잘 생각 해봐야겠다.
4) dependencies되는 라이브러리들에 대해서 알면 알수록 좋다.
다다익선!
// 내가 얻은 것과 잃은 것
[얻은것]
- gradle에 대해서 좀 더 알았다.
- 힐트 입문.
- dependencies를 좀 더 잘 넣을 수 있다?
- import를 잘 할 수 있다!
- project창에서 project탭이 쓸 일이 꽤 많다는 것을 알았다.
- 멀티 모듈 구조를 맛보았다.
- 피로감 (피로감을 느낄 때는 쉬어야 한다는 것을 알았다.)
- 다른 분들은 어떻게 공부하고 있는지, 공부법을 먼저 찾아보는 게 좋다는 것을 알았다.
(항상 바텀 업, 작은 것에서 시작해야한다. step by step.)
[잃은 것]
- 시간 (차근히 공부 할 기회비용을 잃었다, 다시 원점으로 가야한다.)
- 멘탈 (며칠 쉬면 회복 될 것이다.)
결론
마무리, 생각정리
// 조언에 대해서
- 도서관을 가다보면 가방에 봇짐을 지고 다녀서 그런지 아저씨들이 가끔 말을 거신다.
가방에 뭐가 들었나, 공부도 젊을 때 해야 한다 등등 여러 말씀을 해주시는데, '하하 맞습니다' 하고 대답을 했었다. 요즘 취준에 쫑겨서 그런지 잔소리처럼 들리기도 하고, 원래 mbti, i라서 이런 게 좀 힘들긴 한데, 이것도 심적 여유가 있어야 받아 드릴 수 있을 듯하다. 이너피스.
- 오픈채팅방에서 의도치 않게 조언을 듣게 되었는데, 아키텍쳐 쓰는 회사들이 얼마나 되겠냐고, 회사들 마다 요구사항이 다르고 시장에 맞춰가기 때문에, 결국 안드로이드도 수단일 뿐이라는 말씀을 해주셨다. 이해가 안 되는 건 아니지만, 안드로이드를 파기로 생각한 내 입장에서는 조금 버거운 조언인 듯하다. 아는 지인분도 이와 비슷한 말씀을 해주신 적이 있긴 하다. 역시 아키텍쳐는 회사 들어가고 나서 배워야하나? 이걸 공부를 안 하고 들어갈 수 있는 회사가 있을까 싶기도 한데, 이거에 대해서도 생각을 해봐야 할 듯하다.
- 내가 필요할 때, 조언을 받는 게 제일 좋고, 조언을 받으려 질문을 할 때도 조심해야하고(살불살조),
조언을 하는 입장에서도 조심해야 하는 것을 새삼 느낀다. (오지랖이 되거나, 물을 떠먹여준다거나)
- 아무튼, 내 할 일에 집중 해야겠다. 기분이 업 되면, 쓸데없는 말을 하곤 하는데 헛소리도 자제해야겠다.
// 앞으로의 계획
- 코틀린 언어 공부 & 코테 준비
코틀린 책을 사려고 생각중인데, 책 구경을 해야 한다. 코테 공부는 하기 싫어서 자꾸 미루고 있는데, 저녁에 하려고 하면 내일로 미룰 테니, 오전에 미리 공부하기.
- 안드 공부
코드랩 했던 거를 복습하면서 구글 문서에서 aac를 찾아볼지, 인프런에 강의(jectpack + 아키텍쳐)를 결제 해볼지, 다른 개발자들은 어떻게 공부하는지 찾아보고 생각을 해봐야겠다.
- CS공부
박스에 넣어둔 전공 책 꺼내기
면접용 cs 책 구매 고려
- 노션 다시 시도해보기
메모장과 엑셀에 개발메모를 하다 보니, 메모가 어지러워지고 있다.
(2022.10.28 추가)
// 회고를 다 쓰고 나서 이 유튜버 분의 채널을 알게 되었는데,
// [오제이 튜브]OJ Tube
https://www.youtube.com/c/%EC%98%A4%EC%A0%9C%EC%9D%B4%ED%8A%9C%EB%B8%8COJTube
주니어 개발자에게 필요한 인사이트를 얻을 수 있는 내용이 엄청 많아서, 다른 분들도 구독해보시기를 추천합니다.
공부법, 오픈소스 분석노하우, 무려 여친 구하기까지!
개발자 계의 즉문즉설 법륜스님 같은 느낌을 받았습니다.
'Android > Meltdown(pokedex)' 카테고리의 다른 글
1. 개발일지 (매일 수정..2022.09.24~2022.10.25) (0) | 2022.10.13 |
---|---|
0. 포트폴리오에 대한 기획. (0) | 2022.09.02 |