본문 바로가기
[Developer]/Any

성장하는 개발자로서 필요한 3가지 요소

by 해피빈이 2023. 2. 24.

사진: Unsplash 의 Joel & Jasmin Førestbird

 

2009년 말부터 이 순간까지 실무에서 개발자로 지내오면서 공부도 꾸준히 해야하고 신경쓸 것도 참 많다는 것을 느끼지만, 그래도 내가 길을 잃지 않고 잘 가고 있는지 궁금한 때가 한번씩 찾아오곤 했다.

때로는 많이 지쳐있기도 하여, 한동안 놀기만 했던 때도 있었고, 책을 열심히 읽었던 때, 커뮤니티 활동을 열심히 했던 때, 사이드프로젝트에 열심인 때 등 때에 맞는 다양한 활동들로 내 스스로를 성장하는 개발자로 만들기 위해 노력해 왔다.

 

구체적으로 보자면 다양한 갈래의 길이 있겠지만, 그래도 내가 잘 설장하기 위해서는 다음 세 가지는 항상 체크하는 것이 좋겠다고 생각이 들어서 이 곳에 기록해 본다.

여러 언어 혹은 프레임워크에 적용할 수 있을 것이며, 일단 나의 경우에는 안드로이드 개발자로 활동중이기 때문에 안드로이드를 특정하여 간략하게 생각의 흐름을 기록해 본다.

(순전히 나의 경험에서 나온 생각이기에 참고하는 정도로 보길 바란다.)

 

1. 기본기(Basic Skills)

안드로이드에는 4대 컴포넌트가 존재한다. 프레임워크에서 직접 관리하는 주요 구성요소이다.

Activity, Service, BroadcastReceiver, ContentProvider가 그것이다.

이것을 코어로 하여 가지를 뻗어나가면 여러 지식으로 파생하는 것이 가능하다.

그것들을 기본기로하여 지식을 쌓아가야 한다는 것이다.

가령 Activity면 Activity의 구성요소가 있을 것이고, View와 ViewGroup, Fragment가 될 것이다.

그리고 그것들에 대해 어떤 순서로 작동하는지 파악하다보면 Lifecycle을 빼놓고 말할 수가 없다. 그렇다면 onCreate()는 언제 호출이 되는지 궁금하게 되고, 해당 시점에서 할 수 있는 행동은 어떤 것인지 찾아보게 된다.

그리고 Activity를 구현했을 때 화면을 돌리면 어떻게 작동하는지 파악하다보면, onDestroy()가 호출된다는 점을 알게 될 것이다. 새로 띄운 Activity에서 종료시 데이터를 가져오는 방법에 대해 파악하다보면 onActivityResult()를 알아야 한다.

좀 더 다른 관점으로 파악하다보면 비동기 처리하는 방법을 안드로이드에서 기본적으로 어떻게 권장하고 있는지 파악하려다보면 코루틴을 인지하게 되고, 덤으로 WorkManager나 Handler에 대해서도 알아야 한다.

여기에서 모드 것을 언급할 순 없겠지만, 이와 유사한 것들이 모두 기본기에 해당하는 것들일 것이다.

 

즉, 안드로이드 시스템의 기본 동작과 기본적으로 권장하는 개발 방법에 대해 파악하는 모든 것을 가르킨다. 공부하는 방법은 다양하게 있지만, 구글에서 제공하는 공식 가이드로 파악하면 대부분 파악이 가능하다.

기본이라는 것이 재밌는 단어라고 생각이 드는데, 기본이라고 해서 쉽다는 것을 의미하는 것은 아니다. 하지만 기본적으로 장착되고 있어야 그 밖의 더 발전적인 것을 다룰 수 있다는 것을 의미한다. 기본이 부족하다면 모래위에 쌓은 집 같이 다른 부분에서 더 이상 쌓기 어렵고 무너지기 쉽다. 언제든 모래를 화강암같이 단단한 바위로 바꾸도록 갈고 닦아야 한다.

 

2. 깊이(Deepness)

이 부분은 단독으로 수행하기 어렵다. 다른 기본기를 중심으로 개발을 진행하다가 경험이 쌓이면서 잘 풀리지 않는 문제를 해결하는 과정에서 쌓이는 경우가 대부분이다. 물론 그 전에 기술적 호기심에 연구하고 싶은 마음이 가득하다면, 원리를 궁금해 할 것이며, 그 과정에서 파악하게 되는 경우도 많다. 이것은 주제가 너무 다양하다.

가령, 안드로이드에서 기본적으로 제공하는 View가 많기 때문에 잘 느끼지 못하고 있다가, 내가 원하는 모양의 View를 개발하고 싶을 수 있다. 그것을 쉽게 구현할 수 있는 경우도 많지만, 어떤 상호작용이 필요할 경우도 있고, 내가 원하는 시점에서 새로 그려지기를 원할 수도 있다. 그렇게 하려면 먼저 View를 분석해야 한다. 앞서서 기본에 해당하는 영역을 파악할 때에는 구글의 공식 가이드를 보면 알 수 있다고 했지만, 이 경우는 다르다. 물론 진입점까지는 가이드를 참고할 수 있지만, 분석을 해 나갈 수록 API Reference 문서를 필요로 하게 된다. 또 이것만으로는 만족되지 않는 경우도 허다하다. 그럴 경우 Android의 Framework 소스를 참고하여 추적하게 된다. 그리고 현상파악을 위해서는 실험을 위해 앱을 만들고 해당 코드를 로그와 디버깅 등을 이용하여 증명하는 과정을 거치게 된다.

상당히 노력이 필요한 부분이다.

이 부분은 개발자 신입 및 초기 시절에는 추천하지 않으며, 어느정도 기본기가 갖춰진 다음에 하나씩 쌓아가는 것이 좋다. 물론 업무에서 문제 해결을 하다보면 어쩔 수 없이 쌓아가게 되기도 한다.

3. 트렌드(Trend)

개발 경향 혹은 유행의 방향에 대한 내용이다.

개발이라는 것이 현재 인기가 많이 사라진 분야라면 모를까. 그렇지 않다면 끊임없이 진화한다. 단순히 프레임워크의 버전업을 통해 진화하는 것만 의미하는 것은 아니며, 이는 개발자 풀이 넓은 경우 더욱 활발하게 진화하는 편이다.

만약 내가 현재 애플리케이션 하나를 개발하는 기술에 대해서 잘 알고 있다고 가정하자. 3년 뒤, 5년 뒤에도 같은 방식으로 개발하면 될까?

가능할 수 있다. 하지만 많은 사람들이 다루는 일반적인 개발 방법과는 거리가 멀어져 있을 것이다. 어떤 방법은 deprecated 선언된 Framework 레이어의 문제로 인해 구현이 어려운 경우도 있을 수 있다. 즉, 좋은 개발(유지보수성이 좋은)을 진행하기 위해서는 과거의 방식을 어느정도는 탈피해야 하는 경우가 많다. 과거의 나의 지식에만 의존하여 그대로 3년, 5년, 10년 동안 개발하고 있다면, 주변의 개발자가 피하는 현상이 발생할지도 모른다. 단독으로 개발하지 않은 이상 같은 코드를 공유하며 개발을 진행해야 하는데, 특별한 사유도 없이 새로운 프로젝트를 진행하는데, legacy만 난무하는 방식으로 개발한다면 미간을 찌푸리게 만들 것이기 때문이다.

안드로이드가 처음 국내에 도입되었을 때에는 MVC, MVP, MVVM 등의 설계 패턴마저도 생각하지 않은 사람이 대부분이었다. 그 당시에는 비동기 처리도 아마 new Thread()를 사용하여 많이 개발했을 것 같다.(기억이 확실하지 않을 정도..) 지금은 사용하기를 권장하지 않는 AsyncTask 조차도 한참 뒤에 나온 신기술이었으니 말이다. 어떻게 하면 요구사항 변경에 용이하고, 협업에도 좋으며, 테스트에도 용이하여 버그를 최소화 할 수 있는지 여러 방면에서 연구하는 개발자들의 노력이 현재의 개발 방법론을 가져온 것이라고 생각한다. 물론 아직 대중화가 되기에는 시간이 좀 필요한 것 같은 Jetpack Compose의 경우에도 어느순간 대세를 이룰지도 모른다.

중요한 사실을 잊지 말아야 할 것은 현재 내가 아는 지식이 충분하다고 해도 트렌드 익히기를 지속해야 한다는 사실이다. 하다못해 매년 업데이트 되는 구글의 메이저 업그레이드 소식도 챙겨보아야 한다. 현재 뿐 아니라 향후의 발전 방향을 예측하는 데 도움이 될 수 있을 것이다.

4. 결론

사실 위의 것은 각각 따로 떼서 언급하기에는 어려울 정도로 밀접하게 연관되어 있다. 하지만 저렇게 요소를 나눈 것은 내가 지금 부족한 부분이 있는 것은 아닌지 생각해 볼 수 있는 지표가 되기 때문이다.

위의 예시에서는 안드로이드를 예로 들었지만 이는 많은 분야에서 적용이 가능하다. iOS도 마찬가지이며, 하이브리드 개발 분야에도 적용이 가능하다. 물론 백엔드나 프론트엔드도 빼놓을 수 없으며, 언어에 해당하는 C++과 같은 영역의 개발자도 해당이 된다.

내가 속한 전문 분야에 대해서 위처럼 분류한다면 어떤 부분이 나에게 부족한지 알게 될 것이고, 그것을 이용하여 올해의 성장을 위한 계획을 세우는 데 참고할 수 있으면 좋겠다.

반응형

댓글