Tedious: λ…Έλ“œ js μ›Ή μ•±μ—μ„œ MSSql λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°λ‘œμ˜ ESOCKET μ—°κ²° 였λ₯˜

에 λ§Œλ“  2018λ…„ 09μ›” 25일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: tediousjs/tedious

μ•ˆλ…•ν•˜μ„Έμš” νŒ€,
ν˜„μž¬ μ„œλΉ„μŠ€μ— 더 λ§Žμ€ νŠΈλž˜ν”½μ΄ μžˆμ„ λ•Œ μ›Ή μ•±μ—μ„œ MsSql둜의 간헐적인 μ—°κ²° λ¬Έμ œκ°€ 자주 λ°œμƒν•©λ‹ˆλ‹€.
이 λ¬Έμ œμ— λŒ€ν•œ μ΅œμ’… ꢌμž₯ 사항이 μžˆμŠ΅λ‹ˆκΉŒ?

였λ₯˜ :
_{ μ—°κ²° 였λ₯˜: <에 μ—°κ²°ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.>:1433 - μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€(μ‹œν€€μŠ€)
Connection.tedious.once.errμ—μ„œ (D:\home\site\wwwroot\node_modules\mssql\lib\tedious.js:216:17)
Connection.gμ—μ„œ (events.js:291:16)
EmmitOneμ—μ„œ (events.js:96:13)
Connection.emitμ—μ„œ (events.js:188:7)
Connection.socketErrorμ—μ„œ (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:699:14)
D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:590:25
SequentialConnectionStrategy.connectμ—μ„œ (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:153:9)
Socket.onErrorμ—μ„œ (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:169:16)
EmmitOneμ—μ„œ (events.js:96:13)
Socket.emitμ—μ„œ (events.js:188:7)
μ½”λ“œ: 'ESOCKET',
원본 였λ₯˜:_

버전 μ„ΈλΆ€ 정보:
"μ§€λ£¨ν•œ": "2.0.1",
"mssql": "^4.0.4",

감사 ν•΄μš”,
ν”„λΌλΉˆ.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

Microsoft 곡식 μƒ˜ν”Œμ—μ„œ λ³΅μ‚¬ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

λ§ˆμ§€λ§‰μœΌλ‘œ "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" ν”„λ‘œν† μ½œμ—μ„œ TCP/IP ν”„λ‘œν† μ½œμ„ ν™œμ„±ν™”ν•˜μ—¬ 이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€."->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

λͺ¨λ“  19 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @Praven335 πŸ‘‹πŸ»

tedious 을(λ₯Ό) μ‚¬μš©ν•  λ•Œ 이 λ¬Έμ œμ— μ§λ©΄ν•˜κ²Œ λ˜μ–΄ μœ κ°μž…λ‹ˆλ‹€. μœ κ°μŠ€λŸ½κ²Œλ„ κ·€ν•˜κ°€ μ œκ³΅ν•œ μ •λ³΄λ‘œλŠ” ν˜„μž¬ 상황을 μ΄ν•΄ν•˜κΈ°μ— μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 더 λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? 예λ₯Ό λ“€μ–΄ λ‹€μŒμ„ μ•„λŠ” 것이 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

  • μ •ν™•νžˆ μ–΄λ–€ λ²„μ „μ˜ tedious λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?
  • 이 였λ₯˜λŠ” μ •ν™•νžˆ μ–Έμ œ λ°œμƒν•©λ‹ˆκΉŒ? stacktraceμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•  λ•Œ 이런 일이 λ°œμƒν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬μ „νžˆ λ™μ‹œμ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? tedious 자체의 λ¬Έμ œκ°€ μ•„λ‹ˆλΌ SQLServer 문제(당신이 μ–ΈκΈ‰ν•œ 높은 λΆ€ν•˜ λ•Œλ¬ΈμΌ 수 있음)일 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

감사 ν•΄μš”! πŸ™‡πŸ»β€β™‚οΈ

μ•ˆλ…•ν•˜μ„Έμš” @arthurschreiber μž…λ‹ˆλ‹€ .
λΉ λ₯Έ 응닡에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ‚΄ κ²Œμ‹œλ¬Όμ—μ„œ 이미 μ§€λ£¨ν•œ 버전을 μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

버전 μ„ΈλΆ€ 정보:
"μ§€λ£¨ν•œ": "2.0.1",
"mssql": "^4.0.4",

Microsoft μ§€μ›μœΌλ‘œ 올렀 SQL μ„œλ²„ 및 λ„€νŠΈμ›Œν¬ 연결에 λŒ€ν•œ ν™œμ„± μž‘μ—… μŠ€λ ˆλ“œλ₯Ό μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 그듀은 SQLServer μͺ½μ—μ„œ λͺ¨λ“  쒋은 점을 μ–ΈκΈ‰ν–ˆμŠ΅λ‹ˆλ‹€. μž‘μ—… μŠ€λ ˆλ“œ λΉ„μœ¨λ„ μ μŠ΅λ‹ˆλ‹€. μ‚¬μš©μž μ •μ˜ λ…Όλ¦¬λ‘œ λ‹€μ‹œ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 운이 μ—†μŠ΅λ‹ˆλ‹€. μ†ŒμΌ“ 였λ₯˜κ°€ λ°œμƒν•œ ν›„ λͺ¨λ“  후속 μš”μ²­μ— λŒ€ν•΄ κ³„μ†ν•΄μ„œ λ˜μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ μ œμ•ˆμ΄λ‚˜ μΆ”μ²œλ„ 정말 도움이 될 κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•˜κΈ° μœ„ν•΄ μ—°κ²° 풀을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

감사 ν•΄μš”,
ν”„λΌλΉˆ.

여기도 λ§ˆμ°¬κ°€μ§€μΈλ° κ°‘μžκΈ° κ·Έ μƒνƒœκ°€ λ˜μ–΄ 멈μΆ₯λ‹ˆλ‹€...

λ˜ν•œ μ‹œμŠ€ν…œμ—μ„œ λ™μΌν•œ μ—°κ²° 였λ₯˜κ°€ λ°œμƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ„œλΉ„μŠ€ μ‹œμž‘ μ‹œ connectionPool을 μ—°κ²°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
new App.SQL.ConnectionPool

μž„μ˜μ˜ μˆœκ°„μ— λ‹€μŒκ³Ό 같은 μš”μ²­μ΄ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

ConnectionError: λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μ—°κ²°ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€ : 1433 - μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€(μ‹œν€€μŠ€)

μ„œλΉ„μŠ€κ°€ μžλ™μœΌλ‘œ λ‹€μ‹œ μ‹œμž‘λ˜μ§€λ§Œ μ•½ 20λΆ„ λ™μ•ˆ μ΄λŸ¬ν•œ 였λ₯˜κ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ„œλΉ„μŠ€κ°€ λ‹€μ‹œ μ‹œμž‘λ˜κ³  λ‹€μ‹œ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ„œλ²„μ˜ μ—¬λŸ¬ λ…Έλ“œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ 이λ₯Ό λ³Ό 수 μžˆμ§€λ§Œ λ™μ‹œμ— λ‹€μš΄λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€(λ•Œλ‘œλŠ” λ‹€μš΄λ¨). μ΄λŠ” λ‹€μ†Œ μ΄μƒν•©λ‹ˆλ‹€. 원인은 mssql DBκ°€ μ•„λ‹ˆλΌ NodeJS 앱에 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μš°λ¦¬λŠ” λ‹€μŒ 버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€:

mssql: 4.3.0(μ΅œμ‹ )
이 νŒ¨ν‚€μ§€μ— ν¬ν•¨λœ μ§€λ£¨ν•œ 버전은 2.7.1μž…λ‹ˆλ‹€.

μ•ˆλ…•. μš°λ¦¬λ„ 이 문제λ₯Ό κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ 당사 λ²„μ „μž…λ‹ˆλ‹€.
MSSQL: 4.3.0
μ§€λ£¨ν•œ 버전을 μ‚¬μš©ν•˜λŠ” 버전: 2.7.1

ConnectionError: Failed to connect to xxxxxx.database.windows.net:1433 in 15000ms
at Connection.tedious.once.err (...node_modules\mssql\lib\tedious.js:239:17)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Connection.emit (events.js:211:7)
at Connection.connectTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:944:12)
at Timeout._onTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:913:16)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)

MSSQL Server 버전을 μž‘μ„±ν•˜μ‹­μ‹œμ˜€. 이제 SQLNCLI11은 MSSQL2017 μΈμŠ€ν„΄μŠ€μš© MSOLEDBSQL둜 λŒ€μ²΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/

Microsoft 곡식 μƒ˜ν”Œμ—μ„œ λ³΅μ‚¬ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

λ§ˆμ§€λ§‰μœΌλ‘œ "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" ν”„λ‘œν† μ½œμ—μ„œ TCP/IP ν”„λ‘œν† μ½œμ„ ν™œμ„±ν™”ν•˜μ—¬ 이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€."->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Microsoft 곡식 μƒ˜ν”Œμ—μ„œ λ³΅μ‚¬ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

λ§ˆμ§€λ§‰μœΌλ‘œ "->"TCP/IP"에 λŒ€ν•œ "Sql Server Configuration Manager"->"SQL Server λ„€νŠΈμ›Œν¬ ꡬ성"->" ν”„λ‘œν† μ½œμ—μ„œ TCP/IP ν”„λ‘œν† μ½œμ„ ν™œμ„±ν™”ν•˜μ—¬ 이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

κ°μ‚¬ν•©λ‹ˆλ‹€! λ‚˜λŠ”μ΄ μ •ν™•ν•œ λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€ ;)

거의 λͺ¨λ“  nodejs μ„œλΉ„μŠ€μ—μ„œ μ—¬μ „νžˆ 이 문제λ₯Ό κ²ͺκ³  있기 λ•Œλ¬Έμ— λͺ‡ 가지 μΆ”κ°€ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
TCP/IP μˆ˜μ • 사항이 ν¬ν•¨λœ μœ„μ˜ μ„€λͺ…은 이미 SQL Serverμ—μ„œ ν™œμ„±ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” 아무것도 ν•˜μ§€ μ•ŠλŠ” μƒˆλ‘œμš΄ nodejs μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ„œλΉ„μŠ€μ—μ„œ ν˜ΈμΆœλ˜μ§€ μ•Šκ³  PM2μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.
μ‹œμž‘λ  λ•Œ μƒˆ μ—°κ²° 풀을 μ—΄κ³  κ·Έλƒ₯ 거기에 μ•‰μŠ΅λ‹ˆλ‹€.

λ¬΄μž‘μœ„λ‘œ λ°œμƒν•˜λŠ” 5일 λ™μ•ˆ 3개의 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
"μ—°κ²° 였λ₯˜: sql.tilroy에 μ—°κ²°ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄λΆ€:1433 - μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€(μ‹œν€€μŠ€)".

이것은 μ½”λ“œμž…λ‹ˆλ‹€:

`
μƒμˆ˜ ꡬ성 = {
μ‚¬μš©μž: Config.sql.sqluser,
λΉ„λ°€λ²ˆν˜Έ: Config.sql.sqlpassword,
μ„œλ²„: Config.sql.sqlhost,
λ°μ΄ν„°λ² μ΄μŠ€: Config.sql.sqldatabase,
포트: Config.sql.sqlport,
μ—°κ²° μ‹œκ°„ 초과: 3000,
μš”μ²­ μ‹œκ°„ 초과: 3000,
수영μž₯: {
μ΅œλŒ€: 100,
min: 1, // λͺ¨λ“  연결을 닫지 λ§ˆμ‹­μ‹œμ˜€.
idleTimeoutMillis: 1000,
evictionRunIntervalMillis: 1500000
}
};

const sqlConnection = new SQL.ConnectionPool(config, function (err) {
    Log.debug("got sql connection");
    if(err){
        Log.error(err);
        process.exit(1);
    }
});

sqlConnection.on('error', err => {
    Log.error(`Connection err : ${err}`);
    process.exit(1);
});

`

SQL μ„œλ²„λ₯Ό μ—…κ·Έλ ˆμ΄λ“œν–ˆμ§€λ§Œ 도움이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ—…λ°μ΄νŠΈν–ˆμ§€λ§Œ μ—¬μ „νžˆ μ΄λŸ¬ν•œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
μš°λ¦¬κ°€ μ‹œλ„ν•  수 μžˆλŠ” λ‹€λ₯Έ 것이 μžˆμŠ΅λ‹ˆκΉŒ? μš°λ¦¬λŠ” κ½€ λ§Žμ€ μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ§€λ£¨ν•œ/mssql을 버리지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

@TimTilroy μ—°κ²° ν’€ λ˜λŠ” tedious -connection-pool 을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 지루함을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ§€λ£¨ν•œ ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 μ§€λ£¨ν•œ μ—°κ²° 풀을 μ‹œλ„ν•˜κ³  λ„μ›€μ΄λ˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” IanChokSλ‹˜,

μš°λ¦¬λŠ” tedious-connection-pool νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  mssql νŒ¨ν‚€μ§€μ˜ κΈ°λ³Έ connectionPool을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” μ§€κΈˆ mssql νŒ¨ν‚€μ§€λ₯Ό 버전 5.1둜 μ—…λ°μ΄νŠΈν–ˆμœΌλ©° μ•ˆμ •μ μΈ 것 κ°™μœΌλ©° ν…ŒμŠ€νŠΈ μ„œλΉ„μŠ€μ—μ„œ 더 이상 μ—°κ²° 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ³€κ²½ 사항 쀑 ν•˜λ‚˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ…Έλ“œ ν’€μ—μ„œ tarn.js둜 ν’€ 라이브러리 이동

κ·Έλž˜μ„œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ΅œμ†Œ ν’€ 연결을 0으둜 μ„€μ •ν–ˆλŠ”λ° 이것이 μ–΄λ–€ 영ν–₯을 미칠지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

@MarioPerezEsteso μ„œλ²„μ— μ—°κ²°ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆλŠ” 경우 TCP IPκ°€ ν™œμ„±ν™” λ˜μ–΄ 있고 ꡬ성에 μ˜¬λ°”λ₯Έ 포트 λ²ˆν˜Έκ°€ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ μ„œλ²„μ— μ—°κ²°ν•  수 μžˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

@regevbr , @Praveen335 μ—°κ²° 풀링을 μ‚¬μš©ν•˜λŠ” 경우 TimTilroyκ°€ μ—°κ²° 문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ ν•œ κ²ƒμ²˜λŸΌ λ…Έλ“œ ν’€ λŒ€μ‹  tarn.js 라이브러리λ₯Ό μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 그렇지 μ•Šμ€ 경우 μ΅œμ‹  mssql(v5.1)둜 μ—…κ·Έλ ˆμ΄λ“œν•΄ λ³΄μ‹­μ‹œμ˜€.

μ—…λ°μ΄νŠΈ: μƒˆ λ²„μ „μ˜ mssql(5.1.0)을 λͺ¨λ“  SQL μ„œλΉ„μŠ€μ— μ μš©ν•˜κ³  μ΅œμ†Œ ν’€ 연결을 0으둜 μ—…λ°μ΄νŠΈν–ˆμœΌλ©° 배포 이후 μ—°κ²° 였λ₯˜κ°€ μ€‘μ§€λœ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ¬Έμ œλŠ” 이름에 " \ "λŒ€μ‹ μ— " / "λ₯Ό μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

@Praveen335 λ¬Έμ œκ°€ ν•΄κ²°λ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μƒˆ λ²„μ „μ˜ mssql(5.1.0)둜 μ—…κ·Έλ ˆμ΄λ“œν•΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ? 그렇지 μ•Šμ€ 경우 이 문제λ₯Ό λ‹€μ‹œ μ—¬μ‹­μ‹œμ˜€.

버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
mssql: "^6.2.0",
μ§€λ£¨ν•œ: "^8.3.0"

ꡬ성 κ΄€λ¦¬μžμ—μ„œ TCP/IPλ₯Ό ν™œμ„±ν™”ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λͺ¨λ“  SQL μ„œλΉ„μŠ€κ°€ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. 아직 λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

C:\Nodejs\node-sql-conn\Database>λ…Έλ“œ connect.js
tedious deprecated tedious 의 λ‹€μŒ 메이저 λ²„μ „μ—μ„œλŠ” μƒˆλ‘œμš΄ Connection μΈμŠ€ν„΄μŠ€λ₯Ό 생성해도 더 이상 μ„œλ²„μ— μžλ™μœΌλ‘œ μ—°κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ connect λ„μš°λ―Έ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ μƒˆλ‘œ μƒμ„±λœ Connection κ°œμ²΄μ—μ„œ .connect λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ 이 λ©”μ‹œμ§€λ₯Ό μ°¨λ‹¨ν•˜μ‹­μ‹œμ˜€. λ‚΄λΆ€\ν”„λ‘œμ„ΈμŠ€\task_queues.js:79:11
연결에 μ‹€νŒ¨

C:\Nodejs\node-sql-conn\Databaseconnect.js:26
였λ₯˜λ₯Ό λ˜μ§€λ‹€;
^^
ConnectionError: localhost:undefined 에 μ—°κ²°ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 슀트림이 μ‚­μ œλœ ν›„ μ“°κΈ°λ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.
ConnectionErrorμ—μ„œ (C:\Nodejs\node-sql-conn\node_modulestedious\lib\errors.js:13:12)
Connection.socketErrorμ—μ„œ (C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1308:56)
μ†ŒμΌ“μ—μ„œ.(C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1143:14)
Socket.emitμ—μ„œ(events.js:327:22)
errorOrDestroyμ—μ„œ(internal/streams/destroy.js:108:12)
onwriteErrorμ—μ„œ (_stream_writable.js:418:5)
onwrite μ‹œ(_stream_writable.js:445:5)
doWriteμ—μ„œ (_stream_writable.js:399:11)
writeOrBufferμ—μ„œ (_stream_writable.js:387:5)
Socket.Writable.writeμ—μ„œ (_stream_writable.js:318:11) {
μ½”λ“œ: 'ESOCKET'
}

이것은 λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€:
var Connection = require('μ§€λ£¨ν•œ').Connection;
λ³€μˆ˜ ꡬ성 = {
μ„œλ²„: '둜컬 호슀트',
인증: {
μœ ν˜•: 'κΈ°λ³Έκ°’',
μ˜΅μ…˜: {
μ‚¬μš©μž 이름: '사',
λΉ„λ°€λ²ˆν˜Έ: '####',
포트:1433
}
},
μ˜΅μ…˜: {
λ°μ΄ν„°λ² μ΄μŠ€: 'νšŒμ‚¬',
μΈμŠ€ν„΄μŠ€ 이름: 'MSSQLSERVER',
rowCollectionOnDone: μ°Έ,
useColumnNames: 거짓,
trustServerCertificate: 거짓
}
};
var μ—°κ²° = μƒˆλ‘œμš΄ μ—°κ²°(ꡬ성);
connection.on('μ—°κ²°',ν•¨μˆ˜(였λ₯˜){
λ§Œμ•½(μ—λŸ¬){
console.log('μ—°κ²° μ‹€νŒ¨');
였λ₯˜λ₯Ό λ˜μ§€λ‹€;
}
또 λ‹€λ₯Έ{
console.log('연결됨');
}
});
module.exports = μ—°κ²°;

Microsoft 곡식 μƒ˜ν”Œμ—μ„œ λ³΅μ‚¬ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

λ§ˆμ§€λ§‰μœΌλ‘œ "->"TCP/IP"에 λŒ€ν•œ "Sql Server Configuration Manager"->"SQL Server λ„€νŠΈμ›Œν¬ ꡬ성"->" ν”„λ‘œν† μ½œμ—μ„œ TCP/IP ν”„λ‘œν† μ½œμ„ ν™œμ„±ν™”ν•˜μ—¬ 이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
SQLServerConfigurationManager

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

이것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€. 해결책을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λ˜ν•œ 이 ESOCKET μ—°κ²° 였λ₯˜λ₯Ό μ‹€ν—˜ν•˜κ³  μžˆλŠ”λ° 앱이 AWS EC2μ—μ„œ AS RDS둜 μ—°κ²°λ˜μ–΄ 있고 λŒ€λΆ€λΆ„μ˜ μ‹œκ°„ λ™μ•ˆ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— λ¬Έμ œλŠ” TCP/IP와 관련이 μ—†μŠ΅λ‹ˆλ‹€.

λ§ˆμΉ¨λ‚΄ λ‚˜λŠ” 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. μƒˆ 연결을 μš”μ²­ν•  λ•Œλ§ˆλ‹€ μ‚¬μš©ν•˜λ˜ 슀크립트:

function getConnection () {
    // console.log("config")
    // console.log(config)
    return new Promise(function (resolve, reject) {
        const pool = new sql.ConnectionPool(getConfig())
        // console.log("Getting connection...");
        pool.connect()
        .then((cn) => {
            // console.log("connection got");
            resolve(cn);
        })
        .catch((e) => {
            // console.log("connection not got");
            reject(e);
        });
    })
}

문제λ₯Ό ν•΄κ²°ν•œ 슀크립트:

function runCommand(cmdText) {
    return new Promise((resolve, reject) => {
        pool2Connect
        .then((pool) => {
            // pool.request() // or: new sql.Request(pool2)
            // .input('input_parameter', sql.Int, 10)
            // .output('output_parameter', sql.VarChar(50))
            // .execute('procedure_name', (err, result) => {
            //     // ... error checks
            //     console.dir(result)
            // })
            pool.request() // or: new sql.Request(pool2)
            .query(cmdText)
            .then((rows) => {
                return resolve(rows.recordset);
            })
            .catch((e) => {
                return reject(e);
            });
        })
        .catch((err) => {
            return reject(err);
        });
    });
}

μ—¬κΈ°μ„œ pool2ConnectλŠ” 슀크립트λ₯Ό μ‹œμž‘ν•  λ•Œ μ²˜μŒμ— μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    pool2 = new sql.ConnectionPool(config);
    pool2Connect = pool2.connect();
    pool2.on('error', err => {
        console.log(err);
    });

도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰