들어가며
저에게 2024년은 새로운 시작이었습니다. 이전까지 나는 프론트엔드를 주로 공부했고, 우아한테크코스를 통해서 백엔드를 본격적으로 공부하기 시작했습니다. 우아한테크코스는 2월부터 11월까지 약 10개월간 진행되었고, 2024년 회고에 이 내용이 빠질 수 없을 만큼 길고 의미가 있었던 시간이었습니다. 이 글에서는 2024년 이전의 나, 우아한테크코스, 그리고 앞으로의 계획에 대해서 이야기해보려 합니다.
2024년 이전
저는 대학교 1학년까지 학교 공부만 했고, 본격적인 개발을 해본 적이 없었습니다. 1학년을 마치고 난 후 군대에 갔고, 전역이 다가올 때쯤 막막해지기 시작했습니다. Django, Vue, React, NestJS, Android 등 다양한 분야를 공부했고, 구현한 것들을 바로바로 확인할 수 있는 프론트엔드 개발에 흥미를 느꼈습니다.
2022년에는 학교에 복학한 후 WAP이라는 프로그래밍 동아리에 들어갔습니다. 공유 블로그 서비스나 리액트 디자인 시스템 등등을 만들면서 프론트엔드에 대한 이해도를 높였습니다. 혼자서 모든 것들을 통제하고 싶다는 생각이 강해서 NestJS로 백엔드도 공부했습니다. 그 당시 스스로 풀스택 개발자라고 생각했지만 트랜잭션도 제대로 모르는 상태였어서 지금 생각해보면 웃기기도 합니다.
2023년에는 동아리에 있던 형들 덕분에 우아한테크코스를 알게 되었습니다. 처음에는 다른 부트캠프와 차이를 모르겠다 싶었습니다. 하지만 형들과 대화해보니 객체지향 프로그래밍과 같은 기초적인 것들과 다른 사람들과 협력하는 능력인 소프트스킬에 대해 중요하게 생각한다는 것을 알게 되었습니다. 개발할 때 도구를 자주 사용하다보니 기초적인 지식이 부족하다고 느꼈고, 혼자서 개발하는데 익숙해져서 협력하는 능력이 부족하다고 느꼈기 때문에 우아한테크코스를 준비하기 시작했습니다. 2023년 여름 방학 전까지만 해도 프론트엔드 개발자로의 삶을 꿈꿨지만, 급격히 발전하는 인공지능에 대한 불안감이 있었고, 더 복잡한 문제를 해결하고 싶다는 생각에 백엔드 전형에 지원했습니다. 현재는 프론트엔드와 백엔드 모두 각각의 매력이 있음을 느끼고, 두 분야 모두를 아우를 수 있는 개발자가 되고 싶습니다. 아무튼 우아한테크코스는 어찌저찌 합격했습니다.
우아한테크코스
우아한테크코스는 대부분의 온라인 부트캠프와 다르게 오프라인으로 진행됐습니다. 잠실과 선릉에 캠퍼스를 가지고 있고, 백엔드는 잠실 캠퍼스에서 교육을 듣습니다. 안드로이드 5기를 했던 형 추천으로 가락시장역 근처에 방을 구해 살게 되었습니다. 우아한테크코스는 레벨 1부터 레벨 5까지 총 5개의 레벨로 구성되어 있고, 다양한 미션이나 프로젝트를 진행합니다. 그 밖에도 테코톡, 레벨 인터뷰, 인프라 수업, 근로 등 다양한 활동이 있습니다.
레벨 1 - 자바와 객체지향 프로그래밍
우아한테크코스는 레벨마다 10명씩 조를 구성합니다. 두근되는 마음으로 처음 조를 만나러 갔는데, 신기하게도 남자 9명에 여자 1명으로 구성되어 있었습니다. 심지어 흡연자도 6명이라 어둡고, 칙칙한 분위기였습니다. 하지만 다들 친절하고, 재미있는 사람들이라 즐겁게 지냈습니다. 또한 개발에는 진심인 사람들이라 옆에서 열심히 배웠던 것 같습니다. 아직도 나이스샷(강의실)에서 불을 꺼놓고, 같이 개발하고, 칠판에 적으면서 토론했던 기억을 잊을 수 없습니다. 우아한테크코스의 제일 큰 장점은 개발에 열정적인 사람들이 많고, 그들과 함께 공부하고, 성장할 수 있는 것이라 생각합니다.
레벨 1에서는 프리코스에 이어서 자바로 콘솔 프로그램을 만드는 미션을 진행했습니다. 자바만을 이용한 콘솔 프로그래밍이었지만 전략 패턴, 상태 패턴, 상속과 조합 등 다양한 디자인 패턴을 적용할 수 있었고, 테스트 코드를 작성하면서 TDD(Test Driven Development)에 대해서도 배울 수 있었습니다. 또한 페어 프로그래밍과 현업자와의 코드 리뷰를 통해 서로 의견을 조율하는 방법이나, 내 코드에 대한 근거를 제시하고 피드백을 받는 방법을 배울 수 있었습니다.
레벨 2 - 스프링 프레임워크와 데이터베이스
레벨 2에서는 스프링 프레임워크와 데이터베이스에 대한 학습이었습니다. 방탈출 서비스가 주제였고, 예약 관리, 사용자 예약, 예약 대기, 결제와 배포 미션등을 이어서 진행하는 미션이었습니다. 이전에 NestJS로 백엔드 개발을 했음에도 불구하고, 트랜잭션이나 동시성 문제에 대한 이해가 부족했고, 레벨 2에서는 이러한 부분들을 보완할 수 있었던 것 같습니다. 또한 API 문서를 작성하고, 통합 테스트 코드를 작성하는 방법을 알지 못했는데, 레벨 2에서 이러한 부분들을 배울 수 있었습니다.
레벨 3, 4 - 팀 프로젝트
대망의 팀 프로젝트가 시작되었습니다. 레벨 3과 레벨 4에서는 백엔드 5명과 프론트엔드 3명으로 구성된 팀을 만들어 프로젝트를 진행했습니다. 졸업까지 한 학년이 남았지만, 팀 프로젝트를 성공적으로 진행하여 포트폴리오에 잘 정리하면 좋은 결과를 얻을 수 있을 것이라고 생각했습니다. 우리 팀은 다른 사람들에게 어벤져스라고 불릴 정도로 잘하는 사람들로 구성되어 있어 기대가 컸습니다. 레벨 1에서 같은 조이기도 했고, 항상 잘한다고 생각하는 형과 같은 팀이 되어서 더욱 더 기대가 컸습니다.
우리 팀은 '데벨업'이라는 개발자 취준생들을 위한 미션을 제공하고, 풀이를 공유하는 플랫폼을 만들었습니다. 우아한테크코스와 같이 미션을 풀고, 피드백을 주고 받는 것을 목표로 한 서비스였습니다. 처음에는 미션을 제공하고, 리뷰 매칭이나 채점, 알림 등 다양하고 복잡한 기능을 구현하려고 했었습니다. 첫 번째 데모데이 이후 리뷰 매칭이 긴 플로우를 가져서 실제 사용자들이 사용하기에는 어려울 것이라는 코치들의 피드백을 받아 리뷰 매칭을 제외하고 단순 게시판 형태의 서비스로 변경했습니다. 개인적으로 리뷰 매칭과 같은 복잡한 플로우를 구현하고 싶기도 했고, 코치들의 잠깐의 피드백을 받고 기획을 확 변경한다는 것이 아쉬웠습니다.
우리 팀은 기획적으로도 정말 많이 싸우고, 구현적으로도 정말 많이 싸웠습니다. 팀 내에서 갈등을 해결할 수 없을 정도의 상황이 되어 코치님들에게 상담을 여럽 번 받기도 했습니다. 갈등 경험을 겪고 해결했다는 이야기는 자기소개서 쓸 때 좋다는 말들을 하지만 이 경우는 너무 엉망이었습니다. 스트레스에 취약한 편이라 우아한테크코스를 때려치고, 집으로 돌아갈까도 생각했던 힘든 시간들이었습니다.
제가 스트레스를 받았던 부분은 총 4가지가 있습니다. 첫 번째로 "그 때 말하지 왜 지금와서 말하냐"라는 말입니다. 결과론적으로 비판 받는 것이 팀원들에게 큰 스트레스를 줬고, 점점 더 말을 하지 않게 되었습니다. 이 때부터 회의 시 눈치를 보며 말하는 사람이 늘었고, 무서워서 말을 못하겠다며 울었던 팀원도 있었습니다. 두 번째로 백엔드 내 두 팀원 간의 불화입니다. 거의 모든 부분에서 싸워서 같은 공간에 있지 조차 않았습니다. 사실상 인간 상성이라고 볼 수 있었습니다. 이 분위기가 팀 내에 전파되어 다른 팀원들도 눈치를 보며 행동했습니다. 세 번째로 개인적으로 프론트엔드에 요구한 것들이 계속 반영되지 않은 것이었습니다. 사용자 편의를 위해서 변경해달라고 했던 부분을 개인적으로도 말했고, 사용자 인터뷰를 통해서, QA를 통해서도 동일하게 계속 나왔지만 반영되지 않았습니다. 점점 말하는게 의미가 없다고 생각하게 되었습니다. 네 번째로 서비스 기능을 너무 단순화 시킨 것이었습니다. 아무래도 취업 준비를 하는 만큼 기술적인 부분들도 넣고 싶었지만, 팀원들간의 의견 차이, 불화, 시간적인 제약으로 인해 단순화된 서비스가 나왔습니다.
돌이켜보면 저도 잘못한게 많습니다. 다른 사람들에게 상처주고 싶지 않아서 속에 쌓아두다가 뒤늦게 말하기도 했습니다. 또한 기획에서 의견을 냈지만 반영되지 않았을 때는 의미가 없다고 생각해서 더 이상 의견을 내지 않았을 때도 있습니다. 프로젝트 중반 이후부터는 열정의 불꽃이 사그라들었고, 그냥 끝나기만을 기다렸습니다. 협력에 대해서 배우고자 우아한테크코스에 들어왔지만 제 스스로 이겨내지 못한 것 같습니다.
그럼에도 불구하고, 팀 프로젝트를 진행하면서 다양한 경험들을 할 수 있었습니다. 많은 팀원들이 있는 상황에서 기획하고, 역할 분담하고, 스프린트하며, 사용자 피드백도 받아보고 서비스를 개발 및 유지보수하는 등 다양한 경험을 할 수 있었습니다. 또한 갈등이 많은 환경에서 갈등을 해결하는 방법이나 멘탈 관리를 하는 법, 챙길 수 있는 것들을 챙기는 법 등을 배울 수 있었습니다.
기술적인 부분에 대해서도 성장할 수 있었습니다. 서버 이중화와 로드 밸런서, 모니터링, CI/CD, 무중단 매포, 데이터베이스 읽기 쓰기 분리 및 다중화, 동시성 제어, 캐시 등 다양한 기술들을 사용하고, 이러한 기술들을 사용하는 이유와 장단점을 알 수 있었습니다. 또한 쿼리 튜닝이나 인덱스를 사용해 성능을 향상시키고 성능 측정을 통해서 어떤 부분을 개선해야 하는지 알 수 있었습니다.
이러한 경험들은 앞으로 개발자로서 성장하는데 큰 도움이 될 것이라고 생각합니다. 또한 이러한 경험들을 통해서 어떤 개발자가 되고 싶은지, 어떤 팀원이 되고 싶은지에 대해서도 생각해볼 수 있었던 시간이었습니다.
레벨 4 - 미션
레벨 4에서는 레벨 3에서 진행한 팀 프로젝트를 이어서 구현하고 유지보수하는 경험을 했습니다. 프로젝트를 진행하면서 톰캣, Spring MVC, JDBC 라이브러리를 구현하는 미션을 함께 했습니다. 또한 DB 복제와 캐시, 대규모 인프라 구축에 대해 학습할 수 있었던 시간이었습니다.
이전에는 당연하게 여겼던 톰캣, IoC 컨테이너, JDBC 라이브러리에 대해 직접 구현해보면서 이들이 어떻게 동작하는지를 깊이 있게 이해하게 되었습니다. 특히 톰캣 구현을 통해 HTTP 네트워크 이론에 대한 지식을 체계적으로 쌓을 수 있었습니다. 요청과 응답의 흐름, 세션 관리, 그리고 웹 애플리케이션의 생명 주기에 대해 상세히 학습하며, HTTP 프로토콜의 기본 원리를 명확히 파악하게 되었습니다.
레벨 5 - 취업 준비 기간
레벨 5는 취업을 위한 준비 기간이었고, 자기소개서 작성이나 면접 특강 등을 진행했습니다. 저는 팀 프로젝트에서 너무 많은 스트레스를 받았다는 핑계로 취업 준비에 소홀했습니다. 한 학년이 남아 졸업이라는 도망갈 수 있는 길이 존재한다는 마음이 컸던 것 같습니다. 자기소개서를 써보고, 회사에 지원해 면접 경험을 쌓는 것이 중요하다는 것을 알고는 있었지만 자존감이 너무 떨어져 있었습니다. 사실 실패에 대한 두려움이 컸습니다. 평소에 잘하는 척을 해서 그런지 주변의 기대가 컸고, 그 기대에 부응하지 못할까봐 걱정했습니다. 결국 아무 곳에도 지원하지 않았고, 졸업을 하기 위해 학교로 돌아갈 생각입니다.
그렇다고, 남은 시간에 아무것도 하지 않은 것은 아닙니다. 레벨 3과 레벨 4에서 머리로 들어왔던 지식이 너무 많아서 정리할 시간이 없었는데, 레벨 5에서는 이러한 지식들을 정리하고, 복습하며, 더 깊이 있게 이해할 수 있는 시간이었습니다.
앞으로의 계획
아마도 대학교 졸업 후 취업 활동을 할 것 같습니다. 1년동안 백엔드 공부를 했지만 아직 부족하다고 생각하는 부분이 너무 많습니다. 이 부분들을 내년에 채워나가고, 취업을 준비할 것 같습니다. 팀 프로젝트를 진행하면서 프론트엔드와 백엔드 모두 이해하면서 개발하는 것이 그렇지 않은 사람들에 비해 이해할 수 있는 것이 많았던 것 같습니다. 그래서 프론트엔드도 꾸준히 공부하면서, 모두 사용할 수 있는 일을 하고 싶습니다.
우아한테크코스를 진행하면서 다양한 책들을 읽었습니다.
- 객체 지향의 사실과 오해
- 오브젝트
- 소프트웨어 장인
- 자바 ORM 표준 JPA 프로그래밍
- 도메인 주도 개발 시작하기
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- Real MySQL 8.0
- 혼자 공부하는 컴퓨터 구조 + 운영체제
- 혼자 공부하는 네트워크
최근에는 CS(Computer Science)에 관련된 책들을 읽고 있습니다. 벡엔드를 공부하면 할수록 느끼는 것은 CS에 대한 지식이 정말 중요하다는 것입니다. 예를 들어, 텀퓨터 구조와 운영체제 지식으로 성능, 용량, 비용에 따라 적절한 인프라 구성할 수 있고, 모니터링 시 발생하는 주요 지표를 이해하고, 이를 통해 서버의 상태를 알고 대응할 수 있습니다.
저는 이론 공부를 할 때 보통 시험 문제를 만들어 풀어보는게 기억에 오래 남고, 효율적이라 생각합니다. 종이나 노션에 문제를 만들면 다시 풀기 어렵고, 결과를 확인하는 것도 번거롭다고 느꼈습니다. 그래서 시험 문제를 제작할 수 있고, 풀 수 있는 온라인 시험 제작 및 관리 서비스 '플러피(Fluffy)'를 개발하게 되었습니다. 플러피는 개인적으로 CS 지식을 공부하기 위해서 만들었지만 다양한 분야 다양한 사람들이 공부할 수 있는 서비스로 만들고 싶습니다. 많은 피드백 주시면 감사하겠습니다.
깃허브 https://github.com/alstn113/fluffy
마무리
최근에 "입춘"이라는 좋은 노래를 발견했습니다. "첫 봄 인사를 건네줘요, 피울 수 있게 도와줘요"라는 가사가 특히 마음에 와 닿았습니다.
이 가사는 새로운 시작을 응원하는 것 같습니다. 새로운 시작이라는 것은 두렵고, 불안합니다. 하지만 새로운 시작을 통해 성장할 수 있고, 더 나은 사람이 될 수 있습니다. 저는 2024년에 새로운 시작을 했고, 앞으로도 계속해서 새로운 시작을 하고 싶습니다.
https://www.youtube.com/watch?v=kIiW3XRP7bU&list=RDkIiW3XRP7bU&start_radio=1&ab_channel=POCLANOS