Naver Tech Concert
8월 19일부터 이틀간 진행하는 네이버 태크 콘서트에 참석했다. iOS 안드로이드 FE 세션으로 이루어져 있었으며 다소 아쉬운 부분은 내가 관심있는 BE가 없었던 것이다. 그래도 다른 분야의 지식을 실무자의 시선에서 대학생들을 위해 말씀해주셔서 감사했다. 아직 경험해본적이 없는 분야라서 이해하기 힘든 부분이 많았지만 그 중에서 분야를 막론하고 가져야할 개발자의 시선과 같은 부분들 지식을 쌓아야하는 부분들에 대해서 들을 수 있어서 정말 좋은 시간이였다고 생각한다.
한승범님 세션
한승범님의 세션은 안드로이드의 안자도 몰랐던 나는 어떻게 안드로이드 개발자가 되었을까?를 주제로 진행되었다. 한승범님의 세션은 안드로이드의 기술적 이야기보단 자신이 어떻게 살아왔고, 어떤 생각을 가져왔고, 어떻게 공부했고, 어떤 방향을 목표로 나아가고 있는지를 주제로 진행이 되었는데 공감이 가는 부분도 있었고, 대단하다 생각되는 부분도 있었고 특히나 앞으로의 방향을 잡는데 도움이 많이 되었던 세션이였다.
또한 단순히 자신의 이야기 외에도 코드 품질적인 이야기를 해주셨는데, SOLID 원칙이나, 클린 코드, Git, 그리고 코드리뷰 문화에 대해서 짧막하게 설명해주셨다. 이 말씀을 들으면서 기본에 충실하고 OOP에 충실한 코드가 품질이 높은 코드를 만드는 방법이구나를 다시 한번 느낄 수 있었다.
또한 코드리뷰 문화에 대해서 말씀해 주시면서 인턴을 하며 코드리뷰를 받아봤던 기억이 떠올랐다. 처음 코드리뷰를 받을 때는 어떤 부분이 잘못되었는지 명확히 이해하기가 힘들었는데 스스로 공부하면서, 또 다른 프로젝트를 많이 해보면서 아 그때 그 말씀이 이런 관점에서 대처하는 말씀이였구나를 많이 상기시킬 수 있던 코드리뷰였다. 코드리뷰는 정말 의미있는 문화라고 생각한다.
장수한님 세션
장수한님의 세션은 성능을 고민하는 슬기로운 개발자 생활이라는 주제로 진행되었다. 처음에 개발자가 반드시 고려해야할 사항이라는 것을 주제로 세가지 항목을 제시해 주셨다.
- 구현된 로직이 동작할 환경은 어떤가
- 적절하게 자료구조가 사용되었는가
- 작성된 로직의 복잡도는 어떻게 되는가
이 세가지의 주제를 한번에 묶은 간단한 명세서를 통해 코드를 작성하고 이를 발전시키는 단계로 진행해주셨다. 함수형 프로그래밍의 API를 사용해 코드를 리팩토링하는 단계부터 시작하시면서 함수형 프로그래밍 API에서 자주 사용하는 기능들에 대해 어떠한 방식으로 동작하는지, Big-O Notation을 기반으로 설명하시면서 성능 개선관점으로 리팩토링을 추가적으로 진행해주셨다. 요즘 이펙티브 자바를 공부하면서 함수형 프로그래밍에 대해서 깊게 공부하면 강력한 무기가 될 수 있겠다는걸 느끼고 있었는데 잊지말아야 하는 점을 말씀해주셨다.
특히 map, filter는 모두 반복문이다 라는 말씀에서 막연히 아 이렇게 사용하면 되겠지가 아니라 아 이게 이렇게 돌아가니까 이렇게 사용해야지라는 생각을 잊고 있었던 내가 부끄러워졌다. 성능 개선 관점에서 장수한님은 이렇게 정리해 주셨다.
- 복잡도 계산을 꼭하자. O(N ^ 2)는 재앙을 불러온다.
- 적절한 자료구조를 사용하자. 단 메모리 사용량을 고려하자.
- 많은 양의 데이터를 다룰땐 Autoreleasepool을 사용하자. 이부분은 iOS 세션이라 Swift 관련된 키워드인거 같은데 아무래도 ObjectPool같은 말씀이신거 같다. 나중에 찾아봐야겠다.
- 코드의 간결함, 가독성도 좋지만 성능보장이 기본이다.
- 작성된 로직은 실제 환경과 비슷한 환경에서 테스트가 필요하다. 또한 사용자 환경 파악은 매우 중요하다.
성능 개선 관점에서 정말 좋은 말씀을 많이 해주신 세션이였다. 특히 마지막엔 Set을 홍보하고 가셨는데 union, merge와 같은 기능들에 대해서 간략히 소개해주고 가셨다. 알고리즘 문제풀때 C++로 조금 써먹어 봤는데 나중에 프로젝트 레벨에서 꼭 써볼 기회가 왔으면 좋겠다.
홍창남님 세션
홍창남님 세션은 좋은 동료로 거듭나기 위한 노하우라는 주제로 진행을 해주셨다. 크게 업무적인 부분과 성장적인 부분으로 설명을 해주셨는데 PPT가 매우 직관적으로 들어오며 설명해주셔서 또 목소리도 좋으셔서… 인상이 깊게 남았다.
첫째로 업무적인 부분에선 Notification 전달하기 라는 첫 주제로 시작을 해주셨다. 개인의 작업 계획이나 진행 상황을 공유해가며 공유하지 않았을 때 생기는 삽질(?)을 미연에 방지해야 한다는 말씀을 해주셨다.
두번째론 질문하기라는 주제로 설명해주셨다. 항상 딜레마에 빠지는 말씀이라고 하셨다. 왜 이런것까지 물어보나요? 와 왜 미리 물어보고 안했어요? 뭔가 군대가 생각났다 ㅎㅎ… 그러면서 정말 좋은 말씀을 많이 해주셨는데 우선 좋은 질문이란 답변하기 좋은 질문이라고 정리해주셨다. 그러면서 부가적인 설명을 해주셨는데 쏙쏙 이해가 됬다.
- 좋은 질문은 구체적이고 명료하다.
- 질문하기전 퇴고하자! 명확한 의도 전달을 위해
- 많이 고민한것으로 보이는 질문
- 무엇을 물어볼까? 궁금증을 구체화 시키자
- 어디까지 해보고 질문할까? 시도의 범위를 생각하자
인턴하면서 진짜 이런거를 여쭤봐도 될까?라는 생각을 많이 했던거 같다. 그러면서 멘토님한테 질문할 때 이런거를 여기까지 해봤는데 이러 이러한 상황때문에 이러 이런걸 고려해서 시도해봤는데 안됬어요 라는 말을 드리며 질문을 하셨을때 항상 명확하고 좋게 대답해주셨던거로 기억한다. 이런거를 한방에 정리해주시다니.. 대단하시다.
세번째로는 알면 알고 모르면 모르고라는 주제로 설명해 주셨다. 그러면서 개발자는 명확한 대답과 확실한 태도를 가져야 한다고 하셨다. 즉, 모른다고 이야기하는것의 두려움을 가지지말고 모르면 모른다고 확실히 이야기하는 용기를 가지라고 하셨다. 그리고 잘못된 대답이나 전달을 했을 때 빠르게 정정해야 한다고 말씀해 주셨다. 또한 중요한것은 언제나 공식문서와 코드를 통해 확인하는 습관을 가져야 한다고 말씀해 주셨다. 사실 세번째 주제는 정말 어려운 주제인거 같다. 혹시 이걸 몰라서 바보로 생각하는건 아닐까 같은 두려움도 있고 걱정도 있는데 모르면 모른다고 말하는 용기를 가지라고 말씀하시니.. 그런 마인드를 가지도록 노력해야겠다. 그리고 더 꼼꼼해져야 겠다!
업무를 주제로한 마지막 소주제는 코드리뷰를 말씀해주셨다. 특히 None of your business? One of my business!라고 말씀해주셨는데 저 문장 하고자 하시는 말씀이 무엇일지 한번에 이해가 갔다. 그러시면서 작은것이라도 적극적으로 코드리뷰를 해야한다는 말씀과 칭찬에 인색하지 않기 그리고 you are not your code(feat. 프로그래밍 심리학)라는 말씀을 해주셨다. 즉, 코드를 이야기하자는 것이지 코드를 작성한 개발자를 논하고자는게 아니라는 말씀을 해주셨다. 나도 언젠가.. 다시 코드리뷰를 받거나 누군가에게 코드리뷰를 해줄 때 이렇게 행동하도록 노력해야겠다.
두번째로는 성장이란 주제로 어떻게 성장해야할지에 대해 말씀해주셨다. 첫째로는 공유하기를 꼽아주셨다. 공유할 주제에 대해 자세히 공부하고 또 전달하는 방식에 대해서도 고민하라고 조언을 주셨다. 그렇다면 자연스럽게 성장하며 또한 공유받은 사람은 공유자의 경험치를 생각하게 되는 장점을 가진다고 말씀해주셨다.
그 다음으로는 관심사를 찾고 디테일에 강해지기를 말씀해주셨다. 매년 쏟아지는 다양한 주제속에서 모든 지식을 완벽히 아는 것은 정말어렵다고 말씀해주셨다. 그렇기 때문에 다양한 분야를 탐색하고 관심 분야를 공유하는게 좋다고 말씀해주셨다. 그리고 디테일에 강해지는 부분이 중요하다고 말씀해주셨다. 홍창남님이 생각하시는 디테일이란
- 구글링으로 쉽게 알 수 없는 부분
- 관련 문서의 깊은 한 구석에 있는 부분
- 코드를 직접 확인해야 알 수 있는 부분
- private API라서 직접 테스트해봐야 알 수 있는 부분
이라고 해주셨다. 말씀해주시는데서 얼마나 많은 노력이 있었는지 느낄 수 있는 순간이였다.
정영록님 세션
정영록님 세션은 빠르게 성장하는 슈퍼루키로 거듭나기를 주제로 진행해 주셨다. 정영록님께서 스스로 입사하시고 나서 경험하셨던 내용들을 공유해주셨는데 환경, 기록, 리뷰 순서로 진행해 주셨다.
첫째로 환경적 부분인데 문제에 봉착했을 때에야 비로소 사람은 간절해진다.라고 정의해주셨다. 배워야할 것들은 산더미라서 다양한 것을 해보면서 다양한 문제를 만날 수 있고 그런 환경에 나를 집어넣어야 한다.라고 말씀해주셨다. 나도 2020년 상반기에 라인과 카카오 두 기업의 면접에서 떨어지고 난 뒤에 스스로에게 많이 실망했고 또한 스스로를 반성할 수 있었던 시간을 가질 수 있었다. 그러면서 느낀건 나태해진 나 자신을 바꿔야한다고 많이 느끼고 발전하기 위해 열심히 공부하고 있다! 아직 많은 배움이 필요하지만 꾸준히 끊임없이 해야겠다고 다시 한번 나를 잡을 수 있었다. 정영록님은 환경에서 성장할 수 있는 방법으로 색인이라는 방법을 알려주셨다. 어려운 환경에서 다양한 정보의 키워드를 주워듣고 메모해 두는 습관이 중요하다고 하셨다. 그러면서 무엇과 관련된 개념인가? 어떤 맥락에서 등장하는가? 이것을 다루려면 어디를 봐야하는가?를 중점으로 두어야 한다고 하셨다. 봉착한 문제에 해당 키워드가 등장했을 때 심화 지식까지 찾아보고 문제 상황에 대입해서 이해하고 해결책을 모색해야 한다고 말씀해 주셨다.
둘째로는 리뷰 부분을 설명해 주셨다. 초심자가 방황하는 이유중 하나는 메타인지의 부재 즉 내가 뭘 모르는지 모르는거라고 하셨다. 그러면서 좋은 멘토 덕분에 멘토의 경험과 지식들을 받으며 빠른 성장을 하셨다고 말씀해 주셨다. 특히 코드리뷰를 강조해 주셨는데 코드리뷰는 신입에게는 구현 과정에서의 궁금증이나 어려움을 공유할 수 있는 창구로 이용할 수 있음을 알려주셨다.
세번째로는 기록을 해야한다고 말씀해주셨다. 배운건 기록하고 기록한건 공유하기가 중요하다고 하셨다. 특히 TIL(Today I Learned)를 스스로도 또 주변에서도 하시고 있다고 소개해 주셨다.
- 새롭게 알게된 내용을 문서화
- 이해하고 구멍이 있었던 부분을 점검하고 채워넣기
- 난항을 겪고 있는 문제를 정리하기
이 세가지가 TIL의 핵심이라고 말씀해 주셨다.
차성원님 세션
차성원님 세션은 야 너두 할 수 있어를 주제로 진행되었다. 비전공자셨던 입장에서 네이버 개발자가 되기 까지 어떤걸 경험하셨는지를 주로 다뤄주셨는데 정말 도움이 많이 되었다. 먼저 제일 중요한건 덕업일치하는가 라고 말씀해주셨다. 스스로 정말 개발을 좋아하는지 물어보라고 하셨다. 이어서 특히 신입에는 기본기가 정말 중요하다라고 말씀해주셨다. 기본기는 어떤 기술이 나와도 그걸 이해하고 구현 철학을 알아가는 핵심 원리라고 말씀해 주시면서 기본기의 중요성을 말씀해 주셨다. 또한 다양한 프로젝트를 진행하면서 어떤게 아쉬웠고 좋았던지를 기록해두면 도움이 된다고 하셨다. 마지막으론 성장에 대해서 말씀해 주셨는데, 정체기는 분명 온다고 말씀해 주셨다. 그러면서 정체기를 잘 이겨내는게 중요하다고 말씀해 주셨다. 특히 스스로 성장을 위해서는 재밌으면 따라해보자라고 하신 말씀이 제일 기억에 남는다. 이스터에그 같은걸 만들면서 따라해보면 만들면서 생기는 성능문제와 같은 다양한 문제가 생기는데 이걸 해결하면서 성장한다고 말씀해 주셨다. 그리고 능동적으로 제안하기라고 말씀해 주셨는데 협업하는데 있어서 상대를 이해시키기 위해 프로토 타입을 제작해서 보여준다던가 같은 능동적인 자세가 중요하다고 하셨다. 그러면서 마지막에 네이버를 홍보해주셨는데 좋은 동료 개발자와 코드리뷰 문화, 밋업 행사와 뉴스레터같은 장점들을 말씀해 주셨다!
오두경님 세션
오두경님은 Code Review is Horse(feat.Latte)를 주제로 진행되었다. 진행되었던 여러 세션중에 코드리뷰 문화를 제대로 소개해주시고 세션 이름도 재밌어서 기억에 많이 남았다. 코드 리뷰란 코드에 의견을 주고 받으면서 버그 제거나 성능 향상을 꾀하는 것이라고 말씀해 주셨다. 그러면서 코드 리뷰의 단계라고 설명해 주시며 가이드 라인을 제시해 주셨다.
- 한눈에 오류가 보이는가
- 공백, 오타, 줄바꿈, 변수명, 코드 컨벤션 등등..
- 포멧팅 설정이나 오타 방지 플러그인 등등 다양한 방법을 사용
- 기능 구현이 잘 되었는가
- 주어진 스펙이 구현이 잘 되었는가?
- 버그 찾고 디버깅하기
- 확장성이 좋은 코드인가
- 반복을 줄일 수 있는가
- 재사용이 가능한 함수인가
- 불필요한 코드가 있는가
- 유지보수가 좋은 코드인가
- 가독성이 좋은가?
- 성능적으로 개선할 수 없을까
특히 4번에 있어서 성능과 가독성이 상호 충돌이 되는 상황도 있다고 하셨는데 이때는 회의를 통해서 결정한다고 하셨다. 이어서 더 높은 단계의 코드리뷰를 받기 위한 방법을 설명해 주셨다. 제일 중요한 것은 내 코드를 남에게 이해시키는것이라고 말씀하셨다.
먼저 코드 단위를 작게 하라고 하셨다. 처음에는 어려운게 당연하지만 익숙해져야 한다고 하셨다. 또한 불필요한 변경은 diff에 잡히지 않도록 해야한다고 말씀해주시면서 ESLint에 이런 기능이 있다고 소개해 주셨다. 또 diff가 적도록 커밋을 나누고 로직과 단순 파일 이름 변경 삭제 커밋은 분리하는게 좋다고 하셨다.
다음으론 코드를 예상 가능하게 해야한다고 말씀해 주셨다. 커밋 메세지를 기능과 연관된 커밋 메세지로 작성하고 PR을 잘 써야한다고 하셨다. PR엔 코드를 이해하기 위한 모든 내용이 있으면 좋다고 하시면서 PR은 아무것도 모르는 사람이 본다고 생각하는 마음으로 작성하면 된다고 하셨다. 특히 세세한 팁들을 많이 주셨는데 기능 구현 내용, 버그 원인이 왜 발생했는지, 어떤 현상이 일어났는지 혹은 유관 부서와 협의된 내용, 코드 구현에 참고한 링크 즉, 베이스가 되는 지식을 얻었던 부분이나 코드가 복잡하다면 그림도 삽입하는 방법도 있다고 하셨다. 또한 고민했던 내용이 맞는지 리뷰받고 싶을땐 고민했던 부분을 적어주면 의견을 나눌 수 있다고 말씀해 주셨다.
다음으론 남의 코드 이해하기를 말씀해 주셨는데 이해가 가지 않는 부분에 대한 명확한 근거를 통해 말해야 한다고 말씀해주셨다. 잘 이해가 가지 않는다면 오프라인 리뷰를 요청하는 방법도 있다고 하셨다.
이어서 어떻게 더 즐겁게 코드리뷰를 할 수 있을까에 대해서 말씀해 주셨다. 제일 중요한건 내 코드 != 나라는 점이라고 말씀해 주셨다. 많은 리뷰에 상처받지 말고 리뷰를 모두 반영하면 분명히 성장해 있을꺼라고 말씀해 주셨다.
다음으로는 핑거 프린스는 되지 말자고 하셨다. 리뷰가 간단하더라도 리뷰어가 리뷰한 내용에 대한 근거는 있을꺼라고 하시면서 찾아보고 테스트해보라고 말씀해 주셨다. 그리고 해결이 안된다면 자신이 어디까지 노력을 했는지를 알려주며 자문을 구해야 한다고 말씀하셨다.
마지막으로 피드백을 반영하자라고 말씀해 주셨는데 리뷰 반영만이 피드백이 아니라고 하셨다. 좋은 리뷰는 이 부분을 알려줘서 좋았다 혹은 리뷰 반영 시 시간이 오래 걸릴 경우는 리뷰어에게 알려주라는 말씀을 해주셨다. 커뮤니케이션이 정말 중요하다고 강조해 주셨다.
특히 리뷰어 입장에서 마무리를 해주셨는데 좋은점은 좋다고 말하기 그리고 반영해야할 리뷰 반영했으면 하는 리뷰를 구분해야 한다고 하셨다. 예를 들어 버그 발생은 반영 해야하는 리뷰이고 개인 스타일 차이처럼 어떻게 했으면 하는 부분은 반영 했으면 하는 리뷰라고 알려줘야 한다고 말씀해 주셨다. 또 기능상 문제는 없으나 코드 개선이 필요하지만 작업이 큰 경우는 이 두 선상에 모두 놓여있다고 하셨다. 예를 들어 코드 일관성이나 유지관리 측면에서 보면 해야함이 분명하나 일정이 빠듯하면 해야하는 리뷰로 바뀐다고 말씀해 주셨다. 테크 콘서트 관련해서 코드리뷰이야기가 많이 오갔는데 코드리뷰에 대해서 제대로 설명해 주신거 같아서 너무 좋았다. 나중에 나도 리뷰를 받고 리뷰를 해줄때 적용해봐야 할 부분을 배울 수 있어서 의미있었다.
알잘딱깔센
Q 기술 넓게 알기? 깊게 알기? 기본기는 무엇인가요?
개발시 시간 복잡도, 공간 복잡도 고려 필요. 또한 소프트웨어 공학과 디자인 패턴은 물론이고 협업하는 방식까지 중요하다. T자형 인재가 좋다.
Q 가장 중요한 신입 역량은? 그 능력치는?
빨리 성장해서 1인분을 할 수 있을지. 정확하게 아는게 중요. 근성과 호기심
Q 공부 비결, 개인 노력
관심있는 주제 구독. 즐겁고 재미있게 개발을 할 수 있는지.
이번 테크 콘서트를 통해서 기억나는 제일 감명 깊은 말은 시간 가는 줄도 모르고 물두할 수 있는 것이 내가 좋아하는 것이다.라는 말씀이 제일 기억에 남는다. 내가 중학생때부터 컴퓨터에 관심이 있어서 계속 공부하면서도 아직까지 컴퓨터를 공부하는 이유는 아무래도 제일 좋아해서라고 생각한다.
테크 콘서트로 많은것을 배울 수 있었다. 제일 크게 얻을 수 있었던 부분은 좋은 습관과 좋은 태도를 배울 수 있었다. 아직 하고있지 않은 부분도 있고, 해야하지 라고 마음만 먹고 있던 부분도 있었다. 나태해질 수 있는 순간에 정말 좋은 기회로 다시 마음을 바로 잡을 수 있었다. 나도 좋은 개발자로 성장할 수 있도록 열심히 노력해야 겠다.