Storacle - ๋ถ„์‚ฐํ˜• ํŒŒ์ผ ์ €์žฅ์†Œ

Storacle - ๋ถ„์‚ฐํ˜• ํŒŒ์ผ ์ €์žฅ์†Œ

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋– ๋‚˜์•ผ ํ•ด์š” ์ด์ „ ๊ธฐ์‚ฌ ๋งํฌ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ํŒŒ์ผ ์ €์žฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ด์–ด์™€ ์ด๋ฅผ ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Storagecle์€ ๋…๋ฆฝํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค., ์Œ์•…๊ณผ ์ง์ ‘์ ์ธ ๊ด€๋ จ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๊ธฐ์‚ฌ์—์„œ๋Š” "ํ†ต์„ ์กฐ๊ธˆ ๊ตด๋ ธ๋‹ค"๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ipfs, ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ œ๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋˜ ๋ฌธ์ œ์˜ ๋งฅ๋ฝ์—์„œ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฉ‹์ง€๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ €๋Š” ๋‹จ์ง€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์กฐ๋ฅผ ๋” ์ž˜ ๊ตฌ์„ฑํ•˜๊ณ  ๊ฐœ๋ณ„ ๋…ธ๋“œ์™€ ๋„คํŠธ์›Œํฌ ์ „์ฒด์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ๋„ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ผ๋ถ€ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ „์ฒด ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €์žฅ์†Œ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ํผ์งˆ ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์œ„ํ•ด. ์ฃผ์š” ํŠน์ง•๋“ค:

  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ์†Œ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ผ์€ ๋ธ”๋ก์ด ์•„๋‹Œ ์ „์ฒด๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ํŒŒ์ผ์—๋Š” ์ถ”๊ฐ€ ์ž‘์—…์„ ์œ„ํ•œ ๊ณ ์œ ํ•œ ์ฝ˜ํ…์ธ  ํ•ด์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํŒŒ์ผ์„ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ ๋…ธ๋“œ์˜ ํŒŒ์ผ ์ˆ˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์˜ํ•ด์„œ๋งŒ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค(์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ)
  • ๋„คํŠธ์›Œํฌ์˜ ํŒŒ์ผ ์ˆ˜๋Š” ๋„คํŠธ์›Œํฌ์˜ ์œ ํšจํ•œ ๋…ธ๋“œ ์ˆ˜์— ๋”ฐ๋ผ ํ™•์‚ฐ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์—์„œ๋Š” ๋ฌดํ•œํ•œ ์ˆ˜์˜ ๋…ธ๋“œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ๋ฌธ์„œ์—์„œ ์„ค๋ช…)

์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ:

์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

const  Node = require('storacle').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost'
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

๊ณ ๊ฐ:

const  Client = require('storacle').Client;

(async () => {
  try {
    const client = new  Client({
      address: 'localhost:4000'
    });
    await client.init();
    const hash = await client.storeFile('./my-file');
    const link = await client.getFileLink(hash); 
    await client.removeFile(hash);
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

๋‚ด๋ถ€๋ณด๊ธฐ

ํ›„๋“œ ์•„๋ž˜์—๋Š” ๋ฉ‹์ง„ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ˆ˜, ์ „์ฒด ํฌ๊ธฐ, ๊ธฐํƒ€ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋ฉฐ ํŒŒ์ผ์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ๋•Œ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ž์ฃผ ์•ก์„ธ์Šคํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ €์žฅ ํฌ๊ธฐ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ํŒŒ์ผ์„ ์ˆœํ™˜ํ•ด์•ผ ํ•˜๊ณ  ์ƒˆ ํŒŒ์ผ ์ถ”๊ฐ€๋ฅผ ๊ธˆ์ง€ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์šฐํšŒํ•ด์•ผ ํ•˜๋ฉฐ ๋งŽ์€ ์ˆ˜์˜ ํŒŒ์ผ(์˜ˆ: ๋ฐฑ๋งŒ ๊ฐœ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๋ฉด ์ƒ๋‹นํ•œ ๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ ์€ ์ˆ˜์˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๋” ๋งŽ์€ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. "ํด๋ฆฌ๋„ˆ"๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ €์žฅ์†Œ๋Š” 256๊ฐœ์˜ ํด๋”์™€ 2๋‹จ๊ณ„ ์ค‘์ฒฉ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ๋‘ ๋ฒˆ์งธ ์ˆ˜์ค€ ํด๋”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, 1๋งŒ ๊ฐœ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ฐ ํด๋”์—๋Š” ์•ฝ 62500๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค(1000000 / sqrt(256)).

ํด๋” ์ด๋ฆ„์€ ํŒŒ์ผ ํ•ด์‹œ๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ ํ•ด์‹œ๋ฅผ ์•Œ๋ฉด ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ๋Š” ๋‹ค์–‘ํ•œ ์ €์žฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ํด๋”์— ๋งŽ์€ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์ทจ์•ฝํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง€์›, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ํด๋”์˜ ๋น ๋ฅธ ํƒ์ƒ‰ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ์ข…์˜ ํ™ฉ๊ธˆ๋ฅ .

์บ์‹ฑ

ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ์™€ ํŒŒ์ผ์„ ๋ฐ›์„ ๋•Œ ํŒŒ์ผ ๋งํฌ๊ฐ€ ์บ์‹œ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
๋•๋ถ„์— ํŒŒ์ผ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ „์ฒด ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งํฌ ์ˆ˜์‹  ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์บ์‹ฑ์€ http ํ—ค๋”๋ฅผ ํ†ตํ•ด์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋™ํ˜•

ํด๋ผ์ด์–ธํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋™ํ˜•์ด๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js ์Šคํฌ๋ฆฝํŠธ ๋ฐ ์•ก์„ธ์Šค๋กœ window.ClientStoracle ๋˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋“ฑ์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ง€์—ฐ๋œ ๋งํฌ

ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์€ "์ง€์—ฐ๋œ ์ฐธ์กฐ"์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง€๊ธˆ ์—ฌ๊ธฐ์—์„œ ๋™๊ธฐ์‹์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ๋งํฌ์ด๋ฉฐ, ํŒŒ์ผ์ด ์ด๋ฏธ ์ €์žฅ์†Œ์— ์žˆ์œผ๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์ดํŠธ์— ์ผ๋ถ€ ์‚ฌ์ง„์„ ํ‘œ์‹œํ•ด์•ผ ํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” src์— ์ง€์—ฐ๋œ ๋งํฌ๋ฅผ ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ API

  • ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ.ํ”„๋กœํ† ํƒ€์ž….์Šคํ† ์–ดํŒŒ์ผ() - ํŒŒ์ผ ์ €์žฅ
  • ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ.ํ”„๋กœํ† ํƒ€์ž….getFileLink() โ€” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง์ ‘ ๋งํฌ ์–ป๊ธฐ
  • ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ.ํ”„๋กœํ† ํƒ€์ž….getFileLinks() โ€” ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง์ ‘ ๋งํฌ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ Client.prototype.getFileToBuffer() โ€” ํŒŒ์ผ์„ ๋ฒ„ํผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ.ํ”„๋กœํ† ํƒ€์ž….getFileToPath() โ€” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ
  • ๋น„๋™๊ธฐ Client.prototype.getFileToBlob() โ€” Blob์—์„œ ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ(๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „์˜ ๊ฒฝ์šฐ)
  • ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ.ํ”„๋กœํ† ํƒ€์ž….์ œ๊ฑฐํŒŒ์ผ() - ํŒŒ์ผ ์‚ญ์ œ
  • Client.prototype.createRequestedFileLink() โ€” ์ง€์—ฐ๋œ ๋งํฌ ์ƒ์„ฑ

๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ํŒŒ์ผ ๋‚ด๋ณด๋‚ด๊ธฐ

ํŒŒ์ผ์„ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ „์†กํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ค์ •๊ณผ ํ•จ๊ป˜ ์ „์ฒด ์ €์žฅ ํด๋”๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. (ํ–ฅํ›„์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)
  • ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”๋งŒ ๋ณต์‚ฌํ•˜์„ธ์š”. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. node.normalizeFilesInfo()๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ์‚ฌ์šฉ node.exportFiles()๊ทธ๋Ÿฌ๋ฉด ํŒŒ์ผ ๋ณต์‚ฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋…ธ๋“œ ์„ค์ •
์Šคํ† ๋ฆฌ์ง€ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋งŒ ์„ค๋ช…ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” Github์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํ† ๋ฆฌ์ง€.๋ฐ์ดํ„ฐํฌ๊ธฐ โ€” ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”์˜ ํฌ๊ธฐ
  • Storage.tempSize โ€” ์ž„์‹œ ํด๋” ํฌ๊ธฐ
  • Storage.autoCleanSize โ€” ๋ณด์œ ํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ์ €์žฅ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ํŒŒ์ผ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ.์ตœ๋Œ€ ํฌ๊ธฐ โ€” ์ตœ๋Œ€ ํŒŒ์ผ ํฌ๊ธฐ
  • ํŒŒ์ผ.์ตœ์†Œ ํฌ๊ธฐ โ€” ์ตœ์†Œ ํŒŒ์ผ ํฌ๊ธฐ
  • file.preferred์ค‘๋ณต โ€” ๋„คํŠธ์›Œํฌ์—์„œ ์„ ํ˜ธํ•˜๋Š” ํŒŒ์ผ ์ค‘๋ณต ์ˆ˜
  • file.mimeํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ - ์œ ํšจํ•œ ํŒŒ์ผ ํ˜•์‹
  • file.mime๋ธ”๋ž™๋ฆฌ์ŠคํŠธ - ์ž˜๋ชป๋œ ํŒŒ์ผ ํ˜•์‹
  • file.extํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ - ์œ ํšจํ•œ ํŒŒ์ผ ํ™•์žฅ์ž
  • file.ext๋ธ”๋ž™๋ฆฌ์ŠคํŠธ - ์ž˜๋ชป๋œ ํŒŒ์ผ ํ™•์žฅ์ž
  • file.link์บ์‹œ - ๋‹ค์–‘ํ•œ ๋งํฌ ์บ์‹ฑ ์„ค์ •

์น˜์ˆ˜์™€ ๊ด€๋ จ๋œ ๊ฑฐ์˜ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ ˆ๋Œ€๊ฐ’๊ณผ ์ƒ๋Œ€๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์„ ํ†ตํ•ด ์ž‘์—…
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ช…๋ น์ค„์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. npm i -g ์ €์žฅ์†Œ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ €์žฅ์†Œ -a storeFile -f ./file.txt -c ./config.jsํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž‘์—…์€ ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/ortexx/storacle/blob/master/bin/actions.js

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์ž‘์—…ํ•  ์ผ์ข…์˜ ๋ถ„์‚ฐํ˜• ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์‚ฌ ์‹œ์ž‘ ๋ถ€๋ถ„์˜ ๋งํฌ์— ์„ค๋ช…๋œ ์Œ์•… ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๊ณ .
  • ๋ถ„์‚ฐ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ผ์„ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ. ํ์‡„ํ˜• ๋„คํŠธ์›Œํฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ , ๋…ธ๋“œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›น ์‚ฌ์ดํŠธ ํŒŒ์ผ์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ชจ๋“  ๊ฒƒ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ๋” ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ์ž‘์—…์„ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ชจ๋“  ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ. ์„œ๋ฒ„ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์—ฐ๋ฝ์ฒ˜ :

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€