Android 19

Room 데이터베이스 복습 (nowinandroid 를 예로 간단히 살펴보기)

이번에 가벼운 사이트 프로젝트를 진행하는데, MVP 때는 서버 없이 작업하게 되었다. 그에 따라 로컬 데이터소스만을 활용해서 데이터를 관리해야해서 오랜만에 디비 셋업부터 여러 쿼리를 작성하게 되었다. 그래서 앞으로 입문부터 쿼리 예시, 마이그레이션, 서버와 동기화 등의 주제로 포스팅하려하는데 오늘은 그 시작인 입문이다. 왜 로컬에 데이터를 저장해야하는 경우가 생기는지, 왜 Room 을 쓰면 좋은지, 구성요소는 어떻게되고, 기본적인 사용예시까지만 소개하려한다. 로컬에 데이터를 저장해야하는 경우 예시 대부분 인터넷이 끊긴 경우에도 유용한 정보를 보여주기 위함이다. 네이버 웹툰을 즐겨 사용하는 안드로이드 유저라면 지금 인터넷 연결을 해제하고 네이버 웹툰을 들어가보았을 때 인터넷이 끊겼음에도 배너를 제외한 홈화..

Android/Room 2023.01.15

[Android/Compose] 헷갈려서 딱 정리하는 Compose 정렬(Alignment)과 배치(Arrangement)

들어가며 필자는 최근에 사이드 프로젝트에 Compose 를 사용해보았는데 헷갈리는 것들이 많았습니다. Compose 공식문서에 왼쪽 카테고리에 있는 모든 글을 읽고 코딩을 시작해서 헷갈리면 금방금방 찾아갈 수는 있었지만 그조차 시간이 아까운 경우가 있습니다. 그 시간 아깝게 헷갈리는 것들 중 하나가 바로 방향에 따른 Alignment 와 Arrangement 입니다. xml 에서의 gravity, layout_gravity 의 개념으로 접근했다가 더욱 헷갈렸던 기억이있어 잠깐 내려놓아야할 거 같습니다. Alignment(정렬) 컨테이너의 수직 방향 정렬방식 일반적으로, 상위 컨테이너 내부에서 컴포저블을 정렬하기 위해 상위 컨테이너의 alignment 를 설정. 그렇다면 컨테이너의 모든 하위 요소가 동일한..

Android 2023.01.06

[Android/Compose] Composable 에서 Runtime permission 요청하기

최근에 처음으로 Notification 런타임 권한요청을 할 일이 생겨서 정리하는 시간을 가져보았다. (링크 첨부) 사이드 프로젝트는Jetpack Compose 100% 로 진행하고 있는데 Composable 함수에선 어떻게 런타임 권한요청을 할지 궁금해졌다. 직접 만들어 쓸 수도 있겠지만 권한처럼 필수적인 기능은 공식에 가까운 라이브러리가 있을 것 같았다. 찾아본 결과 google 레포의 accompanist 에 Permission 섹션이 있었다. 간단한 사용법과 구현 코드 그리고 주의점에 대해 알아보자. 사용방법 간단하게 정리 먼저 아래와 같이 권한을 추가해준다. 버전은 현재 프로젝트의 Compose 버전을 확인하여 리드미에 나와있는대로 accompanist 라이브러리의 버전을 설정한다. implem..

[Android/Kotlin] 딱 정리해, targetSdk 33 후 알림 권한요청 (Feat. 푸시 옵트인 작업)

안드로이드 13 이 등장하면서 targetSdk 버전을 올리는 것에 대해 고민이 많아졌다. 세분화된 미디어 권한이나, 구글 플레이 서비스 광고 ID 설정, 포그라운드 서비스, 알림 등등이다. 그 중에서 오늘은 알림, 특히 알림 권한 요청에 대해 글을 써보려고 한다. 마침 최근에 회사에서는 알림 옵트인 작업을, 사이드 프로젝트에서도 알림 관련작업을 하게 되어 비교적 생생하기 때문이다. (틀리거나 부족한 게 있다면 공유해주시면 정말 감사합니다.) Android 13 부터 알림은... Android 13의 알림은 옵트아웃 모델을 사용하는 이전 Android 버전에서 변경된 옵트인 모델을 사용 (출처: developers) 즉, 안드로이드 13부터 알림은 옵트인이라는 말이다. 안드로이드 12 이하는 옵트아웃(옵..

[Android/Kotlin] Jetpack Compose, Navigation component, BottomNavigation 사용하여 화면이동 세팅

사용하게된 계기 첫 회사 입사 후 일을 배우는 것에만 집중하다가, 더 많은 성창을 위해 사이드 프로젝트를 시작했다. 내 사이드 프로젝트의 목표는 기술 경험이 중점이었다. 그래서 회사에서 아직 활발하게 쓰지않는 새로운 기술스택을 사용하기로 했고, UI 툴킷으로 Jetpack Compose 는 내 사이드 프로젝트에서 필수 기술이 되었다. 초반에 컴포즈 공부하고 프로젝트 초반 세팅을 하던 와중에 네비게이션 가능인가? 였는데 역시나였다. 그렇게 Navigation - compose 를 사용하게 되었다. 단순 사용법 단순 사용법은 링크를 확인하는 게 좋을 것 같다. 아래 부터는 바텀 네이게이션을 통합하면서 했던 고민과, Destination 관리, 경로 관련 주의 점을 말하려고 한다. 공식문서 - Compose를..

[Android/GraphQL] Apollo Kotlin (시작 ~ 쿼리실행)

[목차] - 도입 - 용어 정리 - 프로젝트에 Apollo 추가하기 - Schema 추가하기 - 쿼리 추가하기 - 쿼리 실행하기 - 마무리 [도입] 이름과 대략적인 내용만 들어보고 써보진 않았다. 최근에 쓰게될 일이 생겨서 그 전에 테스트 겸 셀프 실습을 진행해본다. 모킹 서버를 어디서 찾을까 하다가 Rick and morty (예전에 즐겨본 애니메이션) api 가 눈에 들어왔고 Apollo, GraphQL 공식문서를 참고하여 적용하려 한다. 설레는 마음으로 시작! 릭앤모티 api Documentation This documentation will help you get familiar with the resources of the Rick and Morty API and show you how to m..

[Android/Firebase] 기존 프로젝트에 Crashlystics 적용하기

[선 반성] Firebase Crashlytics 는 실시간으로 내가 에러를 확인할 수 있게 해주는 툴이다. 지능적으로 크래쉬를 묶어주고 그 문제가 난 상황을 강조해서 개발자의 트러블슈팅 시간을 줄여준다. 마일스톤에 맞춰 앱 런칭이 제 1의 목표였던 시기를 지나 서비스를 고도화하기 위해 도입을 시작한다. 이제야 적용하게 되는 것을 반성한다. 이번 글은 도입 자체가 주이고(그래서 이론/학습 카테고리) 활용도 (실전/회고 카테고리에) 앞으로 쓸 예정이다. [시작해보기] 시작하려면 먼저 Firebase 에 Crashlytics 를 사용하려는 안드로이드 프로젝트를 등록해야한다.등록이 되어있음을 전제한다.그럼 Firebase Crashlytics 시작하기 | Firebase Documentation Join Fi..

[Kotlin/백준] 5430, AC (시간초과 해결)

[도입] 명령어 문자열와 배열을 주고 각 명령어가 R 이면 뒤집고 D 면 앞 원소를 빼서 결과를 반환하는 문제 자세한 내용은 아래 링크를 참고 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net [잘못된 풀이] 처음에 아래 방식처럼 reversed 와 drop 을 사용해서 계속해서 새로운 리스트를 생성하고, 심지어 reversed 는 내부 구현을 살펴보니 O(N) 인데 그걸 매번 불러서 시간초과가 났었다. 그것도 모르고 R 두 번 연속인 거 지우고 D 연속으로 나오면 일괄처리하는 등의 삽질을 했다. 아래는 그 초기 코드이다. import java.io.BufferedR..

[Android] Firebase 기반 채팅 구현 적용기와 앞으로의 계획 (MVVM)

[발단] 채팅 기능이 핵심이 되는 데이팅 앱 프로젝트를 맡게 되었다. 채팅을 어떻게 구현할지 다른 Ios, Server 담당 개발자 팀원과 많은 회의를 거쳤다. 주요 이슈는 채팅을 구현하는 여러 방법(유료 SDK, Firebsae, 자체 서버 등) 중에 Firebase 를 선택했다. 그 이유는 매우 저렴하고(여기서 유료 SDK 탈락) 자체 채팅 서버를 제대로 구축할 시간을 벌 수 있어(여기서 자체 서버 탈락) 부담이 줄기 때문이다. 핵심기능을 중심으로 MVP 를 만들어 피드백을 받고 발전시켜야 하는 상황에서 Firebase(특히 Firestore) 로 먼저 서비스를 진행하며 자체 채팅 서버를 구축하고 채팅 서버 마이그레이션을 진행하자는 게 주 요지였다. 그렇게 채팅 메시지는 Firestore 로 관리하고..

[Android] WorkManager 로 복잡한 백그라운드 작업을 쉽게 해결한다고? (기본 사용법과 예시코드 포함)

[공부하게된 계기] 안드로이드 공부를 시작하고 스레드를 이용한 적은 있지만 앱 프로세스가 죽어서도 백그라운드에서 작업하게 할 일이 없었다. 하지만 최근 타이머 관련 오픈소스 작업을 시도하며, 그리고 과제전형 문제를 풀면서도 백그라운드 작업을 공부하게 되었는데 백그라운드 관련 라이브러리 중에서 최근 가장 핫한 WorkManager 를 공부해야겠다고 생각했다. [그래서 WorkManager 뭘 하는 건가?] 백그라운드 세 가지 작업종류의 persistent work 를 다루는데 추천되는 라이브러리이다. 백그라운드 작업의 종류에 관해서는 내가 전에 써놓은 아래링크를 참고하면 된다. [Android] 안드로이드의 Background 작업 Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작..