싸피 2학기의 첫 프로젝트, 공통 프로젝트가 끝났습니다.
(사실 2주 전에 끝났는데 이제서야 회고를 작성합니다...)
01. 서비스 개요
프로젝트 주제는 협업능력 포트폴리오 제작 서비스였습니다.
Collaborate와 IT를 합쳐 만든 서비스명, Collabit!
서비스의 핵심 기능은 크게 3가지로,
Github 프로젝트를 등록하고,
팀원들이 나의 협업 능력에 대한 AI 설문에 참여해주면,
그 설문 결과를 바탕으로 리포트를 생성해줍니다.
02. 역할
1) 팀장
팀원들을 처음 모으면서 자연스레 팀장을 맡았습니다.
중재를 잘한다는 점이 장점으로 작용했고,
그에 비해 결단을 빠르게 내리지 못한다는 점이 아쉬웠습니다.
이번 특화 프로젝트에서도 팀장을 맡았는데 이제는 결단을 잘 내리기 위해 노력 중입니다.
2) 백엔드 리드
팀원 중 (아마도) 백엔드 경험이 가장 많아 리드를 맡았습니다.
인원 변동으로 인해 백엔드 작업을 많이 하지는 못했지만,
오히려 그래서 리드를 맡아 다행이라는 생각이 들었습니다.
직접 개발에 참여하진 않더라도 계속 모니터링하고 코드리뷰를 하면서
백엔드 파트의 전체적인 방향성을 결정할 수 있었습니다.
3) 프론트
6명으로 시작한 프로젝트에서 한 명이 개인 사정으로 빠졌습니다.
5명이 된 팀에서 프론트엔드는 오직 한 명.
백엔드 팀원 중 유일하게 리액트를 다룰 줄 알았어서 프론트 개발에도 함께 참여했습니다.
tailwind, typescript, Next 모두 프로젝트에서 사용하는 건 처음이었지만,
한 명 뿐인 프론트 팀원에게 피해를 주지 말자는 생각으로 프로젝트 초기에 개인 학습을 많이 했습니다.
그래도 1인분은 해내지 않았나..? 생각합니다.
4) 발표
중간 발표와 최종 발표를 맡았습니다.
프로젝트에 열심히 참여한 만큼 발표에서도 이걸 잘 보여주고 싶었습니다.
마지막에는 PPT 제작에 심혈을 기울였는데,
팀원들 앞에서 PPT를 보여주고, 직접 발표를 한 뒤 피드백을 받는 과정을 거쳤습니다.
그 덕에 군더더기 없는 최종 발표가 되지 않았나 싶습니다.
03. 기술스택
1) MySQL + MongoDB + Redis
이번 프로젝트에서는 데이터베이스를 다양하게 사용했습니다.
복잡한 조인이 필요한 테이블들은 MySQL에,
설문 내용 raw 데이터나 채팅 메시지, 포트폴리오 데이터 등은 MongoDB에,
Pub/Sub 및 캐싱, SSE와 블랙리스트 처리 등을 위해 Redis까지.
처음 사용해보는 DB를 익히는 데 시간이 소요되었지만 데이터에 맞는 적절한 DB를 잘 선택한 것 같습니다.
2) Next.js + Typescript + TailwindCSS + TanstackQuery
놀랍게도 이 4가지 모두 이번 프로젝트에서 처음 사용해보았습니다.
React는 이미 학습했었지만 당시 프로젝트에서는 SCSS와 Javascript를 썼었습니다.
새로 익혀야 할 것이 아주 많았지만 다 사용하게 된 이유가 있습니다.
커뮤니티와 리포트의 SEO 최적화를 위해 Next.js를 사용했고,
Shadcn/ui 컴포넌트 활용을 위해 Typescript를,
페이지가 많은 상황에서 css 파일을 따로 만들지 않고 스타일을 적용하기 위해 tailwind css를,
데이터 캐싱을 통해 사용자의 경험을 향상하기 위해 Tanstack query를 사용했습니다.
3) Spring Boot + JPA + Spring Security + WebSocket + SSE
서버 개발은 기본적으로 스프링부트로 진행하였고, JPA를 활용했습니다.
직접 쿼리문을 작성하지 않아도 되어 편리했지만 복잡한 조인이 있을 때 살짝 불편한 부분도 있었습니다.
JWT 토큰은 쿠키를 통해 관리하고 레디스로 블랙리스트 처리를 했습니다.
채팅 기능은 WebSocket의 STOMP와 Redis Pub/Sub을 활용해 구현하였습니다.
4) Flask + HuggingFace
Open API를 쓸지 고민하다가 무료로 사용할 수 있는 허깅페이스를 골랐습니다.
AI 챗봇 설문과 강약점 분석 등 리포트 데이터 생성을 할 때는 flask를 통해 접근하도록 했습니다.
사실 이 기능은 제가 맡은 건 아니었지만 이때 옆에서 곁눈질로 본 코드 덕에
지금 특화 프로젝트에서 파이썬을 활용해 개발을 하고 있습니다.
5) EC2 + RDS + S3 + Docker + Nginx + Jenkins
인프라는 싸피에서 제공하는 EC2에,
인프라 담당자의 프리티어를 활용한 RDS, S3를 사용했습니다.
CI/CD 구축을 위해 Jenkins를 활용하였습니다.
Gitlab webhook을 통해 자동으로 빌드되도록 파이프라인을 3개로 만들었습니다.
프론트, 서버, AI서버 이렇게 3가지로 나누어 따로 관리했습니다.
04. 회고
1) 새로운 기술에 도전했던 시간
이번 프로젝트에서는 저를 포함한 많은 팀원이 새로운 기술에 도전했습니다.
항상 새로운 기술을 도입할 때는 이유가 있어야 한다는 생각에서 출발해
기술을 사용하는 이유를 항상 고민해보고 정말 필요하다고 느끼면 도입을 했습니다.
결과적으로 이러한 고민 덕에 오버엔지니어링을 피할 수 있지 않았나 싶습니다.
2) 팀장의 자질이란
팀장으로서 잘한 일도 있지만 아쉬웠던 점도 있습니다.
팀원 사이의 갈등 중재나 방향성 설정은 잘 해온 것 같지만,
팀장이라는 역할에서 발생하는 감정 소모로 인해 힘든 부분도 있었습니다.
결정을 최종적으로 내릴 때도 최대한 모든 팀원의 의견을 들으려 하는데,
종종 그 의견이 상충할 때 이렇게 하자! 라고 결단을 내리기 어려웠던 부분도 있었습니다.
이렇게 아쉬움을 느꼈던 부분은 지금 다시 팀장을 맡으면서 개선하려고 노력 중입니다.
가능하다면 자율 때까지 팀장을 맡으면서 점점 더 발전할 수 있으면 좋겠습니다.
3) 나는 어떤 개발자일까
백엔드 개발자를 희망하지만 이번 프로젝트에서는 팀 전체의 목표를 위해 프론트까지도 맡았습니다.
컨설턴트님께 이 부분에 대해 조언을 구한 적이 있습니다.
백엔드 신입이라고 해서 프론트를 해본 경험이 나쁜 건 아니다,
협업 할 때 다른 팀을 이해할 수 있다는 점에서 좋은 경험이라는 말씀을 해주셨습니다.
그렇다고 해서 백엔드 지식이 부족하면 안되겠지만,
이번 프로젝트에서 프론트까지 맡게 된 걸 후회하지는 않습니다.
오히려 백엔드 입장에서 프론트에게 API를 넘길 때 어떻게 줘야하는지 몸소 경험할 수 있는 시간이었던 것 같습니다.
신입에게는 어울리지 않는 단어지만 언젠가 풀스택 개발을 하기에도 도움이 되지 않을까 싶네요.
이제는 공통 프로젝트가 끝나고 2주가 지나 특화 프로젝트를 진행하고 있습니다.
운이 좋게도 삼성 연계 프로젝트에 참여할 수 있는 좋은 기회를 얻었습니다.
공통 프로젝트에서 배운 점을 토대로, 그리고 아쉬운 점을 개선하면서 특화 프로젝트 화이팅!
'Programming > SSAFY' 카테고리의 다른 글
[SSAFY] SSAFY 1학기를 마무리하며, 1학기 회고 (7) | 2024.12.12 |
---|---|
[SSAFY 12기] 싸피 12기 최종 합격, 비전공자 에세이부터 면접까지 (1) | 2024.06.20 |
[SSAFY 12기] 싸피 12기 비전공자 지원서 접수, SW적성진단 공부법 (1) | 2024.05.11 |