본문 바로가기

전체 글140

디자인 시스템을 담당하며 겪었던 일들 https://yozm.wishket.com/magazine/detail/1846/ 디자인 시스템 구축기: ③타이포그래피와 프로젝트 관리 | 요즘IT 디자인 시스템은 디자인 원칙과 규격, 재사용할 수 있는 UI 패턴과 컴포넌트, 코드를 포괄하는 시스템을 말한다. 디지털 제품 개발 환경에서 이러한 디자인 시스템은 점점 더 중요해지고 있다 yozm.wishket.com https://medium.com/mesmerhq/designing-accessible-text-for-android-variable-font-and-screen-sizes-392fd386aea5 Designing accessible text for Android: variable font and screen sizes Designing An.. 2023. 9. 19.
RecyclerView 안드로이드 개발자라면 당연히 아는 Recyclerview. 나는 사용법에 대해서만 띄엄띄엄 알 뿐, 완벽하게 이해하고 사용하고 있지는 않은 거 같아 이번 블로그를 작성하며 완벽히 알고서 사용해보로록 하자. 이전에는.... 고대의 안드로이드 개발자들은 위와 같은 ListView를 만들 때 ListView라는 라이브러리를 사용했었는데....(필자의 처음 개발할때도 ListView를 사용) 아래와 같은 문제점이 있었다. 뷰 재사용 : 뷰를 재사용하기 위해 복잡한 코드를 작성해야 했고 다른 비슷하지만 획일화 되지 않는 어떠한 패턴을 사용하여 개발하였었다.(당시의 블로그를 가보면 다들 만드는 법이 다 다름) 레이아웃 유연성 : ListView는 세로 스크롤을 지원하는 선형 리스트만을 제공해서 좀더 복잡한 뷰를 그.. 2023. 8. 24.
에러 추척 Firebase Crashlytics Android앱을 개발하여 GooglePlayStore에 배포를 하면 많은 이용자들이 사용하게 되는데 사용자들에게서 에러가 발생하여 앱이 강제로 종료된다고 컴플레인이 들어오곤 한다. 그럴때 나는 분명 잘해서 올렸는데 이놈의 안드로이드는 수많은 기기를 대응해야 하기에 직접 확인해보지 않는 이상 알 수 가없다. 이럴때 사용하는 방법은 파이어 베이스의 크래시리틱스(Crashlytics) 라는 기능이다. 파이어 베이스에서 시키는 데로 설정을 해주고 아래와 같이 Crash 버튼을 만들어 테스트를 해보면 아래와 같이 Crash가 난 위치를 알 수 있다. 소감 : 진짜 옛날 개발자들은 어떻게 CS 처리를 한 것인가 의문이 든다....!!! 2023. 8. 14.
Retrofit에 대해 알아보자. 먼저 글을 작성하기 전 안드로이드 진형에서 가장 많이 사용되는 네트워크 통신 라이브러리는 Retrofit이다. 나는 Retrofit을 사용하는 방법에 대해서만 알지 완전히 쏙쏙 사용하는 방법은 알지 못한다... 그래서 이번에 완벽 정리하는 겸해서 작성해보겠다. Retrofit이란 먼저 GPT 선생에게 물어보자. Retrofit은 Square 사에서 개발한 네트워크 통신 라이브러리로, REST API와 통신하기 위해 사용됩니다. Retrofit은 안드로이드 앱이 REST 기반 웹 서비스와 손쉽게 통신할 수 있게 해주며, 필요한 데이터를 빠르게 얻어오는 데 도움을 줍니다. - Retrofit의 장점은 다음과 같습니다: 1. 통신 코드를 간결하게 작성할 수 있습니다. 2. 비동기와 동기 호출 모두를 지원합니다.. 2023. 8. 12.
MedioPlayer에서 ExoPlayer로 전환하는 이유(1) 나는 오늘 한통의 CS를 받았다. 우리가 제공하는 서비스 중 문장을 따라 말하고 녹음하여 분석하고 자신이 녹음한 내용을 들려주는 기능이 존재한다. 그런데 그간 녹음 했던 파일들이 들리지 않는다는 것 이였다. 나는 당연히 고객이 실수 했거나 기기의 문제일 것이라고 생각했지만 고객은 자신의 기기는 이상이 없으니 알아서 고치라고 으름장을 놓았다. 나는 급하게 서버측에 저장된 녹음파일을 확인했더니 왠걸 잘 저장되었고 해당파일은 IOS나 웹에서는 잘 들이는 것이였다......! 나는 모든 케이스의 시도를 해보았고 다른 기기에서 녹음했을때는 이상없이 잘 작동하기에 기기의 문제가 확실한데 IOS와 웹은 해당 파일의 녹음본이 잘 들린다하니.....진짜......... 고객의 불타는 요구에 겨우 겨우 CX팀에게 부탁하여.. 2023. 8. 11.
네비게이션 실전편 GitHub - tnvnfdla1214/Portfolio Contribute to tnvnfdla1214/Portfolio development by creating an account on GitHub. github.com 이번 포스터에는 그간 네비게이션을 학습한 내용을 바탕으로 예제를 만들어 보았다. 예제의 목표는 1. SAA - 구조 2. 프레그먼트 -> 프레그먼트 이동 3. 바텀네비게이션바를 이용한 화면이동 (JetPack Navigation 사용) 1. SAA - 구조 현재 프로젝트의 구조는 위의 사진과 같다. 먼저 주체가 되는 MainActivity와 MainActivity의 전체 화면을 담당할 MainFragment 이번 예시로 개발된 MainFragment영역에서 replace될 NavBa.. 2023. 8. 7.
Single Activity Architecture(SAA)란? 구글은 2018년 Single Activity에 관련된 주제로 Dev Summit을 열었고 위의 내용은 Jetpack의 Navigation을 활용하여 Single Activity를 사용하라고 권장하였다. 그럼 SAA는 무엇인가? 정의는 간단하다. 하나의 Activity와 여러 개의 Fragment를 사용하여 프로젝트를 설계하는 구조이다. 이는 Navigation component 활용하여 보다 쉽게 구조를 설계할 수 있다. 그렇다면 SAA 구조로 설계하는 것은 어떠한 장점이 있을까? 이는 Acitivity와 Fragment의 차이에 대해 생각해보면 설명이 가능하다. 장점 Activity는 Fragment 보다 무겁기 때문에 메모리나 속도 측면에서 이득이다. Activity보다 유연한 UI 빌드가 가능하다.. 2023. 8. 2.
네비게이션이란 (1) 기존에는 프레그먼트를 전환하기 위해 FragmentManager을 사용해왔다. supportFragmentManager.beginTransaction() replace(R.id.frame_layout, TestFragment()) commit() 그런데 구글에서는 JecPack이 도입된 후 FragmentManager을 사용하지 말고 Navigation을 사용하라고 권장하고 있다. 또한 Single Activity Architecture(SAA)를 제안하며 여러가지 문제가 있을 상황을 최대한 낮추고 가능하면 프레그먼트로 화면을 구성하라고 권장했다. SAA 블로그 글 링크 결론은 화면은 최대한 프래그먼트로 전환하고 화면의 전환은 라이브러리에 맞기라는 뜻이다. Navigation의 3대 컴포넌트 Naviga.. 2023. 8. 2.
하나의 프로젝트에서 여러 다른 버전의 앱을 만들어 보자!(2) - 딥링크, 앱링크 이번 글은 DeepLink에 대해서 알아보도록 하자. DeepLink란 딥링크를 사용하면 유저가 앱과 앱을 오가는게 쉬워진다. 웹과 마찬가지로 앱에서도 링크를 통해 특정 콘텐츠로 이동할 수 있는 기능이다. 채팅, 광고, 푸시 알림 등에서 사용자를 특정 앱 화면으로 바로 연결할 수 있습니다. 예를 들어 우리가 모바일 게임을 사전 등록 했다가 출시 당일이 되면 링크가 날라온다. 해당 링크를 클릭하면 스토어로 이동하게 되는데 만약 앱이 설치한 후 다시 링크를 누르게 되면 바로 해당 게임이 열린다. 그럼 그 링크를 만드는 법과 종류에 대해서 알아보자. URI 스킴(URI Scheme) URI 스킴은 앱을 실행하거나 특정 기능을 실행하기 위해 사용되는 고유한 식별자이다. 우리는 티스토리의 특정 페이지로 이동할때 .. 2023. 7. 19.
딥링크와 앱링크 딥링크란 딥링크를 사용하면 유저가 앱과 앱을 오가는게 쉬워진다. 웹을 보다가, 특정 화면만 유저가 앱으로 봤으면 하는 경우 딥링크가 작동하는데, 이때 유저가 앱을 깔아두었으면 바로 해당화면으로 이동한다. 웹을 서핑하다가 앱으로 보내려고할 때 ... 해당 서비스의 앱이 있다면 - 해당 앱으로 이동한다. 해당 서버스의 앱이 없다면 - 해당하는 store로 이동한다. 이 기능을 가능하게 해주는데 딥 링크이다. 링크의 형태는 앱 스킴(URL 스킴) 혹은 일반적인 https:// 링크 두 가지 형태를 둘다 지원한다. 즉 https://www.example.com 혹은 app://open.my.app 두 형태를 모두 지원한다는 말이다. 또한, 아래 그림처럼 눌렀을 때 필요한 앱을 직접 선택할 수 있도록 한다는 특징.. 2023. 7. 19.
Coroutine, Thread 와의 차이와 그 특징 Coroutine, Thread 와의 차이와 그 특징 처음 Kotlin 를 사용하던 중에 비동기 처리를 위해 Coroutine 개념을 마주했었습니다. 동기란 요청을 보낸 후 요청에 대한 반환값을 얻기 이전까지 대기하는걸 의미하고, 비동기는 그 대기시간동안 aaronryu.github.io Process & Thread Process: Program 이 메모리에 적재되어 실행되는 인스턴스 Thread: Process 내 실행되는 여러 흐름의 단위 먼저 Thread 는 Process 보다 작은 단위의 실행 인스턴스로만 알고 있는데, 메모리 영역도 조금 다르다. Process 는 독립된 메모리 영역(Heap)을 할당받고 각 Thread도 독립된 메모리 영역(Stack)을 할당받는다. Thread 는 본질적으로.. 2023. 7. 17.
하나의 프로젝트에서 여러 다른 버전의 앱을 만들어 보자!(1) - product flavors, build variants 1. 딥링크 앱링크 2. 'product flavors' 또는 'build variants'를 활용하는 것 안드로이드 스튜디오를 사용하여 하나의 프로젝트에서 여러 다른 버전의 앱을 만드는 방법은 주로 'product flavors' 또는 'build variants'를 활용하는 것입니다. 이를 통해 동일한 코드 베이스를 공유하면서도 약간 다른 버전의 앱을 만들 수 있습니다. 1. Product Flavors': 'build.gradle(Module: app)' 파일에서 'productFlavors'를 설정하여 각각의 앱 버전에 대한 고유한 설정을 할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.여기서 'free'와 'paid'는 각각의 앱 버전을 나타냅니다. 'applicationId'는 .. 2023. 7. 17.
레이어 구조를 모듈로 나눠보자 이전 글에서는 아키텍쳐를 어떻게 나누고 해당 레이어 간의 종속관계에 대해 설명하였다. 해당 레이어간의 종속관계를 그림으로 표현하면 아래와 같다. 그런데 우리는 인간이기에 레이어간 나누고 종속관계를 컨벤션으로 할지어도 의존을 무시하고 개발 할 수 있다. 그러므로 우리는 강제적으로 의존의 흐름을 만들어야 하는데 이는 라이브러리(혹은 모듈)을 만들어 의존을 강제할 수 있다. 이번 편에서는 라이브러리를 만들어 아키텍쳐로 나누는 법에 대해 알아보자. 먼저 레이어에 대해 모듈을 만드는 방법은 아래 사진과 같다. 처음 앱을 생성했을때 app모듈이 생되는데 Application 클래스가 위치된다. app모듈은 ui 모듈로 사용하고 나머지 domain 모듈과 data 모듈을 생성한다. 생성하면 아래와 같다. APP모듈(.. 2023. 7. 7.
Architecture 구조도 (이론편 - Data 레이어) 2023. 7. 7.
Architecture 구조도 (이론편 - Domain 레이어) 2023. 7. 7.