Socket.io-client: ๋ฒ„์ „ 2.2๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ˜์‘์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 12์›” 21์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: socketio/socket.io-client

2.1.1๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ƒˆ๋กœ์šด cors ๊ด€๋ฆฌ ๋ณ€๊ฒฝ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜๋™์œผ๋กœ ์›์‚ฐ์ง€ ์„ค์ •์€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ๋””๋ฒ„๊ฑฐ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ

reconnection: true,
reconnectionDelay: 500,
jsonp: false,
reconnectionAttempts: Infinity,
transports: ['websocket']

์„ค์ •

  • ์šด์˜ ์ฒด์ œ: iOS
  • ๋ธŒ๋ผ์šฐ์ €: ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ
  • socket.io ๋ฒ„์ „: 2.2.0

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ 0.60์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  32 ๋Œ“๊ธ€

๋‘ ํ”Œ๋žซํผ(์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ) 2.1.1 ๋ชจ๋‘์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ๋””๋ฒ„๊ฑฐ๋ฅผ ์ผค ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ

2.1.1๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ 2.1.1์„ ๋˜๋Œ๋ ค๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/socketio/engine.io-client/pull/607์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

@benhjames ์ˆ˜์ • ์‚ฌํ•ญ์œผ๋กœ React Native์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ํ˜„์žฌ React Native์—์„œ ๋ฌธ์ œ ์—†์ด [email protected] ( [email protected] ๊ฐ€์ ธ์˜ด)์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

engine.io-client ๊ฐ€ 3.3.2์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์›น ์†Œ์ผ“์— ๋Œ€ํ•œ React Native ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ƒ

@benhjames @darrachequesne ์†Œ์ผ“์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. [email protected] ([email protected]๋ฅผ ๊ฐ€์ ธ์˜ด) ๋ฐ node_modules์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—ฌ์ „ํžˆ ํ™•์ธํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

`'socket.io-client'์—์„œ io ๊ฐ€์ ธ์˜ค๊ธฐ;

๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋ณธ ํด๋ž˜์Šค HomeScreen์€ React.Component {๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ์ž(์†Œํ’ˆ){
์Šˆํผ(์†Œํ’ˆ);
this.socket = io('ws://192.168.0.107:8080/endpoint',{
์žฌ์—ฐ๊ฒฐ: ์‚ฌ์‹ค,
์žฌ์—ฐ๊ฒฐ ์ง€์—ฐ: 500,
jsonp: ๊ฑฐ์ง“,
์žฌ์—ฐ๊ฒฐ ์‹œ๋„ ํšŸ์ˆ˜: ๋ฌดํ•œ๋Œ€,
์ „์†ก: ['์›น ์†Œ์ผ“']
});
this.socket.on('connect_error', (์˜ค๋ฅ˜) => {
console.log(์˜ค๋ฅ˜)
});
}
`

์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Error: websocket error at WS.Transport.onError (transport.js:67) at WebSocket.ws.onerror (websocket.js:157) at WebSocket.dispatchEvent (event-target.js:172) at WebSocket.js:289 at RCTDeviceEventEmitter.emit (EventEmitter.js:190) at MessageQueue.__callFunction (MessageQueue.js:349) at MessageQueue.js:106 at MessageQueue.__guard (MessageQueue.js:297) at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105) at debuggerWorker.js:72

์—”๋“œ ํฌ์ธํŠธ์™€ ๊ฐ™์€ ๋‚˜์—๊ฒŒ ์™ธ๋ชจ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  - ๊ทธ๊ฒƒ์€ํ•ด์•ผ http ๋˜๋Š” https ํ”„๋กœํ† ์ฝœ ๋งํฌ๊ฐ€ ์•„๋‹Œ ws ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๐Ÿ‘

@benhjames ์ด์ „์— WebSocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API๋กœ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋™์ผํ•œ ํ”„๋กœํ† ์ฝœ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

socket.io(WebSocket API์™€ ๋‹ฌ๋ฆฌ)๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ HTTP(S) ํ”„๋กœํ† ์ฝœ URI๋งŒ ํ—ˆ์šฉํ•˜์ง€๋งŒ( ์—ฌ๊ธฐ ๋ฌธ์„œ ์ฐธ์กฐ ), ๋ฐฐํ›„์—์„œ WS ํ”„๋กœํ† ์ฝœ์„ _์‚ฌ์šฉ_ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ io('http://192.168.0.107:8080/endpoint', ...) ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

@benhjames ์—…๋ฐ์ดํŠธ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ws:// ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ /endpoint ๋Š” ์—”๋“œํฌ์ธํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(v2.x ํ˜„์žฌ ๊ตฌํ˜„)์— ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

this.socket = io('ws://192.168.0.107:8080', {
  path: '/endpoint',
  reconnection: true,
  reconnectionDelay: 500,
  jsonp: false,
  reconnectionAttempts: Infinity,
  transports: ['websocket']
});

@darrachequesne ์œ„์˜ ๊ตฌํ˜„์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์˜ฌ๋ฐ”๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์„ค์ • ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด SocketIO ์„œ๋ฒ„ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

WebSocket API์—์„œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ Socket.io API๋กœ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

websocket error

Stack trace:
  null:null in WS.Transport.onError
  node_modules/engine.io-client/lib/transports/websocket.js:178:8 in WebSocket.ws.onerror
  node_modules/event-target-shim/lib/event-target.js:172:38 in WebSocket.dispatchEvent
  node_modules/react-native/Libraries/WebSocket/WebSocket.js:289:13 in <unknown>
  node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:190:32 in RCTDeviceEventEmitter.emit
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:349:41 in MessageQueue.__callFunction
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:106:11 in <unknown>
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:297:8 in MessageQueue.__guard
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:105:9 in MessageQueue.callFunctionReturnFlushedQueue
  http://192.168.0.103:19001/debugger-ui/debuggerWorker.js:72:58 in <unknown>

socket.io ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ง๋ ฌํ™” ํ•ด์ œํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋…ผ๋ฆฌ ์—†์ด WebSocket API์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ socket.io๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์‚ฌ์‹ค์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์—์„œ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@benhjames ๋งž์Šต๋‹ˆ๋‹ค . ๋ฐฑ์—”๋“œ ์ฝ”๋“œ์— https://docs.oracle.com/javaee/7/api/javax/websocket/package-summary.html ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์„ค๋ช…์ด ๋ฉ๋‹ˆ๋‹ค! Socket.io๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ _๋ชจ๋‘_์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

@benhjames @darrachequesne ์ด์ œ ๋ฐฑ์—”๋“œ์—์„œ socket.io๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. socket.io๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ React Native๋ฅผ ํ†ตํ•ด socket.io๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋‹๋ผ JS(Working Perfectly fine) :

```

์œ„ ๋‹ต๋ณ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

์ง€์›ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. https://github.com/mrniko/netty-socketio/issues/614

์›น ์†Œ์ผ“์ด๋‚˜ ํด๋ง์„ ์„ ํƒํ•˜๋”๋ผ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. websocket_error ๋˜๋Š” xhr ํด๋ง ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

URL์€ IP(http://192.168.1.112:3000)์ด๊ณ  React Native Expo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์ „ํ™”์—์„œ ๋™์ผํ•œ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์˜ ์ปดํ“จํ„ฐ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํƒ ์ถ”์ ์ด๋‚˜ ์ •๋ณด๊ฐ€ ๋” ํ•„์š”ํ•˜๋ฉด ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

socket.io 2.2.0 // ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘
engine.io 3.3.2 // ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘

์›น ์†Œ์ผ“๊ณผ ํด๋ง ์ „์†ก์ด ๋ชจ๋‘ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ socket.io ์™ธ๋ถ€์˜ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ socket.io ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ React Native ์™ธ๋ถ€์˜ socket.io ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์— ์ผ๋ฐ˜์ ์ธ fetch ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋„คํŠธ์›Œํฌ ๋˜๋Š” React Native ํ™˜๊ฒฝ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : CORS ๊ด€๋ จ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ JS ํด๋ผ์ด์–ธํŠธ์— ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Access to XMLHttpRequest at 'http://192.168.1.112:3000/socket.io/?EIO=3&transport=polling&t=MfV8vhI' from origin 'http://192.168.1.112:5000' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

์ด๊ฒƒ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์กฐ์–ธ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์ด github์—์„œ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „์„ ์‹œ๋„ํ•˜์—ฌ RN android ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

npm i socketio/engine.io-client#3.3.2 -S

๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ 0.60์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

RN 0.60.5๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Android ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

socket.io-client ๋ฒ„์ „ 2.0.4, 2.1.1, 2.2.0์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

yarn add socketio/engine.io-client#3.3.2 ์‹œ๋„

#1305 ์ฐธ์กฐ - Android์—์„œ๋Š” https๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ AndroidManifest์—์„œ usesCleartextTraffic ์†์„ฑ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

v2.3 ์‹œ๋„

Expo SDK v34 ๋ฐ v35(RN 0.59)๋กœ ์‹œ๋„ํ–ˆ๊ณ  ๋‹ค๋ฅธ ๋ฒ„์ „(2.1.1, 2.1.0, 2.2.0)๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ socket.io-client๋ฅผ 1.7.2( yarn add [email protected] )๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€. ๋‚˜๋Š” 2.3.0์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :-)

@lionbur ์•ˆ๋…•ํ•˜์„ธ์š”. 0.59์˜ ๋งŽ์€ ๋ฏธ๋‹ˆ ๋ฒ„์ „์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? 0.59.9?

๋ฏธ๋ฆฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰