들어가기 전에
길고 길었던 2021년이 끝이 났다.
보통 1년 동안에 일들을 돌이켜 생각해보면 많은 사건들이 있었는데 이번 연도에는 군 전역과 부스트캠프 2가지 말고는 큰 사건이 없었던 거 같다.
그만큼 한가지 일에 몰입을 해왔다는 것일 수 도 있고 아니면 열심히 안 한 거일 수 도 있겠다.
(필자는 전자로 생각하겠다 😎 )
더 나은 2022년을 위해 2021년을 돌아보는 회고를 써보려고 한다.
1. 육군 만기 전역
2021년 6월에는 길고 길었던 군 전역을 하게 되었다.
사실 "내가 본격적으로 개발에 눈을 뜬 건 군 생활 때가 아닐까?"라는 말이 나올 정도로 군대에서 보내는 잉여 시간을 잘 활용해서 개발에 관련된 전반적인 정보를 얻었고 나의 개발자 로드맵을 구축하게 된 계기가 되었다.
나만의 로드맵을 가지게 되니 내가 지금 어떤거에 집중해야 할지 확신이 생겼고 그 확신을 기반으로 더욱더 개발에 열심히 하게 되었다.
또한 운좋게 국방부 오픈소스 아카데미나 군대에서 개발한 프로젝트가 있어 오히려 군 생활을 하면서 다양한 경험을 얻기도 했다.
더 자세한 이야기는 아래 글을 참고하면 좋을 거 같다.
2. 부스트캠프
2021년 하반기는 부스트캠프와 함께 했다고 해도 과언이 아닐정도로 부스트캠프에 많은 시간을 할애했다.
2-1. 부스트캠프 챌린지
군대에 있을 때부터 전역하면 코딩 교육 프로그램에 지원해봐야겠다고 생각했었다. 그래서 꾸준히 코딩 테스트 공부를 하면서 시간을 보냈다.
마침 전역 직전에 부스트캠프 모집 공고 글이 올라왔고 코딩 테스트에서 광탈할 것 같았지만 "코딩 테스트에서라도 얻는 게 있겠지"라는 마음으로 지원하였다.
코딩테스트
코딩 테스트는 1차 2차 코딩테스트로 나눠서 봤다. 기초적인 자료구조가 나온다는 말이 있었고 집중적으로 공부했지만 막상 시험에서는 CS지식을 묻는 객관식 문제와 알고리즘 문제가 같이 출제되었다. 게다가 객관식 문제는 C언어를 기반으로 된 문제가 나와서 C언어를 경험하지 못한 나로서는 낯선 문제였다.
다행이게도 1차 코테에 붙게 되었다! 문제 자체는 난이도가 낮아 붙었던 거 같다 ㅎㅎ
그다음으로 2차 코테는 화면 공유와 카메라로 내 모습을 촬영하면서 봤었는데 다행스럽게도 2차 코테 역시 알고리즘 난이도보다는 예외사항을 고려할 부분들이 많아 어떻게 짜임새 있게 코드를 작성하는지가 중요했다.
부스트캠프 챌린지 합격!
알고리즘 공부할 때마다 검토를 하지 않는 습관이 있어서 이번 2차 코테에서는 맞게 풀어도 놓친 예외 사항
때문에 떨어질 줄 알았는데 운 좋게 합격하였다.
이제 들뜬 마음으로 쉬면서 부스트캠프 챌린지 후기를 보면서 어떤 식으로 미션을 나올지 찾아봤는데
해당 링크가 있어서 아마 참고하실 분들은 참고하면 좋을 듯하다.
다사다난한 미션들
부스트캠프 챌린지는 4주에 걸쳐 진행된다.
4주 동안 다양한 CS지식과 개발환경에 대해서 배웠다.
아 이거 미리 경험해 볼걸...
"헐 예전에 공부할까 말까 한 주제였는데 이번에는 이게 나왔네.."
첫 주차부터 매일매일 미션을 하면서 속으로 생각했던 말이다. 4주 안에 CS지식과 개발환경에 대해 학습해야 하다 보니 정말 중요한 주제들(git, 비동기, 네트워크 등등)만 나온다.
실제로 내가 예전에 미리 경험해봤던 주제들은 쉽게 미션의 의도를 파악하고 접근할 수 있었고 반대로 경험해보지 못한 주제들은 개념만 공부하다가 끝난 경우가 허다했다.
그래서 미션 하는 내내 나의 부족함을 깨달았고 해야 할 것들을 미루지 말자는 생각을 가지게 되었다.
“개구리를 해부하지 말고, 직접 만들어라” - 니콜라스 네그로폰데
부스트캠프 과정에서 나를 변화하게 해 줬던 말이다. 이 명언은 개구리를 이해하고 싶다면 개구리를 만듦으로써 어떻게 동작하는지를 명확하게 알아야 이해할 수 있기 때문이다. 나는 항상 미션을 보면 무작정 풀기만 바빴는데 이 말을 듣고 미션에 대한 나의 접근법을 바꾸기 시작했다.
미션을 볼 때 어떻게 동작하는지를 중점적으로 보기 시작했고 미션을 하기 전에 관련 지식들을 학습하기 시작했다. 그 후 미션과 관련해서 어떻게 접근해야 할지에 대해 설계를 하였다.
비록 제 시간 안에는 못 끝내는 날이 많았지만 어떻게 동작하는지에 대해 핵심원리를 알게 되었고 미션 역시 완성도 있게 만들게 되었다.
2-2. 부스트캠프 멤버십
멤버십에 선정되는 기준은 알려주지 않았지만 챌린지를 하면서 과제에 대한 완성도 있게 과제를 많이 해내지 못해서 멤버십에는 떨어질 줄 알았다.
그런데 안될 줄 알았던 멤버십에 입과 하게 됐다.
아마 과제의 완성도뿐만 아니라 다양한 기준으로 심사하게 되어서 붙게 된 거 같다. (멤버십은 60~70% 정도 입과하게 됐다.)
멤버십은 매일매일 CS관련 주제 하나로 미션을 했던 챌린지와는 다르게 기한이 2주인 미션 4개와 최종 프로젝트 1개를 진행했다.
멤버십 미션
멤버십 미션은 2주동안 피그마로 그려진 화면 정의서와 기능 요구사항 및 제약사항을 바탕으로 웹 개발을 진행한다.웹 개발을 진행하면서 웹 개발뿐만 아니라 Git, README, 이슈 관리, 현업 개발자의 코드 리뷰, 스프린트 계획 관리, 관련 지식 학습 등 개발에 필요한 지식들을 쌓을 수 있어서 좋았다.
즉, 멤버십 미션을 하면 데일리 스크럼을 진행 후 스프린트 계획을 작성하는 것을 시작으로 "현업에서는 이렇게 개발을 하겠구나"
라는 생각이 들 정도로 체계적으로 개발을 한다.
또한 개발을 하면서 궁금한 점들은 현업 개발자분이 코드 리뷰를 해주실 때 질문을 함으로써 궁금한 점도 해소할 수 있고 내가 놓쳤던 부분들도 다시 상기해주시면 가독성이 있고 효율적인 코드를 작성할 수 있게 도와준다.
Sequelize 구현
멤버십 미션을 하면서 기억에 남는 것은 ORM 라이브러리인 Sequelize 비슷하게 구현했던 기억과 마지막 미션인 페어 프로그래밍 미션이 기억난다.
Sequelize 구현 같은 경우에는 미션 요구사항에 "ORM 라이브러리를 사용하지 말 것".이라는 요구사항이 있었고 해당 사항에 대해서 피어 세션 때 같은 그룹이었던 한 캠퍼 분이 "그러면 직접 ORM 라이브러리를 간단하게 만들어보는 것도 좋을 거 같네요."라는 말 한마디에 진짜로 도전하게 되었다.
사실 Sequelize 라이브러리를 깊게 사용해본 적이 없어 내부 동작은 어떻게 돌아가는지 제대로 이해하지는 못해 내부 동작까지 따라 하는 것보다는 라이브러리를 사용하는 개발자는 Sequelize를 사용하는 것과 동일하게 느낄 수 있도록 사용 방식은 최대한 똑같이 만들어보려고 노력했다.
동작 방식은 Model이라는 클래스를 만들어 init를 통해 컬럼 정보를 저장하고, findAll, create 등 기본 메서드들은 mysql 라이브러리를 사용하여 쿼리문을 만들고 실행하도록 만들었다.
그 결과 피어 세션이나 데일리 스크럼을 할 때 반응이 뜨거웠고 실제로 다른 캠퍼분들이 사용할 수 있게 더 다듬고 싶었으나 미션이 끝나게 되어 배포까지는 못했다 🥲
그래도 실제로 외부 라이브러리를 구현해보니 동작 방식을 더 탐구하려는 욕심도 생겼고 라이브러리에 대한 이해도도 더 높아지게 되어 올해에도 한번 똑같이 구현해보려고 한다.
깐부 미션
멤버십의 마지막 미션은 페어 프로그래밍 미션이다. 사실 페어 프로그래밍을 처음 들었을 때 되게 멋있는 기술인줄 알았으나 실제로는 한명은 지시자가 되고 한명은 직접 코딩하는 역할이 되어 개발을 하는 방식이다.
깐부 미션이 기억에 남는 이유는 나와 함께 페어프로그래밍을 한 캠퍼분에게서 엄청 많은 것을 배웠기 때문이다.
함께 개발하면서 개발하는 방식, 개발에 대한 생각이나 접근방법 등 다양한 방면에서 개발에 대해 생각을 더 가지게 해 주었다.
예를 들어서 어떤 개발방식을 선택하거나 지식을 도입할 때에도 지속적으로 토론을 하여 이 개발방식은 우리에게 어떤 영향을 미치는지, 좋은 점은 무엇인지, 다른 방안은 없는지 꼼꼼하게 이야기를 했고, 지식을 도입할 때에도 블로그를 보고 따라 하는 것이 아닌 동작원리를 서로 설명하면서 서로 이해하는 방식으로 진행했다.
깐부 미션을 하면서 실제로 위 예시처럼 다양한 사안에 대해 깊게 대화를 했고 깊은 대화에 빠져 실제 개발을 2주동안 4일 정도 진행했지만 다른 어떤 미션보다도 얻은 게 많았던 미션이었다.
최종 프로젝트
마지막으로 6주 동안 최종 프로젝트를 진행하게 된다. 팀은 4명으로 구성되었으며 주제는 클럽하우스를 기반으로 하는 음성 채팅 SNS 서비스를 기획하게 됐다.
프로젝트는 크게 프로젝트 설계(1주차), 개발(2~5주차), 테스트&발표 준비(6주차)로 진행했다.
그리고 하루 스케줄은 다음과 같았다.
- 데일리 스크럼 / 주간 스프린트 계획
- 개발 진행
- 중간 점검
- 개발 진행
- 마무리 회의 or 회고
- 추가 작업
- 코드 리뷰
최종 프로젝트를 진행하면서 가장 힘들었던 때는 설계를 했던 1주 차였다.
나 포함해서 팀원 대부분이 프로젝트 경험이 없어 설계를 어떤 방식으로 해야 하고 어떤 부분까지 고려해야 하는지 잘 몰라서 상당히 애를 먹었으며 심지어 불필요한 설계를 해서 설계 구조를 바꾸느라 시간을 날려먹은 적도 있었다.
또한 설계를 할 때는 팀원들과 지속적으로 의사소통을 해야 하므로 하루에 10시간 가까이 회의를 하는 경우도 빈번했다. 이런 상황이 지속되면서 집중력이 저하되자 주제 전환을 하여 TMI를 공유하던가 서로의 일상을 이야기하는 등 어떻게든 집중력을 유지하고자 서로 많은 노력을 했다.
다행스럽게도 그렇게 고생해서 만든 팀 그라운드 룰, 기술 스택, 스프린트 백로그, API 명세 등은 프로젝트 내내 큰 변화 없이 유지되었으며 위 설계를 통해 올바른 방향으로 개발을 할 수 있게 되었다.
사실 깐부 미션을 하면서부터 계속 느꼈지만
- 팀원들에게 나의 의견을 제시하고, 설득한 경험
- 팀원들과 문제에 대해 함께 고민한 경험
- 팀원들의 강점을 바탕으로 새로운 강점을 만들었던 경험
- 팀원들과 함께 다양한 도전을 한 경험
이 모든 경험들은 협업을 통해서만 느낄 수 있었고 이 경험은 책이나 강의로 배울 수 없는 훌륭한 경험이라고 생각한다.
2022년에는...
부스트캠프를 성공적으로 수료하고 벌써 1달이 넘었다. 최근에는 운동을 다시 시작하면서 CS 공부나 알고리즘 문제를 풀면서 다시 도전할 준비를 하고 있다.
성공적으로 2021년을 보낸 만큼 올해 역시 작년보다 더 큰 성장을 하고 싶은 마음이 굴뚝같다.
올해에도 더 성장하자는 의미로 간간히 생각해둔 목표를 적어보려고 한다.
Spring
군 휴학이 끝난 이제는 3학년 1학기로 복학을 한다. 복학을 하면 했지 어떤 목표가 있는지 궁금해 할 수 있는데 사실 지금까지 학교 수업은 자바로 했지만 군 복무부터 지금까지 알고리즘 외에는 자바를 사용해본 적이 없으며 당연히 Spring 프레임워크 역시 사용해본적이 1도 없다. 그래서 아마 수업을 들어도 쫓아가기 많이 힘들 거 같다.
우리나라가 자바 공화국인 만큼 올해는 Node를 사용하기보다는 Spring, Spring Boot를 많이 경험해보려고 하고 Java 공부를 많이 하려고 한다.
객체지향에 대해 더 공부해보고 Java, Spring, Spring Boot 등을 활용해서 프로젝트도 진행해보고 싶다.
장기 프로젝트
부스트캠프에서 진행한 최종 프로젝트 주제에 대해 아쉬웠던 점이 있는데 바로 내가 지속적으로 사용하지 못하는 주제라는 것이다.
- 자주 사용하지 않으므로 추가하고 싶은 기능이 생각이 안 남
- SNS 특성상 많은 유저가 필요
해당 이유 때문에 위 프로젝트를 지속적으로 유지하기에는 부담스럽다.
그래서 차라리 못해도 나만 잘 사용하는 서비스를 만들고 싶다. 내가 잘 사용하면 추가하고 싶은 기능이 있을 때마다 추가하고 버그도 발견할 수도 있고 여러 가지 도전들을 할 수 있다고 생각한다.
아직까지는 어떤 프로젝트를 할지는 정해지진 않았지만 최대한 많은 도전들을 할 수 있으며 내가 잘 사용할 수 있는 주제로 진행하고 싶다.
오픈소스
Sequelize와 비슷한 ORM 라이브러리를 만들고 1:N 통신이 가능한 React WebRTC hook을 NPM에 배포하기도 하면서 내가 자주 사용하던 라이브러리들의 동작 방식도 궁금하기도 하고 기여도 해보고 싶다는 생각이 들기도 했다. (누군가 내가 기여한 라이브러리를 쓰고 있다면 정말 행복할 거 같다 😆 )
비록 지금 내 수준으로는 메이저급 오픈소스에 기여하기는 힘들겠지만 그래도 번역이나 직접 오픈소스를 만들어보는 등 내가 할 수 있는 선에서 최대한 오픈소스에 기여하고 싶다.
알고리즘
전역 후 부터 작년까지 부스트캠프 미션들을 수행하느라 알고리즘 문제를 거의 풀지 못했다. 그래서 최근에 코테도 준비할 겸 다시 풀어보고 있는데 알고리즘 실력이 예전만큼 아니란 걸 느끼게 됐다. 알고리즘 문제 풀이 능력을 향상하고자 라이님 블로그에 게시된 대회용 알고리즘 카테고리에 있는 알고리즘들을 공부해보려고 한다.
그래서 어제부터 액셀 파일을 만들어서 관리하기 시작했는데 문제 수도 많고 문제가 난이도가 높아서 올해 안에 다 푸는 걸 목표로 하고 있다.
2021년도 이렇게 지나갔다.
2022년에도 2021년처럼 많은 성장을 하고 싶다.
'회고' 카테고리의 다른 글
개발자 지망생의 군대 회고 (5) | 2021.06.21 |
---|