Skip to content

NI, MPC 유즈케이스 분리

Jinwon Choi edited this page Jan 17, 2025 · 1 revision

작성자: 윤지성, 최진원

현재 시점의 프로필 드랍 동작 과정

  1. browsing과 advertising 시작한다.
    1. 20초 동안 피어를 찾지 못하면 종료된다.
  2. mpc 연결
  3. ni 디스커버리 토큰, 프로필 데이터를 주고받는다.
    1. mpc 연결이 10초 이상 유지됐는데 디스커버리 토큰이 오지 않는다. → 기기 문제일 가능성 ,종료된다.
  4. ni 세션 수립, 서로 거리, 방향 탐색한다.
    1. ni 세션이 10초 이상 유지됐는데 조건을 만족하지 않은 경우 → 종료된다.
  5. 받은 프로필 데이터를 기반으로, 메이트 요청 뷰를 present 한다.

유즈케이스

  1. 주변 사람을 탐색한다. (mpc 전) - 1, 2, 3, 4번 동작
  2. 메이트 요청이 온다 유즈케이스 ( mpc, ni가 모두 완료가 된 상태 ) 5번
    1. usecase를
  3. 탐색을 종료한다.
    1. (아예 peer 를 찾지 못한 경우, peer를 찾았는데 ni까지 연결이 되지 않은 경우, peer와 ni 연결이 됐고 조건을 만족하지 않은 경우)
    • 어떠한 session 없고 connect fail
    • mpc 세션만 있음 ni timeout
    • mpc 세션, ni 세션이 있죠 profile share timeout

탐색과 프로필 전송까지 성공적으로 이루어지는 경우

image

탐색이 이루어지고 사용자가 종료하는 경우

image 1

유즈케이스가 메이트 요청을 보낸다. → 먼저 실행되면 안됨

다른 팀원 의견

현: 버튼같이 알려주니까 따로 만들어도 좋을 수 있을 것 같다.

혜: 유즈케이스를 잘게 쪼개다 보면 흐름을 관리하기가 힘들 수도 있겠다…

발생 가능한 시나리오

1. 프로필 드랍 하려는데, 하기 싫어졌을 때 (좋은 케이스)

  1. browsing과 advertising 시작한다.
  2. mpc 연결
  3. ni 디스커버리 토큰, 프로필 데이터를 주고받는다.
    1. ni 세션 혹은 프로필 데이터를 주고 받기 전에 종료 요청
    2. mpc 세션 종료
  4. ni 세션 수립, 서로 거리, 방향 탐색한다.
    1. 갑자기 하기 싫어짐. 버튼 이용해서 종료 요청
    2. 프로필 데이터 삭제 필요
  5. ni, mpc 세션 종료

동시성 문제 발생 가능 시나리오

1. mpc peer 연결 전에 종료를 원할 때

browsing과 advertising 시작하고 mpc peer를 찾는 도중, 종료 요청 보내는 상황

  • 종료 메서드 실행
  • 피어를 탐색해서 mpcManager에 peer를 추가하는 테스크

동시 실행

2. ni 연결 수립 전에 종료를 원할 때

mpc peer와 연결된 후, 디스커버리 토큰과 데이터를 주고받는 도중에, 종료 요청 보내는 상황

  • 데이터 수신, 송신 테스크
  • 세션 종료 테스크

동시 실행

3. ni 연결 수립 이후에 종료를 원할 때

ni 세션이 수립된 상태에서 프로필 드랍 조건을 만족하기 전에, 종료 요청을 보냈는데, 동시에 조건이 만족된 상황

  • 화면 전환 태스크 (상대의 프로필로)
  • 세션 종료 태스크

동시 실행

4. 2명 이상의 사용자가 동시에 조건을 만족한 경우 → 데이터 레이스

available peer에 동시에 저장된다.


변경된다면? 프로필 드랍 동작 과정

  1. browsing과 advertising 시작한다.
    1. 20초 동안 피어를 찾지 못하면 종료된다.
  2. mpc 연결
  3. ni 디스커버리 토큰을 주고받는다.
    1. mpc 연결이 10초 이상 유지됐는데 디스커버리 토큰이 오지 않는다. → 기기 문제일 가능성 ,종료된다.
  4. ni 세션 수립, 서로 거리, 방향 탐색한다.
    1. ni 세션이 10초 이상 유지됐는데 조건을 만족하지 않은 경우 → 종료된다.
  5. 조건 만족하면 프로필 데이터 전송, 수신 메이트 요청 뷰를 present 한다.
    1. 핸드쉐이킹 과정을 마치고 ni 연결을 종료한다.

유즈케이스

  1. 주변 사람을 탐색한다. (mpc 전) - 1, 2, 3, 4번 동작
  2. 메이트 요청을 보낸다. ( mpc, ni가 모두 완료가 된 상태 ) 5번
  3. 탐색을 종료한다.
    1. (아예 peer 를 찾지 못한 경우, peer를 찾았는데 ni까지 연결이 되지 않은 경우, peer와 ni 연결이 됐고 조건을 만족하지 않은 경우)
    • 어떠한 session 없고 connect fail
    • mpc 세션만 있음 ni timeout
    • mpc 세션, ni 세션이 있죠 profile share timeout

작업

  1. 프로필 데이터를 먼저 주고받지 않는다. → 테스트 필요
  2. 탐색 유즈케이스를 만든다.
    1. 종료 조건에 따라서 자동 종료되는 로직을 작성한다.
    2. 위 동시성 1, 2번 시나리오를 테스트한다. (후순위)
  3. 데이터 보내는 usecase를 만든다.
  4. 동작 종료 usecase를 만든다.
    1. 동시성 3번 시나리오 - 세션 종료를 먼저 실행할 수 있는 방법이 있는지 찾아봐야함
      1. 비동기 작업에서 우선적으로 먼저 실행할 수 있는 방법이 있는지
        1. Task 우선순위 선정 가능
  5. mpcManager → didSet 제거
Clone this wiki locally