본문 바로가기

전체 글

(160)
[백준 1202] 보석 도둑 그동안 포트폴리오랑 자기소개서를 작성하느라 공부를 많이 하지 못했는데, 어느정도 틀은 완성한 것 같아서 조금 여유가 생겼다. 아직 고칠 부분이 많지만 이제 다시 공부를 병행할 수 있을 것 같다. 더군다나 알고리즘 문제는 부트캠프 최종 프로젝트 기간동안 손을 놨다가 오랜만에 푸는 것이고, 이렇게 내일배움캠프가 아닌 카테고리에 개별 포스트로 작성하는 것도 처음이기 때문에 감회가 새롭다.   문제가 심플하면서 묻고 있는 것이 명확하다. 그런데 알고리즘 문제를 너무 오랜만에 풀었더니 이 문제에서도 꽤 난항을 겪었다. 당연히 보석과 가방 리스트를 그대로 이용하게 되면 절대 제한 시간 안에 풀 수 없다. 그래서 가방을 내림차순으로 정렬하고, 우선순위 큐를 통해 보석을 가치가 크면서 무거운 보석이 먼저 나오도록 해두..
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까지 모두 마무리했다. 이번 개인과제는 혼자 여러 가지 고민들을 해보면서, 튜터님들께 질문을 많이 했는데 한층 더 실력이 성장할 수 있는 기회가 된 것 같다. 그동안 빠듯하게 개인과제와 챌린지반 과제를 진행하느라, 정리하지 못했던 고민들을 정리해두려고 한다.  ❓ 클린 아키텍처에서 데이터를 직선적으로 받아오는 형태가 아니라면, 병합 등에 필요한 각종 로직들은 어디에 존재해야 하는가? - 사실 이 부분에 대해서는, 아직까지도 확실한 결론은 내리지 못했다. 그도 그럴 것이, 튜터님들도 이건 상황과 취향에 따라 달라질 수 있는 부분이라고 하셨고, 나도 동의하고 있다. 아마 본인의 경험치가 가장 잘 나타나는 부분이 이런 부분이 아닐까 생각이 든다. 정답은 ..