Community
ODsay LAB의 Creator를 위한 공간, 다양한 정보를 함께 공유하세요.

개발자포럼(Developer Forum)

다음과 같이 에러가 나는데요. 이거 도저히 못쓰겠는데 Web 조회수 280 댓글 6 2024-01-22 00:20:27
user profile 민지민짜응
* API 에러가 발생하는 경우 아래 사항을 알려주시면 보다 빠른 확인이 가능합니다.
  (Enter information for quick resolution when API error occurs)

  - 애플리케이션 명 (Application Name) : 
  - 플랫폼 명 (Platform Name) : 
  - 호출 Full URL (Call Full URL) : API Key를 제외한 파라미터 포함
    ex) https://api.odsay.com/v1/api/busLaneDetail?lang=0&busID=12018

* API Key Auth error 가 발생하는 경우
  - FAQ(https://lab.odsay.com/community/faq) 중 "API호출 결과값이 리턴되지 않아요." 항목을 먼저 참조해주세요.
    (If API Key Auth error occurs, check the ‘FAQ_Result of API call is not returned’)


AxiosError: read ETIMEDOUT
    at AxiosError.from (/home/ubuntu/nnulu-tsnode/node_modules/axios/dist/node/axios.cjs:837:14)
    at RedirectableRequest.handleRequestError (/home/ubuntu/nnulu-tsnode/node_modules/axios/dist/node/axios.cjs:3090:25)
    at RedirectableRequest.emit (node:events:517:28)
    at eventHandlers.<computed> (/home/ubuntu/nnulu-tsnode/node_modules/follow-redirects/index.js:37:24)
    at ClientRequest.emit (node:events:517:28)
    at TLSSocket.socketErrorListener (node:_http_client:501:9)
    at TLSSocket.emit (node:events:517:28)
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  syscall: 'read',
  code: 'ETIMEDOUT',
  errno: -110,
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [ 'xhr', 'http' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'User-Agent': 'axios/1.6.5',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    params: {
      stationName: '압구정',
      apiKey: '8cN044vmVPdztxEEu+iQecVqcXcIB4',
      CID: '1000',
      stationClass: 2,
      displayCnt: 5,
      lang: 0
    },
    method: 'get',
    url: 'https://api.odsay.com/v1/api/searchStation',
    data: undefined
  },
  request: <ref *1> Writable {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: false,
      needDrain: false,
      ending: false,
      ended: false,
      finished: false,
      destroyed: false,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: true,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      afterWriteTickInfo: null,
      buffered: [],
      bufferedIndex: 0,
      allBuffers: true,
      allNoop: true,
      pendingcb: 0,
      constructed: true,
      prefinished: false,
      errorEmitted: false,
      emitClose: true,
      autoDestroy: true,
      errored: null,
      closed: false,
      closeEmitted: false,
      [Symbol(kOnFinished)]: []
    },
    _events: [Object: null prototype] {
      response: [Function: handleResponse],
      error: [Function: handleRequestError],
      socket: [Function: handleRequestSocket]
    },
    _eventsCount: 3,
    _maxListeners: undefined,
    _options: {
      maxRedirects: 21,
      maxBodyLength: Infinity,
      protocol: 'https:',
      path: '/v1/api/searchStation?stationName=%EC%95%95%EA%B5%AC%EC%A0%95&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
      method: 'GET',
      headers: [Object: null prototype],
      agents: [Object],
      auth: undefined,
      family: undefined,
      beforeRedirect: [Function: dispatchBeforeRedirect],
      beforeRedirects: [Object],
      hostname: 'api.odsay.com',
      port: '',
      agent: undefined,
      nativeProtocols: [Object],
      pathname: '/v1/api/searchStation',
      search: '?stationName=%EC%95%95%EA%B5%AC%EC%A0%95&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0'
    },
    _ended: true,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 0,
    _requestBodyBuffers: [],
    _onNativeResponse: [Function (anonymous)],
    _currentRequest: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /v1/api/searchStation?stationName=%EC%95%95%EA%B5%AC%EC%A0%95&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: axios/1.6.5\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: api.odsay.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/v1/api/searchStation?stationName=%EC%95%95%EA%B5%AC%EC%A0%95&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'api.odsay.com',
      protocol: 'https:',
      _redirectable: [Circular *1],
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://api.odsay.com/v1/api/searchStation?stationName=%EC%95%95%EA%B5%AC%EC%A0%95&apiKey=8cN044vmmVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
    [Symbol(kCapture)]: false
  },
  cause: Error: read ETIMEDOUT
      at TLSWrap.onStreamRead (node:internal/stream_base_commons:217:20) {
    errno: -110,
    code: 'ETIMEDOUT',
    syscall: 'read'
  }
}
127.0.0.1 - - [21/Jan/2024:15:14:18 +0000] "GET /search/naver?keyword=%ED%95%9C%EA%B5%AD+%EC%9D%B4%EC%8A%88 HTTP/1.0" 200 3541 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot"
AxiosError: read ECONNRESET
    at AxiosError.from (/home/ubuntu/nnulu-tsnode/node_modules/axios/dist/node/axios.cjs:837:14)
    at RedirectableRequest.handleRequestError (/home/ubuntu/nnulu-tsnode/node_modules/axios/dist/node/axios.cjs:3090:25)
    at RedirectableRequest.emit (node:events:517:28)
    at eventHandlers.<computed> (/home/ubuntu/nnulu-tsnode/node_modules/follow-redirects/index.js:37:24)
    at ClientRequest.emit (node:events:517:28)
    at TLSSocket.socketErrorListener (node:_http_client:501:9)
    at TLSSocket.emit (node:events:517:28)
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  syscall: 'read',
  code: 'ECONNRESET',
  errno: -104,
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [ 'xhr', 'http' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': undefined,
      'User-Agent': 'axios/1.6.5',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    params: {
      stationName: '혜화',
      apiKey: '8cN044vmImVPdztxEEu+iQecVqcXcIB4',
      CID: '1000',
      stationClass: 2,
      displayCnt: 5,
      lang: 0
    },
    method: 'get',
    url: 'https://api.odsay.com/v1/api/searchStation',
    data: undefined
  },
  request: <ref *1> Writable {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: false,
      needDrain: false,
      ending: false,
      ended: false,
      finished: false,
      destroyed: false,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: true,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      afterWriteTickInfo: null,
      buffered: [],
      bufferedIndex: 0,
      allBuffers: true,
      allNoop: true,
      pendingcb: 0,
      constructed: true,
      prefinished: false,
      errorEmitted: false,
      emitClose: true,
      autoDestroy: true,
      errored: null,
      closed: false,
      closeEmitted: false,
      [Symbol(kOnFinished)]: []
    },
    _events: [Object: null prototype] {
      response: [Function: handleResponse],
      error: [Function: handleRequestError],
      socket: [Function: handleRequestSocket]
    },
    _eventsCount: 3,
    _maxListeners: undefined,
    _options: {
      maxRedirects: 21,
      maxBodyLength: Infinity,
      protocol: 'https:',
      path: '/v1/api/searchStation?stationName=%ED%98%9C%ED%99%94&apiKey=8cN044vmmVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
      method: 'GET',
      headers: [Object: null prototype],
      agents: [Object],
      auth: undefined,
      family: undefined,
      beforeRedirect: [Function: dispatchBeforeRedirect],
      beforeRedirects: [Object],
      hostname: 'api.odsay.com',
      port: '',
      agent: undefined,
      nativeProtocols: [Object],
      pathname: '/v1/api/searchStation',
      search: '?stationName=%ED%98%9C%ED%99%94&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0'
    },
    _ended: true,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 0,
    _requestBodyBuffers: [],
    _onNativeResponse: [Function (anonymous)],
    _currentRequest: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /v1/api/searchStation?stationName=%ED%98%9C%ED%99%94&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: axios/1.6.5\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: api.odsay.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/v1/api/searchStation?stationName=%ED%98%9C%ED%99%94&apiKey=8cN044vmImVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'api.odsay.com',
      protocol: 'https:',
      _redirectable: [Circular *1],
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://api.odsay.com/v1/api/searchStation?stationName=%ED%98%9C%ED%99%94&apiKey=8cN044vmmVPdztxEEu%2BiQecVqcXcIB4&CID=1000&stationClass=2&displayCnt=5&lang=0',
    [Symbol(kCapture)]: false
  },
  cause: Error: read ECONNRESET
      at TLSWrap.onStreamRead (node:internal/stream_base_commons:217:20) {
    errno: -104,
    code: 'ECONNRESET',
    syscall: 'read'
  }
}
null null



API 키는 다 좀 지웠구요
그래서 보안적인 요소는 없는데
이거 무슨 에러에요 대체?

에러가 이렇게 떠서 항상 안된다니까요?


아니 아래처럼 요청하면 가끔씩 압구정 역을 못찾는다구요

https://api.odsay.com/v1/api/searchStation {
  stationName: '압구정',
  apiKey: 'IB4',
  CID: '1000',
  stationClass: 2,
  displayCnt: 5,
  lang: 0
}


뭐 대체 어떻게 해야하냐고요
이걸 제가 몇번씩 질문을 해야하는 지 모르곘네
(edited)
댓글 6
  • user profile 민지민짜응2024-01-22 00:31:25
    timeout이 계속 뜬다고요. 이거좀 어떻게 좀 해보라니까요?
  • user profile 민지민짜응2024-01-22 00:31:40
    아니 뭐 우리쪽에서 가끔씩 요청 IP를 이상하게 보내는건가? 아니 뭐 좀 해보세요
  • user profile 민지민짜응2024-01-22 00:31:55
    허가되지 않은 IP로 보내는건지 뭔지 알아야 세팅을 하죠 뭐 답을 좀 주세요
  • user profile 민지민짜응2024-01-22 00:32:29
    가끔씩 그냥 계속해서 답변을 안준다고요. API 호출하면 가끔씩 timeout 난다고요. 제가 이거 몇번씩 말했는데 제대로 설명도 없네 진짜
  • user profile whcho2024-01-22 12:42:35
    안녕하세요 민지민짜응님
    ODsay 관리자 입니다.
    
    문의 주신 내용 관련해서 저희 서비스를 재차 확인해봤는데
    API 요청이 들어오면 데이터를 보내드리는 데 1초 이내에 반환해드리는 것을 확인했습니다.
    보내주신 정보의 Parameter나 로그 기록상으로 봤을 때 API Key도 정상적으로 들어온 것 확인했습니다.
    그래서 요청 보내신 IP나 세팅 상의 문제는 아닌 것 같습니다.
    
    게다가 문의 내용중 오류 발생한 로그도 보내주셨는데 TIMEOUT 문제는 네트워크 쪽 문제일 가능성이 가장 높은 것 같아 보입니다.
    저희 서버 모니터링 시에도 네트워크 문제가 확인되지 않고 다른 사용자 분들께서도 네트워크 관련 문의 주신 분이 없어 서버 네트워크에 특이사항은 없는 것으로 확인됩니다.
    
    그 외의 중간 네트워크나 사용자분 네트워크 환경에 의해 해당 문제 발생했을 가능성도 있어 확인 부탁드립니다.
    
    감사합니다.
    Discover your routes, ODsay!
  • user profile 민지민짜응2024-01-23 11:52:19
    감사합니다. 정리하자면, 오디세이 측의 문제는 전혀 없다는 것이죠? 그럼 저희 쪽 오류인 것으로 판단하고 해결해보겠습니다. 감사합니다.