-
Notifications
You must be signed in to change notification settings - Fork 1
희선's 6주 회고
프로젝트를 시작하며 프로젝트가 끝난 후 개발자로 나아갈 나를 상상하면서 목표를 세웠습니다. 부스트 캠프 이전에 프로젝트 경험과 취업 준비 경험이 있었는데, 당시 프로젝트 경험을 취업 준비 과정에 녹여내며 아쉬웠던 점을 기반으로 세 가지 목표를 세웠습니다.
프로젝트 경험을 포트폴리오에 녹여내는 경험에서 부터 세운 목표입니다. 협업으로 개발을 진행하고, 기능 개발을 분업하다 보니 다른 사람이 구현한 기능을 잘 이해하지 못해 어려움이 있었습니다. 이번 프로젝트에서는 내가 구현하지 않은 부분까지도 다른사람들에게 잘 설명할 수 있도록 프로젝트 전체적인 코드를 파악하고 있는 것이 목표였습니다.
마찬가지로 이전의 프로젝트 경험을 포트폴리오에 녹여내면서 겪었던 어려움으로 부터 세운 목표입니다. 프로젝트의 순간에는 내가 어떤 경험을 했고 어떻게 구현하였는지 잘 기억 나지만 시간이 흐르면서 휘발되었습니다. 저는 문서화가 습관이 되어있는 사람이 아니라고 생각했기 때문에, 이번 프로젝트에서는 특히 문서화를 신경쓰면서 나의 경험과 성장 과정을 잘 남겨보자는 목표를 세웠습니다.
부끄럽지만, 이전에 저는 프로젝트를 경험하면서 기술 선택이나 기능 구현을 할 때 “왜 이렇게 구현했어?” 라고 질문을 받으면 “다들 이렇게 하길래”라고 답변할 만한 경험들이 많았습니다. 부스트 캠프 과정을 겪으면서 제가 얼마나 얕게 학습하고, 프로젝트를 경험했는지 깨닫게 되었고 이번 프로젝트에서는 모든 경험에 근거를 갖추어서 제가 구현한 코드에 대해 자신있게 이유를 설명할 수 있는 사람이 되고 싶었습니다.
이 목표는 거의 80% 이상으로 달성한 것 같습니다. 저희 팀원들은 핵심 기능 개발을 페어프로그래밍으로 함께 진행했는데 그 덕분에 구현된 대부분의 코드를 이해하고 있고, 구현 흐름을 잘 이해하고 있게 된것 같습니다. 또한, 분업을 해서 개발한 부분도 팀원들의 pr을 잘 살펴보고 궁금한 것을 질문하며 모두 이해하려고 노력했던 것이 좋은 성과를 보인 것 같습니다.
이 목표는 사실 아쉬운 부분 중 하나입니다. 아무래도 6주라는 기간 내에 기획, 개발까지 이루어져야 해서 시간에 쫒기다 보니 경험을 문서로 남기는 것을 잘 하지 못했던것 같습니다. 그래도 제가 했던 학습과 개발 경험을 키워드나 목차 형식으로 기록을 해 두었고, 프로젝트가 마무리 되고 휘발되기 전에 모두 채워나가며 복습을 할 계획입니다.
좋은 팀원들을 만나 모든 선택에 근거를 가지게 되는 경험을 한 것 같습니다. 기능을 구현할때도, 기술을 선택할때도 저희 팀원들은 여러가지 가설이나 장점들을 나열해보면서 토론을 하고 근거있는 선택을 했습니다. 덕분에 프로젝트 구현 과정에서 “왜”라는 질문을 받았을때 잘 대답할 수 있게 된 것 같습니다.
프로젝트에서 VPC와 서브넷 등 클라우드 세팅도 직접 해보고, Docker와 Git Actions, NGINX를 사용해서 직접 배포 환경도 구축 해보며 백엔드 인프라에 대한 지식이 많이 늘어난 것 같습니다. 또한, 스트리밍 프로젝트 특성 상 포트와 프로세스, 프로토콜에 대해서 많이 다루게 되었는데 그 과정에서 네트워크 지식도 많이 얻어갈 수 있었습니다.
프로젝트에 사용한 mediasoup, ffmpeg, nest, typeorm 등 많은 기술이 저에게는 모두 새로운 기술들이었습니다. 새로운 기술을 빠른 시간내에 학습하여 내것으로 만들고, 이를 코드에 적용하여 기능을 구현해 내는 역량을 얻게된 것 같습니다. 단 시간에 처음 접하는 기술을 빠르게 적용하기 위해 어떻게 학습해야 하는지도 배울 수 있었습니다.
협업을 진행하면서 팀원들과 의견 차이가 있을때 서로를 설득하는 과정을 많이 경험했습니다. 그 과정에서 제 생각을 근거를 기반으로 정리하고, 다른 사람을 설득하기 위해 말로 설명하는 역량을 키울 수 있었습니다.
현재 저희 프로젝트는 mediasoup을 사용하여 sfu 서버를 구현하였습니다. 프로젝트가 끝난 후 webRTC에 대해 더 깊게 학습하고자 sfu 서버를 webRTC로 직접 구현해보고 싶다는 욕심이 생겼습니다. 그 과정에서 mediasoup을 사용해서는 잘 이해하지 못했던 webRTC 동작 과정에 대해 딥다이브 하고 싶습니다.
프로젝트를 하면서 인프라 지식을 많이 쌓을 수 있었지만 아직도 부족하다는 생각이 들었습니다. 특히 네트워크를 깊게 학습 해봐야 겠다는 생각을 했습니다. 프로젝트를 마무리 하고 학습 계획을 세워 부족한 부분을 더 채워나가고 싶습니다.
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios