[SW사관학교 정글] 나만의 무기를 갖기 프로젝트 회고

Youngeui Hong·2024년 1월 3일
0

🚀 들어가며

끝나지 않을 것만 같았던 나만무 프로젝트가 끝이 났다 🥹

5주 간 엄청 몰입해서 준비했다보니 크래프톤에서의 발표를 마친 후에는 끝났다는 게 실감이 안 났다.

이제 다음 단계로 넘어가기 전에 나만무 프로젝트를 차분히 돌아보고 정리하자!

📸 데모 영상

볼 때마다 저항 없이 웃게 되는 우리 팀 시연 영상ㅠㅠㅋㅋㅋ

중간에 동환 오빠가 브이앱 방송 사고처럼 등장하는 것도 볼 때마다 웃긴다ㅋㅋㅋ

시연을 위해 고생해준 재화, 종호, 호영이에게 박수를 보낸다 👏🏻

🌐 배포하기

우리는 백엔드, 프론트엔드, OpenVidu 서버 이렇게 세 개의 서버를 배포해야 했는데, 배포 과정에서 이런저런 시행착오를 겪었다.

💥 ERR_CERT_AUTHORITY_INVALID

OpenVidu 서버는 AWS EC2에서 도커 이미지를 실행하는 방식으로 배포했다. 그런데 Vercel로 배포한 프론트엔드에서 OpenVidu로 요청을 보내면 ERR_CERT_AUTHORITY_INVALID 에러가 발생했었다. Let's Encrypt로 인증서도 발급 받았는데 왜 인증서 관련 에러가 발생하나 했는데, OpenVidu 서버 주소를 도메인 주소가 아닌 IP 주소로 적은 것이 원인이었다. SSL/TLS 인증서는 도메인과 연결된 것이므로, https 통신에는 도메인 주소가 필수적임을 명심하자.

💌 SSE (Server-Sent Events)

🥲 이벤트 보냈는데... 왜 받지를 못하니?

우리는 정해진 통화시간이 지나면 팬이 다음 영상통화방으로 이동하도록 알림을 보내는 기능이 필요했는데, 양방향 통신이 필요 없는 기능이었기 때문에 소켓 통신 대신 SSE를 사용하기로 했다.

그런데 클라이언트가 간헐적으로 서버가 보낸 이벤트를 받지 못하는 문제가 생겼다. 서버가 보낸 이벤트를 받지 못하면 다음 영상통화방으로 넘어가지 않기 때문에 이는 치명적인 문제였다. 서버 로그에는 분명히 이벤트를 보냈다는 기록이 남아있었다.

문제의 원인은 http 버전이었는데, HTTP/1.1에서 최대로 맺을 수 있는 SSE 연결의 개수는 6개이기 때문이었다. 서버에서 보낸 이벤트가 유실되는 문제는 버전을 HTTP/2로 변경함으로써 해결됐다. 그리고 연결 개수가 초과되는 문제를 미연에 방지하기 위해 페이지를 벗어날 때에는 EventSource를 잘 닫아주도록 했다.

🥸 넣지 못해 아쉬웠던 필터 기능

오프라인 팬미팅에서 아이돌에게 머리띠를 씌워주는 것처럼 필터로 머리띠를 씌우는 기능을 넣고 싶어서 OpenVidu의 FaceOverlayFilter 기능을 사용해서 필터 기능을 구현하려고 했다.

그런데 OpenVidu 공식 문서에 나와 있는 대로 코드를 작성했는데도 자꾸 org.kurento.client.internal.server.KurentoServerException: 'offsetXPercent' parameter should be a double (Code:40001, Type:null, Data: {"type":"MARSHALL_ERROR"})이라는 에러가 발생했다.

number 타입으로 전달했는데도 계속 타입 에러가 발생하는 것이 이상하다 싶어서 OpenVidu 쪽 코드를 살펴봤는데, json을 파싱하는 부분에서 잘못된 부분이 있음을 발견했다. Kurento 서버에 Double 타입으로 보내야 하는데 String 타입으로 파싱해서 보내고 있었던 것이었다.

그래서 fromJsonObjectToProps 부분 코드를 수정해서 도커 이미지를 만들고, OpenVidu에서 제공하는 도커 이미지 대신에 우리의 도커 이미지로 배포해보았다. 그랬더니 필터 기능이 드디어 정상 작동함을 확인할 수 있었다!

그런데 문제는 필터 기능이 되니 반대로 녹화 기능이 제대로 동작하지 않았다... fromJsonObjectToProps를 녹화 기능에서도 사용하다보니 발생하는 문제인 것 같았다. 프로젝트 마감까지 시간이 얼마 남지 않은 상황이어서 결국 필터 기능은 빼기로 결정했다 😢

필터 기능을 넣지 못해서 아쉽긴 했지만, 오픈소스 코드를 수정하는 경험을 해볼 수 있어서 좋았다. 중요한 일정이 끝나고 나면 다른 기능들도 제대로 동작할 수 있게 fromJsonObjectToProps를 수정해서 OpenVidu에 PR을 날려보고 싶다.

👋 안녕 나만무

빡센 일정에 힘들긴 했지만 나는 나만무를 진행했던 기간이 정글에서 가장 즐거웠던 시간이었다. 그래서 나만무가 끝났을 때 조금 헛헛했던 것 같다ㅠ

나만무를 하면서 내가 만들고 싶은 서비스를 만드는 게 굉장히 즐거운 경험임을 느낄 수 있었다. 아이돌에 관심 많은 덕후들이 모여서 "이런 기능 있으면 좋지 않을까?" 얘기하면서 만드는 과정이 즐거웠고, 나도 모르게 퀄리티에 욕심이 생겨서 밤을 샜던 것 같다.

그리고 5주간 팀원들이랑 부대끼며 개발하면서, 팀원으로서의 나는 어떤 모습인가에 대해서도 많이 돌아보게 되었다. 이번 프로젝트를 하면서 배운 점은 '내가 생각한 방법이 정답이 아닐 수 있음을 항상 명심하자'였다. 고생해서 코드를 작성하다 보면 내가 작성한 코드에 이상한 애착(?)이 생겨서 더 나은 방법이 있음에도 그걸 모를 때가 있었다. 근거 없는 똥고집을 부리지 말도록 하자.

마지막으로 상언이, 가람오빠, 재화, 호영이, 종호 모두 고생 많았고, 좋은 추억 남길 수 있게 해줘서 진심으로 고맙습니닷 🫶 모두 승승장구하는 2024년이 되길!

2개의 댓글

comment-user-thumbnail
2024년 1월 4일

안녕하세요 정글 1기 출신 강민규입니다. 7기도 이제 끝이 났군요. 정글 수료생 단체 톡방이 있는데 7기 분들도 초대드리고싶어요.
연락은 이쪽으로 주시면 됩니다! https://www.linkedin.com/in/%EB%AF%BC%EA%B7%9C-%EA%B0%95-b22498157/

1개의 답글