전체 글 (16) 썸네일형 리스트형 [Android] - 내장 DB 룸에 대하여 안드로이드에서 로컬 데이터를 저장할 일이 생기면 자연스럽게 Room을 떠올리게 된다.Room은 SQLite를 추상화한 라이브러리다.쉽게 말하면, SQLite를 직접 다루지 않고도 편하게 쓸 수 있도록 도와주는 친구다.Room은 왜 쓸까?안드로이드에는 SQLite라는 내장 데이터베이스가 있다. 하지만 SQLite는 SQL 쿼리를 직접 써야 하고, 타입도 다 문자열로 관리해야 해서 불편하다.Room은 이런 불편함을 줄이고, 안전하고 간단하게 DB를 다룰 수 있게 도와준다.컴파일 시점에 SQL 쿼리를 검사해준다.코틀린 데이터 클래스와 잘 맞는다.Flow, LiveData 같은 비동기 스트림 처리와도 자연스럽게 연결된다. Room의 3가지 핵심 구성 요소Room은 아래 3가지로 이루어진다.1. @Entity실.. [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 클라이언트 라이브러리로, 직관적인 인터페이스를 제공하여 네트워크.. [Android] - SSE로 실시간 통신하기! 이번 포스팅에서는 단방양 통신을 할 수 있는 SSE에 대해 다뤄보겠습니다. 1. SSE(Server-Sent Events)란?SSE(Server-Sent Events)는 서버에서 클라이언트로 실시간 데이터를 푸시하는 기술입니다. 일반적인 HTTP 요청과 다르게, 서버가 지속적으로 데이터를 보낼 수 있도록 연결을 유지하는 방식입니다.특징단방향 통신(서버 -> 클라이언트)가벼운 HTTP 기반 프로토콜 사용WebSocket보다 간단하게 실시간 데이터를 처리할 수 있음 2. SSE vs WebSocket속성SSEWebSocket연결 방식단방향 통신양방향 통신프로토콜 HTTP 기반TCP 기반자동 재연결기본 지원구현해야함복잡도간담함비교적 복잡 3. 안드로이드에서 SSE 구현하기3.1 의존성 추가implementa.. 이전 1 2 다음