2018 한 해를 돌아보며…

2018년.

기나고도 짧은 1년이 지나가고, 이제 2019년이 다가옵니다.

그런 기념으로, 2018년의 중요하고 변화점이나 느낀 점을 살펴보고 2019년에 달성하고 싶은 목표를 적어보려 합니다. (물론 개발적으로요.)

1월 – PyxisBaseApp (MVVM + Dagger)

2018년 1월 20일, PyxisBaseApp라는 MVVM + Dagger + Databinding + Retrofit 스택을 가진 베이스 앱을 작성하기 시작, 2018년 12월 31일 기준으로 배포 버전 1.3.3, 커밋 수 316개의 적당한 규모의 베이스 앱을 제작하였습니다.

이 베이스앱의 전/후로 지금까지의 본인 안에서의 개발 패러다임이 바뀌었는데, 전에는 일정한 패턴 없이 Activity 하나에 집중하는 형태였다면 지금은 일정한 패턴을 따라서 MVVM 과 Continous Integration을 목적으로 개발하고 있습니다.

이 때 MVP를 거치지 않고 MVVM으로 바로 거친 이유로는 당시 같은 회사에 계셨던 개발자분이 MVP를 사용하셨는데 이 구조를 보니까 Activity – Contract – Presenter가 강제되는 형태로 조금 비효율적으로 보였기 때문입니다 . 그리고 마침, 안드로이드에서 Android Architecture Component 라고 하는 구조가 나왔었기에 MVVM을 좀 더 쉽게 작성할 수 있었습니다.

이렇게 PyxisBaseApp는 계속해서 변화를 거쳐 9월 29일에는 JFrog Artifactory를 통해 본격적인 라이브러리 형태의 베이스 앱을 제작했고, 나름대로 만족할 구조가 탄생하였습니다.

3월 – Annotation Processor

1월과 2월에는 MVVM 구조를 중점으로 적용했다면, 3월에는 중복되는 코드를 줄이기 위한 Annotation Processor에 대해 집중했습니다.

지금까지 어노테이션을 Reflection 을 통한 접근방법만 사용했었는데, 타겟으로 하는 어노테이션이 있는 클래스나 메서드 대상으로 코드를 생성하는 Annotation Processor의 도입으로 Dagger의 Activity, Fragment, ViewModel의 주입이 어노테이션 하나를 부착하는 것 만으로도 끝나고, CustomView의 Attribute 파싱 등을 빠르게 할 수 있었습니다.

물론, 이 떄 공부한 지식으로 Annotation Processor 기반 기술을 도입하거나 분석할 때 큰 도움이 되었기도 했습니다. (Databinding나 Dagger 등)

7월 – RxJava

계속 미루고 왔었던 RxJava 도입을 이 때부터 시작하였습니다. 처음에는 Listener 형태의 Callback를 Observable로 변경하는 것에서부터 Socket 통신의 RxJava wrapper까지 작성하면서 이전에는 쉽게 달성하지 못했던 스레드 관리나 데이터 소스로부터의 효율적인 합성을 달성하였습니다.

그리고 이 때, SocialLogin 기능과 RxJava를 합친 RxSocialLogin(https://github.com/WindSekirun/RxSocialLogin)을 개발하고 배포하였습니다.

8월

산업기능요원으로 근무하다보면 언젠가 찾아오는 시련인 훈련소(._. )를 다녀왔습니다. 따라서 이 때는 기록이 없습니다.

9월 – Docker를 통한 SaaS 컨테이너 배포

이 때까지 PyxisBaseApp는 프로젝트마다 멀티모듈로 포함되어 있었기에 버전 관리가 안되고, 여러 프로젝트마다 다른 베이스 앱 코드를 가지고 있었기에 코드 관리도 더더욱 힘들었습니다.

그래서 Docker를 공부하고 새 인스턴스에 JFrog Artifactory를 올리고 PyxisBaseApp를 모듈 단위 배포가 아닌 라이브러리 형태 배포로 변경하였습니다.

추가적으로, 처음으로 BLE 앱을 원개발하면서 RxAndroidBle(https://github.com/Polidea/RxAndroidBle) 도 사용해보았습니다. 다소 어려웠지만 notify, write 이벤트를 쉽게 처리할 수 있었던 것이 가장 마음에 들었습니다.

12월 – Jenkins 도입

이전에는 CircleCI를 사용했었으나 Private project에는 적용하지 못하고 오픈 소스 프로젝트만 사용하였습니다. 그래서, 꽤나 이전부터 계획은 있었음에도 쉽게 도입할 수 없었던 Jenkins를 Docker의 힘을 빌려 사용하게 되었습니다.

그리고 12월 25일, 대망의 확장 공사를 시작하면서 지금까지 분리되어있던 블로그 인스턴스 + (Artifactory/Jenkins) 인스턴스를 합쳐 지금의 인스턴스로 이사하면서 메일 서버나 FTP 서버 등도 전부 Docker를 통해 관리하게 되었습니다.

마무리

2018년에만 공부하고, 새로 도입해서 실제 사용한 기술이 MVVM, DataBinding, RxJava, Dagger (DI), Retrofit, ObjectBox, Docker, Jenkins, AndroidX, Static Analysis 로 작은 것 까지 포함하면 20개는 족히 넘을 것 같습니다.

2019년에는 빠르게 변화하기 보다는 기존에 사용하던 기술을 좀 더 가다듬어 좀 더 전문적인 지식을 가질 수 있도록 열심히 갈고 닦아야 될 것 같습니다.

그리고, 대망의 그 날(2019-04-19)도 얼마 남지 않았고요. 후후…