[Android] AppLink 인앱 브라우저 호환 문제 처리
·
Android
들어가며앱을 개발하다 보면 "URL을 눌렀을 때 앱이 바로 열리게 하고 싶다"는 요구를 자주 듣습니다.이를 가능하게 하는 기술이 바로 `DeepLink`입니다. 최근 진행하고 있는 `보따리`라는 프로젝트에서도 초대 링크를 눌렀을 때 앱이 열리도록 `AppLink`를 적용했지만카카오톡이나 인스타그램 등 인앱 브라우저에서는 정상적으로 동작하지 않는 문제가 있었습니다.이 글에서는 DeepLink의 개념부터 AppLink가 등장한 이유,그리고 보따리 앱에서 이 문제를 어떻게 해결했는지를 차례로 정리합니다. DeepLink란?`DeepLink`는 말 그대로 "사용자를 특정 앱으로 이동시켜서 원하는 화면을 보여주거나, 사용자 액션을 유도하는 링크"입니다.웹의 URL처럼 보이지만 브라우저 대신 앱을 직접 실행시켜 특..
Build Logic으로 멀티모듈 공통 빌드 설정 효율적으로 관리하기
·
Android
프로젝트의 기능이 확장되면서 모듈 구조의 복잡도가 급격히 높아졌다.초기에는 단일 모듈(:app)로 시작했지만 기능별 책임을 분리하기 위해 멀티모듈 구조로 리팩터링을 진행했다.그러나 시간이 지날수록 공통 빌드 설정이 여러 모듈에 중복되면서 관리 포이트가 늘어나는 문제가 발생했다. 멀티 모듈 프로젝트 구조Stacko/ ├── app/ # Entry point (Application) ├── feature/ │ ├── home/ # 홈 화면 │ ├── search/ # 검색 기능 │ ├── detail/ # 상세 화면 │ └── settings/ ..
[Comopse] Android Compose Theme 살펴보기
·
Android/Compose
왜 Theme가 필요한가?안드로이드 개발에서 UI는 앱의 첫인상을 결정합니다.하지만 화면이 많아질수록 색상, 글꼴, 모서리 둥글기 같은 스타일을 각 화면마다 직접 지정하는 방식은 유지보수가 매우 어렵습니다. 이를 해결하기 위해 Compose는 Theme 개념을 도입하여 앱 전반에 일관된 디자인을 주입합니다.일관성: 버튼, 텍스트, 카드 등 공통 UI 컴포넌트가 동일한 스타일로 표현재사용성: 여러 화면에서 동일한 색상/글꼴/모양을 공유유지보수성: 브랜드 리뉴얼, 다크 모드 대응 시 코드 수정 범위 최소화특히 Compose는 Material Design 3(M3)를 기본 권장하며, MaterialTheme를 통해 색상, 글꼴, 모양을 한 번에 관리할 수 있습니다. MaterialTheme 살펴보기Materi..
[Git] Github Labels 한 번에 적용하는 방법
·
Etc/Git
Github Repo를 생성할 때마다 수동으로 추가하던 Label을 한 번에 적용하는 방법을 알게 되어 소개하려고 합니다. 📌 준비물git-labels.json"name": "라벨 이름","color": "라벨 색상","description": "라벨 설명"[ { "name": "⚙ Setting", "color": "e3dede", "description": "개발 환경 세팅" }, { "name": "✨ Feature", "color": "a2eeef", "description": "기능 개발" }, { "name": "🚀 Deploy", "color": "C2E0C6", "description": "배포 관련" }, { "name..
[Compose] 한국 이름 입력을 위한 TextField 구현 (+천지인)
·
Android/Compose
한국에서 이름 입력 시, 천지인 키보드와 삼성 한손모아키 키보드의 호환성을 고려해야 합니다. 특히, 두 키보드에서 미들닷(ㆍᆢ)의 표현이 다르기 때문에 이를 적절히 처리하는 정규표현식을 사용해야 합니다. 정규표현식입력 필터링을 위한 정규표현식은 다음과 같습니다:val regex = Regex("^[가-힣ㆍᆞᆢㄱ-ㅎㅏ-ㅣ]*$") 이 정규표현식은 한글 문자(가-힣), 미들닷(ㆍ, ᆢ), 그리고 자음(ㄱ-ㅎ)과 모음(ㅏ-ㅣ)을 포함하여 오직 한국어만 입력받도록 설정합니다.미들닷(ㆍ)이 두 개인 이유는 삼성의 한손모아키에서 사용되는 미들닷(ㆍ)이 천지인과 다르기 때문에이를 모두 대응하기 위해 추가하였습니다. 예시 코드아래는 Compose를 사용하여 한국어 입력을 처리하는 KoreanTextField 컴포저블 ..
[Git] CHANGELOG.md Generate
·
Etc/Git
지난 포스트에서 AngularJS Commit Convention에 대해 정리했습니다.이번에는 정리한 내용 중에서 CHANGELOG.md를 직접 생성해보려 합니다.  📌 CHANGELOG.md생성하기에 앞서 CHANGELOG.md가 뭔지 설명해 보겠습니다.CHANGELOG.md는 Release 시점에 Commit Message를 및 별로 정리해 놓은Markdown 형식의 파일입니다. 따라서, 프로젝트의 feature, bug fix, refactor 등으로부터 변경된 변화를 한눈에 파악할 수 있습니다.  📌 간단한 생성 방법이전 글에서도 소개해드렸는데 Git 명령어를 통해 생성하는 방법입니다.git log --pretty="- %s" > CHANGELOG.md위와 같이 명령어를 입력 후 실행하면 ..
[Git] AngularJS Commit Conventions
·
Etc/Git
우아한테크코스 프리코스 진행을 하면서 요구사항 중 AngularJS Commit Convention을 참고하여커밋 메시지를 작성하라는 요구사항이 있었습니다. 그래서 이번 기회에 정리해보며 사용 방법을 익혀보려고 합니다.자료는 해당 링크를 참고했습니다. 📌 CHANGELOG.md 생성변경 기록에는 다음 세 가지의 내용이 포함되어 있습니다.1. New Feature2. Bug Fixes3. Breaking Changes 사용자가 정의한 여러 스크립트에 따라 다양한 형식의 CHANGELOG를 생성할 수 있습니다. 아래 명령어로 간단한 형태의 CHANGELOG.md를 생성할 수 있습니다.git log --pretty="- %s" > CHANGELOG.md  📌 중요하지 않은 Commit 식별중요하지 않은 커..
[Compose] SMS Retriever API - SMS 인증번호 자동입력
·
Android/Compose
Google Play Service에는 SMS 기반 확인 프로세스를 간소화하는 데 사용할 수 있는 두 가지 API가 있습니다. SMS Retriever APISMS User Consent API SMS Retriever API는 정말 자동화된 사용자 경험을 제공하므로 가능한 경우 사용하는 것이 좋습니다.하지만 메시지 본문에 사용자 정의 해시 코드를 입력해야 하며, 해당 메시지를 보낸 사람이 아니라면 이 작업을 하는 것이 어려울 수 있습니다. 메시지의 내용을 제어할 수 없는 경우(예: 앱이 앱 내에서 결제 거래를 승인하기 전에 사용자 전화번호를 인증할 수 있는 금융 기관과 협력하는 경우) 커스텀 해시 코드가 필요하지 않은 SMS User Consent API를 사용할 수 있습니다. 그러나 사용자에게 앱의 ..
[Compose] SnackBar Duration Custom
·
Android/Compose
SnackBar란? SnackBar는 간단한 메시지를 사용자에게 전달하는 UI 구성 요소로, 주로 아래와 같은 용도로 사용됩니다.정보 전달: 작업의 결과나 상태에 대한 피드백을 제공합니다.사용자 액션 유도: 사용자가 특정 작업을 수행하도록 유도할 수 있습니다(예: "취소" 또는 "다시 시도" 버튼 포함). SnackBar 구현하기 Android Compose에서 SnackBar를 사용하기 위해서는 `Scaffold`와 `SnackbarHost`를 이용해야 합니다.아래는 기본적인 SnackBar 구현 예제입니다.val scope = rememberCoroutineScope()val snackbarHostState = remember { SnackbarHostState() }Scaffold( snack..
[Compose] Modifier Extension - DrawScrollbar
·
Android/Compose
drawScrollbar 함수는 Modifier 클래스에 대한 확장 함수로, LazyColumn에 커스텀 스크롤바를 그릴 수 있게 해줍니다.이 함수는 drawBehind를 사용하여 컴포저블의 캔버스에 직접 스크롤바를 그립니다. 해당 함수는 아래 이슈를 참고하였습니다. Google Issue Tracker issuetracker.google.com /** * LazyColumn을 위한 사용자 정의 스크롤바를 그리기 위한 확장 함수 * * @param state LazyListState로, lazy list의 상태를 포함 * @param barColor 스크롤바의 색상 * @param barWidth 스크롤바의 너비 * @param barBottomPadding 스크롤바의 하단 패딩 */ fun Modifi..