- WebRTC P2P 연결을 위한 시그널링 채널 구현
- 로그인·회원가입: JWT 기반 인증 및 세션 관리 로직 개발
- 사진 업로드: AWS S3 업로드 기능 담당
-
문제 상황
WebRTC 연결이 일정 시간 뒤 주기적으로 끊기는 현상이 발생.
원인은 정확히 특정하기 어려웠지만,- 세션 관리 누락
- heartbeat 프레임 불일치
두 가지 가능성을 의심함.
-
내가 확인한 부분
- 서버에서 STOMP heartbeat를 30초 주기로 설정하고, heartbeat 프레임 수신 시
updateConnection()을 호출해 세션을 갱신하도록 구성됨. - 1분 이상 heartbeat가 없으면 서버가 DISCONNECT 이벤트를 발생시켜 연결을 종료함.
- ICE 연결 상태가
"failed"일 경우 ICE restart를 트리거하여 재연결을 시도하는 로직도 확인함.
- 서버에서 STOMP heartbeat를 30초 주기로 설정하고, heartbeat 프레임 수신 시
-
해결 방법
- Heartbeat 처리 강화: 클라이언트와 서버 양쪽에서 heartbeat 송수신을 보장하고, 수신 시
lastActivityTime을 갱신하도록 수정 - 세션 관리 보완:
ConcurrentHashMap기반으로 활성 세션을 관리하고,updateConnection()이 누락되지 않도록 주기적 호출 - 재연결 로직 적용: ICE 연결 실패 시 자동으로 ICE restart를 트리거하여 재연결 시도
- Heartbeat 처리 강화: 클라이언트와 서버 양쪽에서 heartbeat 송수신을 보장하고, 수신 시
-
결과
- 일정 시간 이후에도 WebRTC 연결이 안정적으로 유지됨
- 이전에 발생하던 주기적 연결 끊김 문제가 크게 완화됨
-
문제 상황
WebSocket 연결 시 단순 세션 ID만으로 사용자를 구분하기 어려움 → 인증된 사용자 식별 필요 -
해결 방법
- STOMP CONNECT 요청 시 JWT 토큰 검증을 수행
- 토큰에서 추출한 사용자 정보를
UserSessionService에 저장하여 이후 signaling 메시지 처리 시 사용자 식별 가능
SSAFY 12기 2학기 특화 프로젝트 도메인 인공지능(영상)
온디바이스AI를 이용한 요가 교육 어플리케이션입니다.
요가요는 온디바이스 AI 기술을 활용하여 모바일 환경에서 요가를 학습할할 수 있는 앱입니다.
사용자는 언제 어디서나 자신에게 맞는 요가 세션을 진행하며, 실시간 피드백을 통해 자세와 운동의 효율성을 개선할 수 있습니다.
또한, 멀티플레이 기능을 통해 친구와 함께 요가를 즐기거나, 그룹으로 서로의 진행 상황을 공유하며 동기부여를 얻을 수 있습니다.
|
|
|
|
|
|
|
경이현 Infra/BE |
김아름 Android |
김웅기 AI |
박성민 BE |
황선혁 Android |
황홍법 BE |
싱글 페이지(토글을 눌러 펼쳐주세요)
| 메인 | 코스 추가하기 | 코스 시작하기 |
|---|---|---|
![]() |
![]() |
![]() |
| 싱글 메인 페이지입니다. 코스를 선택할 수 있습니다. | 코스를 추가하는 다이얼로그입니다. | 코스시작작을 확인하는 다이얼로그입니다. |
| 요가 설명 화면 | 플레이 화면 |
|---|---|
![]() |
![]() |
| 수행할 요가 동작을 설명하는 화면입니다. | 요가를 하는 화면입니다. 사용자에게 실시간 피드백을 제공합니다. |
| 결과 화면 | 결과 상세 화면 |
|---|---|
![]() |
![]() |
| 코스 결과 화면입니다. 사용자의 요가 사진을 보여줍니다. | 동작 상세 화면입니다. 요가 사진을 다운로드 받을 수 있습니다. |
멀티 페이지(토글을 눌러 펼쳐주세요)
| 멀티 로비 화면 | 방 생성 다이얼로그 | 코스 생성 다이얼로그 | 방 입장 다이얼로그 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 멀티 로비화면입니다. 방 목록을 확인할 수 있습니다. | 방 생성 다이얼로그입니다. 코스를 선택할 수 있습니다 | 임시 코스 생성 다이얼로그 입니다. | 방 입장 다이얼로그입니다. |
| 대기 화면 | 플레이 화면 | 요가 결과 화면 |
|---|---|---|
![]() |
![]() |
![]() |
| 시작 전 대기하는 화면입니다. 모든 유저들이 준비되면 시작됩니다. | 플레이 화면입니다. 실시간 피드백을 받을 수 있습니다 | 이번 동작에 대한 다른 유저들의 점수와 최고 점수 유저의 사진을 볼 수 있습니다. |
| 최종 결과 화면 | 종합 갤러리 화면 | 상세 갤러리 화면 |
|---|---|---|
![]() |
![]() |
![]() |
| 최종 순위를 표시하는 화면입니다. | 요가 별 최고 점수 유저의 사진을 보여주는 화면입니다. | 특정 동작의 모든 유저의 사진을 보여주는 화면입니다다. |
프로필 페이지(토글을 눌러 펼쳐주세요)
| 프로필 메인 화면 | 기록 상세 보기 화면 | 요가 동작 별 상세 정보 화면 | 뱃지 상세 화면 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 프로필 메인 화면입니다. 기록과 획득 뱃지를 볼 수 있습니다. | 기록 상세 보기 화면입니다. 동작별 간략한 기록을 볼 수 있습니다. | 요가 동작 별 상세화면입니다. 과거 기록들과 그래프화된 기록을 볼 수 있습니다. | 뱃지 상세 화면입니다. 달성 조건들을 확인 할 수 있습니다. |
- 온디바이스 AI
-
Android
-
Jetpack Compose
-
Hilt
-
Coil
-
Retrofit
-
OkHttp
-
WebSocket
-
WebRTC
-
MVI 패턴
-
클린 아키텍처
- 시그널링 서버
























