Product
Kotlin Coroutines는 현재 Android 개발 생태계에서 가장 주목받는 기술 중 하나일 것입니다. 글을 읽는 여러분들은 이미 각자의 서비스에 이 기술을 적용했거나 검토하는 중이라 생각하고 있습니다. 이 글은 Cupist의 Java-MVP to Kotlin-MVVM 전환 작업이 한창이던 2019년 상반기의 기록의 일부이며 읽는 분들에게 조금이나마 도움이 되었으면 하는 마음으로 인상적으로 느꼈던 이슈와 그 원인에 대한 이야기를 공유하고자 합니다. 물론 각자의 서비스마다 만날 수 있는 이슈는 조금 더 다양할 것이고 "뭐 이런 실수를 해?"라는 생각을 가지실 수도 있습니다만, 저도 만나기 전까지 생각 못 했었거든요. 여러분들은 같은 실수를 하지 마시길 바랍니다. 

코루틴이라구요?
네, 코루틴이요. 어차피 정식 릴리즈 된 거 바로 진행 해보자 라는 마음으로 도입을 시작하였습니다. 이미 많은 글에서 이 기술이 전통적인 안드로이드 개발과 다른 기술이 가지지 못하는 이점에 대해 다루고 있기 때문에 따로 설명하지 않으려고 합니다. Cupist의 안드로이드 개발자들 또한 이러한 글을 참고하며 이 기술이 우리에게 주는 이점에 대해 기대를 하였고 개발을 진행함과 동시에 감탄하였고 장미빛 미래를 생각하며 새로운 안드로이드 앱 버전을 릴리즈하였습니다. 그리고 Fabric의 리포트에 불꽃같이 올라오는 Crash를 보며 무언가 잘못되었다는 것을 느꼈죠...
친구야 나도 오랜만이야! 그런데 너 쫌 많이 바쁘구나?
Legacy Code의 늪
위에서 언급한 바와 같이 이 작업은 Java + MVP로 구성된 앱 메인 코드를 Kotlin + MVVM으로 마이그레이션 및 리팩토링 작업의 일부였습니다. 기존에 Callback 방식 등으로 구현되었던 비즈니스 로직을 코루틴을 이용하여 리팩토링하는 과정에서 일부 SQLite 접근 로직들이 IO Dispatcher를 통해 실행되도록 수정되었습니다. 그리고 IO Thread에서 DB 쓰기 작업을 하는 중 생각하지도 않은 다른 Activity의 Main Thread에서 DB 읽기를 시도하였고 앱이 죽어 나가기 시작했습니다.
원인도 어느 정도 파악되었으니 빠르게 고쳐야겠다는 마음에 IO Dispatcher에서 동작하는 SQLite의 Transaction Mode를 IMMEDIATE로 변경하여 핫픽스 하고 "어휴.. 큰일 날뻔했다.."라 생각하였습니다. (아니 이미 난건데..?) 업데이트 후 진정된 Crash Report를 보며 안도함을 느끼며 Fabric의 Non-Fatals Report를 확인하는 순간 이 이슈의 숨겨진 이면을 알게 되었습니다.
Coroutines + Legacy = 💣
Android
Incubating

부제 : 지하철 스크린도어 옥외광고 도전기
온라인 말고 새로운 채널 없을까?
우리는 데이팅앱 글램을 마케팅하는 팀이다.
우리는 글램을 더 많은 사람들에게 잘 알릴 의무가 있다. 한정된 예산 안에서 글램을 알려야 하는데 온라인 광고에만 돈을 쓰자니 쳇바퀴를 도는 것 같은 모양새다. 이 글은 한정된 예산 안에서 잠재고객에게 도달할 새로운 통로를 찾고자 고군분투한 이야기이다.
다만, 글램 서비스를 운영하는 '큐피스트' 는 항상 Why 에서 시작한다. 우리도 Why에서 시작해 보자. Start with Why (사무실 와이파이 비밀번호로도 사용되며 늘상 우리와 가까이 있는 문구)
*글램이 등장하게 된 Why : 드라마 ‘이번 생은 처음이라’ 실제 모델, 월 매출 5억 데이팅 앱 대표 이야기
Why 에서 시작하기 1 - 우리는 왜 존재하는가?
•
우리 서비스는 왜 존재하는가?
•
어떻게 하고 있나?
•
무엇을 하고 있나?
우리 서비스를 Why > How > What 순으로 생각해 보았다.
글램 '가짜에 삽질하지마, 진짜만 만나' 광고 캠페인 기록
Incubating