Naver Tech Concert 2019 후기

6 분 소요

운좋게 Naver Tech Concert Mobile 안드로이드 프로그램에 초대받아 네이버 그린팩토리에 다녀왔다. 개인적으로 많이 배울 수 있었고 모르고 있던 부분도 많이 깨우치게 되었다. 배우는 부분도 많이 있었지만 개발자로서 가져야할 자세에 대해서 다시 한 번 생각해보는 계기도 되었다.

세션의 구성은 다음과 같이 구성되어 있었다.

예제에서는 알려주지 않는 Model 이야기

https://github.com/omjoonkim/GitHubBrowserApp

레이니스트의 김범준님이 수고해주셨다. 신입 개발자의 입장에서 기능 구현 임무를 받았을 때 어떻게 만들고 개선시켜나가는지에 대한 과정을 예시 코드와 함께 설명해주셨다. 구현하는 과정에서도 Model의 역할을 분리하는 것에 초점을 맞춘 강의였다.

Model 역할 분리

Model이란 무엇일까?

위키피디아 정의 - 어떠한 동작을 수행하는 코드를 말한다. 표시 형식에 의존하지 않는다. 다시 말해, 사용자에게 어떻게 보일지에 대해 신경쓰지 않아도 된다. 모델은 순수하게 public 함수로만 이루어진다. 몇몇 함수들은 사용자의 질의(query)에 대해 상태 정보를 제공하고 나머지 함수들은 상태를 수정한다.

발표자의 정의 - 데이터베이스, API를 통해 데이터를 불러오고 저장하는 역할, 서비스의 비즈니스 로직(도메인)을 담당.

주요한 내용은 모델의 역할(책임)에 따른 분리 과정에 대한 것이었다.

주요 내용

신입 개발자의 입장에서

기본 MVP에서 문제점을 발견하고

View - Presenter - Model

→ Repository Pattern 이용하여 Model을 Data와 Source로 분리하고

View - Presenter - Data - Source

→ Presentation Logic에서 Business Logic을 분리하여 Domain까지 분리하여

View - Presenter - Domain - Data - Source

위와 같이 Model을 3단 변신 시키는 과정을 보여주셨다.

이후에 Presenter에서

Api call → HttpNetworkException → 403 Forbidden Rate Limit → Toast

위와 같은 과정에서 HttpNetworkException, 403 에러도 Business Logic으로 보고 HttpNetworkException을 Domain으로 변경시켜서 처리하도록 하는 과정까지 보여주셨다. 해당 과정을 마치니 최종적으로는 Clean Architecture을 구현한 모습의 구조가 형성되었다.

Repository Pattern, Service, UseCase 등의 용어를 새로 알게 되었고, Exception Handling까지 비즈니스 로직으로 보는 이유나 처리 방법까지 배울 수 있었다. 오늘 배운 샘플코드는 항상 정답이 아니며 프로젝트에 필요한 만큼 다듬어서 사용하는 것이 좋다고 한다. 새롭게 배운 내용은 더 공부하여 정리해놓아야 할 것 같다.

안드로이드 개발자 로드맵

네이버 웹툰의 안중환님이 수고해주셨다. 개인적으로 개발자로서 어떻게 공부해나가야하는지, 안드로이드 개발자로서 어떻게 공부해나가야하는지 감을 더욱 잡게해주었던 강의였다.

  • 기본기
  • 키워드
  • 안드로이드
  • 비동기
  • 성능, 최적화
  • 프레임워크
  • 언어
  • Best Practice
  • TODO

위와 같은 순서로 안드로이드 개발자가 밟아나가야 할 로드맵에 대한 강의를 해주셨다. 인상깊었던 파트는 기본기였다. 개인적으로 기본기가 약하다고 생각되어서도 그랬다. 여기서 말하는 기본기란 DB + OS + Network + algorithm + 자료구조에 대한 지식과 이들을 연결시켜서 생각할 줄 알아야한다는 것이다. 예를 들면 내 컴퓨터에서 1 0이 서버로 어떻게 전달되는지에 대한 과정을 잘 숙지하고 있어야한다는 것들이 그런 것이었다. 말했듯이 스스로 약하다고 생각되는 부분이니 잘 다져놓아야 할 것 같다. 컴퓨터 사이언스에 대한 지식이 잘 잡혀있다면 이를 바탕으로 지식이나 구현 방법의 확장을 더욱 잘 해낼 수 있을 것이라 생각했다.

기본기까지 다지면 기본 T자형 인재가 될 수 있는데 여기서 이제 안드로이드 스택인 Android, Java, Kotlin을 더하면 T자가 세로로 더 길어질 수 있다. 마지막인 Best Practice까지 마치면 다른 스택들을 공부하며 끔찍한 혼종이 될 준비를 하면 된다고…

마지막으로 공부한 내용은 블로그에 올리는게 좋다고 하셨다. 역시 블로그를 해야한다. 열심히 적고 기록하자..

[패널토크] 무엇이든 물어 보세요. feat. 모바일 개발, 기획, 디자인의 모든 것

가장 인상깊었던 부분이다. 다른 강의들도 좋은 내용이 많았지만 나는 오늘 여기서 펀치를 한 대 맞는 느낌을 받았다. 개발자로서 가져야할 자세에 대한 고민을 가지게 해주었던 세션이었기 때문이다. 주요 질문과 답변은 다음과 같다. 장문주의.

Q. 처음부터 디자인을 체계적으로 짜고 개발을 시작해야 더 원활하게 진행할 수 있는건가요?

  • 일정과의 타협이 중요하다. 배포의 흐름을 빠르게 진행하는게 중요하다. 사용자 피드백을 빠르게 캐치하는게 중요. 반응 분석해서 나아갈 생각해야한다. 처음부터 완벽하게 만들려고 하면 안된다.
  • 서비스는 계속 다듬어져야한다. 스토리를 짧은 텀을 두고 쌓아나가야 한다.

Q. 모바일 웹 디자과 네이티브 앱 디자인은, 디자인을 할 때 스타일 차이가 큰가요?

  • 웹과 모바일은 UI UX가 차이가 날 수 밖에 없다. 블록킹은 모바일에서만 가능해서 차이가 나기 시작한다.

Q. 기획자 본인이 생각하는 잘된 기획과 그렇지 못한 기획?

  • 잘된 기획은 일종의 목표가 있다. 매출이나 사용자 반응, 임원평가. 그걸 출시했을 때 만족을 하면. 좋은 기획이라고 생각

Q. 초보 개발자가 앱을 런칭하기 전 특별히 주의해야할 점, 런칭 후 유지보수 방법?

  • 주의해야할 점은 없다, 런칭 이후가 제일 중요하다. 빠르게 피드백을 얻는게 중요하다. 얻을 수 있는 곳은 다 보내봐야한다. 마켓리뷰 답변. 앱은 잘 동작하네?는 안된다. 바로바로 고쳐줘야한다. ANR(Application Not Responding)?
  • 버튼 같은 거 클릭할 때 클릭지표 같은 것들, 트래킹 지표 같은 거 꼭 심어서 플로우 분석해야한다. 서드파티 앱 사용
  • 아무리 꼼꼼하게 체크해도 출시 후에는 버그가 나온다. 마켓 리뷰를 통해서, SNS 등을 통해서 반응 체크를 잘해야한다.
  • 사용자를 이길 수 있는 디자인은 없다.

Q. ios 안드로이드 앱 디자인 가이드라인 다른데 어떤 부분에서 디자인 할 때 가장 큰 차이 발생하나?

  • 해상도나 디바이스 차이가 크다.
  • px ios, dp android 차이 고려해야 한다. 픽셀이 동일하게 간다고 생각하면 안되고 기기별로 가이드를 쳐서 디자이너가 엔지니어에게 줘야한다.
  • 안드로이드의 경우 백버튼 눌렀을 때 어디로 보낼지 계산해서 주고 한다. IOS Android 공통화시키지 않았으면 한다. 툴바의 백버튼 같은 것.

Q. 아이디어를 얻기 위해 회사 일 말고 어떤 것들을 찾고 공부?

  • 서비스 아이디어는 드리블? 같은 디자인 서비스를 생각한다. 매일 랜덤 키워드 받게끔 해놓고 어떻게 활용할 수 있을까를 계속 생각해본다. fiddle리? 같은 것을 안드로이드 아스날 같은 것 보면서 신규기술동향을 파악한다.
  • 디자이너는 에고를 줄이고 외부에서 활용해본다.

Q. 네이버 개발팀에서 어떤 협업 툴을 사용하는가?

  • Github Enterprise
  • 제플린 사용. 이미지 assets, guideline 활용
  • 기획팀은 오피스 프로그램 사용. 화이트보드나 그림 그려서.
  • 디자인 팀은 스케치

Q. 네이버 브랜드 아이덴티티 vs 서비스 자체 아이덴티티 무엇을 중시하며 사용자에게 어떤 측면으로 다가가나?

  • 네이버를 따라가면 인기를 등에 업고 빠르게 성장할 수는 있지만 혁신을 만들기는 힘들다.
  • 전사 가이드가 있다.

Q. 3천만이라는 유저의 파편화된 사용성을 맞추기 힘들텐데, 이런 경우 우선순위와 핵심타겟을 어디에 두나?

  • 주 사용자와 핵심기능에 초점. 로그 수집해서 데이터 기반으로 핵심타겟. 서비스함에 있어서 절대적으로 필요한 것들. 있으면 좋은 것들 나열해두고 작업.

Q. 모바일 개발자는 기획자 & 디자이너와 소통할 일이 많을 텐데 다른 직군과 커뮤니케이션할 때 유념하는 점?

  • 세 직군의 공감대를 형성하는게 가장 중요하다. 상대방의 의견을 경청하고 수칙을 가지고 결과물을 도출해내기 위한 토론을 해야한다. 좋은 방향을 만들기 위해 의견을 내고 그렇게.
  • 기획자 : 안되는게 있으면 왜 안되는지 말을 해주면 좋겠다. 대체 방법을 말해주면 좋겠다.
  • 수칙을 가져야한다. 이게 예뻐서 이렇게 했다. 이런건 안된다.

Q. (내 질문) 전에 있던 팀에서는 새로운 기능을 추가할 때 기능을 어떻게 만들지 회의를 간단히 한 후에 기획팀이 와이어프레임을 만들어서 디자인팀에게 주고 디자인팀에서 디자인을 해서 제플린으로 개발팀에게 전달을 하고 개발팀이 개발을 하는 구조로 일을 진행했었습니다. 이렇게 했을 때 최종적으로 디자인을 받고 와이어프레임을 전달받으면 개발팀에서 어떻게 구현할지 고민이 많아지고 심지어는 새로 회의를 해서 구현 기능을 재조정하는 경우까지 있어서 비효율적인 프로세스라고 생각했는데요. 네이버에서는 기획, 디자인, 개발을 할 때 어떤식으로 회의를 진행하고 협업을 하고 작업내용을 주고받으면서 일을 진행하시는지 궁금합니다. 보다 효율적으로 협업을 진행하는 방법이 따로 있으신지요?

  • [기획] 프로젝트마다 업무 진행 흐름이 조금씩 다른 것 같습니다. 차근차근 완성도 있게 진행되는 프로젝트라면 질문주신 것처럼 기획 -> 디자인 -> 개발 순서대로 산출물이 오가며 진행됐던 것 같아요. 앱의 화면 전환/인터렉션이 중요하다 보거나 일정이 매우 촉박한 프로젝트라면 앞서 말씀드린 것처럼 순서대로 가지 않고, 기획에서는 대략의 기능만 정의하고 디자인-개발 데모로 사용성을 평가하고 다시 보완해서 진행하는 것을 반복하는 방식으로 진행했던 것 같습니다. 두 방법 모두 일장일단이 있다고 생각하여 어느 방법이 더 낫다라고 말씀드리긴 다소 어려워 보이며, 프로젝트에서 중요하게 생각하는 사항에 따라 진행방식도 그에 맞춰가야 하는 것 같습니다.
  • [개발] 아까 말씀드린 제플린 정도의 화면 설계가 어느정도 전체 완성 돼 있고, 기획은 문서로 치는 경우도 종종 있습니다. 서로가 ‘난 여기까지 다 했어’ 라고 생각하는 순간 시간은 흐르고 오해가 생기고, 이터레이션은 무작정 처음부터 돌게 돼요. 문제가 생기면 바로바로 모여서 회의하고 이야기하고 서로 컨센서스 맞추고 해야 합니다. 그래야 서비스 속도에 대응할 수 있습니다.

Q. 신입 개발자 선발기준

  • 안드로이드 기준에서는 치열함. 치열하게 본인이 맡은 것을 해야하고, 본인이 하는 기술을 치열하게 파봐야한다. 왜 이렇게 되는지 궁금해하고 파보고 해야한다. 기본문서보고 어떻게 동작하는 것인지 공부를 해서 자신의 것으로 만들어야한다. stackoverflow에서 코드 베껴서 어? 되네 수준이 아니라 직접 해보고 파보고 공부해보면서 기술스택에 대한 열정을 가져야한다. stackoverflow 많이 보지 말라. 서비스에 대해서도 책임감을 다해야한다.

→ 부끄럽지만 어떻게 보면 내가 부족했던 것이 저런 것이라고 생각한다. 기능 구현에만 급급해서 핵심적으로 어떻게 돌아가는지는 모르고 핵심을 파악하지 못하고, 궁금해하지도 않고 있었다. 현업에서 어떻게 일하는지 궁금해하는 것도 좋지만 먼저 내 능력부터 갖추고 들어가서 일하기 시작하면 자연스럽게 얻게 될 것이라고 생각했다. 호기심을 가지고 접근하고 어떻게 설계되어 있고 왜, 어떻게 동작하는지 치열하게 내가 다루고 싶은 기술을 파봐야할 것 같다. 그러면서 부족한 면을 많이 채워야 할 것 같다. 요즘에 시작한 1일 1커밋으로 안드로이드 문서를 공부하고 있는 것도 사실 기능만 구현할 줄 알지 어떻게 내부가 돌아가는지 잘 알지 못해 기능 확장이나 스스로 어떤 기능을 구현해야할 때 애를 먹는 것이 답답해서 시작했다. 꾸준히해서 결과물을 내야 할 것 같다. 공학적인 탐구자세가 필요하다.

이외에도

첫 번째 세션이었던 Naver Clova의 노현석님이 강의하신 Android Studio 설정 다시 한번 볼까요? 세션에서 Android Stuido Preference를 만져서 생산성을 높일 수 있는 팁들을 얻을 수 있었고 Google의 양찬석님이 강의하신 나누고 쪼개지는 안드로이드 세션에서도 안드로이드의 내부적인 구조와 미래에 대해서 지식을 얻을 수 있었다. 그리고 마지막 두 개의 세션에서도 관련 지식이 없어서 듣기는 조금 힘이 들었지만 카메라와 라이브 스트리밍은 저렇게 구현을 해내는 구나 하고 감을 얻을 수 있었다.

마지막으로

배운점이 너무나 많은 고마운 발표들이었다. 컨퍼런스를 다니면 이런 식으로 배우거나 느끼는 내용이 정말 많다. 앞으로 제대로 공부해나가야 할 내용이 참 많다고 생각하고 꾸준히 요령피우지 않고 치열하게 공부해나가야겠다고 생각한다.

태그:

카테고리:

업데이트:

댓글남기기