Reddit Fetch

await fetch 다음에 무엇을 확인해야 할까요

Node.js 요청에서 비공개 키, response.ok와 네트워크 예외의 차이, JSON 검증, 평평한 댓글 기록의 로컬 표시 상태를 차례로 살펴봅니다.

하나의 과거 댓글 미리 보기로 범위를 정하세요

이 예제는 작은 댓글 미리 보기를 만듭니다. fetch를 사용할 수 있는 Node.js 백엔드에서 호출을 실행하세요. 그 환경에서 process.env.REDDIT_FETCH_API_KEY를 읽고 설정값이 없으면 아카이브에 연결하기 전에 중단합니다. 애플리케이션 사용자에게는 화면에 맞게 준비한 데이터를 돌려주어야 합니다. 서버가 조회 인증에 사용한 비밀 값은 응답에 포함하지 않습니다. 내부 오류를 사용자에게 보여 줄 때에도 키가 메시지에 섞이지 않게 주의하세요.

목적지는 https://api.redditfetch.com/v1/comments?subreddit=javascript&limit=3으로 고정하고 {"X-API-Key": key} 같은 헤더를 사용합니다. Authorization: Bearer <key>도 유효합니다. 브라우저가 보낸 임의의 URL로 목적지를 바꾸지 마세요. 자체 경로의 접근 규칙과 호출 한도는 여러분의 애플리케이션이 정합니다. 방문자가 언제 유료 새 조회를 시작할 수 있는지, 언제 저장된 결과를 보여 줄지 별도로 결정하면 화면을 여는 동작과 실제 조회를 구분할 수 있습니다.

HTTP 응답과 네트워크 예외를 분리하세요

네트워크 작업이 거부되면 await fetch 주위의 catch로 이동하며 분류에 사용할 HTTP 응답이 없을 수 있습니다. 반면 HTTP 401이나 402는 Promise가 정상적으로 이행되어도 도착합니다. 먼저 response.ok를 검사하세요. 성공하지 않은 상태를 처리하기 전에 본문을 정상 댓글 페이지로 읽으면 안 됩니다. 그렇지 않으면 인증 실패를 기록이 없는 상황처럼 표시하여 사용자가 잘못된 원인을 생각하게 만들 수 있습니다.

HTTP 400은 매개변수를, 401은 키를, 402는 잔액을 확인합니다. 429에는 필요에 따라 지연을 두고 횟수를 제한한 재시도를 적용할 수 있습니다. 모든 오류를 자동으로 반복하지 마세요. 서버에서 과금되는 조회가 성공한 뒤 연결이 끊길 수도 있습니다. 따라서 로컬 예외가 무료 요청이었다는 증거는 아닙니다. 성공한 재시도는 크레딧을 따로 사용하므로 원인을 구분한 후 반복 여부를 결정해야 합니다.

JSON을 읽은 뒤에도 구조를 검증하세요

HTTP 성공 경로에서도 await response.json()은 실패할 수 있습니다. 내부 진단에서는 이 원인을 전송 실패와 구분하세요. 다음으로 기대하는 응답 구조를 확인하고 data가 배열인지 검사합니다. JSON 해석 성공은 JavaScript 값을 얻었다는 뜻일 뿐입니다. 각 기록에 쓸 수 있는 본문이 있는지, 카드에 필요한 필드의 자료형이 맞는지까지 보장하지 않습니다. 화면용 변환은 이러한 검증을 마친 뒤 별도 단계에서 진행하세요.

조각에 맞는 표시 상태를 만드세요

미리 보기에 쓰는 필드만 변환하세요. 본문이 없는 경우와 빈 문자열인 경우를 구분하고, 원래 기록을 찾을 수 있도록 제공된 식별자를 유지하며 내용을 텍스트로 표시합니다. 댓글은 평평한 조각입니다. 선택적 관계 필드가 있어도 완전한 스레드를 입증하지 않습니다. 세 기록을 받았다는 사실로 특정 댓글의 모든 답글이 모였다고 결론 내릴 수 없으며, 화면에서도 그런 관계를 만들어 내지 않아야 합니다.

로딩 중, 준비됨, 비어 있음, 실패를 로컬 상태로 정의하세요. 검증된 빈 배열은 이번 요청이 기록을 주지 않았다는 뜻입니다. 기록은 왔지만 모두 표시 검사에서 탈락했다면 다른 원인으로 남기세요. 새로 고침이 실패했을 때 이전 미리 보기를 계속 보여 줄 수도 있습니다. 다만 이미 저장해 둔 사본이라는 점이 드러나야 하며 방금 새로 받은 결과처럼 표시해서는 안 됩니다.

다음 호출이 필요한지 정하세요

로컬 진행 상태를 바꾸기 전에 검증된 결과를 요청 매개변수와 함께 저장하세요. 사본을 다시 쓰는 데는 새 조회가 필요하지 않지만 성공한 새로 고침은 비어 있어도 크레딧 하나를 사용합니다. 아카이브 순서는 시간순이 아닙니다. 나중에 요청당 최대 100개 기록, 쿼리당 최대 100페이지로 범위를 넓혀도 완전한 수집 범위나 대화 전체를 확보했다는 뜻은 아닙니다. 작은 예제의 성공을 전체 자료의 검증으로 확대하지 마세요.

필드와 합계 의미는 문서에서, 비용은 요금 페이지에서, 계정 설정은 키 페이지에서 확인하세요. 공개된 비과금 /v1/status는 정적인 서비스 설명이며 아카이브의 가용성을 검사하지 않습니다. 화면에는 과거 기록이라는 출처를 계속 표시하세요. 실시간 갱신, 앞으로도 같은 응답이 돌아온다는 약속, 몇 개의 조각만으로 완전한 토론을 보여 준다는 약속은 하지 않습니다. 실제로 받은 내용과 자체 처리 결과를 구별해서 설명하면 됩니다.