전체 글 (17) 썸네일형 리스트형 [Android] - Polling에서 WebSocket으로 업그레이드 해보자! 1. 왜 바꾸나?실시간 시세 화면을 폴링(REST)로 돌리면네트워크/배터리 낭비가 크다폴링 주기(예: 500–1000ms)보다 더 빠른 변화를 놓친다서버 제한에도 자주 걸린다.그렇기 때문에 실시간은 WebSocket으로 변경 하는 것이 적합하다 판단했다. 오늘은 기존 폴링 구조를 크게 흔들지 않고 WS로 업그레이드해보려 한다 2. 먼저 상태 점검부터일단 로그를 찍어 어느정도의 성능이 나오는지 확인해본다. 위에 스샷을 보면 평균적으로 500ms 때가 나오는 것을 확인할 수 있다 3. 구조는 그대로, 연결만 바꾸자기존 레이어를 지키되 연결 지점만 WS로 바꾼다.NetworkModule: WS용 OkHttpClient 제공DataSource(WS): connect(markets)/tickerListFlowRe.. [Android] - 캔들 차트 최적화 3가지 1. 문제 상황 캔들 차트 화면에서 가로로 스크롤하거나 새 데이터가 들어올 때 차트가 크게 리컴포지션되며 눈에 띄는 버벅임이 있었다. 실시간 데이터가 계속 이어지는 화면이라 작은 부담도 바로 체감 품질 저하로 이어졌다. 이 부분을 개선하기로 했다.2. 먼저 상태 점검부터무작정 손대기보다 어디에서 프레임이 끊기는지부터 확인했다. Android Studio Profiler로 다음을 살폈다.Profiler로 Jank Frame을 확인해보니 위에처럼 심각한 수준으로 프레임이 밀리고 있었다.... 3. 고친 코드들3.1 CandleStick: 3개 박스 → 단일 DrawBefore — 레이아웃 기반(박스 3개)이 방식은 눈에 보이긴 쉬운데, 캔들이 많아지면 화면을 그릴 때마다 각 요소의 크기를 계산하고 어디에 .. [Android] 에러는 없는데 빌드가 안될 때 해결 팁 3가지 안드로이드를 개발하다 보면 에러도 없고 코드도 문제없는 것 같은데, 갑자기 빌드가 안되는 상황을 겪게 되는 경우가 있다.Gradle 로그에도 눈에 띄는 에러가 없고, 재시작을 해봐도 해결되지 않는다면 정말 당황스럽다.오늘은 내가 실제로 겪었던 이슈를 기준으로, "에러 없이 빌드가 안될 때" 유용했던 3가지 해결 팁을 소개한다. 1. 빌드 리프레시 (Build → Clean Project / Rebuild Project)가장 먼저 시도해볼 수 있는 방법이다.✅ 방법Build > Clean ProjectBuild > Rebuild Project이렇게 하면 Gradle이 다시 깨끗하게 프로젝트를 빌드하려고 시도하면서 이전의 빌드 아티팩트들을 제거해준다.✅ 효과적인 상황모듈 간 변경이 꼬였을 때리소스가 변경됐는.. [Android] - cannot be provided without an @Provides-annotated method 트러블 슈팅을 해보자! 오늘은 모의 투자 프로젝트를 진행하면서 겪었던 Hilt 관련 에러를 어떻게 해결했는지 정리해보려 한다. 멀티 모듈 환경 + 여러 개의 API를 사용하는 상황에서 발생한 문제였고, 결론적으로는 Qualifier 어노테이션을 어떻게 사용하느냐가 핵심이었다. 1. 문제 상황 모의 투자 프로젝트에서 업비트 API를 사용하려고 했는데, 앱을 실행하자마자 아래와 같은 힐트 관련 에러가 터졌다. 우리 프로젝트는 멀티 모듈 구조를 사용하고 있었고, 여러 API를 동시에 사용하고 있어 @Qualifier 어노테이션으로 구분하고 있었다. 2. 삽질 과정2.1 첫 번째 시도 - @Provides 붙이기 에러 메시지를 직역해 봤을 때, “@Provides 어노테이션이 없다”는 말이길래 NetworkModule의 관련 .. [Android] - 라이브러리 없이 캔들 차트를 구현해보자!! 이번 포스팅에서는 라이브러리 없이 컴포즈로 캔들차트를 구현한 과정을 설명해보겠습니다. 1. 캔들 차트 데이터 구조일단, 먼저 캔들 차트를 그리기 위해 필요한 데이터 구조부터 살펴보겠습니다. 캔들 차트는 보통 시가(Open), 고가(High), 저가(Low), 종가(Close)를 기준으로 하나의 캔들이 만들어집니다. 따라서, 각 캔들을 표현하기 위해 다음과 같은 형태의 데이터 모델이 필요합니다.data class CandleChartModel( val open: Int, val close: Int, val shadowHigh: Int, val shadowLow: Int) 2. 캔들 그리기일단 먼저 차트를 그리는데에 필요한 하나의 캔들을 먼저 구현해볼 것 입니다.@Composable.. [Android] - Hilt? 의존성 주입? 제대로 알고 쓰고 있어?? 안드로이드 개발을 하다 보면, @Inject, @HiltAndroidApp, @Module 같은 어노테이션들을 한 번쯤은 마주치게 됩니다. 익숙한 문법으로 느껴질 수 있지만, 과연 내가 프로젝트를 할 때 Hilt와 의존성 주입(Dependency Injection)의 개념을 제대로 이해하고 있었던 걸까...? 라는 생각이 들게 되어 이번 포스팅에서는 Hilt와 DI의 기본 개념부터 실제 프로젝트에서 어떻게 활용할 수 있는지, 그리고 주의할 점까지 정리해 보았습니다.1. 의존성 주입이란?DI는 객체 간의 의존 관계를 외부에서 주입해 주는 디자인 패턴입니다.쉽게 말하면, 필요한 객체를 직접 생성하지 않고 외부에서 주입받는 방식이라고 할 수 있습니다.class UserRepositoryclass UserVie.. [Android] - dependency api에 관하여.... 이번 포스팅에서는 NIA 안드로이드 프로젝트를 살펴보던 중, dependency 블록 안에 api()라는 처음 보는 함수를 발견해서, 이게 뭔지 공부해 본 내용을 정리해보려고 합니다.1. api()는 뭐지?보통 의존성을 추가할 때 많이 쓰는 게 implementation이잖아요?dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0")}하지만 NIA에서는 api()라는 게 등장했습니다:dependencies { api("com.squareup.okhttp3:okhttp:4.12.0")}처음엔 "얘도 그냥 implementation이랑 비슷한 거 아니야?" 싶었는데…둘은 확실히 다른 코드였습니다.........2. api() v.. [Android] - OkHttp VS Retrofit 이번 포스팅에서는 안드로이드에서 네트워크 통신을 처리할 때 많이 사용되는 OkHttp와 Retrofit을 함께 사용하는 방법에 대해 알아보겠습니다.1. OkHttp와 Retrofit이란?OkHttpOkHttp는 Square에서 개발한 HTTP 클라이언트 라이브러리로, REST API 호출, 파일 업로드, 웹 스크래핑 등 다양한 네트워크 작업을 수행할 수 있습니다.특징직접 HTTP 요청을 생성하고 관리 가능커넥션 풀(Connection Pool) 지원으로 성능 최적화WebSocket, SSE(Server-Sent Events) 지원강력한 캐싱 및 인터셉터 기능 제공RetrofitRetrofit은 OkHttp를 기반으로 만들어진 REST API 클라이언트 라이브러리로, 직관적인 인터페이스를 제공하여 네트워크.. 이전 1 2 3 다음