1. 어떤 프로젝트를 만들었는가?
우리 팀의 프로젝트 주제는 1:1 랜덤 채팅 앱이다.
위와 같은 Stack으로 구현했으며, 실제 웹에서의 작동 과정은 다음과 같다.
주요 기능은 Github 레포지토리에 자세히 정리해두었으니 참고해주시기 바란다.
2. 왜 채팅 앱을 만들었는가?
First Project에 대한 발표까지 마치고 난 이후 주말에, 프로젝트 아이디어에 대해서 많은 고민을 해보았다.
First Project 회고에서도 적었듯이, 팀원 모두가 해당 주제에 대해서 공감하고, 또한 팀원 모두가 개발하면서 즐거워 할 만한 아이디어를 찾고 싶었다.
그러던 중, 이런 유튜브 영상을 찾아보게 되었다.
이 영상을 보고 챗봇에 큰 관심이 생겼다.
이걸 직접 구현할 수 있다면 무척 재미있는 과정이 될 것 같았고, 다른 포트폴리오의 프로젝트들과도 차별점을 가져갈 수 있겠다는 생각이 들었다.
그렇게 사실 처음에는 1:1 랜덤 채팅이 아닌, 챗봇에 큰 관심을 갖게 되었고, 여기에 챗봇과 더불어, 1:1 채팅 기능을 넣어보자는 생각을 하게 되었다.
불행인지 다행인지, Final Project의 팀원분들은 처음 프로젝트 아이디에이션 단계에서 이 주제를 마음에 들어하셨고, 이를 토대로 SR 기획 단계를 이어나가게 되었다.
하지만 첫 주 목요일, SR에 대한 피드백을 받을 때, 담당 엔지니어 님이 챗봇 같은 AI 구현은 상당히 힘들 것이니, 1:1 채팅 구현에 힘써보자고 하셨고, 이에 따라 1:1 랜덤 채팅 앱을 제작하게 된 것이다.
3. 팩폭 - 채팅 말고 뭐 다른 건 없는가?
채팅 앱 구현을 위해서 정말 많은 공부를 했다.
웹소켓이나 STOMP, Sock JS, socket.io 등 모르는 것이 너무 많아서, 프로젝트 기간 내에서도 선행 학습 기간을 가져야만 했고, 공부를 한다 해도 이를 어떻게 코드로 구현할지 참 막막했다.
다행히도, 'Spring과 React로 채팅 구현하기'에 대한 키워드로 어찌저찌 검색하다보니 유용한 블로그 글들을 찾아볼 수 있었고, 이를 기반으로 채팅 로직을 구현해낼 수 있었다.
하지만 이러한 일련의 과정에 시간 소모가 꽤나 많이 발생했다.
특히, 클라이언트와 서버의 연동 테스트가 매끄럽게 진행되지 못했다.
아직 채팅 앱 구현 자체가 처음이다보니, 어떤 문제가 발생해도 이게 클라이언트 문제인지, 서버 문제인지 분간해내기가 어려웠다.
그래도 끊임없이 팀원들끼리 서로 의사소통하면서 문제를 해결해나갔지만, 시간 소모가 많이 되었다보니, 채팅 외에 나머지 기능이 너무 부실한 것이 사실이다.
그렇기 때문에 사실, 아쉬움이 많이 남는 프로젝트였다.
Final Project에 대한 발표 이후에, Job Searching 세션이 진행되었는데, 교육 엔지니어 님이 이런 말씀을 해주셨다.
좀 더 기본에 충실했으면 하는 생각이 들었습니다.
코드스테이츠의 31기와 32기에게 전체적으로 해준 말씀이었지만, 정확히 우리 팀에게 전하는 말처럼 들려서 뜨끔했다.
솔직히 후회가 좀 들기도 한다.
그냥 CRUD 위주의 프로젝트를 만들면서 대신 키워드 별 조회 기능을 디테일하게 강화한다던가, 무한 스크롤 및 페이징을 좀 제대로 구현해보면 어땠을까 하는 생각이 든다.
First Project 때 기본적인 CRUD 위주의 프로젝트는 충분히 경험했지만 위의 2가지 로직은 디테일하게 구현해보지 못했던 것이기 때문에, 프로젝트를 개발하면서 점진적인 성장을 원한다면 채팅 앱은 좀 더 나중에 만들어봤으면 어땠을까 하는 생각이 드는 것이다.
4. 팩폭2 - 핵심 기능인 채팅도 좀 아쉬운데?
이번에 채팅 앱에 대해 많은 공부를 해보면서, 그 구현 방식에 또한 여러 가지 방법이 있을 수 있으며, 또한 여러 가지 도구들을 활용할 수 있다는 사실을 깨닫게 되었다.
그렇게 알아가다보니 우리가 구현한 로직이 꽤나 허술한 로직이라는 것을 알 수 있었다.
우선 Redis의 pub/sub을 활용한 부분부터 살펴보도록 하자.
프로젝트 발표 때는 Redis를 사용한 이유에 대해서 말할 때, Memory DB의 특성을 살린 빠르고 간편한 pub/sub 기능 구현을 위해 사용하였으며, Redis의 메시징 기능에 로그가 남지 않는다는 부분에 대해서도 '저희 1:1 랜덤 채팅에서는 채팅 로그를 굳이 추적할 필요가 없다'는 식으로 설명했다.
하지만 여기에서나마 허심탄회하게 이야기해보자면, Redis를 안 쓰는 게 맞았던 것 같다··· 😂
일단 Redis는 메시징 시스템이라고 보기가 어렵다고도 한다.
다른 전문적인 메시징 시스템에 비해서 가져올 수 있는 장점이 그리 많지도 않고, 오히려 단점이 너무 크게 다가온다.
우리 팀은 솔직히 간편하게 구현할 수 이유로 Redis를 사용했고, 이 부분에 대해서 후회하고 있다.
이 때문에 다음에 꼭 다시 Kafka나 RabbitMQ를 사용해서 채팅 앱을 다시 구현해보고 싶다는 생각이 든다.
그리고 코드스테이츠의 담당 엔지니어 님이 socket.io를 안 쓴 이유에 대해서 물어보셨는데, 나는 여기에서 또 말문이 턱 막힐 수 밖에 없었다.
Spring의 WebSocket과 socket.io는 또 다른 것인가?
이 부분에 대해서는 아직도 많이 헷갈리기 때문에 나중에 꼭 다시 정리해서 블로깅을 해야만 하겠다.
어쨌든, 이 부분에 대해서 담당 엔지니어 님이 설명해주실 때, socket.io를 활용하게 되면 서버의 부담을 훨씬 더 줄여줄 수 있다고 해주셨다.
안그래도 채팅 앱 로직을 구현하니 서버가 자주 다운되는 현상을 보였는데, 이 부분도 반드시 공부해서 적용해야만 한다.
WebRTC를 또 어떻게 활용해볼 수 있을지에 대한 의문점도 든다.
WebRTC를 활용하면 Peer to Peer 방식을 이용하기 때문에 서버와 연결을 유지할 필요가 없어지는데, 이러한 로직을 구현하려면 아직 한참은 더 공부해야 할 것 같다. 😓
그리고 마지막으로 서버와 클라이언트 연동이 상당히 매끄럽지 못했던 점이 너무 마음에 걸린다.
우리가 맞닥뜨렸던 상황은, 채팅방으로 여럿이 채팅하는 로직에서 1:1 랜덤 채팅으로 로직을 변경하면서 생긴 이슈인데, 자꾸만 클라이언트에서 의도하지 않은 접속 및 연결 해제 과정을 반복적으로 하게 되는 이슈였다.
해당 부분은 session이 존재하지 않는 접속에 대해서 예외처리를 해버리면서 일단락지었지만 뭔가 상당히 찝찝하다.
따라서 추후 채팅 앱을 다시 구현해보면서 이를 다시 고쳐볼 생각이다.
5. 무엇을 깨달았는가?
우선, 우리 팀의 프로젝트는 너무 이상을 쫓지 않았나 싶다.
Final Project는 말 그대로 취업을 위한 프로젝트이다.
이는 팀원 모두에게 동일한 목표이다.
따라서 이에 맞는 현실적인 아이디에이션 및 목표치가 있었어야만 했다는 생각이 든다.
그리고, CRUD 구현은 이제 어느 정도 익숙하다고 생각했었는데, 다른 동기들의 프로젝트 발표를 보다보니 또 생각이 달라졌다.
키워드에 따른 조회 기능 강화, 페이징, 무한 스크롤 등 CRUD 위주의 앱에서도 아직 해보지 못한 도전과제들이 아주 널려 있었다는 점을 간과했다.
이러한 깨달음과 더불어서, 스스로가 좀 더 겸손해질 필요가 있다고 느꼈다.
나 스스로가 꽤나 만족할 만한 성장을 경험한 것도 물론 사실이지만, 아직도 한참 멀었다.
나는 이미 어느 정도 구현해 본 로직들에 대해서는 너무 경솔해지는 경향이 있다.
이미 구현해 본 경험이 있는 로직에 대해서도 depth를 더 파볼 필요가 있다.
지금의 나는, detail이 너무 부족하다.
6. 마무리
이번 회고는 전반적으로 뭔가 너무 네거티브한 말들이 많은 것 같다.
하지만 프로젝트를 만드는 과정 자체는 꽤나 재미있었고, 확실히 전에 경험해보지 못한 새로운 기술에 도전해보는 맛이 있었다.
다만 시간에 대한 압박감이 좀 있었고, 앞으로 이 프로젝트로 취업을 제대로 해낼 수 있을 지가 두려움이 있을 뿐이다.
상황이 이렇다보니 자신감이 다소 낮아진 감이 없잖아 있는데, 싸움은 지금부터다.
Back-End 개발자로서의 첫 취업을 위해, 정신 놓지 않고 나의 경쟁력을 높이기 위한 싸움을 계속하자.
'Essay > Code States' 카테고리의 다른 글
코드스테이츠 졸업생 알럼나잇 후기 <따뜻하게 이어지는 코연> (0) | 2023.02.24 |
---|---|
Code States 전체 후기 <이젠 정말 취업 뿐이야!> (6) | 2021.11.21 |
First Project <연습으로써 충분했지만 그래도 많이 아쉬운> (0) | 2021.10.15 |
Section 3 <어느새 100일> (0) | 2021.09.29 |
Section 2 <개발하는 즐거움에 대해서> (2) | 2021.08.19 |