본문 바로가기

회고/프로젝트 회고

(주절주절) 생애 첫 풀스택 팀 프로젝트를 마무리하며..

 

Facts

 

String[] SpringBoot =

{

게시글/댓글/대댓글 작성/수정/삭제,

Spring Security를 활용한 Access/Refresh Token 인증/인가,

좋아요/ 북마크/ 태그/ 신고/ 마이페이지/ 프로필 이미지/ 비밀번호 변경/ 회원 탈퇴/ 프로필 변경/ 랭킹 집계 등 커뮤니티 기능,

WebSocket 채팅, 

파일 업로드/ 관리,

Redis를 이용한 데이터 관리,

이메일 인증,

페이징 및 각종 쿼리 처리

}

 

String[] React =

{

WebSocket 채팅,

모든 API에 대한 화면 구현/ 그리고 그냥 모든 화면 구현,

ReduxToolkit/ ReduxPersist/ Cookie.js를 활용한 인증 유지,

페이지네이션, 댓글, 답글, 잡다한 것들..

}

 

String[] Git =

{

커밋 컨벤션,

이슈 프로젝트 관리,

브런치 관리,

GithubAction를 이용한 CI/CD

}

 

String[] AWS =

{

EC2/ ELB/ RDS/ S3/ Elastic Cache/ Route53/ Cloud Front를 활용한 웹 배포,

HTTPS 통신,

Nginx Reverse Proxy,

Code Deploy를 이용한 CI/CD

}

 

 

 

 

Feeling / Findings

 

드디어 끝이 났다.

사실 개발 관련된 부분은 이미 끝난지 일주일이 지났으나, 내 리액트 프로젝트가 의문사하고 (ㅋㅋㅜ) 어째서인지 잘 돌아가던 서버가 갑자기 누운 덕분에 (ㅋㅋㅜ) 이제서야 "그래도 일단 끝났다!"라고 말할 수 있는 정도의 상태가 된 것이다.

 

우리 팀에서 나는 프론트엔드(React.js) 전체, 서버(AWS) 배포 및 관리 전체, 스프링 시큐리티(Jwt) 전체 로직 및 일부 백엔드 서비스 로직, 그리고 팀장의 역할을 맡았다.

 

음.. 많이도 했다. 이 정도면 잡부 풀스택이다. 인정? ㅎ 아님 말구요..

그렇다고 내가 덤터기 써서 이렇게 된 것은 아니고, 애초에 우리는 코드스테이츠를 진행하며 배운 걸 복습하고 이것저것 해보자는 취지로 모인 것이였는데, 내가 "아무튼 모였으니 뭐라도 완성은 해야죠 ㅋㅋ "라고 악착같이 밀어붙이며 여기까지 온 것이다보니.. 일을 벌인 내가 많은 책임을 지는 것은 당연한 것이였다.

게다가 우리 모두 코드스테이츠 백엔드 과정에서 모인 사람들이다보니 유일하게 리액트를 할 줄 아는 내가 프론트를 할 수 밖에 없었고..

 

하지만 아무리 내가 퐁당퐁당 밤을 새가며 끌고왔어도, 우리 팀원들이였기 때문에 여기까지 올 수 있었던 것이지 단 한 명이라도 없었다면 여기까지 올 수 없었을 것이다.

반쯤 낚여서 들어왔지만 끝까지 최선을 다해준 우리 팀원들에게 너무 고맙다.

 

 

배운 거 적용해보는 거라고 꼬셔놓고 한 달 동안 안 배운 것만 계속 함 ㅎ

 

 

정말 많은 난관들이 있었다.우선 스프링과 리액트를 쉽게 병행할 수 있을 것이라는 생각부터 큰 착각이였다.자바스크립트 문법 및 리액트 사용법 자체가 거의 기억이 안 나는 것은 어찌어찌 극복했지만 애초에 4명이서 API를 계속해서 찍어내는데 그걸 혼자서 다 처리해서 화면단에 띄운다는 게 ^^.. 보통 일이 아니였다.혼자서 빨리 구현만 하는 게 목표이다보니 사실상 유지보수 같은 건 아예 불가능한 상태로 우다다다 찍어서 만들어냈는데, 그렇게 만들었음에도 불구하고 리액트에 엄청난 시간을 투자해야 했다.

 

특히 지난 주는 거의 일주일 내내 새벽 6시까지 잠도 못자고 컴퓨터 앞에 붙어서 자바 문법이 머리속에서 희미해질 만큼 리액트만 붙잡고 있었는데, 내가 뭐하러 이러고 있나하는 현타가 정말 많이 왔었다.근데 코드 작성량을 보면 현타 올만하긴 했음..

 

 

스프링

 

리액트..

 

아무리 프론트엔드가 html, css 때문에 코드 뻥튀기가 많이되고 내가 중복 코드를 엄청나게 만들어내며 급하게 찍어냈다고는 하지만 백엔드 7,114라인에 프론트엔드 484,452라인 작업 ^^..

 

심지어 이렇게 열심히 작성한 프로젝트가 갑자기 의문사했다 ㅎㅎ

의존성 문제가 어딘가에 묵혀있다가 갑자기 터진 것 같은데, 멀쩡하게 돌아가던 리액트 프로젝트가 너무 피곤해서 30분 쉬고 돌아오니 아예 실행되지 않는 상태가 되었고 git reset --hard로 무려 일주일 분량을 되돌려서야 다시 실행이 되었다.

 

피눈물을 삼키며 코드를 한 줄 한 줄 옮겨 다시 회생시켰지만 도대체 어디서 그렇게 터져버린 것인지 짐작만 할 뿐 정확한 원인은 아직도 모른다. 그저 라이브러리 설치하면 편하다고 아무거나 다 설치했다가는 진짜 주옥될 수 있다는 깨달음을 크게 얻었을 뿐.. 적어도 그 날 작성한 코드가 문제는 아니였던 것 같다. 지금도 멀쩡하게 돌아가는 걸 보면..

 

이외에도 고작 코드 한 줄 달라서 날 3일간 고생시킨 웹소켓 채팅.. 저장 로그는 찍히지만 실제 DB에는 아무것도 쌓이지 않던 RDS.. 아무런 설정도 안 바꿨는데 됐다가 안 됐다가 하던 로드밸런서.. 내 컴퓨터에서는 되는데 남 컴퓨터에서는 안되는 것들.. 주간에는 코드스테이츠 학습, 야간에는 코딩하느라 늘 부족한 수면 시간까지 모든 것들이 고난이였다.

 

 

우리 디스코드에 "왜", "뭐지"로 검색했는데 엄청 많이 나온다 zzz

 

채팅방 올려보면서 느낀 건데 항상 조금만 문제가 있어도 서로 나서서 돕는 모습들이 새삼 감동적이다.

누구 하나 모른 척 넘어간 적이 없군.. 힘들기는 많이 힘들었지만 정말 좋은 사람들과 함께한 한 달이였다.

 

고난들도 결국 모두 나에게 좋은 경험이였다.

리액트를 죽어라 두들긴 덕분에 현재 프리 프로젝트에서 프론트분들과의 의사소통이 굉장히 원활해졌으며, AWS로 온갖 문제를 겪으며 리눅스 환경에도 보다 익숙해졌고, 스프링과 다를 바 없이 서버도 결국 각 단계별로 점검하며 에러 로그를 얼마나 잘 찾아내는지가 가장 중요하다는 것을 배웠다.

또한 백엔드만 알고 있으면 다소 추상적이게 느껴질 수 있는 JWT의 싸이클도 앞부터 뒤까지 모두 혼자 구현하다보니 이제는 망치로 한 대 맞은 직후에 누가 물어봐도 잘 알려줄 수 있을 것 같다. (구현을 잘한다는 말은 아님 ㅎ)

API 스펙을 처음부터 구체적으로 잘 정해놓는 것이 얼마나 중요한지 뼈저리게 깨달았고, 이외에도 디버깅을 신으로 섬기는 디버깅교의 광신도가 되었으며, 프론트랑 백엔드가 왜 서로 뒷담화하게 되는지 배웠다. (ㅋㅋ)

생각보다 리액트에 많은 시간을 투자하게 되어서 스트레스를 받았었지만, 이 경험이 추후 내 성장에 그 만큼 도움이 될 거라고 믿는다.

 

내가 가장 원했던 스프링쪽으로는 큰 발전을 하지 못해 아쉬운 부분이 있지만, 이건 파이널 프로젝트에서 해결하면 될 일이다. 파이널 프로젝트는 정말 스프링에만 모든 시간과 정신을 온전히 쏟을 수 있으니까!

다음 프로젝트는 정말 단순한 기능 구현이 아니라 정말 성능 개선부터 모든 것들을 내가 상상했던만큼 실현해보고 싶다.

 

처음 경험해보는 프로젝트라 정말 애착이 많이 갔었는데 이대로 끝내는 것에 아쉬운 마음이 많이 들지만.. 어쩔 수 없다. 이젠 놓아줄 시간이다.

자그마한 웹서비스의 개발부터 배포까지 한 싸이클을 모두 돌려본 것, 가상의 API나 만들어보던 수준에서 실제 보여줄 수 있는 API를 만들고 직접 화면단까지 구현해본 것, 팀원들만의 협업 경험, 너무 어렵게만 느껴졌던 git과 linux에 나름 익숙해진 것들, 그리고 어떤 거지같은 버그나 에러에도 굴하지 않는 정신력.. 이미 처음 내가 생각했던 것들보다 많은 것들을 뽑아 먹었고, 발전할 수 있는 시간을 가졌다.

 

파이널 프로젝트도 끝나고나면 정말 그 뒤에 한 번 손을 대볼 수도 있겠지만, 지금은 앞에 닥친 일들이 우선이다.

 

이제 정말 끝이라고 생각하니 마음이 몽글몽글하구만.

 

 

 

 

Feedback

 

원래 피드백을 생략했었는데, 배포하고 일주일 동안 느낀점이 많아서 글을 추가하게 됐다.

 

첫 번째로, 가장 크게 느낀 것은 문제가 터지는 모든 부분이 "이 정도는 테스트 안해도 되겠지.."하고 넘어간 부분이라는 것이다.테스트의 중요성을 뼈저리게 느꼈고, 다음 프로젝트는 정말 최소한의 단위까지 생각해서 테스트를 진행해볼 생각이긴 한데..사실 이번에도 시간이 없어서 이렇게 된 거라서 ^^.. 일단 할 수 있는 데까지 더 노력해볼 예정이다.

 

두 번째는, 테스트 코드를 작성하는 것도 좋지만 애초에 테스트 코드를 유지보수하기 쉽게 만들어놓지 않으면 인간의 본능상 절대 매번 그 테스트 코드를 수정하지 않기 때문에, 보다 테스트하기 좋은 설계에 대해 고민하게 되었다.

 

사실 지나고보니 아쉬운점이 너무너무 많다.그 모든 것들을 한 번에 해결한다는 건 말도 안되는 일이고, 다음 프로젝트에서 내가 꼭 시도해보고 싶은 건 쿼리 최적화와 테스트 코드 설계의 개선이다.

 

 

 

 

 

 

--

마지막으로, 클라우드와 리눅스 지식이 부족한 저를 꾸준히 서포트해주신 ㄱㅇ님과 카카오 코테 합격으로 바쁜 와중에도 묵묵히 할 일을 다하신 ㄱㄱ님, 생각과 다른 난이도에 많이 힘들어하시면서도 꿋꿋히 참고 마지막까지 버텨주신 ㅈㅇ님께 다시 한 번 감사합니다.

벌써 세 번 정도 언급하는 것 같지만, 여러분이 아니였다면 완성하지 못했을 거예요! 🙇‍♂️

 

 

 

GitHub - Dev-illage/Devillage: Dev_Village

Dev_Village. Contribute to Dev-illage/Devillage development by creating an account on GitHub.

github.com

 

글 올리고 있는 와중에 또 서버 터져서 다시 살려냄 ㅎ..