본문 바로가기

전체 글

(95)
AccessToken 재발급과 예외 처리 (feat.Ktor) 동기 예외는 전형적이지 않은 경우나 사건을 의미합니다. 프로그래밍을 하다보면 정말 수없이 겪게 되는 것이 예외 상황인데요. 오늘은 Ktor 와 JWT 사용에 있어서 발생할 수 있는 예외 상황에 대한 처리를 하였습니다. 그 과정 중 저는 어떤 문제를 만났고, 어떤 고민을 했는지, 또 그 고민을 어떻게 해결하였는지에 대해 포스팅하려 합니다. 주니어 개발자(지망생?)의 시선이므로, 잘못된 내용이 포함될 수 있어 해당 포스트에서 나올 기술적인 부분에 대해 참고하시는 것은 고려해보시면 좋을 것 같습니다. 요구 사항은 무엇이었나? 서버의 API 를 이용하기 위해 JWT 를 활용하는 상황입니다. 모든 API 통신에 대해 AccessToken 이 요구되고, AccessToken 이 만료되면 RefreshToken 을 ..
[Jetpack Compose] ImageCropper 라이브러리 없이 구현하기 Part II 동기 비슷한 포스트를 이전에도 작성한 일이 있습니다. 그 당시에도 프로젝트에 들어갔던 코드를 활용해서 포스팅 했었는데, 당시엔 Jetpack Compose 가 그다지 익숙치 않기도 했고, 애초에 개발에 대한 인사이트도 그리 훌륭하진 않았습니다. 이번 네이버 부스트캠프 그룹 프로젝트에서도 비슷한 기능을 구현하게 되었는데, 이전과 조금은 다른 점이 있기에, 기록을 통해 다시 한 번 학습하고자 합니다. 이전엔 어땠는가 [Jetpack Compose] ImageCropper 라이브러리 없이 구현하기 현재 진행중인 사이드 프로젝트에서는 카카오 및 구글 로그인을 사용합니다. 그러므로, 이미지를 촬영 또는 디바이스에서 불러와 이를 수정 및 등록할 수 있도록 구현해야 합니다. 당연히 유수 blothhundr.tisto..
Ktor 적용기 (feat.Ktor Generics Response Handler) 동기 현재 진행 중인 네이버 부스트캠프 파이널 프로젝트를 처음 시작할 때에, 팀 동료들과 기술 스택에 대해 이야기를 나눴습니다. 사용할만 한 여러 스택들에 대해 의논하였고, 적절한 스택들이 채택되었습니다. 그렇게 개발을 별 일 없이 진행하던 중, API 가 하나 둘 씩 나올 때가 되어 이를 연동하기 위해 Retrofit 에 관한 이런 저런 셋팅을 준비하려 했습니다. 의존성을 추가하려던 순간, 문득 Retrofit 을 그냥 적용하는게 맞나? 라는 의문이 들었습니다. 결국엔 Ktor 를 적용하기로 결정했죠. 결정의 이유는 세 가지가 있었는데요. 늘 가던 길을 선택하고 싶지 않았던 것이 첫 번째 이유였습니다. 새로운 것을 배워보고 싶었거든요. 이 때 아니면 또 언제 해보겠어라는 생각이 들었습니다. 두 번째 이..
Third-Party-Library 없이 비디오 컷 편집 기능 구현하기 동기 네이버 부스트캠프의 꽃, 그룹 프로젝트를 개발하고 있습니다. 실력있는 동료들과 함께 비디오와 관련된 앱 서비스를 기획, 디자인, 개발하고 있는데요. 제가 낸 주제이기도 하고, 비디오와 관련된 작업을 경험하고 싶었기도 해서 굉장히 즐겁게 개발하고 있습니다. '앱 내에서 비디오 컷 편집을 할 수 있다면 편하지 않을까?' 라는 생각이 들었고, '라이브러리 없이 개발하면 분명 어렵겠지만, 그만큼 배우는 것도 많고 재미도 있지 않을까?' 라는 생각도 들었습니다. 그래서 스스로의 기술적 도전 과제로 설정하여 구현해보기로 마음 먹었습니다. 해당 포스트는 라이브러리 없이 직접 비디오 컷 편집을 개발하는 과정과, 그 과정 안에서 알게 된 것을 기반으로 작성됩니다. Jetpack Compose 에서 비디오 불러오기 ..
[Jetpack Compose] Clickable 이 외의 Ripple Effect 없애기 동기 네이버 부스트캠프 마지막 프로젝트 진행 중, BottomNavigation 의 Ripple 이펙트를 없애는 게 좋을 것 같아 이를 제거해달라고 동료분께 부탁드렸습니다. Clickable { } 이라고 생각을 해서 부탁드렸던 건데, 해당 Composable 을 보니 Clickable 속성이 아닌 다른 방식으로 터치를 받았습니다. 포스트 제목이 Clickable 이 외의 Ripple Effect 없애기 인 이유는, Clickable { } 일 때의 Ripple Effect 를 없애는 것에 대해서는 일전에 작성한 포스트가 있기 때문입니다. [Jetpack Compose] Clickable Ripple Effect 없애기 Android, iOS 등 모바일에서는 버튼이 눌렸다는 사실을 유저에게 알리기위해 R..
[Jetpack Compose] CompositionLocal 은 어떻게 동작하는가? 동기 Jetpack Compose 를 꽤 오랜 시간 사용해 왔지만, 여전히 모르는 부분이 많습니다. 그중 가장 가려웠던 부분은 CompositionLocal 인데, 언제 어떻게 사용해야 하는지에 대해서는 알고 있으나, 어떠한 과정으로 적용되는지에 대해 자세히 모르고 있어 포스팅하게 되었습니다. 두 개의 Composable @Composable @OptIn(InternalComposeApi::class) fun CompositionLocalProvider(vararg values: ProvidedValue, content: @Composable () -> Unit) { currentComposer.startProviders(values) content() currentComposer.endProviders..
Glide 와 Coil 은 각각 어떻게 이미지를 불러오는가? 동기 수많은 안드로이드 이미지 처리 라이브러리가 있습니다. 그 중 가장 선호되는 것은 당연히 Glide 와 Coil 일 겁니다. Fresco, Picasso 등이 있지만, 현재는 그다지 많이 사용되진 않는 것 같아요. 프로젝트를 위해 기술 논의를 하던 중, Glide 와 Coil 을 두고 깊이 고민하였습니다. 결국엔 Coil 을 선택하였고요. 가장 주된 이유는 Jetpack Compose 와 통합이 잘 되기 때문이었습니다. (Glide 를 이용하면 작은 처리에도 더욱 많은 코드가 필요합니다.) Glide 와 Coil 에 대해 비교한 포스트는 작성해두었으니, 참고하시면 되겠습니다. [Jetpack Compose] Glide 와 Coil, 무엇을 사용하면 좋을까. 이미지 처리 라이브러리 개발시, 저는 UI에..
VersionCatalog 적용기 동기 현재 진행 중인 네이버 부스트캠프의 학습 스프린트 기간이 종료되고 본격적으로 그룹 프로젝트 개발에 착수했습니다. CleanArchitecture 기반의 앱 서비스를 만들기 위해 모듈화를 진행했습니다. 문득 제가 개발자로 있는 프로젝트 팀의 동료분께서 VersionCatalog 적용에 대한 의사를 여러 번 표하셨던 것이 생각 나, 이번 기회에 먼저 적용해보았습니다. VersionCatalog VersionCatalog 는 의존성 선언 시 선택할 수 있는 방법 중 하나입니다. 기존 방식의 문제점 우리에게 친근한 기존의 방식은 단일 모듈 프로젝트 생성 시 사용이 간편합니다. 별도로 파일을 추가할 필요 없이, 생성되는 모듈 수준의 build.gradle 에 필요한 의존성을 추가하면 됩니다. 그러나, 프로젝..