2019 Ahea Conference 회고 (2018.12 ~ 2019.06, Spring AOP)


트라우마 극복 프로젝트

12월이 되면 모든 Ahea 한해의 행사는 마무리가 되고, 공식적으로 다음 일정에 대해 내부적으로 논의한다.

2019년 Ahea 공식적인 첫 일정은 상반기에 진행할 2019 Ahea Conference이다. 이와 관련하여 일정에 대한 이야기가 나올 무렵 스터디 그룹원들의 반응도 가지각색이었다. 어떤 분은 행사 자체를 즐기는 반면, 어떤 분들은 익숙해서인지 그냥 무덤덤한 반응도 보였다.

반면 나는 걱정이 많았다. 작년 스터디(TDD)에 대한 한 번의 실패를 경험하고 나서 스터디 자체가 부담되었고 무엇보다 스터디 자체에 대한 트라우마가 있었다. 이를 그룹원들도 알았을까, 우스갯소리로 “TDD의 트라우마 극복해야죠?”라며 넌지시 농담 한마디를 건넸다. 언제까지 트라우마에 매여 있을 순 없기에 다시 마음을 잡고 2019 Ahean Conference는, 트라우마를 극복하겠다는 목표를 가지고 시작하였다.

구체적인 주제선정(2018.12 ~ 2019.02)

우선 주제선정 기간은 한 달이었지만, 한 달 일찍 시작하여 두 달이라는 기간 동안 준비하게 되었다.

아무래도 작년 주제선정에 대한 아픔이 있었기에, 나는 이 기간에 청중과 내가 관심을 가질 수 있는 주제를 신중히 선정하고자 기간을 다소 넉넉히 잡았다. 초기 주제선정에 있어 AOP는 여러 후보 중의 하나였지만, 이 역시도 추상적인 개념이었기에 과감히 버리고 1월쯤에 스터디 진행자에게 최종적으로 Spring AOP에 대한 주제를 확인을 받고 스터디를 진행하게 되었다.

본격적으로 Spring AOP를 스터디하기 앞서, AOP가 무엇인지 알아야 했다. 물론 AOP는 추상적인 개념이지만 Spring AOP를 이해하기 위해선 반드시 선행돼야 할 과정이라 생각하기 때문에 두 달 동안(2019.01 ~ 2019.02) AOP의 컨셉과 메커니즘, AspectJ에 대한 문서를 참고하여 틈틈이 스터디와 문서화를 진행했다.

스터디 진행(2018.03 ~ 2018.05)

3월 무렵, 어느 정도 전반적인 AOP의 개념과 Spring AOP와 AspectJ의 차이에 대해 알게 되었고, 이제 본격적으로 스터디를 진행해야 할 시점이었다.

하지만 당시 진행되던 SI 프로젝트의 개발자는 혼자였기 때문에 야근을 할 수밖에 없었던 상황이었다. 남은 일정은 두 달이었고, 일정 안에 스터디를 진행하기 위해선 잠을 줄이는 수밖에 없었다. 평균적으로 4시간씩 잠을 자며, 퇴근 후 토비의 Spring 책과 Spring 레퍼런스를 참고하며 스터디를 진행했고 동시에 1월부터 진행하고 있었던 문서를 수정/추가하는 작업도 병행했다.

사실상 3월 말쯤엔 작성한 여러 문서가 있었지만 공개할 순 없었다. 하지 못했다는 게 더 정확한 표현인 것 같다. 또다시 잘못된 방향으로 스터디를 한 건 아닌지 의구심이 들었기 때문에 조심스러웠다. 스터디 진행자에게 진행된 상황을 먼저 확인을 받고 4월 12일에 작성한 문서를 공유했다.

걱정과 달리 감사하게도 좋은 피드백을 많이 해주셨고, 여러 그룹원들의 피드백을 통해 스터디를 잘 진행하고 있는지 확인을 받을 수 있었다.

4월 말엔, 진행되었던 SI 프로젝트가 끝이 나고 많은 고민 끝에 회사에 사직서를 냈다. 물론 이직할 회사를 구하고 결정했던 건 아니었다. 여러 상황에 몸과 마음이 많이 지쳐있었던 터라 휴식이 필요했었다. 하지만 휴식은 커녕 중간 점검까지 일주일이라는 시간밖에 없었기에 서둘러 문서 작업에 매진했다.

내부 스터디 종료 및 중간 점검(D28, 2019.05.04)

중간 점검은 스터디한 결과물과, 전반적인 발표의 흐름을 보기 위한 프로토타입(자유형식)을 토대로 발표를 할 세션들을 정하는 중요한 시점이다.

지난 스터디 기간 동안 열심히 했기에 큰 부담은 없었고, 문서를 작성할 때부터 큰 흐름을 잡고 준비했기 때문에 즉흥적으로 발표를 잘할 수 있겠지라는 생각이 컸기에 발표 준비보단 문서화를 마무리하느라 시간을 보냈다. 하지만 웬걸…. 차례가 되어 준비한 자료를 토대로 발표하려니 갑자기 TDD의 트라우마가 떠올라지면서 머리가 하얘지기 시작했다.

어찌 보면 준비를 못 했으니 당연한 결과다. 목소리는 심하게 떨리고 말은 하고 있지만 내가 무슨 말을 하고 있는지도 몰랐다. 그룹원들의 기대에 찬 눈빛이 아쉬움과 안타까움으로 변했고, 스터디 진행자인 노성현님은 발표를 할 수 없겠다고 판단했다. 이에 모든 그룹원들이 동의한 듯 보였지만, 최경운님이 스터디한 문서화가 잘되었으니 남은 기간에 발표 준비만 잘하면 될 것 같다고 해주셨고 무엇보다 발표를 한 번쯤은 해봐야 한다며 말했다. 결과적으로 그룹원들의 배려하에 최종적으로 2019 Ahea Conference의 두 번째 세션에 배정되어 Spring AOP 발표를 진행하게 되었다.

대망의 티켓팅(D26, 2019.05.06)

6일, 온오프믹스에 티켓오픈이 시작되었다.

https://onoffmix.com/event/178671

이번 컨퍼런스 준비는 모두 열심히 준비했기에, 50명이라는 인원을 모집하자는 목표로 티켓팅을 시작했다. 나를 포함한 발표자분들은 “설마 꽉 차겠어?”라는 의구심과 한편으로 “진짜 차면 어떡하지….”라는 걱정 아닌 걱정을 하였다. 예상과 달리 티켓팅을 시작한 지 일주일도 안 되어 조기 매진되어 마감을 하게 되었고, 인원을 늘려달라는 문의 쇄도에 81명까지 인원을 늘리게 되었고, 최종적으로 그룹신청까지 포함하여 100명의 개발자분들이 신청해주셨다. 이때부터 나를 포함한 발표자들은 초조해지기 시작했다.

재점검(D14, 2019.05.18)

중간 점검을 마치고 2주 동안은 부담감을 가지며 더 많은 시간을 발표 준비에 매진했다.

지난 기간 동안 발표를 하겠다는 일념으로 큰 목차를 먼저 잡고 하나의 세션을 세부적으로 나눠 문서를 작성했었다. 하지만 막상 발표하기 위해 준비된 문서를 어떻게 이어갈지 막막했다. 또한, 컨퍼런스의 대상은 주니어 개발자이지만, 시니어 개발자분들도 많이 참여해주셨기에 발표의 퀄리티를 높이는 과정이 필요했다. 준비한 자료를 토대로 레퍼런스를 다시 찾아보며 점검하는 시간을 가졌다. 물론, 더 이상의 스터디를 진행하면 안 됐지만, 부담감과 더 좋은 발표를 하려는 욕심 때문이었는지 끝도 없이 문서화 수정과 발표 자료를 준비했다.

그렇게 시간이 흘러, 발표까지 2주가 남긴 상황에서 발표자들끼리 발표 흐름에 대한 피드백을 받기 위해 모이게 되었다.

준비되었던 발표자료는 Spring AOP의 동작 원리에 대해 초점이 잡혔지만, 욕심이 과했을까? 퀄리티를 높이기 위해 계속해서 자료를 추가하다 보니 뒷 부분은 완성하지 못한 상태였다. 피드백 역시 냉정했다. 이번에도 발표 흐름에 대한 문제를 해결하지 못했다. 무엇이 문제였을까?

  • 문서화 같은 PPT
  • 일관성 없는 흐름

크게 두 가지 이유가 있었다. 발표는 문서 자료가 아닌 청중과의 소통이다. 하지만, 발표할 내용들이 PPT안에 있었고 나는 작성된 내용을 그대로 읽고 있었다. 또한, 큰 흐름을 잡았지만 세부적으로 흐름이 잡히지 않아 일관성이 없었다. 특히 한번 흐름을 놓치면 뒤에 내용을 전혀 이해할 수 없는 구조였다.

  • 대표적인 그림
  • 일관성 있는 그림

이러한 문제점들을 해결하기 위해 흐름과 관련 없는 부분은 과감히 생략하고, 텍스트가 아닌 청중들에게 각인 될만한 이미지를 해야만 했다.(다시 발표자료를 만들어야만 했다…) 하지만 스터디가 부족했던 탓일까…. 발표 흐름의 시작과 끝을 이어줄 마땅한 이미지가 떠오르지 않았다. 그렇게 최종 리허설까지 서둘러 세부 목차를 바로 잡았고, 흐름을 이어줄 “하나의 이미지“에 대한 부분을 나름대로 고심하며 열심히 준비했다.

최종 리허설(D7, 2019.05.25 ~ 2019.05.26)

최종 리허설 당일, 컨디션 조절의 실패로 늦게 도착을 하였다.

새롭게 발표자료를 준비하다 보니, 80% 밖에 완성하지 못했다. 리허설을 시작하였고, 다행히 목소리는 처음 발표보단 많이 떨리진 않았다. 하지만 급하게 발표자료를 다시 준비하다 보니 자신감이 없었고, 자신감이 많이 없는것 같다는 피드백을 받았다. (목소리에서 티가 많이 났다.)

또한, 여전히 발표 자료 퀄리티가 좋지 못했고, 남은 기간동안 발표 자료의 퀄리티를 높이는 과정이 필요했다.

5일간의 솔루션(2019.05.27 ~ 2019.05.31)

도움을 얻기 위해, 5일간 노성현(스터디 진행자)님의 회사로 찾아갔다.

솔루션은 다음과 같았다.

  • 누굴 대상으로 할 건지
  • 떠올리는 하나의 이미지
  • 청중들이 관심을 가질 수 있는 자료

우선, 누굴 대상으로 발표를 진행하려고 하는지 물었다. 아무래도 누굴 대상으로 하는지 명확해야 자료의 퀄리티의 수준을 조절할 수 있기 때문이었다. 나는 너무나도 바뀐 발표 자료 탓에 본질을 놓치고 있었다.

그 다음 청중들이 발표를 듣고 나면 하나의 이미지가 남았으면 좋겠다고 하셨다. 이 부분이 가장 심오하면서 이해가 되질 않았다. 우선 준비된 PPT를 보며 청중들에게 어떤 내용을 전달할 건지 목차부터 다시 정리하기 시작했다.

### 서론
1~8 시작
-------------------------------------------------
### Proxy Pattern
9~11  개요
12~13 프록시 플로우
14~16 패턴 구성 방법
17    프록시 패턴을 다시 정리
18~19 메소드 단위에 다음 대상을 호출해야 한다는 구조적인 한계

...

### Self invocation
71~72 개발자의 20%만 아는 Spring AOP의 비밀
73    StackOverflow 사례
75~78 AopContext
79~81 IoC 컨테이너 빈 활용
82~86 AspectJ Weaving
87    성능 비교
------------------------------------------------
### 마무리

목차 정리를 마치고, 청중들의 관심을 끌기 위해 흔히 범하는 일반화의 오류에 대해 StackOverflow에서 찾아 첨부하여 계속해서 발표 중간에 흐름을 놓치지 않도록 유도했고, 마지막으로 하나의 이미지에 대한 부분은 프록시 패턴의 구현체의 특징 중 하나인 invoke 메소드와 대상 위임코드의 위치를 이미지화하여 이어가도록 했다.

30일의 목요일 새벽, 드디어 PPT가 완성되었다. 최종 컨퍼런스 발표까지 하루 밖에 남지 않아 잠을 잘 수 없었다. 대본을 미친듯이 읽고 또 읽고 또 읽었다.

D-Day(2019.06.01)

학수고대했던 컨퍼런스 날의 아침이 밝을 무렵 오히려 나는 담담해졌다. 이미 물은 엎질러졌고, 발표만 빨리 끝내 집에서 편히 잠을 자고 싶은 마음뿐이었다.

컨퍼런스 시작은 1시였지만, 마지막까지 발표 점검을 위해 9시에 미리 모여 리허설을 진행하였다.

성현님께서 도움이 된다며 청심환을 챙겨주셨는데, 효과는 대단했고 리허설을 잘 마무리할 수 있었다. 12시쯤 생각보다 일찍 사람들이 참석하기 시작했다.

이때부터 청심환 버프가 떨어졌는지 점점 더 심장이 뛰었고, 발표자들은 컨퍼런스가 열릴 장소 옆 카페에서 대기하고 있었는데, 사람들이 입장하는 모습을 지켜볼 때마다 마음이 진정되지 않았다. 계속해서 마인드 컨트롤를 하려 노력했지만, 머릿속이 점점 하얘졌다. 이때 발표자분들이 처음엔 원래 다 그렇다며, 이런저런 농담을 주고받으며 서로 격려하며 발표 차례를 기다리고 있었다.

드디어 발표 10분 전, 이번엔 홍신님이 챙겨주신 청심환을 하나 더 먹고 컨퍼런스 장소에 입장했다.

막상 지정된 자리에서 서보니 인원이 생각보다 많아 보였다. 하지만, 버프의 재충전 탓일까? 긴장은 되지 않았다. 들어가기 5분 전 성현님은 너무 긴장하고 있는 거 아니냐며 긴장하지 말라고 했다. 알고 보니 손에 쥔 마이크가 심하게 떨고 있었다. 들어가기 전, 발표를 잘 끝낼 수 있도록 마지막까지 마인드 컨트롤을 했다.

솔직히 발표했던 순간의 기억은 나지 않지만, 어느 순간부터 대본대로 읽지 않고 즉흥적으로 스터디한 내용을 토대로 말하고 있었다. 평소와 달리 코드를 보여주는 부분에서 많은 시간을 할애했고, 시간에 쫓겨 서둘러 마무리를 제대로 짓지 못한 부분이 아직도 아쉬움이 남는다.

마지막으로 혼자였다면 컨퍼런스 발표를 하지 못했을 것 같다.

이번 컨퍼런스 발표를 준비하면서 스터디 그룹원들에게 많은 도움을 받았고, 컨퍼런스에서 발표를 할 수 있는 좋은 경험을 했다. 한분 한분 너무 감사한 마음이 크다. 만약 다음 하반기 컨퍼런스에서도 발표를 하게 된다면, 이러한 경험을 토대로 더 좋은 발표를 할 수 있을 것 같다.


발표 자료

Spring AOP를 스터디하며 완성된 문서들