✔️ Gson을 Moshi로 마이그레이션하기로 결정한 이유지금까지 Json 직렬화 라이브러리로 Gson을 사용해 왔는데, 되돌아보니 Gson을 선택한 이유가 없었다.그냥 다들 Gson을 사용한다니까 사용했던 것 같아서, 다른 라이브러리들과의 비교를 통해 Moshi로 마이그레이션 하기로 결정했다.Gson / Moshi / Jackson을 비교했고, 그 중에서 (1) Kotlin 호환성 (2) 라이브러리 지속성 (3) 런타임 퍼포먼스위 세 가지를 주요 비교점으로 두었다.Retrofit의 개발사인 Square사의 라이브러리이며, 셋 중 Kotiln 호환성이 가장 뛰어나고, 런타임 퍼포먼스가 높은 Moshi로 결정하게 되었다. ✔️ Moshi 란?Square에서 개발한 경량 Json 라이브러리이다.Kotlin ..
* 진행중인 사이드 프로젝트를 인수인계 받기 전에 구현되어 있던 기능을 개선하다 생긴 사례에 대한 내용입니다. 현재 개발중인 이 앱에는 러너들을 위한 "유사 채팅 기능"이 존재한다.소켓 통신을 통한 실시간 채팅 기능은 아니며, 메시지 전송 시마다 리스트를 갱신하는 방식으로 구현되어 있었다. ✔️ 기능 개요최대 8명까지 참여가 가능하다.메시지의 진영은 (내가 보낸), (나머지 사람들이 보낸)으로 나누어진다.(카카오톡처럼)메시지는 텍스트, 이미지를 전송할 수 있다.✔️ 메시지 진영 구분클래스 간의 계층 구조를 만들고, ListAdapter에서 뷰홀더에 bind할 때 sealed class를 (내가 보낸) 메시지와 (나머지 사람들이 보낸) 메시지로 나눈 뒤(텍스트)와 (메시지)를 나누는 방식으로 구현되어 있었..
진행중이던 사이드 프로젝트 내부 테스트를 위해 번들 빌드 후에 배포했는데, 소셜 로그인 관련 난독화 문제가 발생했다.대부분의 API나 라이브러리들 또한 난독화가 적용되어 있어서 디버깅이 쉽지는 않다.이전에도 비슷한 문제가 몇번 발생해서 기록해야지 다짐만하고 까먹어서 이번에는 적어본다. 모든 이슈들은 디버그 빌드에서는 발생하지 않던 문제이므로, 무조건 난독화 관련 문제일 것이라고 예상하고다른 블로그들을 참고해서 난독화 설정 파일만 계속 수정했으나, 해결되지 않았다.1. 카카오 로그인 UserApi.checkAccessToken로그만 보고 카카오 소셜 로그인 SDK 관련 난독화 문제일 줄 알았지만 로그와 내부 코드를 뜯어보니 내부에서 Retrofit2의 CallAdapter를 사용하고 있었고, 레트로핏 공식..
클린 아키텍처는 이제 안드로이드 진영의 많은 기업들이 선호하는(?) 아키텍처가 되었다. 내가 이 책을 읽었던 작년 이 맘 때와 비교해보면, 이제는 상당히 많은 기업들의 채용 공고 우대 사항에 들어가 있는 것을 보면서 느끼고 있다. 선호한다기보다는 구조적 이해도를 가진 개발자를 원하는 느낌이라 해야할까? "클린 아키텍처를 실무에 적용해 본 적이 있나요?"라는 부분보다, "아키텍처의 중요성과 그에 대한 이해도를 가지고 있나요?"라는 의미에 더 가깝다고 생각한다. 오늘은 아키텍처 설계에서 SOLID 원칙의 역할과 중요성에 대해 알아보고자 한다. Single Responsibility Principle여러 블로그 포스팅에서는 단일 책임 원칙을 "클래스/모듈은 단 하나의 책임만 가져야 한다"고만 설명하고 있다. ..
제네릭은 제대로 알고 사용해야 한다… ✔️ 제네릭은 Java 5에서 처음으로 도입된 개념이다. Java는 초기 개발 단계에서 제네릭을 고려하지 않았다. 제네릭 도입 전의 컬렉션은 타입 안전성을 제공하지 않았기 때문에 런타임 에러(ClassCastException) 발생 위험이 높았는데, 이후 제네릭이 도입되면서 기존의 컬렉션 클래스와 인터페이스를 타입 안전하게 만들기 위해 제네릭 타입 파라미터를 추가하게 된다. 그로 인해 제네릭이 없던 버전의 코드와 제네릭이 도입된 이후의 코드의 호환성을 유지해야 하는 문제가 발생하게 되는데, 여기서 오늘의 주제 중 하나인 "타입 소거"를 Java 5(1.5)에서 도입하게 된다.타입 소거 제네릭 타입 정보를 컴파일 타임에만 유지하고, 런타임에는 제거하여 원시 타입(raw..
개요 평소 당연한 듯 ViewPager와 RecyclerView를 사용해왔는데, 이번 기회에 내부 코드를 읽고 동작 원리를 파악하기 위해 포스팅을 남긴다. 1편은 우선 Recycler 클래스에 대해 알아보고, 2편에서는 RecyclerView의 Animation 처리에 대해 알아볼 예정이다. 그 다음은 ViewPager나 Proto datastore에 대해 포스팅하려 한다. 메인 키워드ViewHolderRecyclerscrap/unscrapRecycledPoolView와 ViewHolder의 관계RecyclerView는 화면에 보여지는 항목 개수만큼의 View와 ViewHolder를 생성한다. 이 때 각각의 View는 ViewHolder와 1:1의 관계를 가지게 되는데, 화면에 6개의 아이템이 보여진다면..
1. 면접 준비 전나는 기술 면접 경험이 한 번도 없다. 신입으로 취업할 때에는 바로 실무에서 배우면서 성장하고 싶은 욕심에 기술 면접이라고 하기 애매한 간단한 면접을 보고 전 직장에 취업했었다. 근데 첫 기술 면접이 카카오뱅크라니.. 설레면서도 엄청난 부담감이 밀려왔었다. 주변에는 온통 백엔드 개발자들 뿐이라 검색을 통해 찾은 래퍼런스들 밖에 없어서 올바른 전략을 세우지 못했다ㅠㅠ 지금 생각해보면 당연한 게, CS 공부는 평상시에 꾸준히 했어야 했고 알고리즘 공부 또한 매주 1-2개씩이라도 꾸준히 했어야 했다. 하지만 난 새로운 프로젝트에 처음 사용해보는 구조, 기술들을 적용해야 했기에 직전 일년 간에는 그런 준비보다는 실무적인 부분에 무게를 뒀으므로 이 부분은 나의 실책이라고 생각한다. CS, 알고리..
1. 서류 합격퇴사 직후에 반신반의하며 서류를 제출했고, 당연히 서류 탈락할 거라 생각해서 여행 계획을 짜며 시간을 보내고 있었다. 근데 서류 합격? 신기하고 새로운 도전이라는 생각에 두근두근하기도 했다. 5월 5일에 제출했고, 5월 10일에 서류 합격 메일이 도착했다. 문자로도 왔다는데, 스팸 차단 앱이 필터링해버려서 난 뒤늦게 확인했다 ㅠㅠ2. 사전 과제 전형안드로이드는 백엔드 직군과는 다르게 사전 과제 전형이다. 코테 연습은 작년에 하다 새로운 프로젝트 들어가면서 멈춰있던 상태라, 나에게는 천만다행이였다 ㅠㅠ 사전 과제는 5월 11일 오전 10:00 ~ 5월 16일 오후 11:59 까지 진행되었는데, 석가탄신일이 끼어있어서 하루가 늘어난 것으로 보인다. 다른 포스팅들을 보면 과제 전형에 보통 5일을..
0-1. 개요다니던 직장을 5월부로 퇴사했다. 마지막 프로젝트를 진행하면서 몰입도 있는 경험을 할 수 있었으며, 개발 과정 뿐만 아니라 다양한 면에서 개선하려는 시도도 부단히 많이 했던 것 같다. 하지만 없다시피 한 개발 문화와 개선할 수 없는 다양한 요인들이 퇴사에 결정적으로 작용했다. 안정적인 환경이였다고 생각했지만, 이 환경에서 내가 더 성장할 수 있을까? 라는 생각을 장기적인 관점에서 바라봤을 때 한달 간의 고민 끝에 내린 결론은 "아니오"였고, 차가울대로 차가워졌다는 무서운 개발자 시장에 나를 던져보기로 했다. 채용시장이 안 좋아도 난 해낼 수 있다! 시간이 오래 걸려도 꾸준히 노력하자는 생각이 컸다. 최소 6개월 이상은 걸릴 거라는 마음의 준비를 했다. 퇴사할 당시에는 솔직히 무서웠다 ㅎㅎ0-..
안드로이드 스튜디오 Giraffe patch3로 업데이트 후, 설정에서 experimental 기능인 new UI를 적용하다가 발생한 문제이다. 그 순간에 내 안드로이드 스튜디오는 Plugin들을 업데이트 중이였고,(Dracula, Material icon 등) 업데이트 중에 IDE가 재시작되면서 이 예외가 발생했다. 안드로이드 스튜디오를 근 3-4년간 사용하면서 윈도우 시스템 팝업으로 예외를 뿜어내는 경우는 처음이라, 계속 검색해봤지만 일반적으로 경험해보기 힘든 IDE 오류라서 해답을 찾기가 어려웠다. Plugin 업데이트 중설정 - new UI 적용안드로이드 스튜디오 재구동예외 발생 팝업 출력된 후 안드로이드 스튜디오 진입 불가 오류 메시지com.intellij.diagnostic.PluginExce..