Firebase로 커뮤니티를 운영해보고

필자는 Firebase 서비스를 이용해서 커뮤니티를 구축하여 운영하고 있다. 일간 2만명 정도가 사용하는 중소규모 커뮤니티이고, 주말에는 3~4만명 정도 이용한다. 플랫폼은 현재는 안드로이드 애플리케이션 하나. 사용하는 Firebase의 서비스는 크게 4가지 정도이다. Firebase Realtime Database, Firebase Firestore, Firebase Auth, Firebase Functions. 그 외에도 여러 Firebase의 부가기능을 사용하고 있으나, 비용이나 사용량의 큰축은 위에 기술한 4가지 서비스가 차지 한다. 왜…

Android LiveData 일회성 이벤트 처리하기

안드로이드 프로젝트에서 MVVM 패턴으로 아키텍처를 구성하다 보니, 데이터 바인딩을 이용하여 일회성 이벤트를 처리해야 하는 경우가 생긴다. 경고문 출력, 액티비티 이동, 혹은 프래그먼트 전환 등. 아마 그런 경우 대개 이런 형태를 취할 것이다. 데이터바인딩 – 뷰모델 – LiveData – Activity or Fragment 에서 옵저빙 그러나 문제가 있다. LiveData는 ViewModel의 데이터를 핸들링하기 위해 사용하는 동시에, 기기의 상태…

Android RecyclerView에 구분선 추가하기

기존 ListView를 사용할 때에는 디폴트로 구분선이 있어서, Divider를 매번 지워주는 수고스러움이 있었다 그와 반대로 최근 많이 사용하는 RecyclerView는 기본적으로 구분선을 제공하지 않아서, 구분선이 필요할 때에는 직접 추가해야 한다. ItemDecoration을 이용하면 각 아이템 사이에 자유자재로 뷰를 추가할 수 있는데, 이를 상속하여 구분선을 추가할 수 있다. 다만, 구분선을 간단하게 추가하는 부분은 사용 빈도가 높아서 그런 것인지 따로…

Algorithm Training – 이진 탐색

요즘들어 다시 알고리즘 이론 공부를 시작하고 있다. 이글에서는 이진 탐색 알고리즘 (Binary Search Algorithm)을 공부한 내용을 간단하게 정리한다. 선형탐색과 달리 검색 범위를 매회 절반정도로 감축함으로서 효율을 높이는 탐색 방법이다. 탐색 범위의 중간에 위치한 요소를 가져와, 찾고자 하는 키워드와 비교해서 범위를 점점 줄여나간다. 하지만 그 때문에 요소가 오름차순 또는 내림차순으로 정렬된 배열에서만 작동한다. 본 알고리즘의 기본…

Kotlin – 유효성 체크 isEmpty, isBlank, isNullOrEmpty

개발을 하면서 문자열의 유효성을 체크해야 되는 경우가 있다. 이를테면 사용자가 필드에 값을 입력하였는지를 판단하는 때가 있다. 이런 식의 유효성 체크 방법은 매우 익숙하다. Kotlin 에서는 이런 유효성 체크 로직에 대해 몇 가지 함수들을 기본적으로 제공한다. 대표적으로 isEmpty(), isBlank(), isNullOrEmpty, isNullOrBlank 가 있다, 이 함수들이 각각 어떻게 결괏값을 내주는지 알아보자. isEmpty() isEmpty는 문자열의 length를 기준으로, 1…