본문 바로가기

전체 글

(86)
Ktor text/html content-type 반환으로 인한 문제 해결 Response header `ContentType: text/html; charset=utf-8` Request header `Accept: application/json` 안드로이드에서 Ktor를 사용하다가 보면 마주칠 수 있는 문제다. 보통 원인은 아래의 둘 중 하나이다. 1. Response 타입 불일치 클라이언트가 서버에게 특정 형식의 응답(ex. application/json)을 기대하고 있지만, 서버는 'text/html; charset=utf-8' 형식으로 응답하는 경우 2. Converter의 부재 현재 Ktor Client 설정에 "text/html" 형식의 응답을 처리할 수 있는 컨텐츠 컨버터(Content Converter)가 없는 경우 이 경우, HTML 형식을 처리할 수 없어 N..
[최신 이슈] kotlinx.serialization, plugin is not applied to the module오류 (ft. IDE 1.9.10) 해당 글을 작성하는 시점인 2024.01.04일 기준으로 kotlinx.serialization의 @Serialize 어노테이션을 사용하면 아래와 같은 Warning 문구가 나타난다. kotlinx.serialization compiler plugin is not applied to the module, so this annotation would not be processed. Make sure that you've setup your buildscript correctly and re-import project. 무시하고 빌드하면 아마 아래와 같은 빌드 오류 메시지를 확인 할 수 있을 것이다. IDE: False PLUGIN_IS_NOT_ENABLED in IDE for kotlinx serializ..
ROOM DB 마이그레이션 오류 개선 앱 업데이트를 진행하면 참 기상천외한 버그들을 많이 보는 것 같다. 특히 DB 관련 로직을 수정하면 재현조차 되지 않는 버그들을 흔히 볼 수 있다.. data class에 컬럼을 추가해서 업데이트를 했는데 마이그레이션 코드에서 이미 존재하는 컬럼에 대한 중복 추가 오류로 Fatal Exception: android.database.sqlite.SQLiteException duplicate column name:~~~ 요런게 계속 발생했다. 비록 전체 사용자의 10%도 안되는 장애지만, 일단 장애가 발생하니 묵인할 수는 없다. 아니 근데 없던 걸 추가했는데 중복 이름이 생기다니 게다가 내 테스트 환경에서는 재현조차 안된다니 이걸 어떻게 해결할지 머리 터지게 고민했다 아무 문제없이 업데이트 적용이된 나머지 ..
BuildConfig가 생성 또는 import가 안될 때 브르므글 이거 때문에 서칭하고 어쩌고 하다가 40분 날려먹었다. Ktor 적용을 위해 테스트 삼아 Sample 코드를 작성하는데.. Debug 환경에서 로깅을 하려는데 계속 BuildConfig가 생성도 안되고 Import도 안되었다. import 패키지명.BuildConfig 원래 이렇게 하면 되야하는데 어림도 없지ㅋㅋ 무적의 Clean Project -> Rebuild Project도 어림없도 File -> Invalidate Cache를 해도 안된다. 아래 링크를 참조해서 buildFeatures { buildConfig true } 이렇게 해도 안됨 ㅎ https://stackoverflow.com/questions/20706451/buildconfig-not-getting-created-corr..
Haversine 공식으로 두 지점간의 거리를 구하기 이번에 신규 기능을 추가하기로 했다. 대충 배달어플에서 라이더가 목적지에 근접하게되면 판매자나 소비자에게 곧 도착한다는 알림을 전송하는 기능을 만들어 보자는 내용 앱 네비에서 어차피 경로를 표시해 주니깐 거기서 몇 미터 남았을때 호출할까.. 아니면 일정 범위를 설정한 뒤, 해당 범위 내에 접근하면 무조건 호출할까 고민 좀 했다. 어느 길로 가든 일단 인접하면 연락이 가게하는게 맞다고 생각되어 후자로 선택 그럼 해당 범위에 들어갔는지 계산하는 함수가 필요한데.. 여기서는 헤버사인(Haversine) 공식을 사용하는게 좋다. 지구상의 두 지점간의 거리를 계산할때 사용되는 공식이며, 일반적으로 위도(latitude)와 경도(longitude)를 사용해서 두 지점간의 최단 거리(대원의 호)를 계산한다. 수식은 ..
집합: Set, MutableSet Atomic Kotlin Atom26: 집합을 정리한 내용에 개인 스터디한 것을 추가 Set Set은 각각의 값이 오직 하나만 존재 가능한 컬렉션 보통 in이나 contains()를 사용해서 원소 포함여부를 검사할 때 사용 fun main() { // 중복 허용 안함 val intSet = setOf(1, 1, 2, 3, 9, 9, 4) // 원소 순서는 중요x println(setOf(1, 2) == setOf(2, 1)) // >> true // 원소 포함 여부 검사(in) println((9 in intSet) == true) // >> true println((99 in intSet) == false) // >> true // 원소 포함 여부 검사(contains) println(intSet.co..
가변 인자 목록: vararg Atomic Kotlin의 Atom 25를 정리한 내용입니다. vararg 키워드는 길이가 변할 수 있는 인자 목록을 만든다. 이 키워드를 사용하면 listOf()처럼 임의의 길이로 인자를 받을 수 있는 함수를 정의할 수 있다. vararg는 가변 인자 목록(Variable argument list)의 줄인 말. 함수 정의에는 vargarg 로 정의된 인자가 최대 한개만 존재 가능하다. 파라미터 목록에서 어떤 위치에 있는 파라미터 든지 vararg로 선언 가능하지만, 일반적으로 마지막 파람을 vararg로 선언하는게 편하다. fun v(s:String, vararg d: Double){} 임의의 개수만큼(0 포함) 인자 전달 가능. 모든 인자는 지정한 타입에 속해야 함 함수 본문에서는 파람 이름으로 va..
Retrofit2: 기본 사용 최신화: 2023.11.29~30 ‣ Intro Retrofit은 RESTful API를 사용 중인 안드로이드 개발자에게 매우 도움이 되는 라이브러리다. 이번 글에서는 Retrofit의 개념에 대해 공부해보자. ‣ Retrofit2? Retrofit2는 Android 및 Java 어플리케이션에서 사용되는 Type-Safety HTTP 클라이언트 라이브러리다. Square에서 개발되었으며, RESTful API 통신을 단순화하여 앱의 성능을 개선하는데 중점을 두고 있다. 정말 필요해서 Ktor같은 다른 웹 서비스 라이브러리를 사용하는 경우를 제외하면, 안드로이드의 통신분야에서 가장 많이 사용되는 라이브러리다. 그럼 왜 이렇게 Retrofit이 안드로이드 개발자들에게 각광을 받을까?? 다음과 같은 Retro..