회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
국내 유명 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업들의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하는 걸까요?
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
국내 유명 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업들의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하는 걸까요?
이번 글은 국내 화장품 시장의 정보 비대칭 문제를 해결하고 소비자 중심의 뷰티 시장을 만들어 가고 있는 ‘화해’의 개발팀 이야기입니다. 개발을 통해 협업에서 생긴 문제를 풀어나간 과정을 살펴보겠습니다.
안녕하세요. Android 플랫폼에서 화해 앱을 개발을 하고 있는 한국용입니다.
하나의 앱 서비스를 만들기 위해서는 많은 사람의 노력이 필요합니다. 혼자서는 절대 만들 수 없고, 다양한 분야의 사람들이 여러 가지 방법으로 협업하고 노력할 때 제대로 된 서비스를 만들 수 있다고 생각합니다. 하지만 서로가 다른 분야에서 업무를 하고 있고 일하는 방식도 다르기에, 여러 사람이 협업을 한다는 것이 결코 쉬운 일은 아닙니다.
이 콘텐츠를 통해 말하려 하는 것은 효율적으로 협업하기 위해 다른 플랫폼이나 팀에서 겪고 계시던 불편을 개발로써 해결하고자 했던 부분입니다.
화해 앱에서 발생하는 사용자 이벤트 로그를 앱 개발자가 아닌 다른 분들은 확인하기 어려운 문제가 있었습니다. 안드로이드 플랫폼에서 데이터팀과 데이터 로그 프로세스 관련 논의 중 어떻게 하면 쉽게 확인할 수 있을지, 앱 개발로 이 문제를 해결할 수 있을지 고민하는 과정이 있었습니다. 그 결과 나온 방법을 소개해드리기 위해 제목을 ‘누구나 확인할 수 있는 안드로이드 Log’라고 지어봤습니다.
버드뷰의 밴드 조직에서 개발하고 있는 앱 개발자, 프론트엔드 개발자 분들은 매 과제마다 이벤트 로그 작업을 하고 있기 때문에 어느 정도 어려움을 이해하고 있었습니다. 개발팀이 데이터 로그를 추가하고 나면 데이터팀에서 확인 QA 시간을 거치는데 정확한 로그 확인을 위해 직접 개발 툴(Android Studio, Xcode)을 설치하고 직접 빌드해서 앱에서 발생하는 로그를 확인하고 있었습니다. (지금은 Firebase 콘솔에서 확인하기도 합니다)
이런 순간들이 업무를 진행하는 데 있어서 지치고 힘들게 하는 원인이 됩니다. 그래서 개발로 해결할 방법을 모색하기 시작했습니다. 여러 가지 방법을 고민하는 도중에 개발환경 없이 앱 자체에서 로그를 확인할 수 있으면 문제가 해결되지 않을까 생각하게 되었습니다.
앱 개발을 하면서 내부적으로 확인하고 있는 로그(Logcat)를 디버그모드로 연결하지 않고 앱 화면에 직접 보여주는 부분부터 시작하게 되었습니다.
누가 시킨 것도 아니고 과제도 아니니 요건 같은 건 있을 리 없습니다. 제 마음대로 요건을 정의하고 화면 설계를 시작합니다.
Logcat 명령어와 Floating Window를 활용하여 구현합니다.
val pid = android.os.Process.myPid()
val commandArray = mutableListOf("logcat", "-v", "time", "--pid=$pid")
logcat = Runtime.getRuntime().exec(commandArray.toTypedArray())
val br = BufferedReader(InputStreamReader(logcat?.inputStream), 4 * 1024)
var line: String
val separator = System.getProperty("line.separator")
while (br.readLine().also { line = it } != null) {
emitter.onNext(line + separator)
}
class OverlayLogPopup : LifecycleService() {
private val rootViewParams: WindowManager.LayoutParams by lazy {
val type = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
WindowManager.LayoutParams.TYPE_PHONE
}
WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
type,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
}
private val windowManager: WindowManager by lazy {
getSystemService(WINDOW_SERVICE) as WindowManager
}
override fun onCreate() {
super.onCreate()
windowManager.addView(rootView, rootViewParams)
}
...
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="kr.co.company.hwahae">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application>
<service
android:name=".overlaylog.OverlayLogPopup"
android:permission="android.permission.SYSTEM_ALERT_WINDOW" />
</application>
</manifest>
private val touchListener = View.OnTouchListener { _, event ->
when (event?.action) {
MotionEvent.ACTION_DOWN -> {
touchX = event.rawX
touchY = event.rawY
viewX = rootViewParams.x
viewY = rootViewParams.y
}
MotionEvent.ACTION_MOVE -> {
val x = (event.rawX - touchX).toInt()
val y = (event.rawY - touchY).toInt()
rootViewParams.x = viewX + x
rootViewParams.y = viewY + y
windowManager.updateViewLayout(rootView, rootViewParams)
return@OnTouchListener true
}
}
return@OnTouchListener false
}
작은 버튼으로 시작
앱 사용에 방해되지 않도록 이동시킬 수 있음
리스트로 로그 확인
로그 화면을 위 아래로 드래그해서 이동
필터 (스피너 선택)
EventLog(데이터로그), WebView, API
그 외 기능
펼치기, 로그 삭제, 닫기
처음 시작은 데이터팀의 문제 사항을 해결하기 위해 만들었지만, 디버그 목적의 활용도는 다른 플랫폼 에게도 충분히 있을 것으로 예상합니다.
해당 기능은 이벤트 로그가 실제 firebase에 적재된 것을 확인하는 것이 아니고 앱에서 해당 이벤트 로그를 호출하는 부분입니다. 디버그 목적으로만 사용되기 때문에 이 부분을 이해하고 로그 자체에 대한 데이터 로그 적재 여부는 여러 가지 변수가 많아 보장할 수 없습니다. |
아직 시범적인 단계로, 디버그 용도의 기능이기 때문에 불편한 점도, 오류도 있어 추가로 개발해야 할 부분이 남아있습니다. 하지만 협업 과정에서 겪고 있는 문제를 개발로 해결하려고 노력한 점과 화해 앱을 많은 사람이 같이 개선해 나가기 위한 도구를 만들었다는 점에서 의미가 있다고 생각합니다. 저희 안드로이드 플랫폼에서는 앞으로도 협업을 중요시하며 협업 시 발생하는 문제점을 효율적으로 개선하고 해결하기 위해 노력해나갈 것입니다.
<원문>