밀키수정을 보내며.. (별)
두 번째 앱잼을 같이한 밀키웨이
나를 엄청나게 성장시켜준 사람들.

두 번째인 만큼 부담이 컸다. 내 실력은 너무 별로고, 그래도 OB인데 잘은 해야 할 거 같고..
안드 4명은 모두 OB였고 다 잘했다. 첫 회의에 안드 팀원들과 목표에 대해서 이야기했다. 내 목표는 성장이었다. 플픽 때 가장 아쉬웠던 부분이었고 그래서 욕심이 났다. 디자인 패턴도 적용하겠다 하고, 클린 코드로 짜겠다고, 잘할 수 있다고 호언장담했다. 결론적으로 다 하진 못했다. 그럴 줄 알았다(?)

우리의 첫 목표

나는 비교적 쉬운 뷰를 맡고, 그 대신 클린 코드로 짜고 싶었다. 하지만 어쩌다 보니 비중 있는 뷰를 맡게 되었고 뷰 짜기에 급급해 클린한 코드는 못 짰다.

앞으로 리팩토링하면서 많은 부분을 고치게 되겠지만 아쉬움이 남는다. 밀키웨이에서 내가 맡은 뷰는 홈 검색, 제보 검색, 카페 제보, 카카오 공유하기였다.


내가 맡은 뷰

  1. 홈 검색

  2. 카페 제보 검색과 카페 제보 뷰

  3. 메뉴 수정 삭제

  4. 제보 완료시 dialog


역경과 고난 그리고 극뽁!!!!!

<검색>

홈 검색은 우리가 갖고 있는 데이터 안에서 검색을 해야 하고, 제보할 때의 검색은 카카오 검색 api를 통해야 했다. 보이는 뷰 자체는 똑같은데, 데이터 값과 로직이 달라질 때 adapter와 viewmodel의 분리를 어떻게 해야 할지 고민했다. 그러다 그냥 xml은 공유하고 adapter와 viewmodel을 분리해서 만들었다. (더 좋은 방법이 생각이 안났다.)

viewmodel, livedata를 처음 적용해서 코드를 짜봤는데 다 만들고 나니까 훨씬 보기도 쉽고, 코드 고치기도 쉽고, 이해하기도 쉬웠다. 그리고 무엇보다 재밌었다. 근데 이 부분에서 데이터바인딩을 안 썼더니 나중에 findviewbyid를 백 번 쓰는 사태가 발생했다. 영민 오빠가 내 코드를 봐줄 때 계속 데이터바인딩은 쓸 생각 없어? 이랬는데 처음엔 '왜 변수 선언하는 거 재밌어ㅋ' 이러다가 나중엔 오빠한테 후회한다고 말했다. ㅋㅋ 그래서 검색을 다 만들고 카페 제보 뷰를 짤 땐 데이터바인딩을 썼다.. ㅋ.. (지금은 전부 데이터바인딩으로 고쳤다.ㅎ)

어쨌든 검색 뷰는 생각보다 쉬웠다. recyclerview로 받아온 데이터만 띄우면 됐고 분기처리 몇 개 해주면 됐고, 클릭했을 때 해당 값 읽고, x 버튼 누를 때 recyclerview도 같이 초기화시키고, 나중에는 empty 뷰와 loading을 추가했다.

앗. 그런데 파트장 면담할 때 민구 오빠가 '화면 터치할 때 키보드가 안 내려가네?'라고 한마디 흘렸다. 아. 할 일이 또 생김. 그래서 키보드 제어를 하다 보니까 욕심이 점점 나서(?) 화면 터치 시, recyclerview 범위 밖을 터치 시, recyclerview가 길게 늘어질 때 아래로 스크롤 시에 모두 내려가게 만들었다. 우와. 다 만들고 나니까 사용성이 좋아졌다. 이 과정에서 xml도 많이 바뀌었고, 코드도 꽤 추가됐다. 생각보다 귀찮은 작업이었음. 처음부터 보여주기식 코드를 짠 내 잘못이지만.


<카페 제보>

카페 제보는 tablayout 안에 fragment로 짜인 뷰였다. 카페 검색하기를 누르면 검색 activity가 나오고, 메뉴 추가를 누르면 메뉴 추가 activity가 나오는 형태.
여기서 어려움이 있었다. 메뉴 recyclerview의 삭제와 추가는 쉽게 되는데 수정을 하면 결과가 반영이 안됐다. 문제가 뭘까

처음에 adapter에서 수정, 삭제를 구현을 했었는데 adapter 내부에서 startactivityforresult를 했더니 글쎄 fragment로 결과가 오지 않았다. adpater 안에서 startactivityforresult를 타고 들어가면 FragmentActivity로 가더라. fragment 안에서 startactivityforresult를 타고 들어가면 Fragment로 가고.

너무 뻔한 얘긴가? 근데 난 처음 알았다. 코드를 통째로 수정하긴 싫어서 어떻게든 해보려 했다. Mainactivity의 result 받는 부분에서 fragment로 전달하려고도 해봤고, context를 adapter에 전달해보기도 하고, fragment 생명주기의 문제인가 싶어 코드를 이곳저곳 고쳐봤는데. 결과는 모두 실패

그래 그냥 수정, 삭제를 fragment로 이동시키자.

.

또 여기서 고난이 있었다. recyclerview에서 저 땡땡땡(:)을 누르면 -> 팝업이 열리고 -> 그 팝업에서 수정을 누르면 -> 해당 내용이 그대로 반영된 activity가 열려야 했는데,

나는 spinner로 구현하지 않고 popup으로 구현해서 (처음 써봄) 그 안에서 수정, 삭제가 menu item으로 구성되어 있었다. xml이 아니라서 id를 꺼내서 쓰는 방도를 몰랐다. 원래 menu click을 adapter에서 구현하고, interface 만들어서 꺼내 쓸려고(?) 했는데 id가 안꺼내지니, 방법을 바꿔야 했다.

그래서 그냥 버튼 클릭만 adapter에 넣고 popup 코드부터 통째로 fragment로 옮겨버리자.. 생각을 했다. 이게 총 3일 만에 나온 결론이었다. (물론 3일 동안 이것만 붙잡고 있었던 건 아니었다.)

와 별로 어려운 것도 아닌데 첫 단추를 잘못 뀄더니 그냥 길을 돌고 돌아서 도착했다. 근데 또 문제가 있었다. popup은 커스텀 하기 어려운것.. 하. (검색해보며 다양하게 시도해봤는데 결국 못했다) 다시 돌아간다면 그냥 spinner 써야지. 그래도 결론은 성공했으니 됐다.

이 뷰가 되게 까다로웠다. 메뉴 등록 시 하나라도 채워지지 않으면 버튼 활성화가 되지 않게 해야 했고, 제보 완료를 누르면 dialog가 뜨고 확인을 누르면 탭이 나의 제보로 이동해야 했다. 로딩도 넣어야 됐고. dialog에 tab 전달해서 확인 누를 시 넘어가게 처리하고, 아. 초기화도 시켜야 했다.. 버튼 활성화는 플픽 회원가입 3개 뷰 짤 때 너무 노가다로 짰던 게 기억나서 이번엔 효율적이게 짜보겠다 다짐하고 이거저거 많이 찾아봤다. 결국 성공!



나의 성장 과정!

앱잼 내내 정리한 것들

공부와 꿀팁 정리

그래서 성장을 했냐?
엄청 했다. 우와 박수 짝짝ㅎㅎ

전에는 코드를 짤 때 생각하지 않았다. 일단 돌아가게 짰음. 그땐 뇌가 없었다. 근데 이번엔 나름대로 생각을 좀 했다. chip이나 dialog나 다른 뷰에서도 사용할만한 것들은 더 예쁘게 짰다. 갖다 쓰라고ㅎㅎ

그리고 위에 쓴 고난과 역경들. 그리고 해결 과정을 모두 기록했다. 또 내가 맡은 뷰들의 이슈들을 계속 체크했다. 이런식으로

체크냠냠

그래도 아직 부족한 게 너무너무너무너무 많다. 그리고 새로운 게 너무너무너무너무 많다.
전 프로젝트와 달리 밀키에선 코루틴을 썼다. 서버도 call을 사용하지 않았다. 우와. 이게 뭐지? 그래서 재밌었다. 하나부터 열까지 다 처음 해보는 것들. 흥미진진



밀키웨이는 이런 팀!


밀키웨이는 매일 팀 전체 회의를 하고, 개발자 회의를 따로 하고, 안드 회의도 따로 했다.

개발자 톡방이 따로 있어서 매일 쉴 새 없이 떠들었던 것 같다. 리모트임에도 불구하고 개발자들끼리 소통이 정말 잘 됐다.

나랑 같은 뷰를 맡았던 아요 윤진이, 소영이와 로직에 대한 얘기를 나누기도 했고, 서버와도 끊임없이 말했다. 그럼에도 소통이 안됐던 부분은 있었다. 클라에서는 당연히 서버에서 카카오 검색 api를 받아와야 된다고 생각했고, 서버에서는 클라가 직접 카카오 검색 api를 사용하는 줄 알고 있었다. 또 개발자 회의가 시작되고 플픽 서버도 보고, 준엽 오빠한테 물어보고.. 그렇게 서로 이해를 했고 뒤늦게 서버에서 처리해줬다. 만약 합숙이 있었으면 진작에 해결되었을 문제지만 온라인상에서의 소통엔 한계가 있으니까.

무엇보다 우리는 카페 데이터를 직접 모았어야 했는데, 서버가 데이터 하나하나 다 넣느라 고생했다. yb인데도 똑부러지게 서버를 해준 다인이와 지혜가 너무 대단하다. 또 아요는 3명이었는데, 윤진이를 제외하고 유진이, 소영이가 yb였는데 엄청 빠르게 개발을 완성했고. 버그도 많이 잡았다. 똑똑한 친구들!!!!! 디자인이 3번 정도 바뀌었는데도 불구하고 거의 공장처럼 뷰를 찍어낸 민주와 혜린이도 너무 대단하다. 진짜 신기했다. 손이 너무 빨라ㅎㅎ 현빈이는 항상 가장 늦게 퇴근했고, 혜리는 직장을 다님에도 우리를 많이 신경 써줬다. 고마운 기획들

밀키로이드는 우주 최강!

은이가 맨날 보내던 짤과 감동적인 영민의 글 ㅋㅋㅋㅋㅋㅋㅋㅋ

안드 팀원들은 나에게 이것저것 많이 알려줬다. 특히 영민은 거의 과외선생님이었다. 내가 한숨 한 번만 쉬어도 '수정같이해'가 바로 나왔다. 은이랑 회진이도 밤새 내 코드를 같이 봐줬다. 중간에 깃이 난리 났을 땐 다 같이 밤을 새우기도 했고. ㅠㅠ 정말 미안했다.

회진이랑 내가 뷰모델을 처음 적용해보는 터라 왜? 왜?를 1000번을 외쳤는데 친절하게 하나하나 알려준 영민 오빠, 은이에게 너무 고맙다. 내가 할 수 있다는 걸 알려준 팀원들을 만나서 행복했다. 내 자존감 지킴이들. 또 내가 어떻게 하든 나를 믿고 맡겼고, 내 코드가 너무 더럽다고 혼자 비난을 할 땐 앱잼이 끝나고 같이 고쳐보자고 도와주겠다고 말해줬다. 항상 더 좋은 방향을 알려줬고 내 생각을 끝까지 들어줬다.

이것만으로도 최고의 팀원인데, 먼저 개발을 끝낸 친구들이 남은 일들을 돕겠다며 탭 레이아웃 수정이나 세세한 디자인 변경들을 대신 고쳐줬다. 네가 맡은 뷰, 내가 맡은 뷰로 나눠지는 게 아니라 곳곳에 서로의 손길이 다 묻었다. 너무 착한 친구들과 팀플처럼 앱잼을 했다. 잘한다고 손뼉 쳐주는 팀원들과 함께할 때 내 시너지가 엄청나게 나온다는 것을 알았다.

과제 제출 날 우리는 한숨도 자지 못한 상태로 리드미를 4시간 동안 같이 썼다. 영민 오빠는 이미지 링크를 만들고, 나는 정리를 하고, 회진이는 녹화를 하고, 은이는 xml 링크를 하나하나 찾고. 근데 하나도 힘들지 않았다. 절거웠따!

너무너무 고맙고 너무너무 소중한 밀키 안드들 ㅜㅜ 내가 받은만큼 도움이 되지 못한거같아 미안하다.

대망의 데모데이

(나 하트하고 있음)

멘토님이 왔다. 내가 질문을 했다. 밀키웨이에서 재밌거나 신기했던 뷰 있었나요?! '아 그 반짝거리는 거 엄청 이쁘던데요? 지도 커스텀 하느라 고생했을 거 같아요. 클러스터링 넣으면 좋을 거 같아요' 이 문장에 모든 피로와.. 모든 힘듦이 날아가 버렸다. 꼭.. 네이버 맵.. 클러스터링,..테드..라이브러리.. 메모..ㅋㅋㅋㅋ

그리고 발표를 부숴버려서 자랑스러웠다. 우리 밀키들! 그리고 대상! 야호!!!!!!!!!!!


회고는 항상 난장판..

앞으로 공부해야 할 것도 너무 많고, 고쳐야 할 것도 너무 많고.. 잘하는 사람이 주변에 많다는 건 정말 좋은 일이다. 오래오래 붙잡고 물어봐야지. 다들 너무 고생했다. 또 릴리즈 한다 뭐다 바쁘겠지만 지금까지 했던것처럼 절겁게!!!!!!!!!!!!!!!!!! 했으면 좋겠다.


그래서 항상 내 앱잼 목표인 웃긴팀 타이틀은 얻었나?
난 얻었다고 생각해. 아님말거!!!!!!!

밀키웨이 안드로이드 다운! 받으러! 가보자!

profile
반가워요!

0개의 댓글