1. 기능 목록

  1. 세션 방 생성, 조회, 수정, 삭제, 목록 조회 기능을 제공한다.
    1. 세션 방 생성은 회원만 가능하며, 수정과 삭제는 세션 방 생성자만 가능하다.
    2. 목록 조회 시 타입(스터디용/릴레이 코딩용), 제목, 생성자 ID로 검색 가능하며, 생성자의 도움 점수가 높은 순으로 보여준다.
  2. 세션 방 입상 시 호스트가 이미 참여한 상태이어야 입장 가능하며, 호스트가 세션 방을 나가면 모든 참여자들도 나가지며 해당 세션은 종료된다.
  3. 세션 방 내에서 채팅, 음성 채팅, 그림 그리기, 코드 공유 IDE, 테스트 케이스 제출 컴파일 기능을 제공한다.
    1. 채팅, 음성 채팅, 그림 그리기, 코드 공유는 실시간으로 소통이 가능하다.
    2. 음성 채팅 권한, 코드 공유 IDE 접근 권한 설정이 가능하다.

2. 구현 방식

  1. JPA를 이용하여 CRUD 기능이 가능하도록 한다.

  2. WebRTC를 이용하여 코드 공유 IDE와 음성 채팅 기능이 가능하도록 한다. 음성 채팅은 쿠렌토 미디어 서버를 사용하며 SFU 방식으로 미디어 서버를 구성한다.

    Untitled

  3. 웹소켓을 이용하여 텍스트 채팅과 그림 그리기 기능이 가능하도록 한다.

3. 시퀀스 다이어그램

Untitled

Untitled

4. DB 설계

테이블ID: room

컬럼명 컬럼ID 타입 및 길이 설명
방 ID room_id INT PK, NOT NULL, AUTO_INCREMENT
생성자 ID host_id VARCHAR(32) FK, NOT NULL, UNIQUE
제목 title VARCHAR(45) NOT NULL
설명 content VARCHAR(255)
생성자의 도움 점수 host_rating INT 기본값=0
시작 시간 start_time TIMESTAMP NOT NULL, 현재 시간
모드 mode VARCHAR(10) NOT NULL, (study, relay)
타입 is_live TINYINT (1은 live, 0은 아직 호스트 입장 전), 기본값=0
참여자 수 number_users INT
최대 참여자 수 max INT 기본값=10, (2~10)

5. URI 설계

기능 URI 요청방식 body response 설명
목록 조회 /session?mode={mode}&hostId={host_id}&title={title} GET - 성공: 200, {방정보, …}

오류 시나리오

오류 시나리오 처리 해결 여부
생성 오류: 전에 만든 방이 삭제 처리가 안됐을 경우 새로운 방 생성 에 실패한다. 전에 만든 방이 있는 경우, DB에서 해당 방을 삭제한다.
HTTP 상태코드 500 을 보낸다.
Front-end에서는 사용자에게 방 생성을 다시 시도하도록 한다. O
수정 오류: 수정 도중에 해당 방이 삭제 됐을 경우, 존재하지 않는 방을 수정하려는 경우 수정에 실패한다. HTTP 상태코드 404 을 보낸다.
Front-end에서는 사용자에게 유효하지 않은 세션 방이라고 알린다.
사용자를 세션 방 목록 페이지로 이동시킨다. O
수정 오류: DB에서 수정에 실패했을 경우 HTTP 상태코드 500 을 보낸다.
Front-end에서는 사용자에게 수정에 실패했다고 알린다. O
삭제 오류: 삭제하려는 도중에 이미 해당 방이 삭제 됐을 경우, 존재하지 않는 방을 삭제하려는 경우 삭제에 실패한다. HTTP 상태코드 404 을 보낸다.
Front-end에서는 사용자에게 유효하지 않은 세션 방이라고 알리고, 사용자를 세션 방 목록 페이지로 이동시킨다. O
삭제 오류: DB에서 삭제에 실패했을 경우 HTTP 상태코드 500 을 보낸다.
Front-end에서는 사용자에게 삭제에 실패했다고 알린다. O
입장 오류: 세션 대기 방에서 ‘입장하기’ 버튼을 눌렀는데, 해당 세션 방이 이미 삭제된 경우 세션 방 입장에 실패한다. HTTP 상태코드 404을 받았다면 사용자에게 존재하지 않는 세션 방이라고 알린다.
사용자를 세션 방 목록 페이지로 이동시킨다. O
Exception: 알 수 없는 사용자가 세션 방에서 나간 경우 try-catch 로 오류를 처리한다. O
Exception: 알 수 없는 사용자에게 메시지를 보낸 경우 try-catch 로 오류를 처리한다. O
Exception: 사용자에 대한 미디어 통신 해제에 실패한 경우 try-catch 로 오류를 처리한다. O
Exception: 웹소켓으로 메시지 보내기에 실패한 경우 try-catch 로 오류를 처리한다. O
Exception: 세션 방 입장에 실패한 경우 try-catch 로 오류를 처리한다. O