지난 2023 여름방학, GDSC에서 열린 자율 자바 심화 스터디인 모던 자바 인 액션 스터디에 참여하였다.
두 달끝에 지난 10월 9일 마무리 되었고 조금 늦었지만 회고록을 써볼까 한다.
참여동기
아래와 같이 모집 공고가 올라왔는데, 약 두 달에 걸쳐서 자바8을 정복하는 스터디라 하였다.
무엇보다도 진행 방식이 마음에 들었다. 모두가 동일하게 처음부터 같이 공부하는 스터디를 몇 번 진행해봤는데, 초심자들끼리 막히는 부분을 헤쳐나가고 공유하며 성장하는 부분은 매력적이었지만, 공부하다 모두가 모르는 내용이 나올 때 최적의 피드백을 찾기가 어려웠다.
그런면에서 이 스터디는 멘토님이 있다는 점에서 막히는 내용이 있을때 조언을 얻을 수 있을 수 있을 것 같다는 생각에 마음에 들었고, 또한 구두로 퀴즈를 진행한다는 점 역시 공부하는데 있어서, 면접을 대비하는데 도움이 되지 않을까? 하는 생각이 들었다. 마침 나는 선발 가산점이 있다는 1분기 우수 스터디원이었고 뽑히지 않을까 하는 기대로 지원했다.
목표
참여해서 얻고 싶은 목표는 크게 두 가지였다.
1. 자바에 대한 깊은 이해
자바 백엔드 개발자를 준비하는 입장에서, 아이러니하게 나는 자바를 잘 알지 못했다. C++이 주언어였기에 같은 맥락으로 코드가 읽힌다는 점, 생활코딩 유튜브를 보고 기본 문법을 배운 정도에서 '개발' 공부에 초점을 맞췄었다. 하지만, Spring 김영한 강사님의 강의를 듣고 스터디를 하며 Optional이 무엇인지 와닿지 않고, ConcurrentHashMap을 왜 써야하는지, 객체에 습관적으로 == 을 쓴다던가 사소한 부분이 개발 공부에 발목을 잡고 있어 자바에 대한 정리가 필요하다고 느꼈다.
2. 같은 분야의 개발자들과 네트워킹
4학년 1학기를 마친 여름, 자바 백엔드 개발자를 목표로 특히 IT 서비스 기업 취업을 목표로 하지만 정보가 부족했다. 같은 분야의 꿈을 꾸는 사람들과 네트워킹이 필요하다고 느꼈고 같이 고민할 수 있는 친구와 해당 분야의 멘토가 될 개발자들을 만나고 싶었다. 이 스터디의 멘토님들이 그런 분듣이었고, 그래서 같이 친구와 지원했다.
진행 방식
매주 2시간 대면으로 진행했는데 기본적으론 멘토 한 분이 과제를 주고 강의를 진행해주셨다. 과제는 주로 `모던 자바 인 액션` 책과 인터넷 자료들을 기준으로 멘토님이 선정해주셨고, 과제를 바탕으로 강의가 진행되었다.
과제는 스터디전까지 멘티들이 github에 Pull Request을 날리면 멘토당 2명의 멘티에게 PR에 리뷰형식으로 피드백을 해주시면 이에 답을 다는 형식으로 진행되었다.
자바 개념에 대한 이해
처음엔, 자바의 메서드에 대한 이해와 개발에 대해 전반적으로 정리를 하는 그런 스터디라고 생각했다. Spring에 대한 이해가 있는 참가자를 모집했기에 코드 위주의 문제를 푸는 스터디가 진행되지 않을까 생각했지만 반대였다. 대부분 책과 자료들, 글을 읽고하는 공부가 많았고 원리를 공부하는 것들이 많았다.
주로 다룬 주제는 표면적으론 자바의 동작원리, 자바 컬렉션 프레임워크, 람다, 스트림과 같이 메서드를 활용하는 것이라 생각되지만, 소스 코드 라이브러리를 하나하나 보며 다음과 같은 주제들에 대해 공부하고 이야기했는데
- @FunctionalInterface가 무엇인지, 람다는 어떤 경우에 쓸 수 있을까?
- JIT Compiler의 역할이 무엇인지
- foreach에 로직을 작성하면 왜 안되는지
- Array.asList와 List.of의 차이는 무엇인지
- Method Reference가 어떻게 일어나는지
위와 같은 주제들을 다뤘다. 대부분의 주제가 개발 공부를 주에 두고 하는 자바공부로는 쉽게 생각하기 어려운, 자바를 위한 자바 공부를 해야 알 수 있는 깊은 주제들이었다.
이론을 활용한 문제풀이
물론 이론만 다룬 것이 아니라, 이론을 적용하며 배울 수 있는 람다와 스트림은 직접 퀴즈를 풀고 코드리뷰도 진행했다.
주로 내 코드가 많이 예시로 사용되었는데 코드리뷰는 처음이라 생각보다 부끄러웠다.
내가 어떠한 로직으로 문제를 풀었는지를 설명하고, 다른 분들은 어떻게 문제를 풀었는지 의견을 공유했다.
또한, 코드 로직에 대한 피드백 뿐 아니라 코드 스타일에 대한 피드백도 진행했다. 불필요한 공백, 통일되지 않은 주석 등, 개인 Repository에 공부용으로 올린 코드일지라도 깔끔하게 작성해야겠다는 생각이 들었다.
멘티가 하는 강의
또한, 이를 바탕으로 4주차에는 모던 자바 인 액션 5장, 스트림을 주제로 다뤘는데 멘티가 직접강의를 하는 방식으로 스터디를 진행했다. 모두가 강의 준비를 하고 랜덤으로 현장에서 뽑아서 발표를 진행하는 방식으로 진행했다.
내가 선정되어 발표를 하진 않았지만 발표를 준비하는 과정에선 내가 지식을 전달할 때의 무게를 느낄 수 있었다.
자료를 얻을 수 있는 소스는 주로 구글링을 통해 나오는 블로그, ChatGPT, 책, 유튜브, StackOverFlow, 공식 문서등이 있었는데, 잘못된 내용이 전달되면 안되기에 철저하게 맞는 내용인지 검증할 필요가 있었다.
특히, 블로그에는 생각보다 잘못된 정보들이 많이 있었는데 2주차 과제에서 나온 Effectively final의 예제 코드를 실행하면 런타임에러가 발생한다던가, 모던 자바 인 액션 책에도 많은 오탈자가 있다는 등 하나의 소스만을 신뢰하고 정보를 전달하기엔 내 설명의 근거가 충분치 않다는 어려움이 있었다.
따라서, 최대한 작성자의 의도에 맞게 설명하기 위한 공식문서 위주의 정보를 얻고자 노력했다. 특히 소스코드의 라이브러리에 들어가 코드에 대한 설명 주석을 많이 읽었다.
List.of를 설명할때에도 소스코드 라이브러리 List 인터페이스에 들어가 `ImmutableCollections`가 반환됨을 확인하는 등 근거있는 근거를 얻기 위한 노력을 했다. 새삼 발표자료 매주 2시간 분량의 발표자료 준비하는게 참 쉽지 않다는 생각이 들었다. (어쩌다 보니 영어 실력이 늘었다.)
이렇게 스터디가 진행된 후에는 내용을 바탕으로 아래와 같이 멘토님께서 중요하게 생각하시는 부분들, 내 과제에서 부족한 부분들을 리뷰해주셨고 이를 보충하거나 답하는 방식으로 스터디 이후의 복습을 진행했다.
스터디 후엔 뭐가 달라졌을까?
1. 깊게 공부하고 이유와 주관을 갖기 위한 노력
스터디 중 많은 질의를 받았고 스터디가 끝난 이후에 리뷰로도 많은 질문을 받았다. 스터디를 하기전 과제 WIL을 작성하며 공부를 하고, 스터디에서 수업을 들으며 공부를 하지만 생각보다 질문을 받았을 때 쉽게 설명할 수 없었다.
공부를 했다하는데 타인에게 설명할 수 없다면 제대로 공부했다고 할 수 있을까? 하는 의문이 들었다. 같은 맥락에서 코딩도 마찬가지였다. 내가 짠 코드를 왜 이렇게 짰는지, 왜 이 메서드를 사용했는지 이유와 주관이 있어야 좋은 개발자가 아닐까? 하는 생각이 많이 들었다.
설명하기 위해 더 근거 있는 공부가 필요했고 그 과정에서의 고민들을 많이 토의하며 주관을 갖고자 했다.
스터디를 마친 이후에 개발을 하거나 코드를 짤때 한번 더 고민하게 된다.
- 스트림을 쓰는게 좋을까? for문을 쓰는게 좋을까?
- 어떤 컬렉션을 쓰는게 좋을까?
- 이 경우엔 Optional을 쓰는게 적합할까?
당장은 매 상황에 대한 정답은 모르겠다. 하지만 이렇게 고민하는 시간들이 내가 주관을 갖도록 성장시켜주고 있다고 확신한다.
2. 성장 방향성
스터디를 시작하기전 공부 방향성에 대한 고민이 많았고 급한 마음에 본질에 벗어난 방향성을 잡기도 했다. 스터디를 통해 만난 분들은 내가 바라던 방향성을 향해 걷고 이를 실천하는 분들이었다.
특히 의견을 공유하는 의사소통을 너무 잘해주셔서 많은 고민을 나누고 조언을 받을 수 있었다.
프로젝트를 하는데 생긴 고민들을 이야기하면 '어떠한 해결책들이 있는데 각각의 장단점이 무엇인지, 나의 경우엔 어떠한 방식이 나을 것 같은데 한번 이러한 시도를 해보고 생각해보면 좋을 것 같다.'와 같은 이야기나, 공부해야할 것들과 같은 많은 정보를 얻을 수 있었다.
개발자로 성장함에 있어 분명 혼자할 수 있는 부분들이 많지만, 같은 분야를 꿈꾸는 사람들과 지식을 공유하고 같이 고민하며 의견을 나누는게 가장 빨리 곧은 방향으로 성장하는 길이란 걸 알 수 있었고 앞으로도 그렇게 성장하고 싶다.
이 외에도 사소하지 않은 중요한 정보들을 많이 얻었다. 멘토님들의 개발 경험, 면접 경험, 공부 경험, 취업 준비 방향성, 블로그에서 올바른 정보를 얻는 방법 등 무언가를 먼저 경험하고 공유받을 수 있다는 것 자체만으로도 유익했다.
사실, 자바에 대한 이해는 확실히 부족했고 평소에 쉽게 생각하지 않았던 주제들도 많았기에 스터디를 준비하는 과정이 멘티임에도 쉽지 않아 많은 시간을 투자했다. 돌이켜보니 이 몰입 경험이 많은 성장 가능성을 열어준 것 같다.
기회는 준비된 사람에게 온다고들 많이 이야기한다. 이번 스터디는 내가 준비된 사람이 될 기회를 주는 스터디였다고 생각한다. 의미있는 스터디로 4학년 여름을 채운 것 같아 뿌듯하다. 수업과 피드백을 준비한 멘토님, 같이 고생한 멘티분들께 고맙다는 말을 남기며 회고를 마무리하겠다.
'PL > 모던 자바 인 액션' 카테고리의 다른 글
모던 자바 인 액션 - Chap12 (0) | 2023.10.09 |
---|---|
모던 자바 인 액션 - Chap11 (0) | 2023.10.09 |
자바 병렬 프로그래밍 5.2 병렬 컬렉션 (0) | 2023.09.30 |
모던 자바 인 액션 7주차 - Chap 08 (0) | 2023.09.30 |
모던 자바 인 액션 6주차 - Chap07 (0) | 2023.09.21 |