Tedious: ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์ง€์—ฐ์‹œํ‚ค๋Š” StreamParser

์— ๋งŒ๋“  2015๋…„ 10์›” 04์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: tediousjs/tedious

node-mssql์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "node-mssql์€ ์ฟผ๋ฆฌ์—์„œ ์‹ค์ œ๋กœ ๋™์‹œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
๋ฌธ์ œ: https://github.com/patriksimek/node-mssql/issues/217

์งง์€ ์„ค๋ช…: ์ง€๋ฃจํ•œ ์ŠคํŠธ๋ฆผ ํŒŒ์„œ๊ฐ€ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ _might_ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ŠคํŠธ๋ฆผ์ด ํ™œ์„ฑํ™”๋œ ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  StreamParser.prototype._transform = function (input, encoding, done) {
    var job, length, offset, result;
    offset = 0;
    this.buffer.append(input);
    if (!this.generator) {
      this.generator = this.parser();
      this.currentStep = this.generator.next();
    }
    job = void 0;
    result = void 0;
    length = void 0;
    while (!this.currentStep.done) {
      job = this.currentStep.value;
      if (!(job instanceof Job)) {
        return done(new Error('invalid job type'));
      }
      length = job.length;
      if (this.buffer.length - offset < length) {
        break;
      }
      result = job.execute(this.buffer, offset);
      offset += length;
      this.currentStep = this.generator.next(result);
    }
    this.buffer.consume(offset);
    if (this.currentStep.done) {
      this.push(null);
    }
    return done();
  };

Visual Studio Code๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ŠคํŠธ๋ฆผ ํŒŒ์„œ ๋‚ด๋ถ€์˜ while ๋ฃจํ”„ ํžˆํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ฑฐ๋‚˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋™์‹œ ์—ฐ๊ฒฐ์ด ์—ด๋ ค ์žˆ์„ ๋•Œ StreamParser๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@arthurschreiber
@patriksimek

Action Required Response needed known issue

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

๋˜ํ•œ ์ด ๋ฌธ์ œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•˜๋Š” ํ™•์žฅ์„ฑ ๋น„์ฆˆ๋‹ˆ์Šค ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์žˆ์–ด ์‹œ์žฅ์„ ๋ฐฉํ•ดํ•˜๋Š” ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ์ง„ํ–‰ ์ƒํ™ฉ์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

query()๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์•ฑ์ด ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์—†์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋” ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ง„์ „์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,
๋‚จ์ž ์ด๋ฆ„

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

์•ˆ๋…•ํ•˜์„ธ์š” @XemsDoom

๊ท€ํ•˜์˜ ๋ฌธ์ œ ์„ค๋ช…์„ ์ฝ์—ˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ๋ฌธ์ œ๊ฐ€ tedious ์ž‘๋™ ๋ฐฉ์‹์— ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ Node.JS์— ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. Node.js๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ CPU์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ๋‹ค๋ฅธ CPU ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

tedious ์˜ ์ŠคํŠธ๋ฆผ ๊ตฌ๋ฌธ ๋ถ„์„ ์ฝ”๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ: ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ๋ฌธ ๋ถ„์„์€ "๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™๊ธฐ"์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ŠคํŠธ๋ฆผ ํŒŒ์„œ์— (๋น„๋™๊ธฐ์ ์œผ๋กœ) ํ‘ธ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์‹ฑ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋ฉฐ ์ด๋Š” ์ฐจ๋‹จ ๋™๊ธฐ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ตฌ๋ฌธ ๋ถ„์„์„ "๋น„๋™๊ธฐ์‹์œผ๋กœ ๋น„๋™๊ธฐ์‹"์œผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ํ•ด์™”์ง€๋งŒ tedious ์˜ ๊ธฐ์กด ๋‚ด๋ถ€๋Š” ๊ธฐ์กด ๋™์ž‘์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ ์ง€๋ฃจํ•œ(์˜ˆ: 1.11.5 )์„ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋‚ด ๋ชฉ๋ก์— ์žˆ์ง€๋งŒ ์ง€๊ธˆ ๋‹น์žฅ์€ ๊ทธ๋‹ค์ง€ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ตฌํ… ์•„๋ฒค๋“œ @arthurschreiber. ๋‚˜๋Š” NodeJS๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๊ณ  CPU ์ง‘์•ฝ์ ์ธ JS ์ฝ”๋“œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ์ฐจ๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ์ง€๋ฃจํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋””์ž์ธ ๊ฒฐ์ •์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ง€๊ธˆ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. "์ˆœ์ฐจ์ ์œผ๋กœ"๋ž€ ์ด์ „ ์ฟผ๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์ฒ˜๋ฆฌ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ์— ๋งŽ์€ ํ–‰์ด ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: 100k ๋ฐ ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ 50k ํ–‰), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์—์„œ ํ–‰์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ฟผ๋ฆฌ๊ฐ€ ์–ฝํ˜€ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ํŒŒ์„œ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ์š”? ๋‹ค๋ฅธ ์›น ์š”์ฒญ์ด ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋กœ ์ธํ•ด ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์›น ์„œ๋ฒ„์™€ ๋™์ผํ•œ ๋”œ๋ ˆ๋งˆ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๋…์ผ์–ด๋กœ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์ดํ•ด๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•„์š” :)

์ง€๋ฃจํ•œ Bearbeitet nur eine Query zu einem gegebenen Zeitpunkt, statt alle ausgefรผhrten Queries gemeinsam _nebenlรคufig_ im Stream Parser zu bearbeiten, momentan werden die anderen Queries nicht bearbeitet also Query bisd die ersteerste bzw. Werden diese somit sequenziell abgearbeitet.

Ergo, fรผhrst du 3 Queries aus und hast 3 Callbacks fรผr wenn Rows gefetcht wurden, werden die 2 weiteren ์ฝœ๋ฐฑ erst aufgerufen, wenn die erste Query durch ist, obwohl eigentlich durch das Streaming dievers Mit _Miteinander_ meine ich, dass alle 3 Callbacks jeweils in einer offensichtlich nicht geordneten Abfolge gerufen werden.

๋˜ํ•œ zum Beispiel์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ 1, ์ฟผ๋ฆฌ 2, ์ฟผ๋ฆฌ 3 werden nebenlรคufig ausgefรผhrt. mssql์˜ ์—ฐ๊ฒฐ ํ’€์—์„œ ๊ณ ์œ ํ•œ ์—ฐ๊ฒฐ์„ ์ฟผ๋ฆฌํ•˜์‹ญ์‹œ์˜ค.

Nun sollten die Rows von allen 3 Queries eigentlich gleichzeitig zurรผck kommen:
ํ–‰ ์ฟผ๋ฆฌ1, ํ–‰ ์ฟผ๋ฆฌ1, ํ–‰ ์ฟผ๋ฆฌ3, ํ–‰ ์ฟผ๋ฆฌ2, ํ–‰ ์ฟผ๋ฆฌ3, ํ–‰ ์ฟผ๋ฆฌ2, ํ–‰ ์ฟผ๋ฆฌ2....
๊ฒฐ์ • ์‚ฌํ•ญ์€ ๊ฒฐ์ • ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ง€๋ฃจํ•œ aber fรผhrt das ganze so aus:
row-query1, row-query1, row-query1.....bis stop fertig....dann row-query2, row-query2, row-query2....bis wieder fertig....dann row-query3 , ํ–‰ ์ฟผ๋ฆฌ3, ํ–‰ ์ฟผ๋ฆฌ3....

๋„ˆ๋ฌด ํ–‰๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. dass hat ja nichts damit zu tun, dass NodeJS single-threaded ist, sondern dass der Parser nicht verschiedene Queries _konkurrierend_ bearbeitet.

์•ˆ๋…•ํ•˜์„ธ์š” @XemsDoom

์ž์„ธํ•œ ์„ค๋ช…(๋ฐ ๋…์ผ์–ด ๋ฒˆ์—ญ - ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ๊ฐ€ ๋งํ•˜๋Š” ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜์–ด๋กœ ๋‹ต๋ณ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :์›ƒ๋‹ค:

์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ํ˜„์žฌ ์ง€๋ฃจํ•œ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์ œํ•œ ์‚ฌํ•ญ์ด๋ฉฐ 1.12 ๋ฆด๋ฆฌ์Šค ๋ผ์ธ๊ณผ ์ƒ์„ฑ๊ธฐ๋กœ์˜ ์ „ํ™˜์—์„œ ๋„์ž…ํ•œ ๋ถˆํ–‰ํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŒŒ์‹ฑ์ด ์–ฝํ˜€ ์žˆ๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ๋กœ์ปฌ ๋ถ„๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ํ˜„์žฌ ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ ํ„ด์—์„œ ํŠน์ • ์ˆœ์„œ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์ง€๋ฃจํ•œ ๋‚ด๋ถ€๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ 1.12 ๋ฆด๋ฆฌ์Šค์—์„œ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๊ณผ ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž์œ ๋กญ๊ฒŒ ๋…ธ๋ ฅํ•˜๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ํ–ฅํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ† ํฐ ๊ตฌ๋ฌธ ๋ถ„์„ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณ€๊ฒฝํ•  ๊ฒƒ์ด๋ฉฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :์‹ค๋งํ•œ_์•ˆ์‹ฌ:

๊ณ ๋งˆ์›Œ ์•„์„œ. ๋‹น์‹ ์€ ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์–ธ์ œ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ง์”€ํ•ด ์ฃผ์„ธ์š”. ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ €๋… ๋˜์„ธ์š”.

@arthurschreiber ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? "์ž‘์—… ์ค‘"์ด๋ผ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณด๊ณ ๋œ ์ง€ 1๋…„ ๋ฐ˜์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฌธ์ œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•˜๋Š” ํ™•์žฅ์„ฑ ๋น„์ฆˆ๋‹ˆ์Šค ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์žˆ์–ด ์‹œ์žฅ์„ ๋ฐฉํ•ดํ•˜๋Š” ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ์ง„ํ–‰ ์ƒํ™ฉ์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

query()๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์•ฑ์ด ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์—†์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋” ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ง„์ „์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,
๋‚จ์ž ์ด๋ฆ„

์•ˆ๋…•ํ•˜์„ธ์š” @arthurschreiber ,

์ŠคํŠธ๋ฆผ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ŠคํŠธ๋ฆผ์ด ์ „์ฒด nodeJS ์•ฑ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ(์ œ ์ƒ๊ฐ์—๋Š”?) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์ง€๋งŒ @luca-moser๊ฐ€ ์•ž์„œ ์ธ์šฉํ•œ ๋Œ€๋กœ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ์ฐพ๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ €๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋น„๋™๊ธฐ์‹ ๋น„๋™๊ธฐ ์†”๋ฃจ์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋กœ์ปฌ ๋ถ„๊ธฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์•Œ๋ ค์ง„ ๋ฌธ์ œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

์—ฌ๋ณด์„ธ์š”. ๋‚˜๋„ ๊ณค๋ž€ํ•ด. ๋‚˜๋Š” ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ณ  ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋™์•ˆ ์ง€๋ฃจํ•œ ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์†Œ์‹์ด ์žˆ๋‚˜์š”? non-blocking ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”

5๋…„ ๋ฐ˜์ด ์ง€๋‚ฌ์ง€๋งŒ ์ŠคํŠธ๋ฆผ์˜ ๋น„๋™๊ธฐ ๋™๊ธฐ ๋™์ž‘์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. :-(

@bluefire2121 https://github.com/tediousjs/tedious/pull/1240 ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 5๋…„ ๋ฐ˜ ํ›„. ๐Ÿ˜ฌ

๋ฐฉ๊ธˆ [email protected] ๋ฅผ tedious@next ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์— ๋ฆด๋ฆฌ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ๋‹ต๋ณ€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ์ฃผ์ผ ํ›„์— ์ž๋™์œผ๋กœ tedious@latest ๋ฆด๋ฆฌ์Šค ์ฑ„๋„๋กœ ์Šน๊ฒฉ๋ฉ๋‹ˆ๋‹ค.

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