Skip to content

[fix] "브라우저로 연결하기" 실패 후 재선택 시 시리얼 포트 미해제 버그 수정#3080

Open
hcooch2ch3 wants to merge 3 commits into
entrylabs:developfrom
hcooch2ch3:fix/hw-lite-port-cleanup
Open

[fix] "브라우저로 연결하기" 실패 후 재선택 시 시리얼 포트 미해제 버그 수정#3080
hcooch2ch3 wants to merge 3 commits into
entrylabs:developfrom
hcooch2ch3:fix/hw-lite-port-cleanup

Conversation

@hcooch2ch3

@hcooch2ch3 hcooch2ch3 commented Jul 7, 2026

Copy link
Copy Markdown

Fixes #3081

변경 사항

"브라우저로 연결하기"에서 연결이 한 번 실패하면 그 뒤로 "연결하기"를 몇 번을 눌러도 계속 실패하고, 페이지를 새로고침해야만 복구되는 문제를 수정했습니다. (커밋 3개, 2파일, +13/−2)

커밋 내용
1 연결이 끝난 뒤에도 constantServing 루프가 계속 돌던 종료 조건 보강
2 연결 실패 시 열어둔 포트를 닫음. 실패해도 다음 재연결이 가능해짐
3 하드웨어 재선택 시 이전 커넥터의 포트를 닫음. 고아 포트 방지

새 API 없이 기존 public 메서드 removeSerialPort()와 기존 필드 this.serial만 사용했습니다. BLE 연결 경로는 건드리지 않습니다.

참고사항

원인은 다음과 같습니다.

  • 연결이 실패했을 때 열어둔 시리얼 포트를 아무도 닫지 않습니다.
  • 브라우저(Web Serial)는 같은 기기에 항상 같은 SerialPort 객체를 돌려주기 때문에, 포트가 열린 채 남아 있으면 다음 연결의 open()InvalidStateError: The port is already open. 으로 실패합니다.
  • 연결 해제 없이 하드웨어를 다시 선택하면, 열린 포트를 들고 있던 커넥터가 새 커넥터로 교체되면서 그 포트를 닫을 방법 자체가 사라집니다.

특정 교구만의 문제가 아니라 Web Serial을 쓰는 하드웨어 라이트 모듈 30종 전체에 해당합니다. 무선 동글류처럼 핸드셰이크가 실패할 수 있는 교구에서, 교실에서 흔한 "실패하면 다시 연결 반복" 동선 그대로 재현됩니다.

수정 전 재현 방법:

  1. 무선 동글이 다른 로봇과 페어링된 상태에서 연결 시도. 핸드셰이크 실패
  2. 동글을 올바른 로봇과 다시 페어링하고 "연결하기" 재시도
  3. 원래는 성공해야하지만 실제로는 InvalidStateError: The port is already open. 으로 실패하고, 이후 모든 재시도도 동일하게 실패합니다.

테스트 항목

실기 검증 환경: macOS + Chrome, 로보메이션 햄스터/거북이 + 공용 무선 동글

  • 수정 전 위 재현 절차로 InvalidStateError 재현 확인
  • 수정 후 같은 절차에서 재연결 정상 동작 확인
  • 정상 연결 → 해제 → 재선택 → 재연결 정상 동작 확인
  • 해제 없이 하드웨어 재선택 후 연결 정상 동작 확인
  • 포트 선택창에서 취소 시 오류 없이 실패 처리되는지 확인
  • npm run dist 빌드 통과(타입 에러 0), 수정 파일 eslint 통과 확인

@hcooch2ch3 hcooch2ch3 force-pushed the fix/hw-lite-port-cleanup branch from 018561d to f1d46de Compare July 7, 2026 09:02
@hcooch2ch3 hcooch2ch3 changed the title fix: 하드웨어 라이트(브라우저 연결) 연결 실패·재선택 시 시리얼 포트 미해제 수정 fix: "브라우저로 연결하기" 실패 후 재선택 시 시리얼 포트 미해제 수정 Jul 7, 2026
@hcooch2ch3 hcooch2ch3 changed the title fix: "브라우저로 연결하기" 실패 후 재선택 시 시리얼 포트 미해제 수정 [fix] "브라우저로 연결하기" 실패 후 재선택 시 시리얼 포트 미해제 버그 수정 Jul 7, 2026
@hcooch2ch3 hcooch2ch3 marked this pull request as ready for review July 9, 2026 01:44
@hcooch2ch3 hcooch2ch3 force-pushed the fix/hw-lite-port-cleanup branch from f1d46de to 7e4f51f Compare July 9, 2026 01:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[버그] "브라우저로 연결하기"로 연결 실패 시 시리얼 포트 미해제로 재연결이 계속 실패하는 버그

1 participant