2022년 지난 상반기를 되돌아보는 회고를 작성해보고자 한다. 개인적으로 지난 한 학기가 학교 생활을 함에 있어서 가장 바빴던 시기가 아니었나 싶은 생각이 든다. 1월에는 WinterDev 준비에 시간을 쏟았고, 에코노베이션의 부회장직을 맡게 되었다. 2월부터는 그 동안 공부해오던 안드로이드를 내려놓고 새싹 스터디를 통해 스프링에 입문하게 되었다. 3월에는 동아리의 신입 기수를 뽑기위한 TF팀을 운영했다. 4월 5월 6월에는 꾸준히 새싹 스터디와 학업, 동아리 프로젝트를 병행하였다. 그리고 지금은 Summer Dev TF팀 운영과, 새로운 동아리 프로젝트, 새싹에서 진행하는 또 다른 프로젝트를 진행하고 있다.
이 중에서 가장 많은 노력과 시간을 쏟았던 것은 아무래도 새싹 스터디가 아닐까 싶다. 새싹을 통해서 정말 많은 것을 경험하고 배울 수 있었다.
새싹을 하면서 가장 낯설면서도 재밌었던 것은 아무래도 페어프로그래밍이 아닐까 싶다. 페어프로그래밍이란 하나의 프로젝트를 두 사람이 번갈아가며 키보드를 잡고 프로그래밍하는 프로그래밍 기법을 말한다. 새싹에서는 다양한 기본기 미션들을 진행했는데, 이 과정에서 페어프로그래밍 기법을 사용했다. 페어는 각각 드라이버와 네비게이터의 역할을 맡게 된다. 드라이버는 실질적으로 코드를 타이핑하고, 네비게이터는 옆에서 설계와 전체적인 방향을 잡는다. 이후 10분 타이머를 시작하고, 시간이 다 될 때마다 역할을 바꿔가며 프로그래밍을 진행한다.
페어프로그래밍을 진행하면서 같은 요구사항에 대해 서로 다르게 바라보고 설계한다는 점을 알 수 있었다. 같은 요구사항에 대해 서로 다른 생각을 말하면서 상대방을 이해시키고, 의견을 조율하는 과정에서 혼자 할 때보다 더 깊게 생각해볼 수 있었던 것 같다. 또한 상대적으로 페어들에 비해 실력이 부족했었기 때문에, 함께한 페어들의 코드를 보면서 많은 것을 배울 수 있어서 좋은 경험이었다고 생각한다.
이 과정에서 다른 페어들과 미션 도중 서로의 페어를 바꿔서 미션을 진행한 적도 있었는데, 이전에 다른 사람이 작성하던 코드를 이어 받아 미션을 진행해야 했기 때문에, 코드 읽어보고 이해하는 과정이 불가피 했다. 그 전까지는 다른 사람의 코드를 읽어본적이 없었기 때문에, 처음에는 코드를 이해하는데 어려움이 있었고 시간도 많이 걸렸다. 그러나 점차 다른 사람의 코드를 읽는데 익숙해졌고, 다른 사람이 내 코드를 이어 받아 진행한다는 생각에 조금 더 깔끔하게 작성하기 위해 노력하게 되었다.
자바 기본기 미션으로는 레이싱게임 미션, 사다리게임 미션, 그리고 최근에 진행한 로또 게임 미션을 진행하였다. 이전에 누군가가 자바만 이용하여 숫자 야구게임 미션을 한다거나 레이싱 게임 미션을 한다고 했을 때, 그 시간에 차라리 프레임워크 공부를 더 하겠다는 생각을 가지고 있었다.
그러나 막상 직접 미션을 경험해보면서 내가 자만했구나라는 것을 깨닫게 되었다. 쉬워보였던 요구사항들이 객체 지향적으로 설계하려고 하니, 머리가 아파오게 만들었고 부족한 언어 실력을 체감할 수 있었다. 이 과정에서 나보다 조금 더 객체지향설계에 익숙한 다른 페어들의 코드를 보면서 많이 배울 수 있었고, 이 코드를 다시 한번 코드 리뷰를 받아 리뷰를 반영하면서 한번 더 가다듬을 수 있었다.
누군가가 자바라는 언어를 깊게 공부하고 있다고 하면, 꼭 이러한 자바 기본기 미션들을 해보라고 말해주고 싶다. 물론 과거의 나처럼 직접 해보기 전까지는 과거의 나처럼 중요하게 생각하지 않을지도 모르지만 말이다.
스프링 미션으로 웹개발 미션을 진행하였다. 자바 기본기 미션으로 언어와 객체지향설계에 대한 감을 어느정도 잡은 뒤, 본격적으로 스프링을 사용하여 미션을 진행해 보았다. 스프링에서 제공하는 다양한 어노테이션들을 공부할 수 있었고, 직접 폼 데이터까지 다뤄보면서 데이터를 어떻게 받아오고, 처리해서 반환하는지에 대해 잘 이해할 수 있었다.
여기에서 그치지 않고 테스트 코드를 짜보면서, 테스트에 대한 중요성을 배울 수 있었다. 특히 ATDD 미션에서 개인적으로 테스트에 대해서 정말 많이 공부할 수 있었다. 이전에는 단순하게 @SpringBootTest
를 이용해서 테스트 코드를 짤 줄만 알았다면, Mockito
, MockMvc
등을 사용해보면서 mock 객체를 이용한 테스트를 진행하는 방법에 대해서 공부하고 그 차이에 대해서 이해할 수 있었다.
가장 많이 고민했고 여전히 고민되는 부분은 컨트롤러와 서비스간에 책임의 기준을 어디까지 나눌 것인가에 대한 고민이다.
책 스터디로는 <모던 자바 인 액션>과 <웹을 지탱하는 기술>을 진행하였다. 나는 책 스터디를 진행하기 이전에 HTTP라거나 REST에 대한 지식이 전무한 상태였다고 봐도 무방했다. 더군다나 책을 항상 멀리하며 살아왔기 때문에, 혼자서는 책을 읽는 것에 습관을 들이기가 어려웠다. 그러나 스터디에서 여러사람이 함께 책을 읽고, 이를 매주 공유하고 발표하는 시간을 가짐으로써 책을 읽고 정리하는 것에 대한 책임감이 생겼고, 꾸준하게 습관처럼 자리잡을 수 있게 도와주었다.
<웹을 지탱하는 기술>을 읽으면서는 기본적으로 웹에서 사용되는 기술들에 대해서 폭 넓게 학습할 수 있었다. <모던 자바 인 액션> 에서는 자바언어 그 중에서도 자바8에 대해서 깊게 다루고 있었는데, 이 책을 통해서 기존에 사용할 줄 몰랐던 스트림이나 람다의 작동원리에 대해서 잘 이해할 수 있었고, 그 결과 모르고 무작정 사용할 때 보다 더 잘 사용할 수 있게 되었다.
개인적으로 정말 아쉬움이 많이 남는 부분이다. 알고리즘이 너무 어렵게만 느껴지고, 아직까지는 크게 재미를 못 붙이고 있다. 이 때문인지 다른 스터디에 비해 시간을 할애하기가 어려워 도중에 알고리즘 문제 풀이를 이어나가지 못하게 되었다. 하지만, 알고리즘의 중요성은 여전하기에 하반기를 이용해서는 꾸준하게 다시 문제 풀이를 진행해보아야겠다고 생각하고 있다. 현재 내 수준은 백준 실버 문제도 허덕이고 있는 수준이기 때문에 많이 반성하고 있다.
새싹 스터디를 진행하면서 프로그래밍 공부에 있어서 누군가가 방향을 잡아준다는 것이 정말 중요하고 감사하다고 느꼈다. 또한 이러한 방향성으로 함께 나아갈 동료들이 있다는 것이 든든하고 동기부여가 되었다. 목표인 취업을 향해서 남은 하반기에도 좋은 동료들과 같은 목표를 향해 꾸준히 공부를 해 나가고 싶다.
진행했던 미션들 GitHub 링크
레이싱 게임 : https://github.com/sproutt/heroes-java-racing
사다리 게임 : https://github.com/sproutt/sproutt2-ladder
로또 게임 : https://github.com/sproutt/spring-study-lotto
QNA 웹개발 : https://github.com/sproutt/spring-study-qna
ATDD 웹 개발 : https://github.com/sproutt/spring-study-atdd
책 스터디 블로깅 : https://github.com/sproutt/sproutt-season2-note/blob/main/README.md