net
title: "net" description: "Chromium의 네이티브 네트워킹 라이브러리를 사용해 HTTP/HTTPS 요청 처리" slug: net hide_title: false
net
Chromium 네이티브 네트워킹 라이브러리를 사용해 HTTP/HTTPS 요청을 처리한다.
net
모듈은 HTTP(S) 요청을 처리하는 클라이언트 측 API다. Node.js의 HTTP와 HTTPS 모듈과 유사하지만, Node.js 구현 대신 Chromium 네이티브 네트워킹 라이브러리를 사용한다. 이를 통해 웹 프록시에 대한 더 나은 지원을 제공한다. 또한 네트워크 상태를 확인하는 기능도 지원한다.
net
모듈을 Node.js 네이티브 모듈 대신 사용해야 하는 이유는 다음과 같다:
- 시스템 프록시 설정을 자동으로 관리하며, wpad 프로토콜과 프록시 pac 설정 파일을 지원한다.
- HTTPS 요청을 자동으로 터널링한다.
- 기본, 다이제스트, NTLM, Kerberos, 협상 인증 방식을 사용해 프록시 인증을 지원한다.
- 트래픽 모니터링 프록시를 지원한다. 접근 제어와 모니터링을 위해 Fiddler와 유사한 프록시를 사용할 수 있다.
API 구성 요소(클래스, 메서드, 속성, 이벤트 이름 등)는 Node.js에서 사용하는 것과 유사하다.
예제 사용법:
const { app } = require('electron')
app.whenReady().then(() => {
const { net } = require('electron')
const request = net.request('https://github.com')
request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
console.log(`HEADERS: ${JSON.stringify(response.headers)}`)
response.on('data', (chunk) => {
console.log(`BODY: ${chunk}`)
})
response.on('end', () => {
console.log('No more data in response.')
})
})
request.end()
})
net
API는 애플리케이션이 ready
이벤트를 발생시킨 후에만 사용할 수 있다. ready
이벤트 전에 모듈을 사용하려고 하면 오류가 발생한다.
메서드
net
모듈은 다음과 같은 메서드를 제공한다:
net.request(options)
ClientRequest
를 반환
ClientRequest
생성자에 직접 전달되는 options
를 사용하여 ClientRequest
인스턴스를 생성한다. net.request
메서드는 options
객체에 지정된 프로토콜 스킴에 따라 보안 및 비보안 HTTP 요청을 발행하는 데 사용된다.
net.fetch(input[, init])
input
string | GlobalRequestinit
RequestInit & { bypassCustomProtocolHandlers?: boolean } (선택 사항)
반환값: Promise<GlobalResponse>
- Response 참조
렌더러에서 fetch()
가 동작하는 방식과 유사하게, Chrome의 네트워크 스택을 사용해 요청을 보낸다. 이는 Node.js의 HTTP 스택을 사용하는 Node의 fetch()
와는 다르다.
예제:
async function example () {
const response = await net.fetch('https://my.app')
if (response.ok) {
const body = await response.json()
// ... 결과를 사용한다.
}
}
이 메서드는 기본 세션에서 요청을 발행한다. 다른 세션에서 fetch
요청을 보내려면 ses.fetch()를 사용한다.
자세한 내용은 MDN 문서의 fetch()
를 참조한다.
제한 사항:
net.fetch()
는data:
또는blob:
스키마를 지원하지 않는다.integrity
옵션의 값은 무시된다.- 반환된
Response
객체의.type
과.url
값이 올바르지 않다.
기본적으로 net.fetch
를 사용한 요청은 커스텀 프로토콜과 file:
로도 전송할 수 있으며, webRequest 핸들러가 존재하면 이를 트리거한다. RequestInit에 비표준 bypassCustomProtocolHandlers
옵션이 설정되면, 이 요청에 대해 커스텀 프로토콜 핸들러가 호출되지 않는다. 이는 가로챈 요청을 내장 핸들러로 전달할 수 있게 한다. webRequest 핸들러는 커스텀 프로토콜을 우회할 때도 여전히 트리거된다.
protocol.handle('https', (req) => {
if (req.url === 'https://my-app.com') {
return new Response('<body>my app</body>')
} else {
return net.fetch(req, { bypassCustomProtocolHandlers: true })
}
})
참고: 유틸리티 프로세스에서는 커스텀 프로토콜이 지원되지 않는다.
net.isOnline()
boolean
타입의 값을 반환한다. 현재 인터넷 연결 상태를 나타낸다.
false
를 반환하면 사용자가 원격 사이트에 연결할 수 없는 상태라는 강력한 신호다. 반면 true
를 반환하더라도 특정 원격 사이트에 대한 연결 시도가 성공할지 여부는 확실하지 않다. 일부 링크가 활성화되어 있더라도 특정 연결 시도가 실패할 가능성이 있다.
net.resolveHost(host, [options])
host
string - 해결할 호스트 이름.
Returns Promise<ResolvedHost> - host
에 대한 해결된 IP 주소로 이행된다.
이 메서드는 기본 세션에서 호스트를 해결한다. 다른 세션에서 호스트를 해결하려면 ses.resolveHost()를 사용한다.
속성
net.online
읽기 전용
boolean
타입의 속성이다. 현재 인터넷 연결이 되어 있는지 여부를 나타낸다.
이 속성이 false
를 반환하면 사용자가 원격 사이트에 연결할 수 없을 가능성이 매우 높다. 하지만 true
를 반환하더라도 특정 원격 사이트에 대한 연결 시도가 성공할지 여부는 확실하지 않다. 일부 링크가 활성화되어 있더라도 특정 연결이 성공할 것이라는 보장은 없다.