Merge pull request #7614 from tinydew4/translate-ko
[ko] Apply the changes till the '9367c76' commit.
This commit is contained in:
commit
988e2334f5
10 changed files with 130 additions and 102 deletions
|
@ -28,27 +28,36 @@ HTTP 요청 캐시를 비활성화합니다.
|
|||
|
||||
HTTP/2와 SPDY/3.1 프로토콜을 비활성화합니다.
|
||||
|
||||
## --debug=`port` and --debug-brk=`port`
|
||||
|
||||
디버깅관련 플래그입니다. 자세한 내용은 [메인프로세스 디버깅하기]
|
||||
[debugging-main-process] 안내서를 보세요.
|
||||
|
||||
## --remote-debugging-port=`port`
|
||||
|
||||
지정한 `port`에 HTTP 기반의 리모트 디버거를 활성화합니다. (개발자 도구)
|
||||
|
||||
## --js-flags=`flags`
|
||||
|
||||
JS 엔진에 지정한 플래그를 전달합니다. `flags`를 메인 프로세스에서 활성화하고자 한다면,
|
||||
Electron이 시작되기 전에 스위치를 전달해야 합니다.
|
||||
Node JS 엔진에 지정한 플래그를 전달합니다. `flags`를 메인 프로세스에서
|
||||
활성화하고자 한다면, Electron이 시작되기 전에 스위치를 전달해야 합니다.
|
||||
|
||||
```bash
|
||||
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
|
||||
```
|
||||
|
||||
가능한 플래그 목록은 [Node 문서][node-cli]를 보거나 터미널에서 `node --help`
|
||||
명령을 실행하세요. 또한, 구체적으로 노드의 V8 자바스크립트 엔진과 관련있는
|
||||
플래그의 목록을 보려면 `node --v8-options` 를 실행하세요.
|
||||
|
||||
## --proxy-server=`address:port`
|
||||
|
||||
시스템 설정의 프록시 서버를 무시하고 지정한 서버로 연결합니다. HTTP와 HTTPS 요청에만
|
||||
적용됩니다.
|
||||
시스템 설정의 프록시 서버를 무시하고 지정한 서버로 연결합니다. HTTP와 HTTPS
|
||||
요청에만 적용됩니다.
|
||||
|
||||
시스템 프록시 서버 설정을 무시하고 지정한 서버로 연결합니다. 이 스위치는 HTTP와 HTTPS
|
||||
그리고 WebSocket 요청에만 적용됩니다. 그리고 모든 프록시 서버가 HTTPS가 WebSocket
|
||||
요청을 지원하지 않고 있을 수 있으므로 사용시 주의해야 합니다.
|
||||
시스템 프록시 서버 설정을 무시하고 지정한 서버로 연결합니다. 이 스위치는 HTTP와
|
||||
HTTPS 그리고 WebSocket 요청에만 적용됩니다. 그리고 모든 프록시 서버가 HTTPS가
|
||||
WebSocket 요청을 지원하지 않고 있을 수 있으므로 사용시 주의해야 합니다.
|
||||
|
||||
## --proxy-bypass-list=`hosts`
|
||||
|
||||
|
@ -71,8 +80,8 @@ app.commandLine.appendSwitch('proxy-bypass-list', '<local>;*.google.com;*foo.com
|
|||
|
||||
## --no-proxy-server
|
||||
|
||||
프록시 서버를 사용하지 않습니다. 다른 프록시 서버 플래그 및 설정을 무시하고 언제나 직접
|
||||
연결을 사용합니다.
|
||||
프록시 서버를 사용하지 않습니다. 다른 프록시 서버 플래그 및 설정을 무시하고
|
||||
언제나 직접 연결을 사용합니다.
|
||||
|
||||
## --host-rules=`rules`
|
||||
|
||||
|
@ -141,17 +150,17 @@ SSL 암호화를 비활성화할 대상 목록을 지정합니다. (`,`로 구
|
|||
|
||||
Chromium이 렌더러 프로세스의 보이지 않는 페이지의 우선순위를 낮추는 것을 방지합니다.
|
||||
|
||||
이 플래그는 전역적이며 모든 렌더러 프로세스에 적용됩니다. 만약 하나의 윈도우창에만
|
||||
스로틀링을 비활성화하고 싶다면 [조용한 오디오를 재생하는][play-silent-audio] 핵을
|
||||
사용할 수 있습니다.
|
||||
이 플래그는 전역적이며 모든 렌더러 프로세스에 적용됩니다. 만약 하나의 윈도우
|
||||
창에만 스로틀링을 비활성화하고 싶다면 [조용한 오디오를 재생하는][play-silent-audio]
|
||||
핵을 사용할 수 있습니다.
|
||||
|
||||
## --enable-logging
|
||||
|
||||
Chromium의 로그를 콘솔에 출력합니다.
|
||||
|
||||
이 스위치는 애플리케이션이 로드되기 전에 분석 되므로 `app.commandLine.appendSwitch`
|
||||
메서드에선 사용할 수 없습니다. 하지만 `ELECTRON_ENABLE_LOGGING` 환경 변수를 설정하면
|
||||
본 스위치를 지정한 것과 같은 효과를 낼 수 있습니다.
|
||||
메서드에선 사용할 수 없습니다. 하지만 `ELECTRON_ENABLE_LOGGING` 환경 변수를
|
||||
설정하면 본 스위치를 지정한 것과 같은 효과를 낼 수 있습니다.
|
||||
|
||||
## --v=`log_level`
|
||||
|
||||
|
@ -166,9 +175,9 @@ Chromium의 로그를 콘솔에 출력합니다.
|
|||
예를 들어 `my_module=2,foo*=3`는 `my_module.*`, `foo*.*`와 같은 파일 이름 패턴을
|
||||
가진 모든 소스 코드들의 로깅 레벨을 각각 2와 3으로 설정합니다.
|
||||
|
||||
또한 슬래시(`/`) 또는 백슬래시(`\`)를 포함하는 패턴은 지정한 경로에 대해 패턴을 테스트
|
||||
합니다. 예를 들어 `*/foo/bar/*=2` 표현식은 `foo/bar` 디렉터리 안의 모든 소스 코드의
|
||||
로깅 레벨을 2로 지정합니다.
|
||||
또한 슬래시(`/`) 또는 백슬래시(`\`)를 포함하는 패턴은 지정한 경로에 대해 패턴을
|
||||
테스트 합니다. 예를 들어 `*/foo/bar/*=2` 표현식은 `foo/bar` 디렉터리 안의 모든
|
||||
소스 코드의 로깅 레벨을 2로 지정합니다.
|
||||
|
||||
이 스위치는 `--enable-logging` 스위치를 같이 지정해야 작동합니다.
|
||||
|
||||
|
@ -176,3 +185,5 @@ Chromium의 로그를 콘솔에 출력합니다.
|
|||
[append-switch]: app.md#appcommandlineappendswitchswitch-value
|
||||
[ready]: app.md#event-ready
|
||||
[play-silent-audio]: https://github.com/atom/atom/pull/9485/files
|
||||
[debugging-main-process]: ../tutorial/debugging-main-process.md
|
||||
[node-cli]: https://nodejs.org/api/cli.html
|
||||
|
|
|
@ -35,12 +35,13 @@ Electron 은 하드코딩 된 구글의 위치정보 웹서비스 요청을 위
|
|||
process.env.GOOGLE_API_KEY = 'YOUR_KEY_HERE'
|
||||
```
|
||||
|
||||
구글 API 키를 획득하는 방법은 다음 페이지를 참고하세요.
|
||||
https://www.chromium.org/developers/how-tos/api-keys
|
||||
구글 API 키를 획득하는 방법은
|
||||
[이 페이지](https://www.chromium.org/developers/how-tos/api-keys)를 참고하세요.
|
||||
|
||||
기본적으로, 새로 생성된 구글 API 키는 위치정보 요청이 허용되지 않습니다.
|
||||
위치정보 요청을 사용하려면 다음 페이지를 방문하세요:
|
||||
https://console.developers.google.com/apis/api/geolocation/overview
|
||||
위치정보 요청을 사용하려면
|
||||
[이 페이지](https://console.developers.google.com/apis/api/geolocation/overview)를
|
||||
방문하세요.
|
||||
|
||||
### `ELECTRON_NO_ASAR`
|
||||
|
||||
|
@ -61,8 +62,9 @@ Chrome의 내부 로그를 콘솔에 출력합니다.
|
|||
|
||||
### `ELECTRON_LOG_ASAR_READS`
|
||||
|
||||
Electron이 ASAR 파일을 읽을 때, 읽기 오프셋의 로그를 남기고 시스템 `tmpdir`에 파일로
|
||||
저장합니다. 결과 파일은 ASAR 모듈의 파일 순서를 최적화 하는데 사용할 수 있습니다.
|
||||
Electron이 ASAR 파일을 읽을 때, 읽기 오프셋의 로그를 남기고 시스템 `tmpdir`에
|
||||
파일로 저장합니다. 결과 파일은 ASAR 모듈의 파일 순서를 최적화 하는데 사용할 수
|
||||
있습니다.
|
||||
|
||||
### `ELECTRON_ENABLE_STACK_DUMPING`
|
||||
|
||||
|
|
|
@ -2,15 +2,16 @@
|
|||
|
||||
> 메인 프로세스에서 렌더러 프로세스로 비동기 통신을 합니다.
|
||||
|
||||
`ipcMain` 모듈은 [EventEmitter](https://nodejs.org/api/events.html) 클래스의
|
||||
인스턴스입니다. 메인 프로세스에서 사용하면, 렌더러 프로세스(웹 페이지)에서 전달된
|
||||
동기, 비동기 메시지를 주고 받는 방법을 제공합니다. 렌더러 프로세스에서 메시지를 전달하면
|
||||
이 모듈을 통해 메시지를 받을 수 있습니다.
|
||||
`ipcMain` 모듈은 [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)
|
||||
클래스의 인스턴스입니다. 메인 프로세스에서 사용하면, 렌더러
|
||||
프로세스(웹 페이지)에서 전달된 동기, 비동기 메시지를 주고 받는 방법을
|
||||
제공합니다. 렌더러 프로세스에서 메시지를 전달하면 이 모듈을 통해 메시지를 받을
|
||||
수 있습니다.
|
||||
|
||||
## 메시지 전송
|
||||
|
||||
물론 메시지를 받는 것 말고도 메인 프로세스에서 렌더러 프로세스로 보내는 것도 가능합니다.
|
||||
자세한 내용은 [webContents.send][web-contents-send]를 참고하세요.
|
||||
물론 메시지를 받는 것 말고도 메인 프로세스에서 렌더러 프로세스로 보내는 것도
|
||||
가능합니다. 자세한 내용은 [webContents.send][web-contents-send]를 참고하세요.
|
||||
|
||||
* 메시지를 전송할 때 이벤트 이름은 `channel`이 됩니다.
|
||||
* 메시지에 동기로 응답할 땐 반드시 `event.returnValue`를 설정해야 합니다.
|
||||
|
@ -60,17 +61,18 @@ ipcRenderer.send('asynchronous-message', 'ping')
|
|||
* `channel` String
|
||||
* `listener` Function
|
||||
|
||||
이벤트에 대해 한 번만 작동하는 `listener` 함수를 등록합니다. 이 `listener`는 등록된
|
||||
후 `channel`에 보내지는 메시지에 한해 호출됩니다. 호출된 이후엔 리스너가 삭제됩니다.
|
||||
이벤트에 대해 한 번만 작동하는 `listener` 함수를 등록합니다. 이 `listener`는
|
||||
등록된 후 `channel`에 보내지는 메시지에 한해 호출됩니다. 호출된 이후엔 리스너가
|
||||
삭제됩니다.
|
||||
|
||||
### `ipcMain.removeListener(channel, listener)`
|
||||
|
||||
* `channel` String
|
||||
* `listener` Function
|
||||
|
||||
메시지 수신을 완료한 후, 더 이상의 콜백이 필요하지 않을 때 또는 몇 가지 이유로 채널의
|
||||
메시지 전송을 멈출수 없을 때, 이 함수를 통해 지정한 채널에 대한 콜백을 삭제할 수
|
||||
있습니다.
|
||||
메시지 수신을 완료한 후, 더 이상의 콜백이 필요하지 않을 때 또는 몇 가지 이유로
|
||||
채널의 메시지 전송을 멈출수 없을 때, 이 함수를 통해 지정한 채널에 대한 콜백을
|
||||
삭제할 수 있습니다.
|
||||
|
||||
지정한 `channel`에 대한 리스너를 저장하는 배열에서 지정한 `listener`를 삭제합니다.
|
||||
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
> 렌더러 프로세스에서 메인 프로세스로 비동기 통신을 합니다.
|
||||
|
||||
`ipcRenderer` 모듈은 [EventEmitter](https://nodejs.org/api/events.html) 클래스의
|
||||
인스턴스입니다. 렌더러 프로세스에서 메인 프로세스로 동기/비동기 메시지를 주고 받는
|
||||
방법을 제공합니다. 또한 메인 프로세스로부터 받은 메시지에 응답할 수도 있습니다.
|
||||
`ipcRenderer` 모듈은 [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)
|
||||
클래스의 인스턴스입니다. 렌더러 프로세스에서 메인 프로세스로 동기/비동기
|
||||
메시지를 주고 받는 방법을 제공합니다. 또한 메인 프로세스로부터 받은 메시지에
|
||||
응답할 수도 있습니다.
|
||||
|
||||
[ipcMain](ipc-main.md)에서 코드 예시를 확인할 수 있습니다.
|
||||
|
||||
|
@ -25,17 +26,18 @@
|
|||
* `channel` String
|
||||
* `listener` Function
|
||||
|
||||
이벤트에 대해 한 번만 작동하는 `listener` 함수를 등록합니다. 이 `listener`는 등록된
|
||||
후 `channel`에 보내지는 메시지에 한해 호출됩니다. 호출된 이후엔 리스너가 삭제됩니다.
|
||||
이벤트에 대해 한 번만 작동하는 `listener` 함수를 등록합니다. 이 `listener`는
|
||||
등록된 후 `channel`에 보내지는 메시지에 한해 호출됩니다. 호출된 이후엔 리스너가
|
||||
삭제됩니다.
|
||||
|
||||
### `ipcRenderer.removeListener(channel, listener)`
|
||||
|
||||
* `channel` String
|
||||
* `listener` Function
|
||||
|
||||
메시지 수신을 완료한 후, 더 이상의 콜백이 필요하지 않을 때 또는 몇 가지 이유로 채널의
|
||||
메시지 전송을 멈출수 없을 때, 이 함수를 통해 지정한 채널에 대한 콜백을 삭제할 수
|
||||
있습니다.
|
||||
메시지 수신을 완료한 후, 더 이상의 콜백이 필요하지 않을 때 또는 몇 가지 이유로
|
||||
채널의 메시지 전송을 멈출수 없을 때, 이 함수를 통해 지정한 채널에 대한 콜백을
|
||||
삭제할 수 있습니다.
|
||||
|
||||
지정한 `channel`에 대한 리스너를 저장하는 배열에서 지정한 `listener`를 삭제합니다.
|
||||
|
||||
|
@ -54,9 +56,9 @@
|
|||
* `channel` String
|
||||
* `arg` (optional)
|
||||
|
||||
`channel`을 통해 메인 프로세스에 비동기 메시지를 보냅니다. 그리고 필요에 따라 임의의
|
||||
인수를 사용할 수도 있습니다. 인수들은 내부적으로 JSON 포맷으로 직렬화 되며, 이후 함수와
|
||||
프로토타입 체인은 포함되지 않게 됩니다.
|
||||
`channel`을 통해 메인 프로세스에 비동기 메시지를 보냅니다. 그리고 필요에 따라
|
||||
임의의 인수를 사용할 수도 있습니다. 인수들은 내부적으로 JSON 포맷으로 직렬화
|
||||
되며, 이후 함수와 프로토타입 체인은 포함되지 않게 됩니다.
|
||||
|
||||
메인 프로세스는 `ipcMain` 모듈의 `channel` 이벤트를 통해
|
||||
이벤트를 리스닝 할 수 있습니다.
|
||||
|
@ -66,15 +68,15 @@
|
|||
* `channel` String
|
||||
* `arg` (optional)
|
||||
|
||||
`channel`을 통해 메인 프로세스에 동기 메시지를 보냅니다. 그리고 필요에 따라 임의의
|
||||
인수를 사용할 수도 있습니다. 인수들은 내부적으로 JSON 포맷으로 직렬화 되며, 이후 함수와
|
||||
프로토타입 체인은 포함되지 않게 됩니다.
|
||||
`channel`을 통해 메인 프로세스에 동기 메시지를 보냅니다. 그리고 필요에 따라
|
||||
임의의 인수를 사용할 수도 있습니다. 인수들은 내부적으로 JSON 포맷으로 직렬화
|
||||
되며, 이후 함수와 프로토타입 체인은 포함되지 않게 됩니다.
|
||||
|
||||
메인 프로세스는 `ipcMain` 모듈을 통해 `channel` 이벤트를 리스닝 할 수 있고,
|
||||
`event.returnValue`로 회신 할 수 있습니다.
|
||||
|
||||
**참고:** 동기 메서드는 모든 렌더러 프로세스의 작업을 일시 중단시킵니다. 사용 목적이
|
||||
확실하지 않다면 사용하지 않는 것이 좋습니다.
|
||||
**참고:** 동기 메서드는 모든 렌더러 프로세스의 작업을 일시 중단시킵니다. 사용
|
||||
목적이 확실하지 않다면 사용하지 않는 것이 좋습니다.
|
||||
|
||||
### `ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])`
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
`remote` 모듈은 메인 프로세스와 렌더러 프로세스(웹 페이지) 사이의 inter-process
|
||||
(IPC) 통신을 간단하게 추상화 한 모듈입니다.
|
||||
|
||||
Electron의 메인 프로세스에선 GUI와 관련 있는(`dialog`, `menu`등) 모듈만 사용할 수
|
||||
있습니다. 렌더러 프로세스에서 이러한 모듈들을 사용하려면 `ipc` 모듈을 통해 메인
|
||||
프로세스와 inter-process 통신을 해야 합니다. 또한, `remote` 모듈을 사용하면
|
||||
Electron의 메인 프로세스에선 GUI와 관련 있는(`dialog`, `menu`등) 모듈만 사용할
|
||||
수 있습니다. 렌더러 프로세스에서 이러한 모듈들을 사용하려면 `ipc` 모듈을 통해
|
||||
메인 프로세스와 inter-process 통신을 해야 합니다. 또한, `remote` 모듈을 사용하면
|
||||
inter-process 통신을 하지 않고도 간단한 API를 통해 직접 메인 프로세스의 모듈과
|
||||
메서드를 사용할 수 있습니다. 이 개념은 Java의 [RMI][rmi]와 비슷합니다.
|
||||
|
||||
|
@ -20,20 +20,21 @@ let win = new BrowserWindow({width: 800, height: 600})
|
|||
win.loadURL('https://github.com')
|
||||
```
|
||||
|
||||
**참고:** 반대로 메인 프로세스에서 렌더러 프로세스에 접근 하려면 [webContents.executeJavascript](web-contents.md#webcontentsexecutejavascriptcode-usergesture-callback)
|
||||
**참고:** 반대로 메인 프로세스에서 렌더러 프로세스에 접근 하려면
|
||||
[webContents.executeJavascript](web-contents.md#contentsexecutejavascriptcode-usergesture-callback)
|
||||
메서드를 사용하면 됩니다.
|
||||
|
||||
## Remote 객체
|
||||
|
||||
`remote` 모듈로부터 반환된 각 객체(메서드 포함)는 메인 프로세스의 객체를 추상화 한
|
||||
객체입니다. (우리는 그것을 remote 객체 또는 remote 함수라고 부릅니다) Remote 모듈의
|
||||
메서드를 호출하거나, 객체에 접근하거나, 생성자로 객체를 생성하는 등의 작업은 실질적으로
|
||||
동기형 inter-process 메시지를 보냅니다.
|
||||
`remote` 모듈로부터 반환된 각 객체(메서드 포함)는 메인 프로세스의 객체를 추상화
|
||||
한 객체입니다. (우리는 그것을 remote 객체 또는 remote 함수라고 부릅니다) Remote
|
||||
모듈의 메서드를 호출하거나, 객체에 접근하거나, 생성자로 객체를 생성하는 등의
|
||||
작업은 실질적으로 동기형 inter-process 메시지를 보냅니다.
|
||||
|
||||
위의 예시에서 사용한 두 `BrowserWindow`와 `win`은 remote 객체입니다. 그리고
|
||||
`new BrowserWindow`이 생성하는 `BrowserWindow` 객체는 렌더러 프로세스에서 생성되지
|
||||
않습니다. 대신에 이 `BrowserWindow` 객체는 메인 프로세스에서 생성되며 렌더러
|
||||
프로세스에 `win` 객체와 같이 이에 대응하는 remote 객체를 반환합니다.
|
||||
`new BrowserWindow`이 생성하는 `BrowserWindow` 객체는 렌더러 프로세스에서
|
||||
생성되지 않습니다. 대신에 이 `BrowserWindow` 객체는 메인 프로세스에서 생성되며
|
||||
렌더러 프로세스에 `win` 객체와 같이 이에 대응하는 remote 객체를 반환합니다.
|
||||
|
||||
**참고:** remote 객체가 처음 참조될 때 표시되는
|
||||
[enumerable 속성][enumerable-properties]은 remote를 통해서만 접근할 수 있습니다.
|
||||
|
@ -45,26 +46,27 @@ win.loadURL('https://github.com')
|
|||
## Remote 객체의 생명 주기
|
||||
|
||||
Electron은 렌더러 프로세스의 remote 객체가 살아있는 한(다시 말해서 GC(garbage
|
||||
collection)가 일어나지 않습니다) 대응하는 메인 프로세스의 객체는 릴리즈되지 않습니다.
|
||||
Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의 참조가 해제되어야만 합니다.
|
||||
collection)가 일어나지 않습니다) 대응하는 메인 프로세스의 객체는 릴리즈되지
|
||||
않습니다. Remote 객체가 GC 되려면 대응하는 메인 프로세스 내부 객체의 참조가
|
||||
해제되어야만 합니다.
|
||||
|
||||
만약 remote 객체가 렌더러 프로세스에서 누수가 생겼다면 (예시: 맵에 저장하고 할당
|
||||
해제하지 않음) 대응하는 메인 프로세스의 객체도 누수가 생깁니다. 그래서 remote 객체를
|
||||
사용할 땐 메모리 누수가 생기지 않도록 매우 주의해서 사용해야 합니다.
|
||||
해제하지 않음) 대응하는 메인 프로세스의 객체도 누수가 생깁니다. 그래서 remote
|
||||
객체를 사용할 땐 메모리 누수가 생기지 않도록 매우 주의해서 사용해야 합니다.
|
||||
|
||||
참고로 문자열, 숫자와 같은 원시 값 타입은 복사에 의한 참조로 전달됩니다.
|
||||
|
||||
## 메인 프로세스로 콜백 넘기기
|
||||
|
||||
메인 프로세스의 코드는 `remote` 모듈을 통해 렌더러 프로세스가 전달하는 콜백 함수를
|
||||
받을 수 있습니다. 하지만 이 작업은 반드시 주의를 기울여 사용해야 합니다.
|
||||
메인 프로세스의 코드는 `remote` 모듈을 통해 렌더러 프로세스가 전달하는 콜백
|
||||
함수를 받을 수 있습니다. 하지만 이 작업은 반드시 주의를 기울여 사용해야 합니다.
|
||||
|
||||
첫째, 데드락을 피하기 위해 메인 프로세스로 전달된 콜백들은 비동기로 호출됩니다. 이러한
|
||||
이유로 메인 프로세스에 전달된 콜백의 반환 값을 내부 함수에서 언제나 정상적으로 받을
|
||||
것이라고 예측해선 안됩니다.
|
||||
첫째, 데드락을 피하기 위해 메인 프로세스로 전달된 콜백들은 비동기로 호출됩니다.
|
||||
이러한 이유로 메인 프로세스에 전달된 콜백의 반환 값을 내부 함수에서 언제나
|
||||
정상적으로 받을 것이라고 예측해선 안됩니다.
|
||||
|
||||
예를 들어 메인 프로세스에서 `Array.map` 같은 메서드를 사용할 때 렌더러 프로세스에서
|
||||
전달된 함수를 사용해선 안됩니다:
|
||||
예를 들어 메인 프로세스에서 `Array.map` 같은 메서드를 사용할 때 렌더러
|
||||
프로세스에서 전달된 함수를 사용해선 안됩니다:
|
||||
|
||||
```javascript
|
||||
// mapNumbers.js 메인 프로세스
|
||||
|
@ -88,15 +90,15 @@ const withLocalCb = mapNumbers.withLocalCallback()
|
|||
console.log(withRendererCb, withLocalCb) // [undefined, undefined, undefined], [2, 3, 4]
|
||||
```
|
||||
|
||||
보다시피 동기적인 렌더러 콜백 함수의 반환 값은 예상되지 않은 값입니다. 그리고 메인
|
||||
프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
|
||||
보다시피 동기적인 렌더러 콜백 함수의 반환 값은 예상되지 않은 값입니다. 그리고
|
||||
메인 프로세스에서 처리한 함수의 반환 값과 일치하지 않습니다.
|
||||
|
||||
둘째, 콜백들은 메인 프로세스로 전달, 호출된 이후에도 자동으로 함수의 참조가 릴리즈 되지
|
||||
않습니다. 함수 참조는 메인 프로세스에서 GC가 일어나기 전까지 계속 프로세스에 남아있게
|
||||
됩니다.
|
||||
둘째, 콜백들은 메인 프로세스로 전달, 호출된 이후에도 자동으로 함수의 참조가
|
||||
릴리즈 되지 않습니다. 함수 참조는 메인 프로세스에서 GC가 일어나기 전까지 계속
|
||||
프로세스에 남아있게 됩니다.
|
||||
|
||||
다음 코드를 보면 느낌이 올 것입니다. 이 예시는 remote 객체에 `close` 이벤트 콜백을
|
||||
등록합니다:
|
||||
다음 코드를 보면 느낌이 올 것입니다. 이 예시는 remote 객체에 `close` 이벤트
|
||||
콜백을 등록합니다:
|
||||
|
||||
```javascript
|
||||
const remote = require('remote')
|
||||
|
@ -106,18 +108,19 @@ remote.getCurrentWindow().on('close', () => {
|
|||
})
|
||||
```
|
||||
|
||||
하지만 이 코드와 같이 등록된 이벤트는 명시적으로 제거하지 않는 이상 콜백 함수의 참조가
|
||||
계속해서 메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지 않으면 매 번
|
||||
창을 새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이 제거되지 않고
|
||||
계속해서 쌓이면서 메모리 누수가 발생합니다.
|
||||
하지만 이 코드와 같이 등록된 이벤트는 명시적으로 제거하지 않는 이상 콜백 함수의
|
||||
참조가 계속해서 메인 프로세스에 남아있게 됩니다. 만약 명시적으로 콜백을 제거하지
|
||||
않으면 매 번 창을 새로고침 할 때마다 콜백을 새로 설치합니다. 게다가 이전 콜백이
|
||||
제거되지 않고 계속해서 쌓이면서 메모리 누수가 발생합니다.
|
||||
|
||||
설상가상으로 이전에 등록된 콜백의 컨텍스트가 릴리즈 되고 난 후 (e.g. 페이지 새로고침)
|
||||
`close` 이벤트가 발생하면 예외가 발생하고 메인 프로세스가 작동 중지됩니다.
|
||||
설상가상으로 이전에 등록된 콜백의 컨텍스트가 릴리즈 되고 난 후 (e.g. 페이지
|
||||
새로고침) `close` 이벤트가 발생하면 예외가 발생하고 메인 프로세스가 작동
|
||||
중지됩니다.
|
||||
|
||||
이러한 문제를 피하려면 렌더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를 사용 후
|
||||
확실하게 제거해야 합니다. 작업 후 이벤트 콜백을 포함하여 책임 있게 함수의 참조를
|
||||
제거하거나 메인 프로세스에서 렌더러 프로세스가 종료될 때 내부적으로 함수 참조를
|
||||
제거하도록 설계해야 합니다.
|
||||
이러한 문제를 피하려면 렌더러 프로세스에서 메인 프로세스로 넘긴 함수의 참조를
|
||||
사용 후 확실하게 제거해야 합니다. 작업 후 이벤트 콜백을 포함하여 책임 있게
|
||||
함수의 참조를 제거하거나 메인 프로세스에서 렌더러 프로세스가 종료될 때
|
||||
내부적으로 함수 참조를 제거하도록 설계해야 합니다.
|
||||
|
||||
## 메인 프로세스의 빌트인 모듈에 접근
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
이 모듈은 `app` 모듈의 `ready` 이벤트가 발생하기 전까지 포함하거나 사용할 수
|
||||
없습니다.
|
||||
|
||||
`screen`은 [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)를
|
||||
`screen`은 [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)를
|
||||
상속 받았습니다.
|
||||
|
||||
**참고:** 렌더러 / DevTools에선 이미 DOM 속성이 `window.screen`을 가지고 있으므로
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
> Node.js와 Electron API를 사용하는 방법.
|
||||
|
||||
Electron은 모든 [Node.js의 built-in 모듈](http://nodejs.org/api/)과 third-party
|
||||
Electron은 모든 [Node.js의 built-in 모듈](https://nodejs.org/api/)과 third-party
|
||||
node 모듈을 완벽하게 지원합니다. ([네이티브 모듈](../tutorial/using-native-node-modules.md)
|
||||
포함)
|
||||
|
||||
또한 Electron은 네이티브 데스크톱 애플리케이션을 개발 할 수 있도록 추가적인 built-in
|
||||
모듈을 제공합니다. 몇몇 모듈은 메인 프로세스에서만 사용할 수 있고 어떤 모듈은 렌더러
|
||||
프로세스(웹 페이지)에서만 사용할 수 있습니다. 또한 두 프로세스 모두 사용할 수 있는
|
||||
모듈도 있습니다.
|
||||
또한 Electron은 네이티브 데스크톱 애플리케이션을 개발 할 수 있도록 추가적인
|
||||
built-in 모듈을 제공합니다. 몇몇 모듈은 메인 프로세스에서만 사용할 수 있고 어떤
|
||||
모듈은 렌더러 프로세스(웹 페이지)에서만 사용할 수 있습니다. 또한 두 프로세스
|
||||
모두 사용할 수 있는 모듈도 있습니다.
|
||||
|
||||
기본적인 규칙으로 [GUI][gui]와 저 수준 시스템에 관련된 모듈들은 오직 메인
|
||||
프로세스에서만 사용할 수 있습니다. [메인 프로세스 vs. 렌더러 프로세스](../tutorial/quick-start.md#메인-프로세스)
|
||||
|
|
|
@ -228,4 +228,4 @@ Returns [`Rectangle`](structures/rectangle.md)
|
|||
|
||||
Returns `Boolean` - 트레이 아이콘이 소멸되었는지 여부.
|
||||
|
||||
[event-emitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter
|
||||
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
> 웹 페이지를 렌더링하고 제어합니다.
|
||||
|
||||
`webContents`는 [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)를
|
||||
`webContents`는 [EventEmitter](http://nodejs.org/api/events.html#events_class_eventemitter)를
|
||||
상속받았습니다. 웹 페이지의 렌더링과 관리를 책임지며
|
||||
[`BrowserWindow`](browser-window.md)의 속성입니다. 다음은 `webContents` 객체에
|
||||
접근하는 예시입니다:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# 온라인/오프라인 이벤트 감지
|
||||
|
||||
온라인/오프라인 이벤트는 다음 예시와 같이 렌더러 프로세스에서 표준 HTML5 API를 이용하여
|
||||
구현할 수 있습니다.
|
||||
온라인/오프라인 이벤트는 다음 예시와 같이 렌더러 프로세스에서 표준 HTML5 API를
|
||||
이용하여 구현할 수 있습니다.
|
||||
|
||||
_main.js_
|
||||
|
||||
|
@ -36,9 +36,9 @@ _online-status.html_
|
|||
</html>
|
||||
```
|
||||
|
||||
메인 프로세스에서 이 이벤트를 처리할 필요가 있는 경우 이벤트를 메인 프로세스로 보낼 수
|
||||
있습니다. 메인 프로세스는 `navigator` 객체를 가지고 있지 않기 때문에 이 이벤트를 직접
|
||||
사용할 수는 없습니다.
|
||||
메인 프로세스에서 이 이벤트를 처리할 필요가 있는 경우 이벤트를 메인 프로세스로
|
||||
보낼 수 있습니다. 메인 프로세스는 `navigator` 객체를 가지고 있지 않기 때문에 이
|
||||
이벤트를 직접 사용할 수는 없습니다.
|
||||
|
||||
대신 다음 예시와 같이 Electron의 inter-process communication(ipc) 유틸리티를
|
||||
사용하면 이벤트를 메인 프로세스로 전달할 수 있습니다.
|
||||
|
@ -79,3 +79,11 @@ _online-status.html_
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
**참고:** Electron 이 근거리 통신망 (LAN) 또는 라우터에 연결할 수 없는 경우,
|
||||
오프라인으로 간주됩니다; 그 외의 경우는 `true` 를 반환합니다. 그래서
|
||||
`navigator.onLine` 이 `false` 값을 반환하면 Electron 이 오프라인이라고 가정할 수
|
||||
있습니다. 하지만 `true` 값은 Electron 이 인터넷에 접근할 수 있다고 가정할 수
|
||||
없습니다. 항상 "연결된" 가상 이더넷 어댑터를 가지고 있는 가상화 소프트웨어
|
||||
상에서 작동하는 경우 잘못된 반응을 얻을 수 있습니다. 그러므로, Electron 의
|
||||
인터넷 접근 상태를 확인하려면, 확인하기 위한 추가적인 개발을 해야합니다.
|
||||
|
|
Loading…
Reference in a new issue