방에 입장한 사람 수를 셀 때, socket 서버에서의 수, client에서의 수, DB에서의 수가 동기화되어야 한다.
client에서 방 입장과 방 퇴장 API를 요청할 때마다 DB에서 인원수를 업데이트를 해주는 방식으로 진행을 했다. 이 경우 동기화가 깨질 수 있는 상황들이 존재했다.
client에서의 API 요청이 아니라, socket서버에서 발생하는 이벤트에 따라 DB에 접근하여 인원 수를 업데이트해주는 방식으로 변경했다. 이를 통해 socket에 연결되고 연결해제되는 다양한 상황들에서 인원수를 동기화할 수 있었다.
비밀방, 링크 공유 및 초대 기능
링크로 들어왔을 때 로그인 거쳐야 함
입장 가능한 방 보기 토글
무한 스크롤
테스트 코드 통과 후 자동 배포하는 기능 (CI/CD 보완)
영상 통화 서비스의 불안정성 해결
Peer.js 검토
구글 애널리틱스로 사용자 통계
구글폼을 통한 사용자 피드백 받기
영상과 타이머 싱크 개선
여러 기기에서의 호환성(모니터 크기, 아이패드)
it('내가 일주일에 몇 일 운동했는지 알 수 있다.', async () => {
// 두 날짜 사이의 랜덤 날짜 생성 함수
function randomDate(start, end) {
return new Date(
start.getTime() +
Math.random() * (end.getTime() - start.getTime())
)
}
const weekStart = moment().startOf('isoWeek').toDate()
// 5개의 랜덤 데이터
const recordsDays = []
for (let i = 0; i < 5; i++) {
const record = await WorkOutTime.create({
userId,
createdAt: randomDate(weekStart, new Date()),
})
recordsDays.push(record.createdAt.getDay())
}
const countPerWeek = new Set(recordsDays).size
const response = await request(app)
.get('/myinfo/statistics')
.set('Authorization', 'Bearer ' + token)
await WorkOutTime.deleteMany({ userId })
expect(response.body.countPerWeek === countPerWeek).equal(true)
})
https://velog.io/@fancyer/MongoDB%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C