Compose Android & iOS 통합 UI 연구...1
개발/개발 일기2023. 3. 29. 20:26Compose Android & iOS 통합 UI 연구...1

예전에 해커톤에서 만들었던 기능 중 화면 하나를 Compose로 만들어 보았습니다. (사실 귀차니즘으로 일부는 하드코딩 되어 있습니다) 그렇습니다. iOS에서의 UI도 Compose iOS로 구현되었습니다. UI는 컴포즈. API는 Ktor. 비동기는 Coroutine. iOS에서는 KMM에서 생성된 ComposeView를 draw 해준 것 외 작성된 swift 코드는 전혀 없습니다. (와!) import SwiftUI import shared struct ComposeView: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> UIViewController { IosKt.MainViewController() } ..

Compose iOS 첫 성공
개발/개발 일기2023. 3. 27. 17:33Compose iOS 첫 성공

기존 Skiko를 활용하여 Web 내 순수 Compose 그리는 것에 성공한데 이어 iOS도 성공하였습니다! 다만 iOS는 빌드되지만 AOS 관련하여 빌드 이슈가 발생하기에... (gradle 관련 추가 작업이 필요한데 힘들군요) 아직 추가적인 수정 및 테스트가 필요할 것 같지만 1차적으로 성공하였기에 너무 행복하네요 헤헤 사실 그동안 실패하여 막막하다 이번에 다른 GDSC Lead들과 함께 부산으로 MT오는 길에 KTX 코딩 + 음주 코딩을 통해(?) 성공하였습니다. 역시 무언가 개발하다 막힐 때에는 환경을 변화시키는 것이 새로운 해결책일 수 도 있지 않을까 싶습니다.

NamingFox - 변수, 함수 이름 짓는 플러그인 배포
개발2023. 3. 7. 18:08NamingFox - 변수, 함수 이름 짓는 플러그인 배포

개발자의 최대 난제인 변수와 함수 이름을 지어주는 플러그인을 만들어보았습니다! 2020.3 버전 이상의 IntelliJ 계열 IDE (안드로이드 스튜디오, 파이참, 라이더 등)에서 사용 가능합니다! [ 플러그인 ] https://plugins.jetbrains.com/plugin/21095-namingfox [ 오픈소스 ] https://github.com/kisa002/NamingFox 차후 VS Code 버전 및 Compose를 통해 Web 버전도 개발 예정입니다!

Compose Web - Skiko
개발/개발 일기2023. 2. 23. 03:21Compose Web - Skiko

Compose Web에 Skiko를 입히니 기존 Compose 로직 그대로 Web에서도 UI를 그릴 수 있네요. Canvas에 그려지는 형태이기에 SEO는 불가능할 것 같아 아쉽지만 차후 Flutter SEO 라이브러리처럼 구현된다면... 이번 발견(?)으로 이제 정말 Flutter처럼 Compose 단일 UI 코드로 AOS, iOS, Desktop(Windows, Linux), Web 모두 구현이 가능할 것 같습니다. 물론 아직 Web에서 몇 가지 테스트를 해보니 몇몇 인터렉션이 작동되지 않기에 수 작업으로 연결이 필요하는 등 stable 한 것 같지는 않기에 정식 product 사용은 어려워 보이긴 하지만 언젠가 정말 stable 하게 출시된다면 Compose로 세계 대통합을 할 수 있지 않을까.....

NamingFox - 변수, 함수 이름 짓는 플러그인 개발기3
개발/개발 일기2023. 2. 13. 06:00NamingFox - 변수, 함수 이름 짓는 플러그인 개발기3

multi-module 방식으로 대대적인 리팩토링을 진행하였습니다. 물론 로직 자체는 방대하지 않기에 대대적이라고 표현할 정도는 아니긴 하지만, 결과적으로는 패키지를 모두 뜯어 고쳤습니다. 기존 고안은 Ktor server, client에서 사용되는 공통 request, response 모델을 common-data 패키지에 두고 이를 server, plugin에서 사용하는 방식으로 구상하였습니다. 이를 통해 모델이 중복 생성되는 일종의 보일러플레이트를 방지할 것이라 생각하였습니다. 안드로이드 개발하면서 멀티모듈로 분리하는 것은 매번 하던 것이기에 별다른 걱정을 하지 않았으나 각 플랫폼에서 타 모듈을 인식하지 못하는 이슈가 발생하여 끙끙 고생하다 알게 된 사실은, 기존 백엔드와 플러그인 프로젝트를 생성할 ..

NamingFox - 변수, 함수 이름 짓는 플러그인 개발기2
개발/개발 일기2023. 2. 10. 04:59NamingFox - 변수, 함수 이름 짓는 플러그인 개발기2

개발하다 보니 자주 사용하는 네이밍과 사용자 수 같은 통계 및 Exception 발생 시 해결을 위해 로깅을 하면 좋겠다는 생각에 DB를 함께 구축하고 있습니다. 간단하게 2, 3일 개발하고 출시하려고 하였는데 점점 욕심이 생겨 무언가 추가되는 것 같네요. DB 관련하여 Ktorm과 Exposed 둘 중 어떤 것을 사용할지 많이 고민하였습니다. 사실 두 라이브러리 모두 유사한 구조(?)를 지니고 있기에 차후 라이브러리를 바꾼다하더라도 러닝커브가 크지 않을 것 같기도 하고, libhunt 기준 Exposed가 Ktorm 보다 많은 인기를 지니고 있기에 Exposed를 택하였습니다. (물론 그 외의 이유들도 있지만, 밥이 다 되었기에 자세한 설명은 생략하고 차후 기회가 된다면 풀어보겠습니다.) 사실 해커톤 ..

NamingFox - 변수, 함수 이름 짓는 플러그인 개발기1
개발/개발 일기2023. 2. 7. 03:05NamingFox - 변수, 함수 이름 짓는 플러그인 개발기1

개발자의 최대 난제 변수/함수 이름 짓는 플러그인을 만들고 있습니다. Ktor server를 통해 백엔드를 구축하고 Ktor client를 통해 플러그인 내에서 백엔드와의 통신을 진행, 즉 클라이언트/서버 모두 Ktor로 구현되었습니다. 이전부터 IDE 플러그인을 만들어보고 싶었는데 문득 떠올라 재밌게 만들고 있네요. 안정성을 보완하고 바로 JetBrains Marketplace에 업로드 및 VS Code로도 구현할 예정입니다.

컴포즈 내비게이션 CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY` 오류
개발/Android2022. 12. 7. 21:48컴포즈 내비게이션 CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY` 오류

오류 로그 java.lang.IllegalArgumentException: CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY` 오류 시나리오 현재 GDSC TUK(Google Developer Student Clubs - TECH UNIVERSITY OF KOREA)에서 2022년 안드로이드 스터디 마무리 프로젝트로 스쿨메이트라는 서비스를 개발하고 있었다. 초기 프로젝트 셋업 시 Hilt, Ktor 등 필요한 라이브러리도 디펜던시 연결해둔 상태에서 시간이 흘러 내비게이션을 도입을 해야하는 상황까지 오게 되었다. 컴포즈 내비게이션은 회사에서 매 프로젝트마다 작업하던 것이기에 간단하게 생각하고 적용을 하였으나 런타임에서 위의 오류 로그를..

[Room DB] Room Database 마이그레이션 시 주의점 2가지
개발/Android2022. 12. 5. 17:33[Room DB] Room Database 마이그레이션 시 주의점 2가지

What is Room Database? 안드로이드에서 데이터를 저장할 때 에는 SharedPreferences 또는 DataStore를 주로 사용하지만 방대한 자료, 그룹화/분류 및 쿼리문이 필요해지는 등 이러한 상황에서는 Jetpack에서 제공하는 Room Database(이하 Room DB) 주로 사용하고 계신다고 생각됩니다. 상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬에 유지하여 매우 큰 이익을 얻을 수 있습니다. 가장 일반적인 사용 사례는 기기가 네트워크에 액세스 할 수 없을 때도 사용자가 오프라인 상태로 계속 콘텐츠를 탐색할 수 있도록 관련 데이터를 캐시 하는 것입니다. Room 지속성 라이브러리는 SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLit..

PopupWindow에서 Jetpack Compose를 사용하는 방법
개발/Android2022. 11. 4. 11:30PopupWindow에서 Jetpack Compose를 사용하는 방법

Jetpack Compose에서 PopupWindow를 왜 사용하죠?사실 처음부터 Compose로 개발하였다면 PopupWindow를 사용할 경우는 거의 없다고 생각된다. 그렇지만 그 이전, 우리는 커스텀 팝업을 만들 때 PopupWindow를 사용하여 XML을 Inflate 시켰기에 보다 편하게 만들어 왔었다. 그러다 점차 신규 프로젝트가 Compose로 개발이 시작되면서, 구 프로젝트(XML)에서도 독립적인(연계되지 않는) 신규 화면에 한해 Compose로 개발을 하였다. 이미 전반적인 커스텀 팝업을 PopupWindow를 사용하고 있으며 해당 팝업을 사용하는 곳도 Compose가 아니기에 기존 구조를 그대로 사용하면서  내용물만 Compose로 만든 다음 AbstractComposeView로 wra..

image