Skip to content

Commit 07c70c0

Browse files
[웹소켓] 기 번역된 내용 보충
1 parent 22ea3b7 commit 07c70c0

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

5-network/11-websocket/article.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
이런 특징 때문에 웹소켓은 온라인 게임이나 주식 트레이딩 시스템같이 데이터 교환이 지속적으로 이뤄져야 하는 서비스에 아주 적합합니다.
66

7-
## A simple example
7+
## 간단한 예시
88

9-
웹소켓 연결을 만들려면 `new WebSocket`을 호출하면 되는데, 이때 `ws`라는 특수 프로토콜을 사용합니다.
9+
웹소켓 커넥션을 만들려면 `new WebSocket`을 호출하면 되는데, 이때 `ws`라는 특수 프로토콜을 사용합니다.
1010

1111
```js
1212
let socket = new WebSocket("*!*ws*/!*://javascript.info");
@@ -19,14 +19,14 @@ let socket = new WebSocket("*!*ws*/!*://javascript.info");
1919

2020
`ws://`를 사용해 데이터를 전송하면 데이터가 암호화되어있지 않은 채로 전송되기 때문에 데이터가 그대로 노출됩니다. 그런데 아주 오래된 프락시 서버는 웹소켓이 무엇인지 몰라서 '이상한' 헤더가 붙은 요청이 들어왔다고 판단하고 연결을 끊어버립니다.
2121

22-
반면 `wss://`는 TSL(전송 계층 보안(Transport Layer Security))이라는 보안 계층을 통과해 전달되므로 송신자 측에서 데이터가 암호화되고, 복호화는 수신자 측에서 이뤄지게 됩니다. 따라서 데이터가 담긴 패킷은 암호화된 상태로 프락시 서버를 통과하므로 프락시 서버는 패킷 내부를 볼 수 없게 됩니다.
22+
반면 `wss://`는 TSL(전송 계층 보안(Transport Layer Security))이라는 보안 계층을 통과해 전달되므로 송신자 측에서 데이터가 암호화되고, 복호화는 수신자 측에서 이뤄지게 됩니다. 따라서 데이터가 담긴 패킷이 암호화된 상태로 프락시 서버를 통과하므로 프락시 서버는 패킷 내부를 볼 수 없게 됩니다.
2323
```
2424
2525
소켓이 정상적으로 만들어지면 아래 네 개의 이벤트를 사용할 수 있게 됩니다.
26-
- **`open`** -- 커넥션이 제대로 만들어짐
27-
- **`message`** -- data received,
28-
- **`error`** -- 웹소켓 에러
29-
- **`close`** -- 커넥션 종료
26+
- **`open`** -- 커넥션이 제대로 만들어졌을 때 발생함
27+
- **`message`** -- 데이터를 수신하였을 때 발생함
28+
- **`error`** -- 에러가 생겼을 때 발생함
29+
- **`close`** -- 커넥션이 종료되었을 때 발생함
3030
3131
커넥션이 만들어진 상태에서 무언가를 보내고 싶으면 `socket.send(data)`를 사용하면 됩니다.
3232
@@ -38,7 +38,7 @@ let socket = new WebSocket("wss://javascript.info/article/websocket/demo/hello")
3838
socket.onopen = function(e) {
3939
alert("[open] 커넥션이 만들어졌습니다.");
4040
alert("데이터를 서버에 전송해봅시다.");
41-
socket.send("My name is Bora.");
41+
socket.send("My name is Bora");
4242
};
4343
4444
socket.onmessage = function(event) {
@@ -66,7 +66,7 @@ socket.onerror = function(error) {
6666

6767
이제 여러분은 웹소켓 통신이 어떻게 이뤄지는지를 알게 되셨습니다. 생각보다 꽤 간단하죠?
6868

69-
그렇긴 하지만 실무 수준에서 웹소켓을 활용할 수 있도록 웹소켓에 대해 좀 더 자세히 알아봅시다.
69+
지금부턴 실무 수준에서 웹소켓을 활용할 수 있도록 웹소켓에 대해 좀 더 자세히 알아봅시다.
7070

7171
## 웹소켓 핸드셰이크
7272

@@ -76,7 +76,7 @@ socket.onerror = function(error) {
7676

7777
![](websocket-handshake.svg)
7878

79-
이번엔 `new WebSocket("wss://javascript.info/chat")`을 호출해 최초 요청이 전송되었다고 가정하고 이때의 요청 헤더를 살펴봅시다.
79+
이번엔 `new WebSocket("wss://javascript.info/chat")`을 호출해 최초 요청을 전송했다고 가정하고, 이때의 요청 헤더를 살펴봅시다.
8080

8181
```
8282
GET /chat
@@ -98,7 +98,7 @@ Sec-WebSocket-Version: 13
9898
바닐라 자바스크립트로 헤더를 설정하는 건 기본적으로 막혀있기 때문에 `XMLHttpRequest`나 `fetch`로 위 예시와 유사한 헤더를 가진 HTTP 요청을 만들 수 없습니다.
9999
```
100100

101-
클라이언트 측에서 보낸 웹소켓 통신 요청을 최초로 받고 이에 동의하면, 서버는 상태 코드 101이 담긴 응답을 클라이언트에 전송합니다.
101+
서버는 클라이언트 측에서 보낸 웹소켓 통신 요청을 최초로 받고 이에 동의하면, 상태 코드 101이 담긴 응답을 클라이언트에 전송합니다.
102102

103103
```
104104
101 Switching Protocols
@@ -107,27 +107,27 @@ Connection: Upgrade
107107
Sec-WebSocket-Accept: hsBlbuDTkk24srzEOTBUlZAlC2g=
108108
```
109109

110-
여기서 `Sec-WebSocket-Accept``Sec-WebSocket-Key`와 밀접한 관계를 갖습니다. 브라우저는 특별한 알고리즘을 사용해 만들어지는 `Sec-WebSocket-Accept` 값을 서버로부터 받아, 이 응답이 자신이 보낸 요청에 대응하는 응답인지를 확인합니다.
110+
여기서 `Sec-WebSocket-Accept``Sec-WebSocket-Key`와 밀접한 관계가 있습니다. 브라우저는 특별한 알고리즘을 사용해 서버에서 생성한 `Sec-WebSocket-Accept` 값을 받아, 이 응답이 자신이 보낸 요청에 대응하는 응답인지를 확인합니다.
111111

112-
이렇게 핸드셰이크가 끝나면 HTTP 프로토콜이 아닌 웹소켓 프로토콜을 사용하여 데이터가 전송되기 시작합니다. 웹소켓 프로토콜을 사용한 데이터 전송은 조금 후에 자세히 살펴볼 예정입니다.
112+
이렇게 핸드셰이크가 끝나면 HTTP 프로토콜이 아닌 웹소켓 프로토콜을 사용해 데이터가 전송되기 시작합니다. 전홍이 시작된 후에 어떤일이 일어나는지는 조금 후에 자세히 살펴보겠습니다.
113113

114-
### extensions와 subprotocols 헤더
114+
### Extensions와 Subprotocols 헤더
115115

116-
웹소켓 통신은 `Sec-WebSocket-Extensions``Sec-WebSocket-Protocol` 헤더를 지원합니다. 두 헤더는 각각 웹소켓 프로토콜 기능을 확장(extension)할 때와 서브 프로토콜(subprotocal)을 사용해 데이터를 전송하려 할 때 사용합니다.
116+
웹소켓 통신은 `Sec-WebSocket-Extensions``Sec-WebSocket-Protocol` 헤더를 지원합니다. 두 헤더는 각각 웹소켓 프로토콜 기능을 확장(extension)할 때와 서브 프로토콜(subprotocal)을 사용해 데이터를 전송할 때 사용합니다.
117117

118118
각 헤더에 대한 예시를 살펴봅시다.
119119

120120
- `Sec-WebSocket-Extensions: deflate-frame` -- 이 헤더는 브라우저에서 데이터 압축(deflate)을 지원한다는 것을 의미합니다. `Sec-WebSocket-Extensions`은 브라우저에 의해 자동 생성되는데, 그 값엔 데이터 전송과 관련된 무언가나 웹소켓 프로토콜 기능 확장과 관련된 무언가가 여러 개 나열됩니다.
121121

122-
- `Sec-WebSocket-Protocol: soap, wamp` -- 이렇게 헤더가 설정되면 평범한 데이터가 아닌 [SOAP](http://en.wikipedia.org/wiki/SOAP)WAM (The WebSocket Application Messaging Protocol) 프로토콜을 준수하는 데이터를 전송하겠다는 것을 의미합니다. 웹소켓에서 지원하는 서브프로토콜 목록은 [IANA 카탈로그](http://www.iana.org/assignments/websocket/websocket.xml)에서 확인할 수 있습니다. 개발자는 이 헤더를 보고 앞으로 사용하게 될 데이터 포맷을 확인할 수 있습니다.
122+
- `Sec-WebSocket-Protocol: soap, wamp` -- 이렇게 헤더가 설정되면 평범한 데이터가 아닌 [SOAP](http://en.wikipedia.org/wiki/SOAP)WAMP(The WebSocket Application Messaging Protocol) 프로토콜을 준수하는 데이터를 전송하겠다는 것을 의미합니다. 웹소켓에서 지원하는 서브프로토콜 목록은 [IANA 카탈로그](http://www.iana.org/assignments/websocket/websocket.xml)에서 확인할 수 있습니다. 개발자는 이 헤더를 보고 앞으로 사용하게 될 데이터 포맷을 확인할 수 있습니다.
123123

124-
이 헤더들은 두 번째 매개변수에 값을 넣어 `new WebSocket`을 호출하면 설정할 수 있습니다. 서브 프로토콜 SOAP나 WAMP를 사용하고 싶다고 가정해 봅시다. 두 번째 매개변수에 다음과 같이 배열을 넣으면 됩니다.
124+
두 헤더는 `new WebSocket`두 번째 매개변수에 값을 넣어서 설정할 수 있습니다. 서브 프로토콜로 SOAP나 WAMP를 사용하고 싶다고 가정해 봅시다. 두 번째 매개변수에 다음과 같이 배열을 넣으면 됩니다.
125125

126126
```js
127127
let socket = new WebSocket("wss://javascript.info/chat", ["soap", "wamp"]);
128128
```
129129

130-
서버는 자신이 지원하는 익스텐션과 프로토콜을 응답 헤더에 담아 클라이언트에 전달해야 합니다.
130+
이때 서버는 지원 가능한 익스텐션과 프로토콜을 응답 헤더에 담아 클라이언트에 전달해야 합니다.
131131

132132
예시를 살펴봅시다. 요청 헤더는 다음과 같습니다.
133133

@@ -145,7 +145,7 @@ Sec-WebSocket-Protocol: soap, wamp
145145
*/!*
146146
```
147147
148-
이때 다음과 같은 응답이 왔다고 가정해봅시다.
148+
이때 서버가 다음과 같은 응답을 했다고 해봅시다.
149149
150150
```
151151
101 Switching Protocols

0 commit comments

Comments
 (0)