Coroutine

국내 최초 안드로이드 GDE가 추천하는 코틀린 코루틴

#안드로이드 #gde #gde 되는법



국내 은행 앱 1위 카카오뱅크에서 코틀린 코루틴 리팩토링을 진행한 김용욱에게 코루틴의 개념부터 내부구조까지 배워보세요

· 우리나라 최초 GDE (Google Developer Expert)
· 전) 카카오뱅크 / Android Core팀 개발자
· 전) Realm (미국/리모트) / Java Developer
· 전) 필링선데이 CTO
· 전) 레이지비 CTO

안녕하세요, 안드로이드 개발자 김용욱입니다.저는 10년 전에 안드로이드 개발자 모임인 GDG(Google Developer Group) Korea Android를 만들었고, 그 이후에 최초의 안드로이드 GDE(Google Developer Expert)로써 2년간 활동했습니다.

안드로이드 개발자 김용욱

안드로이드에 관심이 많아서 안드로이드 커리어를 쌓아나가고 있었고요. 글로벌 모바일 데이터베이스 회사인 Realm에서 일을 한 이후에 카카오뱅크에서 여러 프로젝트를 수행하였습니다.

이 인터뷰를 통해 현업에서의 코루틴 트렌드와 우리가 공부해 볼 가치가 있는 이유에 대해서 이야기하려고 합니다.

"현업에서 느끼는 코루틴의 중요성"


현업, 현직자들 사이에서는 코루틴으로 다 건너가는 단계예요. 코루틴을 안 쓰는 것 자체가 트렌드에 뒤처지는 느낌이 있긴 했죠. 사실 이전까지는 아예 안 쓰는 사람도 분명히 있었지만, 작년(2021)부터는 코루틴을 쓰고 있지 않더라도 써야 한다는 생각 자체는 공유가 되기 시작했어요. 아마 모바일 앱 개발자라면 한 번쯤 다 생각해 봤을 거예요. 몇 년 뒤에는 지금보다 더 많은 기업에서 코루틴을 100% 사용하고 플로우를 적용할 것이라고 생각해요.

"현업이 아닌 개발자 취준생들이 느끼는 코루틴"


현업에서는 다들 코루틴으로 건너가는 중인 반면에 취준생들 중 (코루틴을 사용하는 기업에 지원하는) 지원자가 적은 것 같아요. 현업의 트렌드를 체감하지 못해서 그런 것 일 수도 있고, 지금이 과도기이기 때문에 자신이 지원할 회사가 코루틴을 도입하지 않고 있거나 도입하기 전이라 공부하는 사람이 많이 없을 수도 있을 것 같아요. 또 배울 수 있는 환경 조성이 아직 안 된 이유도 있겠죠.

"기존 라이브러리의 단점과 코루틴의 장점 (1)"

안드로이드 개발자 김용욱

안드로이드에서는 RxJava를 제일 많이 쓰는 편이에요. RxJava는 모든 것을 다 스트리밍으로 하려는 방식인데, 상대적으로 어렵고 수정할 때 유지 보수가 힘들다는 단점이 있어요. 예를 들어 4,5년 차 일해도 RxJava의 복잡한 체이닝 구조 때문에 RxJava 코드를 정확하게 예측하지 못하는 경우가 있어요. 남이 짠 코드, 내가 짠 코드마저 다시 한번 더 생각해야 하죠. 순서대로 짰던 프로그램을 퀴즈처럼 한 느낌이라고 생각하시면 됩니다.

반면에 코루틴은 순차적인 코드 작성이 가능해요. Rxjava는 굳이 스트림이 필요하지 않은 경우에도 스트림을 가져오지만, 코루틴은 한 번 가져와서 들여오면 끝이죠. 그리고 코루틴은 복잡한 동시성과 병렬성을 보다 쉽게 시작할 수 있어요.

"코루틴의 장점 (2) : 콜백 헬 (Callback Hell) 극복 가능"

안드로이드 개발자 김용욱

최초로 비동기에 대해 관심을 갖게 되면 코드를 콜백으로 짜게 되는 경우가 많이 있어요.
콜백을 쓰게 되는 경우에는 성공 콜백과 실패 콜백이 있게 되거든요. 성공 콜백에 또 다른 호출을 넣고 거기에 또 콜백을 다는 형태로 되어 있고요. 그렇게 되면 성공 콜백에도 줄줄이 달리고 실패 콜백에도 뭔가 달려서 되게 복잡한 형태를 가지게 됩니다. 점점 깊게 들어가게 되면 사람들이 콜백 헬 (Callback Hell) 이라고 부르는 구조가 되거든요. 유지보수가 되게 어렵게 되죠.

반대로 코루틴 같은 경우에는 콜백 구조 대신에 순차적인 프로그래밍을 할 수 있습니다. 실패가 발생을 해서 실패 처리를 해야 할 경우, 모든 예외 처리를 한 번에 할 수 있는 CEH (Coroutines Exception Handler)라는 개념이 있습니다. 이걸 한번 세팅을 해두면 모든 예외를 이 CEH가 처리해주게 됩니다. 간결하게 프로그래밍 할 수가 있고 체계적으로 에러를 관리할 수가 있죠.

정리해서 말하자면,

· 직관적이고 순차적인 코드 작성 가능
· 에러 처리의 효율화
· Dispatcher를 통한 개발 협력성 증가
· 선택적 Stream 활용으로 효율성 증가

정도가 코루틴(Coroutines)의 큰 특징이라고 볼 수 있겠네요.

"강의 커리큘럼 소개"


카카오뱅크 재직 중에 면접자들을 대상으로 과제를 냈었는데요. 그 과제는 이미지 검색이 주제가 되는 과제였고요. 그 과제를 풀기 위해서 많은 사람들이 Coroutine을 썼습니다. 하지만 지원자들의 과제에서 warning이 너무 많았어요. 어떤 동작 자체가 안되는 사람들도 있었고, 로테이션을 했을 때 문제가 생긴다거나, 연타를 했을 대 문제가 생기는 경우들도 많았어요. 따라서 코틀린을 배우실 때에는, 이론 뿐만 아니라 프로젝트(실습)을 해보는 게 아주 중요하다고 생각해요.

그래서 이번에 제가 강의하는 코루틴 강의는 필수개념을 학습 및 실습하고 실전 프로젝트까지 진행하는 <3단계 커리큘럼>으로 구성해보았습니다.

실습에 대해 자세히 설명드리자면, 첫번째 과정은 먼저 Coroutine과 Channel을 이용해서 일반적인 애플리케이션을 만들어 보는 과정이고요. 두번째 과정은 Coroutine과 Flow를 통해서 간단한 안드로이드 애플리케이션을 만들어보는 실습을 하게 될 것입니다. 이 실습들을 통해서 자신감을 가지고 난 다음에 마지막으로 Coroutine의 이론적인 내부 구조를 알아보는 과정으로 진행됩니다.

"마지막 한마디"


RxJava 툴만 쓰고 있다면 불편함을 못 느낄 수 있어요. 왜냐하면 그 도구의 편리함도 있고 매우 익숙하기 때문이죠. 그런데 한 번이라도 Coroutine을 써보고 나면 ‘RxJava가 사실은 되게 불편한 도구였다’ 이렇게 생각하게 될 거예요.

제 후회 중에 하나는 2019년에 와서야 kotlin 컨퍼런스(KotlinConf)에 참여해서 Coroutine을 쓰게 된 것인데요.
여러분들이 더 이상 후회하지 않았으면 좋겠습니다. 지금이라도 빨리 Coroutine을 배워보세요!


지금 패캐머들이 읽고있는 BEST 아티클이 궁금하다면

이 글과 연관된 주제의 추천 강의