개발자

[React native] SSE 관련 에러 질문

2023년 10월 18일조회 369

안녕하세요. 취업 기간 중 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  }, []);
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

좀비님의 프로필 사진

SSE는 헤더를 지원하지 않습니다. 매 요청시 자동으로 쿠키가 포함되어 전송되므로 쿠키를 이용하시거나, 쿼리스트링으로 전달하는 방법이 있습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 10월 18일

안녕하세요. 에러 로그를 확인해보면 401이라는 HTTP 상태 코드가 반환되었다는 내용이 나옵니다. HTTP 401 Unauthorized 클라이언트 오류 상태 응답 코드는 요청한 리소스가 유효한 인증 자격 증명 없이 액세스 할 수 없음을 나타냅니다. 위의 코드에서는 `Authorization: Bearer ${token}` 형태로 헤더를 설정하고 있습니다. 이 경우, 해당 토큰값이 정확하게 서버에 전달되고 있는지 확인해볼 필요가 있습니다. 토큰 값 자체가 잘못되었거나 만료된 경우, 서버는 유효하지 않은 인증을 받았다고 판단하여 401 에러를 반환합니다. 따라서 토큰 값을 다시 한번 확인해 보시길 권장드립니다. 또한, `streamUrl` 값도 올바른지 점검해보세요. 이 url은 SSE 연결을 요청하는 주소여야 합니다. 마지막으로 서버 쪽에서 CORS 정책으로 인해 브라우저의 도메인에서 들어오는 연결을 제한하고 있다면, 이 역시 401 에러를 발생시킬 수 있으니 해당 부분도 확인해 보시길 바랍니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!