2017년 1월 21일 토요일

Android Developer Interview 후기 2탄

안녕하세요.

캐나다 안드로이드 개발자의 면접기 2탄을 올립니다.

지금 직장에 다닌지 이미 2년이 되어가는데, 지금에서야 그 후기를 올리는 것은 아니고, 최근에 다른 회사의 면접을 본 적이 있어서 그 회사에서 진행했던 면접에 대한 이야기를 해볼 까 합니다.

이번 주에 면접을 본 것이라 아직 합격여부에 대해 답을 받지는 못했지만, 저는 확실히 "불합격"이 될 것을 믿어 의심치 아니합니다. ㅠㅠ 
"불합격"이 거의 확실시 되는 이런 면접 후기를 올리는 이유는 아무래도 지금 회사의 Android Developer 역할과 일반적인 Android Developer의 역할간에 간극이 크고, 회사에서 요구하는 지원자의 skill set 또한 간극이 크기에, 인터뷰 내용 역시 다른 점들이 많아 2년 전쯤에 올린 제 인터뷰 후기가 일반적으로는 크게 도움이 되지 않을 것으로 생각되기 때문입니다.

이전 포스팅에서도 언급 한 바 있지만, 저는 지금 직장의 조건이나 제가 하는 일, 근무 환경 등등에 모두 만족하고 있습니다. 하지만 미래를 생각했을 때, 현재의 제 Job Experience는 불안한 요소들이 있습니다.

MS의 시대에서 Google과 Amazon, 그리고 최근에 Facebook로 IT 시장에서 중심축이 이동해 온 2000년대는, OS와 Client에서 서버와 오픈 클라이언트로 그 흐름이 많이 이동을 해 왔습니다. 그렇다보니 중요한 Business logic이나 데이터 핸들링, 컨트롤 등은 모두 서버에서 이루어지고 있으며, client단은 서버에서 가공한 데이터를 가져와 얼마나 잘 표현하느냐가 중요해 졌습니다. 따로 제조사가 없는 캐나다에서 Android Developer job이라면, 결국에는 99% Android client app 개발인 것이고, Android client app에서 게임 등 별도의 UI engine을 보유한 app을 제외한다면, UI의 중요성이 가장 높은 제품이 절대 다수라고 할 수 있겠습니다. 그렇다보니 Android Developer의 seniority를 말할 때, UI와 관련된 다양한 Know-how와 Skill, Experience가 얼마나 있는지를 보는 것이 일반적이라 할 수 있겠죠.
하지만 제가 다니고있는 회사의 flagship product는 Mobile Device Management 서비스입니다. 단말 컨트롤, 통제 룰과 정책에 대한 비지니스 로직은 서버단에 구현을 하지만, 그 정책들이 각 단말로 내려왔을때, 각 단말의 context에 따라 이 정책들을 조합하여 어떻게 어떤 기능과 HW를 컨트롤 할 것이지에 대한 know how와 skill이 Android Developer로서 갖추어야 하는 기술이라고 할 수 있습니다. 
UI요? 네, 물론 저희 제품에도 UI가 있긴 합니다만, 모든 UI mock-up을 다 합쳐도 5개 화면 정도 될 것 같습니다. UI로 보여줄 만한 내용이 있는것도 아니고, UI가 있다해도 End-user가 관심을 가지고 지켜볼 만한 것도 아니기에, 그 중요성이 매우 낮습니다.

사실 회사에서 어느정도 단말 UI/UX에 관심이 없냐하면... Android OS 버그로 인해 모든 버튼이 동작하지 않는 상황이 있어서, 그런 상황이 오면 마치 페이스북 메신져 처럼 어떤 화면에서건 둥둥 떠다니는 버튼을 만들어야 할 일이 생겼었습니다. 프로젝트 매니져를 통해 회사 GUI팀에 이미지를 요청했고, 그 사이에 저는 일단 구현을 해야하니, 급한대로 gimp를 다운로드 받아 대충 아이콘을 만들어 기능을 구현 했습니다. 그런데, GUI팀이 요즘 Web UI작업에 한창이라 바빠서 PM도 그렇고 GUI팀도 그렇고 그냥 제가 30분 만에 만든 아이콘을 제품에 그대로 넣자고 하더군요. 헐...

현 상황이 이렇다보니, 만에하나... 현 직장이 문을 닫는다면? 제가 쫒겨난다면? 현 직장에서 이런저런 관계들이 악화되어 다른 곳으로 옮기고 싶어진다면? 이런 질문들에 대해 생각을 해 보았을 때, 지금의 미천한 UI Experience로는 Android Developer로서 경쟁력이 없기에, 제 경험의 폭을 넓히는 것이 중요하다 생각되어 이직을 염두하고 있는 것이죠.
그래서 언젠가부터 현재의 position대비 동급 수준의 '연봉/Benefit/근무환경/회사의 발전 가능성' 만 보장된다면 이직에 대해 언제든지 open mind로 준비하고 있었습니다.

반년 쯤 전에도 3번 면접을 본 적이 있지만, 사실 그 당시에는 detail한 technical question들이 거의 없었습니다. 그래서 제 단점을 부족한 UI 경험이라 생각하면서도 그 심각성에 대해 제대로 인지하지 못하고 있었던 것이죠.
한국 속담으로 "하룻 강아지 범 무서운 줄 모른다"를 학술적 용어로 하자면 더닝 크루거 효과(Dunning–Kruger effect)일 것 같은데, 제가 딱 그 꼴이였습니다. 삼성에서도 Platform개발자였기에 UI 경력이 전무하다보니 "다양한 화면과 OS 버젼별로 다를 수 있는 widget components들 때문에 많은 노하우와 기술이 필요하긴 하지만... UI는 그냥 노가다고, 뭐 그런 노하우야 언제든지 내가 시작하면 따라 잡을 수 있는거고, 특별한 기술과 기능이 필요한 것도 아니고......" 이런 식으로 무의식/의식적으로 무시했고, UI관련해서 아는 것도 없으면서 UI에 대한 '근자감'까지 있었습니다.

이번에 면접을 본 회사는 자체 서비스나 mobile client가 있는 회사가 아니라, 다른 회사의 업무용, 고객용, 판매용 서버와 클라이언트를 개발하여 납품하는 회사였습니다. 이쪽 업계에서는 나름 콧방귀 뀌는 수준의 회사였으며, 이 회사의 규모에 맞게, 이 회사의 고객사들 역시 대형 서비스/유통업 회사였죠. 고객사의 규모가 큰 회사다 보니, 웬만한 서버단 기능은 이미 갖추고 있는 상황이지만, 보다 고객에게 쉽고/편리하고/재미있게 다가갈 수 있는 Web/Mobile 스토어를 만들려는 것이 고객사들의 주요 목표인지라, 이 회사에서도 가장 방점을 찍는 것은 화려하고 직관적이면서 사용에 편리한 UI 디자인과 구현이였죠. 그래서인지 기술면접의 대부분은 UI와 관련된 질문들로 이루어져 있었고, 말 그대로 저는 영혼까지 탈 탈 털렸습니다. 그리고 다행히도 이제는 근자감에서 벗어나 제가 정말로 부족함을 느끼게 되었으며, 어떤 부분을 어떻게 준비해야 할 지에 대해서도 방향을 잡았네요.

면접 당시에 워낙 영혼까지 털린 상황이라 제대로 기억이 안나긴 하지만, 지금 기억나는 기술 인터뷰 내용을 조금 말씀드립니다. 아래 대화는 기술 인터뷰 중 일부를 재구성한 것으로 제 답변은 일부 생략을 했습니다 ㅠㅠ 너무 아는게 없어서 헛소리만 해대서요.

- 면접관: 피카소, 프레스코, 이미지로더 라이브러리들 비교를 해봐라. 어떤 문제나 장점으로 어떤 라이브러리를 선택해서 이용했었는지 말해봐라.

 둥이아빠: 셋 다 듣보잡인데???

- 면접관: 이미지 핸들링 어떻게 했나? 자체 라이브러리를 만들었나?, 설마... 안드로이드 비트맵 쓴건 아니지?

 둥이아빠: 다 아닌데? 우리 이미지 핸들링 할 일이 없어. 이미지 라이브러리는.... NDK 쪽에서 libjpeg-turbo C 라이브러리 쓰는거는 있어. 단말 remote control을 위해 단말에서 서버로 현재 화면 뿌려줄 때
 면접관: 헐...

- 면접관: 그래 그럼 UI 관련해서 질문 해보자. (자신의 폰에 최근 그들이 만든 명품 구두 App을 보여주며...) 여기 해쉬태그 버튼들 보일꺼야. 알파벳 순서로 정렬되어있고. 태그 종류에 따라 그 길이는 다 제각각 다르고. 지금 이 UI처럼 각각 다른 길이의 버튼들인데, 한 줄에 여려개의 버튼이 들어갈 수 있으면 다 한 줄에 표시를 하고, 한 줄에 한개만 되면 한개만 넣되 버튼들은 다 중앙 정렬되야되.
이런거 할 때 레이아웃은 어떤거 써야 할까?

둥이아빠: 흠... 글쎄? 그냥 리니어나 리스트 레이아웃으로 밖에 큰 틀을 잡고, 각 줄 마다 릴레이티브 레이아웃으로 버튼 배치하면 안될까? 사실 나 레이아웃 종류들도 다 몰라. UI쪽은 1년에 한 번 코드 볼까말까 할 수준이라. 그렇게 하면 안될 것 없을 것 같은데, 더 효율적인 방법이 있어?



- 면접관: 흠... 그럼 그냥 Material & Motion쪽으로 넘어가보자. 아, 혹시 카드뷰가 어느 OS 버젼부터 가능한지 아니?

 둥이아빠: 매 OS 발행 때 마다 변경사항 체크하지만, UI쪽은 신경 안써서... 그거 구글 나우랑 같이 소개한걸로 기억하는데... 롤리팝이던가? 마쉬멜로는 확실히 아니고.... 롤리팝에서 킷켓 그쯤 일것 같은데?

- 면접관: 뭐 그건 넘어가고.... (폰을 다시 보여주며) 여기 상단 탭하고, 하단 탭 보이지?
상단탭 1이 하단 탭 1/2/3과 엮이고, 상단탭 2는 4/5 하고 엮여있어. 컨텐츠를 좌우 스와핑을 하면 탭이 이동되는데, 탭 3에서 4로 넘어갈 때 봐봐. 상단 탭 1에서 2로 포커싱 바뀌지? 이거 어떻게 하면 될까?
둥이아빠: 흠... 난 이런거 고민 해 본 적이 없는데. 그냥 하단 탭 변경될 때 상단 탭 포커싱도 같이 바꾸면 안되나? 근데 어떻게 하는지는 해 본적이 없어서 모르겠네. 어려울 것 같지는 않은데 말이야.

- 면접관: 흠... 그래 그럼 이걸 봐봐. 좌/우 스와핑을 천천히 할테니 상단과 하단 탭을 잘 봐봐. 스와핑이 완료되지 않고 진행중일 때 하단/상단 현재 탭에 포커싱 되어있다는 표시가 점점 옅어지면서 그 옆에 탭으로 포커싱이 이동되고 있는 게 보이지? 이건 어떻게 구현할래?

둥이아빠: 흠... 글쎄 이 역시도 고민 해 본 적도 없고 생각 해 본 적도 없어서. 이거 그냥... 흠... 카트 스타일 위젯을 쓴 적도 없고 좌우 스와핑 UI 이벤트 역시 해 본 적 없어서 이 프로그레스가 어떻게 전달되는지 잘 모르겠네. 1시간 정도 주어지면 앉아서 이것저것 찾아보면 할 수 있을것 같은 기분이긴 한데...

- 면접관: 헐... 그럼 좌우 말고 내가 상하로 가볼께. 컨텐츠 영역을 위로 올리면, 여기 봐봐, 상단 탭이 배너를 먹고 들어가면서 점점 컨텐츠 영역 디스플레이가 넓어지지? 그리고 다시 내리면 배너가 나오고. 이런건 어떻게 할까?

둥이아빠: (이젠 포기모드) 나 진짜 1시간 주면 할 것 같은데? 지금 말하라면 모르겠어

- 면접관: (면접관도 포기모드인듯...) 너 진짜 UI 모르는구나? 
 그럼 이거봐봐 (점점 면접 모드에서 자기 제품 자랑모드로 변경) 
 카드에서 좌우 스크롤하면 탭 이동이지? 근데 카드에서 이쪽에서 터치해서 좌우 스와핑하면 컨텐츠 삭제야. 이건 어떻게 할까?
컨텐츠 삭제할 때 카드가 날아가는 UI 이펙트가 이런 식이야. 이런거 만들 수 있겠어?
컨텐츠 카드 선택하면 그 컨텐츠가 전체화면으로 나올꺼야. 그런데 이거봐봐. UI 이펙트가 이렇게 들어가. 이건 어떻게 할까? 라이브러리 쓸까? 안드로이드 자체로 이런게 될까?, 여기 네비게이션 패널하고 컨텐츠가 이렇게 서로  상호 연동이 되는데...
등등...

둥이아빠: 몰라, 몰라, 몰라, 야~ 이 앱 이쁘다~. 몰라, 몰라..... (완전 포기하고 어떤 것을 내가 공부해야 할 지 보는것에 집중)

참... 이거야 정말 제 이야기이지만, 제가 봐도 답답할 정도로 정말 아무것도 제가 모른다는 것을 느끼고 말았습니다.

나중에 찾아보니 안드로이드 공식 리퍼런스의 디자인 파트 페이지를 열면 딱! 나오는 내용들일 정도로 기본중에 기본인 내용들이더군요. https://developer.android.com/design/index.html
저는 안드로이드 개발자로 일을 하면서 이런 페이지가 있는지조차 사실 알지 못 할 정도로 단 한번도 UI를 심도있게 공부 해 본 적이 없었습니다.
아무것도 모르면 자신감이 100%에 이르고, 아는게 많아질 수록 자신감은 떨어지다가 어느 수준에 이르르면 다시 지수함수 형태로 자신감이 올라가지만, 최고의 자리에 있을 때라도 자신감이 100%에는 미치지 못한다는 Dunning-Kruger effect. 이건 정말 사실이였습니다.

정말 아무것도 모르면서도 UI는 무시했고, 그냥 "난 다 할 수 있어" 라는 자만심에 빠져 아무런 대비도 없이 면접에 나갔던 제가 잘못을 한 것이죠. 더구나 복잡한 비지니스 로직 보다는 화려하고 안정적이고 직관적인 UI가 사업의 핵심인 회사에 지원을 했으니...

그 동안 다른 면접을 봤을 때만 해도, 이렇게 직접적으로 UI와 관련된 질문을 받기 보다는, 프로젝트 설계나, 데이타 커뮤니케이션 구현 등 현재 제 업무와 비교적 유관한 분야만 질문을 받았었는데, 진짜 순도 100% UI 질문 공세를 받으니 말 그대로 영혼까지 탈탈 털리고 말았습니다.

그래도 참 다행인 것은, 'UI를 해야겠다' 라는 것 까지만 인지하고 있었던 제가, 이제는 'UI에 대해 난 하나도 모르는구나. 내 스스로라도 좀 공부를 해서 뭐라도 하나 만들어보고 경험 해 봐야겠다' 라는 것을 느꼈다는 것입니다. 그래서 언젠가 다가올 이직의 순간에 대비하고자, 앞으로 https://developer.android.com/design 에 보이는 모든 레이아웃과 모션들이 적용된 샘플 앱을 하나 만들어 보려고 합니다. 아마도, API와 SDK가 비교적 잘 되어있는, Facebook이 그 대상이 되지 않을까 싶근 하네요. 정확히 기억은 안나지만, 제가 면접을 봤던 회사에서 했던 UI들과 비슷한 기능들을 좀 넣어보려고요 ㅋ

아, 지금 저의 자신감이요??? 이젠 0%! 바닥을 쳤습니다. 제 헤드헌터에게 다시 연락이 온다면, 그냥 당분간 난 이직 생각 없으니 전화하지 말라고 이야기 해야겠어요 ㅎㅎㅎ

댓글 8개:

  1. 정말 중요한 내용 공유해주셔서 고맙습니다. 현재 캐나다에서 컬리지를 다니고 내년에 구직을 해야하는 입장에서 정말 도움되는 포스팅이었습니다.

    답글삭제
  2. 항상 귀한 포스트에 감사드립니다. 한가지 질문드리고 싶은 것이 있습니다. 저도 최근에 캐나다 대학교 입학관련하여 알아보고 있습니다만, 국제학생 학비가 너무 비싸서, 혹시, 기술이민등 으로 이미 이민이 확정된 후에 대학교에 입학하는 경우는 캐나다 내국인 학비적용을 받을 수 있는지요?

    답글삭제
    답글
    1. 이민 확정이란 것이 어떤 것을 의미하신 것인지 모르겠는데요...
      만약 말씀하신 "확정"이 영주권 신청해서 영주권 신청이 승인 완료되고, 영주권 승인 문서인 COPR (Confirmation of Permanent Residence) 레터를 가지고 캐나다에 입국을 하며 영주권 랜딩 신고까지 마치는 것을 의미하셨다면 맞습니다. 아직 PR카드가 발급/배송/수령이 완료 된 것은 아니지만 랜딩 이후부터는 영주권자 신분이기에 학교에서도 자국인 학생과 동일하게 학비를 내면 됩니다.
      만약 이민 신청만 한 상태거나, COPR을 아직 안받은 상태면 국가로부터 학비 지원을 받을 수 없기에 외국인 학생 학비를 내야 하고요.
      조금 애매한 것은 COPR은 받았고, 아직 랜딩을 하기 전의 경우인데, 이건 학교마다 규정이 다를 수 있습니다.
      외국인 신분으로 학교를 다니다가 COPR을 받은 경우 제가 다녔던 학교에서는 일단 그 다음학기 부터는 내국인 학비를 낼 수 있도록 변경 해 주었는데, (랜딩 이후에 COPR에 랜딩 승인 넘버를 입력하기 위해 다시 한 번 학교를 찾아가긴 했습니다) 어떤 학교에서는 랜딩먼저 한 이후에 다시 찾아오라고 했다고도 하더라고요.

      삭제
    2. 아.. 그렇군요. 상세한 답변 진심으로 감사드립니다. :)

      삭제
  3. (이메일을 못보신거같아서 댓글로..)
    안녕하세요 저는 내년에 소프트웨어 쪽으로 컬리지에 입학하려는 학생입니다.
    블로그를 보면서 IT 쪽에서는 웬만큼 실력이 있어야 취업도 그만큼 가능성이 있기때문에 19살 살면서 코딩은 해보질않았습니다. 그래서 가기전까지7개월정도 있는데 무지한채로 수업듣는것보다는 어느정도 알고 수업을 들어야 실력이 더욱 늘거라고생각됩니다. 그래서 요즘 youtube에 좋은강의가 있어서 듣는중입니다. 학교는 conestoga, george, seneca등 5개에 원서를 넣었고 대부분 지원한 학과에 c언어 자바 가 공통되어있어 공부하려고 합니다. 그 외에 어떤 것을 공부하면 좋을까요?


    당연히 영어도 공부하고있습니다/

    답글삭제
    답글
    1. 어떤 언어가 되었건 일정수준 이상으로 파고들면 결국 큰 차이가 없습니다. 다양한 경험을 하는 것도 좋지만 한가지 언어라도 심도있게 공부를 하게되면 다음에 다른 언어를 배울 때 쉽게 익힐 수 있어요.

      삭제
  4. 더닝 크루거 효과라는게 그런거군요..
    저도 생각해보면 대학 졸업할때는 되게 자신감에 차 있었는데, 경력이 거의
    10년 된 요즘들어서는 내가 전문가가 맞긴 하나?라는 생각이 들기도 하고, 가끔 티비에 20대후반-30대중반의 프로페셔널이 XX전문가 라고 달고 나오면 저사람들은 어떤 자신감으로 전문가라는 타이틀을 달고 나오나? 라고 생각될 때가 있습니다..ㅎㅎ

    답글삭제