개발자
안녕하세요. 취업 기간 중 React native 일정 관리 앱을 제작중입니다. 일정 알림 기능을 위해 서버의 일정 데이터를 스트리밍하여 컴포넌트에 매핑하는 동작을 구현 중입니다. react-native-sse 라이브러리를 사용하여 SSE를 시도하고 있는데 유효한 accessToken과 url을 전달해도 연결 자체가 이뤄지지 않는 문제가 발생합니다. 컴포넌트 랜더링 시 연결을 시도하고 에러 혹은 언마운트 시 연결 종료하도록 코드 작성했습니다. 에러 로그는 다음과 같습니다. [EventSource][onreadystatechange][ERROR] Response status error. Reconnecting... DEBUG [EventSource][onreadystatechange] ReadyState: 2, status: 401 DEBUG [EventSource][onreadystatechange] ReadyState: 4, status: 401 리커넥팅을 반복하면서 401 에러를 계속 반환하는데 이 경우 url에 문제가 있는 것인지 혹은 라이브러리에서 요구하는 추가적인 속성이 필요한지 잘 모르겠습니다. 비슷한 문제를 겪거나 React native에서 SSE 연결을 해보신 선배님들께 도움 요청드립니다.
1const option = {
2 method: 'GET',
3 headers: {Authorization: `Bearer ${token}`},
4 debug: true,
5 };
6
7 const eventSource = new EventSource(streamUrl, option);
8
9 const listener: EventSourceListener = event => {
10 if (event.type === 'open') {
11 console.log('Open SSE connection.');
12 } else if (event.type === 'message') {
13 console.log('Connection', event);
14 } else if (event.type === 'error') {
15 console.error('Connection error:', event.message);
16 eventSource.removeAllEventListeners();
17 eventSource.close();
18 } else if (event.type === 'exception') {
19 console.error('Error:', event.message, event.error);
20 eventSource.removeAllEventListeners();
21 eventSource.close();
22 }
23 };
24
25 eventSource.addEventListener('open', listener);
26 eventSource.addEventListener('message', listener);
27 eventSource.addEventListener('error', listener);
28
29 return () => {
30 eventSource.removeAllEventListeners();
31 eventSource.close();
32 };
33 };
34
35 useEffect(() => {
36 SSE();
37 }, []);
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 18일
안녕하세요. 에러 로그를 확인해보면 401이라는 HTTP 상태 코드가 반환되었다는 내용이 나옵니다. HTTP 401 Unauthorized 클라이언트 오류 상태 응답 코드는 요청한 리소스가 유효한 인증 자격 증명 없이 액세스 할 수 없음을 나타냅니다. 위의 코드에서는 `Authorization: Bearer ${token}` 형태로 헤더를 설정하고 있습니다. 이 경우, 해당 토큰값이 정확하게 서버에 전달되고 있는지 확인해볼 필요가 있습니다. 토큰 값 자체가 잘못되었거나 만료된 경우, 서버는 유효하지 않은 인증을 받았다고 판단하여 401 에러를 반환합니다. 따라서 토큰 값을 다시 한번 확인해 보시길 권장드립니다. 또한, `streamUrl` 값도 올바른지 점검해보세요. 이 url은 SSE 연결을 요청하는 주소여야 합니다. 마지막으로 서버 쪽에서 CORS 정책으로 인해 브라우저의 도메인에서 들어오는 연결을 제한하고 있다면, 이 역시 401 에러를 발생시킬 수 있으니 해당 부분도 확인해 보시길 바랍니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!