1. 어려웠던 부분 : 오늘은 기능구현엔 크게 어려운 부분은 없었다. 백엔드에선 처음 기획했던 부분 코드구현은 어느정도 마무리 되었고, Redis DB와 연결도 성공한 상태라 내일 있을 기술멘토링에 필요한 부분을 정리한 하루였다. 아직까지 WenSocket과 WebRTC 그리고 미디어서버에 대한 개념이 확실하지 않은 상태라 우리 서비스에 가장 적합한 건 어떤걸까 라는 주제로 많은 대화를 나눠보았다.
우리가 가장 궁금한 부분은 최대 4명이 화상채팅을 사용한다고 가정했을 때 시그널링 서버(Mesh)를 사용하는 방법이 좋을지 아니면 OpenVidu 와 같은 미디어 서버를 사용하는 SFU 방식이 좋을지에 대한 내용이었다. 최대한 서버에 부하가 덜 가고 실시간성이 보장되는 Mesh방식을 사용하고 싶은데 클라이언트에 과부하가 얼마나 될지 감이 오질 않아서 이 부분을 내일 멘토링때 여쭤보기로 했다.
Mesh의 경우 다음과 같은 장점과 단점이 있다.
- 장점
- 서버의 부하가 적기 때문에 서버 자원이 적게 든다.
- peer간의 직접 연결로 데이터를 송수신하기 때문에 실시간 성이 보장된다.
- 단점
- N:N 혹은 N:M 연결에서 클라이언트의 과부하가 급격하게 증가한다.
그리고 SFU 는 다음과 같은 장점과 단점이 있다.
- 장점
- 데이터가 서버를 거치고 Signaling 서버(P2P 방식)를 사용할 때 보다 느리긴하지만 비슷한 수준의 실시간성을 유지할 수 있다.
- Signaling 서버를 사용하는 것보다 클라이언트가 받는 부하가 줄어든다.
- 단점
- Signaling 서버보다 서버 비용이 증가한다.
- 대규모 N:M 구조에서는 여전히 클라이언트가 많은 부하를 감당한다.
우리가 준비한 질문들 ↓
- GameSet에서 발언권이 바뀔 때 마다 DB에 접근을 해야될 것 같은데 속도나 효율성 때문에 Redis를 사용하고자 하는데 방향성이 맞을까요?
- 한 방에 정답이 최대 4개인데 키워드 리스트를 Json화 시켜서 문자열로 DB에 저장을 했는데 이거를 다시 검증하려고 하면 배열화 시켜야하는 번거로움이 있는데, 조금 더 효율적인 방법이 있을까요?
- 실무에서 flush / clear를 사용할 일이 별로 없다는데 잘 이해가 안됩니다….ㅠㅠ (데이터를 DB로 보내는 다른 방법: 트랜잭션 commit() / JPQL로 만들어진 Query 실행) → 디엠으로 코드 보내드리기
- queryDSL 예시를 찾아보던 중에 여러 queryDSL문 생성 후에 마지막에 flush / clear 로 DB에 저장하는 사례가 많았는데, 이 방법이 DB 접근을 최소화하기 위한게 맞을까요?
- Redis가 메모리 파편화 때문에 생각보다 많은 메모리를 차지하는데, Redis 메모리를 효율적으로 사용하는 방법이 있을까요?
- WebRTC를 시그널링 서버를 구축하는 방향으로 구현은 성공했는데 최대 4명의 유저간 통신이 이루어지는 저희 서비스에서도 SFU 서버 통신을 고려해야 할까요?
2. 느낀 점 : 좋은 팀원들을 만나서 진행도 수월하고, 또 진행되는 프로젝트에 필요한 개념들을 같이 공부하고 의견을 나눌 수 있어서 너무 좋다. 프로젝트를 시작했을 때, 단순히 기능구현에만 집중하지 않고 우리는 개념들을 깊게 파보고 연구해보자고 했었는데 말한대로 다같이 여러 기술들을 공부하면서 진행이 되는 것 같다 : )
3. 새로 알게 된 내용 : GameStartSet 부분을 Redis DB를 사용해 저장하는 방법을 팀원분을 통해 배울 수 있었다. 내가 구현한 코드에도 내일 적용해 봐야 겠다! 그리고 queryDSL 사용법도 공부했다. 아직 사용해보진 않았지만 대략적인 느낌은 알 수 있었다.
4. 셀프칭찬 (오늘 잘한 일) : 새로운 개념을 공부하고 의견을 나눈 하루, 아직 많이 부족하지만 그래도 하루하루 성장하고 있는 것 같다.
5. 내일 할 일 : 기술멘토링 / 피드백 받은 부분 수정하기 / 필요한 부분 Redis DB 저장하는 걸로 변경하기 / 코드 전체적으로 리팩토링 (간결화/ 통일화)
[오늘 공부한 부분]
- 코드 주석달기
- 팀원들이랑 게임에 사용될 키워드 DB 채우기 ( 너무 재밌었다 ㅋㅋ 다들 만화 덕후들이었음 )
- 코드 리팩토링
- 게임 API 구현 마무리
'TIL (Today I Learned)' 카테고리의 다른 글
[57] WIL 실전 프로젝트 1주차 회고 (0) | 2023.01.08 |
---|---|
[56] TIL 기술멘토링 / 피드백 반영하기 (0) | 2023.01.07 |
[54] TIL 게임시작 API / queryDSL (0) | 2023.01.06 |
[53] TIL 웹소켓 연결 성공/Redis 설치 및 사용 (0) | 2023.01.05 |
[52] TIL 카카오로그인 FE랑 맞춰보기/ Pagination + 검색기능 (2) | 2023.01.03 |