0️⃣ 프롤로그

  • 2022년 3월 14일 안드로이드 개발자가 되기위해 취업을 준비하던 내가 드디어 주니어 개발자로 첫 회사에 입사하게 되었다.
    그동안 혼자 개발하면서 가졌던 나쁜 습관들을 버릴 수 있는 좋은 기회이기도 하고, 주니어 개발자로 성장하기에 정말 좋은 회사이다.
    나인투원이라는 스타트업인데 면접과 코딩테스트 경험도 정말 좋은 경험이였다. 얼마 전에 쏘카에 인수가 되어 곧 쏘카 개발팀에 합류할 것 같은 느낌이 아주 강하게 들지만(개발 일정 밀림ㅠㅠ), 이 또한 좋은 기회로 여기고 감사하게 배우면서 개발해야겠다💪

  • 최종 면접 후에 처우 제안 메일을 받았을 때의 기분이란.. 잊을 수 없는 기억이 될 것 같다. 취업을 뭔가 우당탕 준비한 것 같기도 하고..
    주위 지인들이 잘 되는 모습들을 보니 같이 기쁘면서도 한편으로는 정말 부러운 마음이 있었다.
    여튼! 첫 회사에 입사하여 약 한달간 가졌던 온보딩 과정에 대해 회고 해 보려 한다.

2️⃣ 정말 힘들었던.. 안드로이드 개발자 취업 도전기..

  • 유독 앱 개발자의 공고가 적게 느껴졌다.
    이게 맞나 싶어 주위 지인들에게 물어보니 부족한게 맞다고 한다. 근데 웃긴건 역시나 잘하는 개발자다.
    안드로이드 공부를 하는 주위 사람들만 해도 차고 넘치는데 왜 취업이 어려울까 궁금했던게 이런 이유였다.
    나 또한 잘하는 안드로이드 개발자가 되고싶고 또 되어야만 했기에, 학부 시절 안드로이드 한 우물만 파면서 노력해왔다.

    자소서에 쓸게 많네!?

    • 3학년 학부 시절 개인적으로 인생의 큰 변환점을 만들어 준 일이 있었다. 그 당시에는 조금! 힘들었지만 지금의 나를 있게해준 정말 고마운 일이였다.
      당시 나를 정신차리게 해 주려고 좌절하고 있던 나에게 쓴소리를 해 준 정말 고마운 친구가 있었다.
      안그래도 그 친구에게 취업턱을 쐈는데 기분이 정말 좋은건 안비밀..😊
      여튼 그 시절부터 나는 미친듯이 대외활동에 참여하기 시작했다. 학교(춘천)에서 판교까지 밤 새서 출퇴근하고, 창업동아리 활동을 학교에서 성북구까지 다니며 참여하는 등.. 꼭 안드로이드 개발자가 되고야 말겠다는 일념으로 살아왔던 것 같다.

    • 네이버 블로그를 시작 해 보고, 일면식도 없는 팀원 5명을 모아서 WearWeather라는 앱을 런칭해보고, 한이음 ICT 멘토링도 참여해보고, 3학년 시절에는 학부 C언어 전공 멘토, 4학년 막학기에는 메디프레소라는 기업에서 정말 좋은 팀원들과 함께 무에서 유를 창조 해 보기도 하고, 정말 얕은 지식으로 응용해 볼 수 있는것들은 다 해본 것 같다.
      이 당시 2017년.. 주위 동기들이 모두들 대외활동을 하는 나를 보고 이상한 취급을 하며 학점만 챙기기 바쁠 때 했던 활동들이다.
      그 결과 2022년 현재 자소서에 쓸 내용들이 넘쳐나게 되었고, 당연히 서류 작성에 있어서는 자신감을 가질 수 있었다.

    탈락의 고배, 면접과 코딩테스트

    image image 이거 말고도 더 많은거같은데 기억이 안난다.. 일단 이정도? 위에 말고도 정말 수십곳에 서류를 넣었다.
    코딩테스트를 보고, 몇몇 곳은 최종 면접까지 보는 등 별짓을 다 한 것 같다. 면접관들이 굉장히 불쾌했던 기업들도 많았고, 반대로 면접자를 존중해주는게 보이는 면접관 분들도 있었다. 알고리즘 코딩테스를 진행했던 곳도 있었고, 당근마켓 같은 경우는 과제 전형으로 진행이 되었던 기억이 난다. 서류가 운 좋게 붙어 4일 밤을 세워가며 정말 열심히 참여했지만 결과는 탈락..
    개발자가 내 길이 아닌가 별 생각을 다 하면서 불합격의 고배를 마시는 동안 하나의 기업이 또 눈에 들어오게 되었고, 바로 지원했다.

    image

    • 맞다. 나인투원이다. 지원한지 몇 일 내에 서류 합격 문자를 받았고, 바로 과제 전형을 진행하게 되었다.
      하나의 기능을 가진 어플리케이션을 완성도 있게 만들어 내는 과제였는데, 처음 만들어 보는 기능임에도 RxKotlin에 대한 경험을 메디프레소에서 구르면서 가지고 있었기에 정말 재밌게 열심히 잘 만들어 내었다.

    • 제출을 하고 면접 날짜를 정하게 되었고, 기술 면접을 진행하게 되었다. 열심히 만들어서 제출 한 만큼 면접관 분들도 내가 만들어 낸 결과물에 대해 칭찬을 많이 해 주셨다. 안드로이드에 대한 여러가지 기본 개념들과 Git 사용 경험 등을 자세하게 질문 해 주셨고 그냥 내가 아는 선에서는 다 대답하고 모르는 것은 모른다고 대답했다. (어설프게 안다고 대답하면 큰일나는걸 여러번 경험했기에…ㅎ) 기술면접 합격 후에는 곧바로 컬쳐핏 면접이 진행되었고, 팀 핏에 대해 재밌게 이야기를 나누는 자리였다. 이렇게 또 하나의 채용 프로세스를 거치고 얼마 있지 않아 합격 메일을 받게 되었다…!!!!!!

    image

    • 이제 그토록 염원하던 주니어 안드로이드 개발자가 되는것이다. 회사 맥북을 받고, 코드리뷰를 받으며, 동료들과 함께 협업하는..
      말로만 듣던 내용들을 실제 회사에서 접하려니 굉장히 가슴이 두근거렸다.. 여튼 이렇게 나의 취업 준비 기간이 끝나게 됐고,
      쏘카 슈퍼앱 프로젝트에 합류하게 될 예정이다.
      일레클 서비스를 개발하는 안드로이드 개발자로 내 개발 커리어를 시작하게 되었다.

3️⃣ 온보딩, OJT 프로젝트

  • 입사 첫 날, 맥북을 받고 여러가지 온보딩 프로세스를 거친 다음, 나는 OJT 프로젝트를 시작하게 된다.
    신규 입사자가 스프린트에 참여하기 전 작은 일레클 서비스를 만들어서 일레클 서비스에서 사용하는 코드에 익숙해지도록 하는 이유에서이다. 자세한 구현 과정은 담지 않겠지만 문제를 해결하면서 겪었던 어려움에 대해 적어보고자 한다.

    일레클 Plus, SammiLock RxBle 연동 예시 영상

    • 구체적으로 어떤 코드가 어떻게 사용되었는지는 적을 수 없기에 이렇게 짧지만 영상으로 대략적인 동작 영상을 첨부 해 보았다.
      RxBle… 쓰면 쓸수록 참 어렵게 느껴지는 것 같다.

    협업에 대한 고찰

    • 혼자 개발하는 습관을 기존에 회사에서 사용하는 GitFlow에 맞추어 개발하는 습관으로 고치는 과정이 가장 힘들었던 기억이 난다.
      PR 형식도 내 마음대로였고, 커밋 메세지, 브랜치 또한 내 입맛대로 맞추어 개발해 왔고, 이걸 하루 아침에 고치기란 정말 쉽지 않았다.
      커밋을 어떻게 끊어 갈 것인지도 생각해가며 개발해야했고, 테크리더(이하 TL)분들이 내 코드를 리뷰 해 주실 때도 최대한 읽기 편하게 PR 단위를 나눠야 했다. 기능을 개발하는 과정에서 겪었던 어려움은 RxBle 말고는 거의 없었지만 중간에 한 번 브랜치도 꼬여보면서 Git 공부도 다시 해야겠다는 생각을 가지게 되었다..

    “재사용” 가능한 코드 작성

    • 재사용 가능한 깔끔한 코드란 OOP의 개념을 최대한 살려 낸 코드라고 생각한다.
      이번 OJT 프로젝트를 거치는 동안 일레클 서비스 코드를 참고 할 일이 정말 많았는데, 특히 블루투스 연동을 할 때 여러 기기에 Ble에 관련된 기능을 재사용 가능하도록 작성한 코드들을 보면서 감탄을 한 기억도 있다.
      지금까지 내가 작성했던 코드들은 단지 기능을 구현하기에만 급급한 코드였고, 코딩테스트와 같이 빠르게 구현하는데만 길들여져 있던 나는 그 동안의 내 개발 습관을 되돌아보게 되었다.
      블루투스에 관련된 기능 하나를 만들더라도 나중에 추가 될 기기까지 고려하여 코드를 작성하는 모습들을 보면서 참.. 느끼는게 많았던 과정이였다.

    DIP 원칙의 필요성

    • 흔히들 부르는 SOLID, OOP 설계 5원칙 중에 의존 역전 원칙이다.
      고수준 모듈은 저수준의 모듈의 구현에 의존해서는 안되며, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 것이다.
      고수준 모듈은 변경이 발생 할 일이 없는 추상화 된 클래스 또는 인터페이스를 의미하고, 저수준 모듈이란 변하기 쉬운 구체화 된 클래스를 의미한다.
      쉽게 말해서, 추상화에 의존하며 구체화에는 의존하지 않는 설계 원칙을 의미한다. 한 가지 예시를 들어서 RxBle를 사용하여 기기 스캔, 연결, ByteArray 커멘드 등의 기능을 구현할 때 Plus, SammiLock 각각의 디바이스 클래스가 의존하고 있는 파일은 connect, scan, authorize 등의 open 함수들이 존재하는 open 클래스였다.

    • 어떤 특정 기기가 추가되면, 우리는 Plus, SammiLock이 아닌 또 다른 디바이스 클래스를 만들어주면 되고, 이 클래스는 위에서 기술된 open 클래스를 상속받게 되면 그에 필요한 세부 기능을 구현하면서 추상화에 의존하며 구체화 된 클래스에는 의존하지 않는 방법으로 코드 작성이 가능하다. 이제는 정말 실전 스프린트에 참여하게 될 텐데 명심 또 명심하면서 개발해야겠다.

    코드리뷰!?

    • 내가 올린 PR을 머지 시키기 전까지 해당 PR에 대한 코드리뷰를 받아가면서 느낀 점은, 정말 완벽하게 설명을 할 수 있는 코드를 작성해야겠다는 것이다. IOS 개발 팀원 분이 나의 코틀린 코드를 리뷰 해 주시면서 주셨던 질문이 하나 있었다. “Context라는게 자주 사용되는데 이거 설명해주세요!”
      context가 뭐죠? 포스팅에서 분명 공부하면서 정리했던 개념이다. 같은 AOS를 개발하는 개발자에게 설명하는 context와 다른 분야를 개발하는 개발자에게 context의 개념을 설명하는 것은 정말 다른 느낌으로 다가왔고, IOS와 어떤 점을 비교하면서 설명해야하지? 고민하다 이상하게 대답한 기억도 있다.
      다른 분야를 개발하는 팀원들에게도 내가 사용하는 코드에 대한 개념들을 이해하기 쉽게 설명 할 줄 알아야 진짜 그 개념을 알고 있다고 할 수 있다는 것도 느끼게 되었다. 항상 코드리뷰를 받으면서 가지는 생각이지만, “아직 배울게 너무 많다.” 제 코드를 함께 리뷰 해 주시는 팀원분들! 정말정말 감사하고 앞으로도 날카로운 지적 잘 부탁드리겠습니다!

4️⃣ 회고를 마치며..

  • 가장 많이 느끼고 배웠던 점은 당연히 재사용 가능한 코드를 작성하고, 기본기 학습의 필요성을 느낀 것이였다. 예전에 주워들은 명언이 하나 있는데, 링컨이 했던 말이다. “나무 베는 데 한 시간이 주어진다면, 나는 도끼를 가는데 45분을 쓰겠다.” 라는 명언이다. 안드로이드를 개발하다보면, 어떤 기능을 구현 할 때 언어에 대한 이해도가 정말 깊게 필요할 때가 종종 나타난다.
    이 때 나는 기본기에 대한 필요성을 절실하게 느끼게 되고, 다시 구글링, 책을 뒤져가며 다시 공부하게 된다. 이런 시간을 최소화 시키는 방법은 결국 코틀린이라는 언어에 대한 이해도를 평소에 학습하며 최대한 끌어올리는 방법 밖에는 없다. 필요성을 잘 알고는 있지만 기능 개발에만 급급하게 개발해오며 이런식으로 학습하지 못한 지난날의 나를 반성한다.

[2022.04.09 나인투원 안드로이드 온보딩 프로젝트 회고]