May 28, 2018

발표 자료 준비로 얻은 것들

자주 만나는 친한 친구들 대부분이 개발 일을 하고 있다. 다들 더 잘하고 싶은 욕심이 있었던 건지 서로 세미나 같은 것을 진행하면 어떻겠냐는 이야기가 나왔다. 사실 이런 얘기는 나의 오랜 경험상, 의욕만 앞서고 결국에는 진행이 되지 않았던 것이 대부분이었다. 거기다 진행이 되더라도 흐지부지 되었던 것이었는데 그렇게는 하고 싶지 않아서 거기에 추가적인 제안을 하였다. 그 제안은 준비하는 사람 모두 대충 준비하지 말고 매우 빡세게 준비해야 하는 것이면 참여하겠다는 것이었다. 음, 남들이 대충 만든 자료를 시간 써가며 읽고 싶지 않았고, 또 내가 자료를 준비하더라도 애매하게 준비해서 질문에 웃음으로 넘기는 그런 것이 매우 싫다고 느껴졌던 것 같다. 더구나 세미나는 한 달에 한 번씩 하기로 했는데, 사실 한 달 정도면 무언가를 공부한 다음 준비하기에도 충분한 시간 아닌가?

그렇게 매 월 말에 다같이 모여서 정보를 공유하는 시간을 가지게 되었는데 이번에 2회째까지 진행되었다. 미사여구 다 빼고 간단히 세 가지 내용으로 준비, 발표, 결론에 대해서 정리해 보자.

준비

첫 번째 발표 준비

첫 번째는 swagger에 대한 준비였다. API 문서를 공유할 수 있고 swagger-generator를 통해 아예 서버를 만들 수도 있는 openapi포맷에 대한 설명이다.

이 자료의 목적은 다음과 같았다.

  1. 현재 회사에서 각 개발자가 컨플루언스나 스프레드시트로 API 문서를 작성하지 않고 Swagger로 작성하여 공유한다. - 그러므로 나 스스로 공부가 필요하다.
  2. Postman을 사용하지 않고(즉, 템플릿을 교환하는 등의 작업이 없이) 바로 API를 테스트해볼 수 있다. - 즉, 웹 브라우저를 사용하여 Postman을 대체할 수 있다. 
  3. 잘 정리된 Swagger문서로 여러 코드로의 API서버를 작성할 수 있다. - boilerplate code 작성을 줄일 수 있다.

두 번째 발표 준비

두 번째는 Heapsort에 대한 설명이었다. 정렬을 O(n log n)의 속도로 진행하는, 효율적인 정렬 방식 중 하나.

걱정되었던 것은 해당 내용을 모르는 사람들에게 설명하기에는 막연한 것들이 많다는 것이었다. 세미나 대상자들에게 자료 준비전에 먼저 간단히 조사했던 것이 있었는데 다음과 같았다.

  1. big-oh 표현식과 theta/omega에 대해 아는가?
  2. Heapsort/Mergesort/Quicksort의 자세한 동작 방식을 아는가?

잘 모른다고 하니(준비한다는 사람이 물어보니 모른다고 했겠지만) 어쨌든 “자자, 여러분 이 정렬은 O(n log n)입니다” 이렇게 설명하고 넘기기에는 좋지 않아 보여서, 해당 내용의 부분까지 함께 자료에 포함시켰다. 그래서 두 번째의 준비는 아예 알고리즘부터 시작되어 트리 자료구조-Heap-Heapsort에 도달하도록 준비를 했는데, 이게 대략 55장 정도의 Presentation 분량으로 나왔다.

발표

힙소트의 경우에는 발표 자료를 만드는데 준비가 오래 걸렸다. 트리 구조를 설명하는 데 있어 그림을 찾아야 하거나, 실제로 그림을 그려야 하는 경우도 생겼다. 그리고 깔끔하게 보여주기 위해 애니메이션(페이드 인/아웃 정도지만)을 포함시키느라 시간 소요가 많았던 것 같다. 발표 자료의 내용이 많아서 그랬던 것도 있지만. 어쨌든 많은 시간이 걸렸으므로 스크립트를 따로 준비할 시간이 없었는데 그럼에도 스스로도 잘 했다고 생각할 만큼 무리없이 진행되었던 것 같다.

반대로 swagger의 경우는 그렇지 않았던 것 같다. 특히나 openapi 포맷 문서를 json/yaml로 작성하는 예제 부분에서 “이걸 어떻게 작성해?” 라는 생각이 들게 되도록 준비가 되었던 것 같다. 즉 이 부분에 대한 준비가 미흡했던 것인데, 이런 부분에 대한 자세한 사용기나 참고 자료를 더 많이 준비했어야 하지 않았나 하는 생각이 든다. 더구나 boilerplate code를 줄일 수 있겠다고 생각한 특성은 조사하다 보니 결국 부정적으로 정리되었는데, 역시 이것도 swagger에 대해 충분히 조사를 하고 공부하였다면 처음부터 해당 내용을 제외하고 준비할 수도 있었겠다는 생각이 든다.

결론

두 번의 준비에는 큰 차이가 있었다. 나 자신이 해당 내용을 잘 아느냐와 모르느냐가 바로 그것이었다. 힙소트는 사실 대학생 때도 들었을 때 인상이 깊었던 알고리즘이라 과제도 아니었지만 실제 구현도 해 봤고, 또 동아리 후배들에게 세미나 형식으로 설명해줄 때도 있었다. 정작 swagger는 회사에서 처음 사용해본 것이라 거의 백지 상태에서 시작한 것이나 다름없었는데, 그래서 그런가 준비 과정도 꽤 힘들었다. 

또 하나의 차이가 있다면 자료가 전달하는 목적이었는데

  • swagger: 제안 - 이런 좋은 툴이 있으니 다 같이 써 보는 것은 어떨까요?
  • Heapsort: 분석 결과 전달 - 이 알고리즘의 속도는 어떻고 다른 것과 비교했을 때 어쩌구 저쩌구..

그래서 두 번밖에 준비를 안했는데도 참 많은 것을 느낄 수 있었다. 뭐 정리하자면 당연한 것들이지만,

  • 누군가를 가르칠 때는 정말 많이 알고 있어야 한다. - 즉 모르는 내용을 준비한다면 공부를 정말 많이 해야한다.
  • 자료를 어설프게 준비했을 때는 듣는 사람이 바로 알아차린다.
  • 자료의 목적에 따라 준비 또한 다르게 하여야 한다.
  • 준비한 해당 내용에 대해서는 잘 잊지 않게 될 것 같다.