본문 바로가기

분류 전체보기

(159)
24.07.21 최종 프로젝트 마무리 회고 7월 5일을 기점으로 6주가량의 최종 프로젝트를 마무리했다. 6주보다 길게 느껴졌던 것은 그만큼 하루를 밀도 있게 사용하려고 하고, 그리고 스토어에 정식 릴리즈를 올리기 전 최종 수정을 하느라 실제로 2주를 더 썼기 때문인 것 같다. 최종 프로젝트의 종료와 함께 끝나지 않을 것 같던 내일배움캠프도 끝이 났다. 내일배움캠프에 대한 후기는 따로 한 번 글을 남길 생각이고, 이 포스트에서는 중간 발표 이후 최종 프로젝트 진행에 대한 회고만 쓸 생각이다.  비공개 테스트 심사 6월 17일에 중간 발표를 끝마치고, 비공개 테스트 심사를 위한 MVP를 조금 더 손보았다. 꽤 문제가 있어 보였던 UI/UX 몇 부분과 산책 목록 무한 스크롤과 같은 필요한 추가기능을 조금 더 넣었다. 나는 이때, 예외처리가 미흡한 부분..
[TIL] 24.06.21 최종 프로젝트 중간 회고 1. 최종 프로젝트 시작 전  5월 마지막 주를 기점으로 최종 프로젝트 주간에 진입했는데, 그 이후로는 기록을 거의 남기지 못했다. 그도 그럴 것이 배정된 6주를 온전하게 다 쓸 수 있는 것이 아니라, Play 스토어 배포를 위한 비공개 테스트 및 심사에 3주 정도가 소모되기 때문에 3주 만에 MVP(최소 기능 제품) 완성을 요구받았기 때문이다. 이전에 최종 프로젝트 리더를 지원해둔 상태였는데, 위와 같은 스케줄을 뒤늦게 알게 돼서 꽤나 막막했다. 6주를 모두 개발에 사용해야 만족스러운 기능과 견고함이 보장될 것 같았는데, 3주 만에 기본적인 기능을 갖추고 스토어에 심사를 올리고 중간발표도 준비해야 했다. 엎친데 덮친 격으로 5/28~5/31 기간 동안 나는 예비군 훈련이 예정되어 있었다. 그래서 최종 ..
[TIL] 24.06.05 안드로이드 스튜디오 에뮬레이터 Extended Contorls의 location이 제대로 동작하지 않을 때 안드로이드 스튜디오의 에뮬레이터의 Extended Controls 패널을 보면 저렇게 Location을 설정하고, Route를 play 할 수 있는 기능도 지원한다. 그런데 오늘 지도 API를 테스트 하려고 해당 기능을 오랜만에 동작시켰는데 저 하얗게 표시한 부분에 지도가 제대로 뜨지 않았다. 지도의 메뉴(검색, 줌 인/아웃 버튼)는 뜨는 상태인데, 지도는 정상적으로 로드되지 않고 그냥 흰 화면만 뜨는 상태였다.  당최 이유를 알 수 없어서 꽤나 고생을 했다. 당연히 안드로이드 스튜디오와 에뮬레이터 재부팅은 해봤고, 캐시도 날려봤지만 지도가 뜨지 않았다. 처음에는 에뮬레이터 내에 연동된 구글 시스템에 문제가 있나 싶어서, 구글 계정을 다시 로그인 해보고 구글 맵을 켜서 위치 정보를 확인했더니 그 곳에서는..
[TIL] 24.06.04 Firebase의 Realtime Database와 Cloud Firestore 최종 프로젝트를 한창 진행 중에 있는데, Firebase를 이용한 원격 DB를 도입하게 되면서 고민해야 하는 부분이 생겼다.처음에 당연히 DB의 변화를 실시간으로 감지해서 UI에 변화를 발생시켜야 하는 부분이 많을 줄 알고(일종의 flow를 내려주는 격), Realtime Database를 채택했는데 앱의 윤곽이 잡히고 나니 생각보다 그런 부분이 적은듯 했다. 그래서 어떤 것을 도입할 지 공식문서를 읽어보면서, 확실하게 결정해서 리팩터링을 진행하기로 했다.Choose a database: Cloud Firestore or Realtime Database  |  Firebase (google.com) 데이터베이스 선택: Cloud Firestore 또는 실시간 데이터베이스  |  Firebase5월 14일..
[TIL] 24.05.21 Service Locator 패턴 적용하기 Service Locator 패턴 적용하기  팀 프로젝트 진행 중에, 튜터님께 프로젝트의 아키텍처에 대한 피드백을 듣고 domain 레이어를 추가하기로 했다. 원래는 간단한 구조의 앱이라고 생각하기도 했고, 팀원들에게 최대한 쉬운 구조로 접근하려고 optional한 domain 레이어를 제외하고 presentation-data 2 레이어만 사용하기로 했었다. 하지만 그러다 보니 presentation 레이어가 domain 레이어의 역할을 어느 정도 겸하게 되었는데, 튜터님께서는 다중모듈로 구성하게 되었을 때 이 레이어들이 온전하게 분리가 될 수 없을 것 같다고 하셨다. 그런 의존성 측면 부분에 대한 문제는 인지하고 있었지만, 레이어를 2개만 쓰면 감수해야 하는 부분이라고 생각했다. 하지만 튜터님과 앱 아..
[TIL] 24.05.10 Delegate 패턴 적용해보기 1. Delegate 패턴 적용해보기  튜터님께 들었던 조언 중에, ViewModel 내에서 viewModelScope.launch { runCatching {}.onFailure {} }로 이뤄진 예외처리 보일러 플레이트 코드들을 delegate 패턴을 통해 제거해보라고 하셨다. Delegate 패턴은 어떤 기능을 직접 구현하는 것이 아니라 다른 객체에 위임해서 처리하는 패턴으로, 일종의 Modularization을 가능하게 한다. 코틀린에서 결국 상속을 받을 수 있는 부모 클래스는 단 하나이고, 여러 기능을 상속을 받아 추가하려면 인터페이스를 이용하게 된다. 하지만 이런 상속 패턴은 단점이 존재하는데, 인터페이스 상속을 받는 클래스를 만들 때마다 하나하나 구현해줘야 한다. 설사 그 내부 로직이 같다고..
[TIL] 24.05.09 앱개발 심화주차 개인과제를 하면서 1. 앱개발 심화주차 개인과제를 하면서  오늘 TypeB까지 모두 마무리했다. 이번 개인과제는 혼자 여러 가지 고민들을 해보면서, 튜터님들께 질문을 많이 했는데 한층 더 실력이 성장할 수 있는 기회가 된 것 같다. 그동안 빠듯하게 개인과제와 챌린지반 과제를 진행하느라, 정리하지 못했던 고민들을 정리해두려고 한다.  ❓ 클린 아키텍처에서 데이터를 직선적으로 받아오는 형태가 아니라면, 병합 등에 필요한 각종 로직들은 어디에 존재해야 하는가? - 사실 이 부분에 대해서는, 아직까지도 확실한 결론은 내리지 못했다. 그도 그럴 것이, 튜터님들도 이건 상황과 취향에 따라 달라질 수 있는 부분이라고 하셨고, 나도 동의하고 있다. 아마 본인의 경험치가 가장 잘 나타나는 부분이 이런 부분이 아닐까 생각이 든다. 정답은 ..
[TIL] 24.05.07 앱개발 심화 주차 개인과제 1. 앱개발 심화 주차 개인과제  저번주는 챌린지반 과제 리팩터링 및 본 커리큘럼 개인과제를 작성하느라 대부분의 시간을 보냈고, 오늘까지도 그랬다. 개인과제는 API를 통해 이미지 검색 결과를 받아와 View에 뿌려주고, 로컬 저장공간을 이용해 북마크 할 수 있는 기능을 구현하는 과제였다. 실제로 서비스 되는 앱의 기본에 충실한 과제 유형인데, 사실 이런 유형의 과제는 정말 많이 해봤지만, 할 때 마다 코드가 바뀌는게 눈에 보인다. 어떻게 보면 단순한 로직으로 쉽게 작성할 수도 있겠지만, 공부했던 것들을 모두 적용해서 앱의 구조를 작성하기 위해 고민하다보면 어려운 부분이 많다. 한편으로는, 이전에 비슷한 과제를 할 때 신경쓰지 못했던 부분들을 이제는 공부한 상태로 고민하는 스스로를 보면서 매번 저번보다 ..