안녕하세요! PFCT에서 안드로이드 개발을 하고 있는 구영회입니다! 첫 테크블로그 콘텐츠로 안드로이드 개발 컨퍼런스 <DroidKnights 2025> 참석기를 전해드리려 해요.

DroidKnights는 2023년부터 매년 팀원들끼리 참석하고 있는 행사인데요. 다양한 개발자들의 생각을 들으며 우리가 잘 하고 있는지 검증할 수 있는 좋은 기회이기 때문이에요. 몇 안 되는 큰 규모의 안드로이드 개발 행사이기도 하고요.
올해 컨퍼런스의 주된 주제는 ‘AI’와 ‘Jetpack Compose의 성능 최적화’였습니다. 여기에 더해 Jetbrains에서 야심차게 출시했던 Kotlin Multiplatform(KMP)에 대한 사용 후기도 꽤 재밌었는데요. 기대감을 갖고 다녀온 생생한 후기, 지금부터 바로 전해드릴게요!
1. 카카오뱅크의 Compose 적용기

가장 먼저 들은 세션은 카카오뱅크의 Compose 적용기였어요. 선언형 UI인 Compose를 프로덕션에 도입하기 위해 중장기 플랜을 세우고, 팀이 협력한 과정을 공유해주셨는데요.
카카오뱅크는
- 3달간의 공식 문서 스터디
- 5달간의 기반/컴포넌트 작업을 위한 TF 발족
- 5달간의 코딩 컨벤션 수립
- 2달간의 이상 동작 모니터링
의 과정을 거쳐 프로젝트 전면 도입을 진행했다고 해요.

전면 도입의 과정 중에, 목적에 따른 모듈 사용에서 특히 고민한 흔적이 느껴졌어요. DataBinding으로 짜는 화면과 Compose로 짜는 화면은 같은 모듈에 있을 경우 빌드 속도에 저하가 발생하는데요. 이때, 모듈을 분리함으로써 빌드 속도가 빨라졌고, 마이그레이션된 화면과 그렇지 않은 화면의 분리가 가능했다고 해요.

특히, 이미 많은 사용자를 가진 앱이기 때문에 안정성을 가장 우선으로 두고 플랜을 짜 나갔다는 것이 꽤나 인상적이었습니다. 저희 팀도 Compose을 아직 완전히 사용하고 있지는 않은데, 세션을 들으며 중장기적으로 도입 계획을 세워봐야겠다고 다짐하게 됐어요.
2. KMP로 Figma 아이콘 동기화

다음으로 들었던 세션은 ‘찰스’라는 활동명으로 활동하고 계신 옥수환님의 세션이었어요. 찰스님은 여러 커뮤니티와 블로그 등에서 인사이트를 많이 주시던 분인데, 이번에도 역시 흥미로운 세션을 준비하셨더라고요.
보통 Figma에서의 에셋 export는 수작업으로 일일히 진행하는 경우가 많잖아요. 이때, 에셋에 대한 관리가 플랫폼별로 각각 이루어지게 되면서 부조화가 생길 수 있는데요. 찰스님은 이런 부조화를 최소한으로 만들 수 있도록 하는 통합 관리 시스템을 제안하셨어요.
이를 위해선 먼저, Figma 에셋을 구조화해야 해요. 찰스님이 제안한 방법에서는 Figma REST API가 주로 활용되다 보니, 일관된 응답을 받기 위해서는 선행으로 필요한 작업이었죠. 사이즈, 네이밍 등 에셋을 만드는 디자이너와 충분한 협의가 필요해 보였습니다.
구조화를 마쳤다면, 이제 에셋을 프로젝트에 가져와야겠죠?
그에 대한 구현으로는
- Jenkins를 이용하여 주기적 PR을 통해 에셋을 동기화
- KMP로 자체 데스크탑 앱 개발
의 두 가지 방법을 제시해 주셨어요.

CI/CD 과정을 잘 구축한 팀에게는 너무나 익숙한 Jenkins! 첫 번째는 Jenkins를 이용해서 svg 형식의 에셋을 vector xml로 변환하여 프로젝트에 추가/삭제 한 이후에 Pull Request로 동기화하는 방법이었어요.
개인적으로는 두 번째로 설명해 주셨던 KMP로 데스크탑 앱을 개발한 것이 더욱 흥미로웠는데요. One-Code로 다양한 플랫폼에서 동작하는 앱을 만들 수 있는 KMP의 가능성을 더욱 보여준 사례였던 것 같아요. KMP는 Stable임에도 아직 시장에서 많은 선택을 받지는 못하고 있는데, 여러 방향으로 활용할 수 있는 방향을 발견한 것 같아서 더욱 재밌었습니다.
(틈새 홍보!
저희도 불편함을 느끼는 점들에 대해서 팀원들과 같이 논의하여 기술로 풀어내려는 여러 노력들을 하고 있어요. 사소한 불편함도 그냥 지나치지 않고 해결하려는 사람들이 많이 모여 있거든요. 관심이 있으시다면!! 채용 바로가기)
3. Gemini로 안드로이드 공부하기
이어서 구글코리아 양찬석님의 세션이 진행되었어요. 정책 세미나때 많이 뵈었던 분인데 DroidKnights에서 뵈니까 더 신기하더라고요!
양찬석님은 먼저 Gemini 2.5으로 더욱 강력해진 LearnLM 모델에 대해서 설명하셨어요. 사용자의 학습에 최적화된 LearnLM은 학습을 위해 미세 조정된 모델 및 기능 제품군으로 교육 전문가와의 협업을 통해 구축되었다고 해요.
LearnLM을 잘 활용하기 위한 프롬프트 가이드, PARTS Framework에 대해서도 말씀하셨어요.

PARTS는 Persona, Act, Recipient, Theme, Structure의 앞글자를 따서 만든 단어인데요. 위 그림처럼 페르소나(Persona), 명확한 지시(Act), 누구를 위한 답변인지(Recipient), 주제(Theme), 답변의 형식(Structure)에 맞춰 프롬프팅해 원하는 결과를 쉽게 도출하는 과정을 말합니다.
이와 함께, 학습한 것을 진짜 내 것으로 만들 수 있는 Kolb의 경험학습이론의 중요성도 역설하셨어요.

- 구체적 경험(Concrete experience)을 통해 궁금한 것을 정의하고,
- 성찰적 관찰(Reflective Observation)로 궁금한 것에 대한 본격적인 리서치를 시작해요. 이 과정에서 NotebookLM을 활용해서 여러 소스를 원하는 목적에 맞게 요약해서 공부하는 것도 중요하죠.
- 이어 추상적 개념화(Abstract Conceptualisation)에서는 어떻게 동작하는 것인지 원리를 파악하고 일반화하는 과정을 거치고,
- 마지막으로 능동적 실험 (Active Experimentation)의 과정에서 공부했던 것들에 대한 직접적인 구현을 해보는 것이죠.
위의 과정을 거쳐, LearnLM이 적용된 NotebookLM을 이용한 학습 예제도 설명해 주셨는데요. Jetpack Navigation에 대해서 설명하기 위해 Jetpack Navigation에 대한 자료를 서칭하여 NotebookLM에 학습시킨 후, 프롬프팅으로 요약 및 질문까지 하는 과정을 예로 드셨어요. LLM에 무언가를 물어보았을 때, 대체로 이상한 답변을 많이 받아봤는데, NotebookLM은 최대한 주어진 소스 내에서 답변하도록 설계된 덕분에 원하는 결과를 잘 얻을 수 있었답니다.

구글링만 하던 시대는 이제 지났다는 것을 여실히 느끼게 된 세션이었습니다. 특히 NotebookLM의 사용성과 성능이 크게 향상된 것도 학습에 많은 도움이 되겠더라고요.
4. Android에서 가능한 모든 AI

다음 세션은 구글 강사룡님의 세션이었어요. 세션을 시작하며 하신 말씀이 꽤나 인상깊었는데요.
아직 AI에 대해 공부하고 계시지 않으신가요? 내년 이맘 때면 이미 늦을 거에요. 아직 늦지 않았어요. 늦었다고 생각할 때가 가장 빠를 때입니다. 지금 시작하세요!
수많은 AI 모델들이 쏟아져 나오고 있는 지금 시점에서, 아직 AI에 대해 더 깊게 파지 못했던 저에게 자극을 주는 말이었습니다!

지금까지는 AI를 주로 생산성 향상에 초점을 맞춰 사용해 왔는데, 이번 세션에서는 On-Device AI에 대해 배울 수 있었어요. 특히 On-Device AI의 여러 사례 중, 카카오T의 사례가 가장 흥미로웠어요. 지역별로 다른 주소 명명 방식과 AI 주소 자동 붙여넣기 등 ‘이런 것 까지 AI를 활용할 수 있겠구나’ 싶은 부분들이 많았고, 프로덕션에도 도입해 볼 만하다는 생각이 들었습니다.

위의 기능을 실현하기 위해 Google AI Edge를 통한 On-Device 개발을 지원하는데, Gemma 3n 모델을 디바이스 내에서 별도의 네트워크 통신 없이도 활용할 수 있는 구성이 가능하다고 해요! 저희 앱에서도 더 나은 사용자 경험을 위한 여러가지를 고민하고 있었는데, Gemma 3n 등을 이용하여 On-Device로 클라이언트 디바이스 내부에서 할 수 있는 것들을 같이 고민해 봐도 좋겠다는 생각이 들었답니다 🙂
5. 당신의 클린 아키텍쳐는 틀렸다

다음은 안드로이드 진영에서 활발히 활동하시는 테드박 박상권님의 Clean Architecture 세션이었어요!
세션명부터 심상치 않았는데, 안드로이드 앱에서 자주 사용하는 아키텍쳐에 대해 설명하시면서 많은 개발자들이 자주 헷갈리는 것들에 대해서 짚어주셨어요.
보통 각 Layer의 의존 관계에 대해서 많이 헷갈려 하는데, Clean Architecture의 원저자 Robert C. Martin의 모델과 Google에서 제시하는 App Architecture의 차이에 대해서 잘 설명해 주셨어요.

저도 몇 년 전 저희 안드로이드 팀 내부 스터디로 이 내용을 공유한 적이 있는데요. 동일한 내용을 잘 풀어서 설명해 주시니 더 재미있었어요.
참고로, 저희 PFCT도 Clean Architecture를 차용하여 앱 개발을 진행하고 있어요! 역할과 목적에 맞게 구분하여 Testable하고 각 Layer의 의도에 맞게 잘 사용하려고 노력하고 있답니다.
6. 드로이드나이츠 컨퍼런스 앱 만들기
계속해서 발표 세션만 듣다 보니, 다른 세션들이 궁금해지기 시작했어요. DroidKnights에서는 주 세션 말고 프로그램 세션으로 이력서 피드백 등 다양한 세션을 진행하거든요.
DroidKnights는 매년 행사때마다 컨퍼런스 앱을 발표하는데요. 이번에는 DroidKnights 앱 개발기를 주제로 한 프로그램 세션을 참관했어요.

매 행사 때마다 나오는 앱들은 항상 기술의 도전이 Key Point였는데, 올해도 작년과 동일하게 KMP로 개발했다고 해요. KMP는 앞선 세션에서처럼 단순 앱 개발 이외에 Desktop 앱을 개발할 때도 사용이 가능해서, 이번에 웹 개발까지 KMP로 진행했다 하더라고요.
특히, UI 코드까지 원코드로 작성하기 위해 CMP(Compose Multiplatform)로 개발했다고 해서 궁금함이 컸는데요. 아직은 웹 성능이 최적화 된 정도는 아니여서 실무 개발에서 활용하는 데에는 어려움이 있을 것 같았어요.
또한, 각 Native 플랫폼에서 개발하듯 자연스러운 UI가 아직은 완전히 지원되지는 않고, 커스텀을 많이 해야 할 것 같다고도 이야기하셨어요. 매번 DroidKnights 앱 개발을 통해 기술적인 도전을 끊임 없이 하는 모습이 보기 좋았습니다.

7. 레드팀 화이트해커의 Offensive 관점 안드로이드 앱 보안

여러 세션들을 재미있게 듣다보니 벌써 마지막 세션의 시간이 되었어요. 마지막 세션의 주제는 <레드팀 화이트해커의 Offensive 관점 안드로이드 보안>이었어요.
저희 PFCT가 만드는 ‘크플’ 앱은 온라인투자금융 앱으로써, 보안이 매우 중요한 토픽 중 하나인데요. 공격자 관점에서의 앱은 어떻게 보일지 궁금해 해당 세션을 듣게 되었습니다.

사례를 여러가지 들어주셨는데, 먼저 저희가 자주 사용하는 Deeplink에서 도메인에 대한 검증 없이 활용시 다른 Webview로 Hijacking하여 악성 웹 사이트로 Redirect하는 사례를 이야기 하셨어요.
많은 경우에서 deeplink 사용 시, 도메인은 unique하다고 생각하여 그 안에 값을 자유롭게 넣고, 인앱에서 검증 시에는 별 다른 검증 없이 path와 query를 사용하게 되는데, 한 번 더 검증함으로 의도치 않은 동작을 방지할 수 있겠더라고요.
또 다른 사례로는, 안드로이드에서 주로 액티비티, 서비스 등을 열 때 사용하는 Intent 객체로 전달되는 데이터를 검증 없이 사용하는 사례가 있었어요.

Intent 객체는 대부분 인앱에서 만든다고만 생각하고, redirection에 대한 책임은 내부 코드에만 있다고 생각했었는데, Intent 내부 데이터의 값을 검증하지 않고 사용함으로 인해 가능해지는 권한 우회, 어드민 페이지 접근 가능 등의 위험함이 있다는 것을 말씀하셨어요.

이외에도 여러 사례를 들어 공격자 관점에서 바라본 앱의 허점들에 대해서 이야기 해 주셨는데, 마지막 세션임에도 정신 바짝 들게 되는 내용들로 집중해서 들었던 것 같아요.
마치며: 좋은 인사이트와 함께, 더 나아갈 우리!
올해도 함께할 수 있어서 좋았던 DroidKnights 2025! 여러 세션들을 통해 많은 자극과 인사이트를 얻었는데요. 특히 개인적으로는 <Android에서 실현 가능한 모든 AI> 세션이 가장 기억에 남습니다. 프로덕트 여러 부분에서 활용이 가능해보였거든요.
이번 컨퍼런스를 통해 많은 인사이트를 얻은 만큼, 앞으로 더 기술적으로 발전할 PFCT를 기대해 주세요!
