개발 일을 하며 먹고살려면 꾸준히 공부하는 것이 중요하다
컴퓨터공학을 공부하면서 프로젝트를 경험해 보니 대학에서 배운 이론은 실무와 차이가 있다
물론 중요하지 않다는 것은 아니다. 하지만 대학 공부만으론 괴리감이 많이 발생하고,
IT 분야에서 일하는 사람마다 실력 편차가 큰 것도 그것일 터다
개발을 시작하며
군대를 전역하고 마냥 어떤 것을 공부해야 하나 고민하면서 가장 큰 니즈가 있는 웹앱을 먼저 공부했다
군대에 가기 전 나는 C++로 알고리즘을 열심히 푸는 학생이었는데 PS만 해서 먹고살 수는 없다고 느껴 막무가내로 자바를 공부했다
아무것도 모르는 상태로 우선 유튜브를 보고 Servlet + JSP로 게시판을 만들어봤다
Bootstrap을 이용해서 간단하게 게시판을 만들어보니 뭔가 재미있었고, 기존 C++ 문법을 작 숙지하고 있었던 탓인지 자바도 금방 적응했다. 그다음은 인프런에서 김영한의 스프링을 수강했다.
Servlet을 통해 할 때는 직접 톰캣을 받아서 연걸하고, 데이터베이스 쿼리도 직접 작성하고 해야 했는데 스프링 부트를 배우고, JPA를 사용하니 개발의 신세계였다...
간단한 CRUD 마저 작성할 필요 없이 오로지 API만 개발할 수 있으니 재미있었다. 하지만 문제도 있었다. 처음에 스프링의 각종 문법 @Controller
, @RestController
가 뭔지도 몰랐고, 빈은 뭐고 생명주기는 뭐고 MVC랑 Restful이랑 차이점이 뭐지
이런 지식도 모르고 막무가내로 따라쳐서 강의를 전부 수강했고, 남의 코드를 보지 않고 게시판을 만들어보고 싶었다. 하지만 나 혼자 힘으로 작성하려니 단 한 줄도 손에서 나오지 않았다. 아직 내 지식이 아니라 생각했고, 게시판을 만드는 것도 블로그를 보고 조금씩 따라 해봤다
Shin._.Mallang
https://github.com/shin-mallang 컴퓨터융합학부 19학번, 우아한테크코스 5기 BE
ttl-blog.tistory.com
이 블로그를 보고서 게시판 만들기를 따라 했는데 그 당시 테스트 코드를 어떻게 작성해야 할지도 몰랐던 나로서는 가뭄의 단비 같은 블로그였다. 다른 블로그들은 대부분 끝까지 구현되지 않았거나 설명이 부족했거나, 내가 이해하기 어려운 지식이 많았다
해당 블로그를 한번 따라 치고 Spring Security에 대해 간단하게 알게 되고, JWT를 이용한 세션과 토큰의 인증 방식에 대한 차이, 프로젝트 구조는 어떻게 잡는지 등 많은 것을 배울 수 있었다
이때가 복학하고 편입에 성공한 뒤 3학년 3~4월쯤이었던 것 같다
이전 학교에서 친했던 형과 게시판을 따로 만드는 프로젝트도 동시에 진행하며 다음과 같은 것을 생각했었다
- 자바 코드에 익숙해지기
- 깃, 깃허브는 어떻게 다루는 게 좋을까?
- 프론트는 어떻게 해결해야 할까
우선 내 대부분의 시간을 자바 코드를 보며 개발하다 보니 잘 모르는 자바 문법 (Exception 관리, ResponseEntity, Java Record, Collections 등) 자바와 스프링에 대한 문법을 포괄적으로 서칭을 통해 알아가게 되었다
이렇게 근본 없이 프로젝트를 통해 알아가니 전혀 지루하지도 않고 새로운 지식을 배워가는 게 재미있었다
깃, 깃허브는 개발자들에게 필수라는 여러 정보를 듣고 이에 대해 익숙해져야겠다고 생각했다
깃은 뭐고 왜 사용하는지, 어떻게 프로젝트를 관리하고 협업할 수 있는지 아는 형과 게시판 프로젝트를 진행하며 공부했다
이 당시에는 브랜치를 따서 관리하지는 않았고 한 명이 레포를 만들면 main 브랜치에 때려 넣었던 것만 기억난다
당연히 백엔드만 만들 수 없으니 프론트도 구현했는데 Thymeleaf를 통해 프론트를 만들었다
Bootstrap을 이용해서 만들고 api는 스프링에서 해결했는데 이때 MVC와 RESTful 하게 만드는 방식에 대해 깨달았던 것 같다
또한 학교 동아리에 들어갔다. 학과 내 개발 동아리였는데 규모가 크지 않았고 소수 인원으로 진행되었다
목표는 최종적으로 동아리 홈페이지를 만드는 것이었는데, 프론트와 백엔드 나누어서 어떻게 개발해야 할지 역할을 담당했다. 하지만 유야무야 되어서 별 다른 득은 없이 1학기는 끝이 났다
게시판, 쇼핑몰 등 Spring, Spring Security에 어느 정도 익숙해지고 (잘하는 것이 아니라) 나니 내 서비스를 배포해보고 싶었다
서버는 어떻게 만드는 건지 찾아보다가 AWS를 통해 서버를 빠르게 구축할 수 있다고 해서 처음으로 배포를 해봤다
나만의 서버를 배포하고 나니 CI/CD가 눈에 띄었다
Github Actions, Jenkins 등이 있었는데 Jenkins는 너무 어려워 보여서 Github Actions로 CI/CD 파이프라인을 구축해 봤다
스크립트 짜는데 너무 어려워서 고생했던 기억이 난다
배포까지 해보고, CI/CD를 가볍게 해보고 나니 뭔가 자신감이 차오르며 어느 정도 웹앱 생태계가 어떤 방식으로 돌아가는지 알 것 같아서 기분이 좋았다
실 서비스를 운영해보며
방학에 할 것을 찾던 중에 학교 창업대학에서 백엔드 개발자를 구하는 공고가 있어서 지원했다. 실제 페이를 받는 것은 아니고 창업 팀에 외부 개발자로 들어가서 같이 경험해 보는 것인데 대학 축제를 데드라인으로 앱을 출시할 계획을 가지고 있었다
나는 중간에 투입되었는데 실무 일을 하는 사람들도 있었고, 취준을 하는 분도 있었다. 그러나 2학기가 되면 전부 여건 상 빠지게 되어 나 혼자 유지보수를 해야 한다고 전해 들어 부담감이 컸다. 결과적으로 6개월 정도 나와한 명을 더 구해 프로젝트를 진행하며 실제 사용자를 대상으로 앱스토어에 배포도 해보고, 프론트엔드와 소통하면서 API 연동도 해보고 데이터베이스 쿼리 최적화도 해보고 이때 정말 많이 배웠던 것 같다. 하지만 내가 백엔드를 전담해서 해야 한다는 부담감과 사수가 없어 내가 짠 코드가 맞는 건지, 더 나은 방법은 없는지 고민이 많아 결국 빠지게 되었다
겨울 방학이 되고 다음과 같은 것을 공부해보고 싶었다
- MSA 아키텍처를 통한 프로젝트
- 채팅 API 개발
- 지도 API 개발
한창 마이크로서비스가 뜨고 있어서 나도 뭔지 경험해보고 싶어 찾아보니 k8s, Spring Cloud를 통해 기존 모놀리식 아키텍처에서 다중 서버를 두어 Gateway를 통해 통신하는 방법이었다. 이를 경험해보고 싶어 학교에서 팀원 3~4명을 모아 중고 거래 앱을 만들어보게 되었다. 실제 사용자를 대상으로 배포하는 것은 아니었고, 기술을 경험해 보고자 막무가내로 진행했던 것 같다
이 프로젝트를 하며 채팅과 지도를 넣을 수 있었는데, Spring Cloud, Eureka, Gateway, 메시지 큐 등 여러 기술에 대해 가볍게 배워볼 수 있었다. 물론 이 당시 이렇게 많은 기술 스택을 배우는 것이 과연 의미가 있을까? 하는 나름의 회의감이 있었다. 다양한 기술을 아는 것은 물론 좋지만, 당장 자바 GC가 어떻게 돌아가는지, 톰캣은 어떻게 관리해야 하는지. 약간 근본적인 기술들에 대해 너무 소홀히 하고 있는 것이 아닌 지 고민을 많이 했다
하지만 배움이 무의미한 것은 아니었다. MSA 방식으로 구현해 보며 도커에 대해 익숙해졌고, 서버 인프라를 관리하는 방법, 네트워크에 대한 지식 등 몰랐던 지식들을 많이 배울 수 있어 의미 있었다고 생각한 반면 위와 같이 아쉬움도 남았던 것이다
현재 4학년을 재학하며 연이 닿아 SI 업체에 프로젝트를 투입하게 되었는데 개발 일로 돈을 벌게 되는 만큼 내가 사용하는 것에 대해서도 어느 정도 알아야 하지 않겠냐는 생각이 든다
물론 1년간 마냥 놀지만은 않았지만 조금 더 잘하고 싶고, 더 많이 알고 싶다
우선 간단하게 생각하면 다음과 같은 것들에 대해 공부하고 싶다
- Mysql, PostgreSQL
- Spring, Servlet
- Tomcat
- Nginx
- AWS
- Docker, K8s
- Java, JVM, Memory
- Node.js
- Next.js
- AI 공부..
당장 떠오르는 것은 위의 내용인데 우선 스프링에 대해 알아봐야겠다
티스토리를 통해 알고리즘 공부를 해서 블로그를 작성한 것이 2020년 여름인데 어느덧 2025년이 되어 대학을 졸업할 시기가 왔다
시간이 무척이나 빠르게 느껴지면서도 많은 일이 있었던 것 같아 기분이 묘하다
많은 글을 작성할 것 같지는 않지만 하나의 글을 작성해도 의미 있는 글을 쓰고 싶다