๐Ÿš€ AI-Powered Jest ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ์„ฑ๊ธฐ ๊ตฌ์ถ• (TypeScript์šฉ)

๋ฐœํ–‰: (2026๋…„ 1์›” 5์ผ ์˜คํ›„ 07:02 GMT+9)
9 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์œ„์— ์ œ๊ณต๋œ ์†Œ์Šค ๋งํฌ๋งŒ์œผ๋กœ๋Š” ๋ฒˆ์—ญํ•  ๋ณธ๋ฌธ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญ์ด ํ•„์š”ํ•œ ์ „์ฒด ํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๋ฉด, ์š”์ฒญํ•˜์‹  ๋Œ€๋กœ ์†Œ์Šค ๋งํฌ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ๋งˆํฌ๋‹ค์šด ํ˜•์‹๊ณผ ์ฝ”๋“œ ๋ธ”๋ก, URL ๋“ฑ์„ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•˜๋ฉด์„œ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ ๋‹› ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์€ ๋ชจ๋ฒ” ์‚ฌ๋ก€์ด์ง€๋งŒ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๋ฐ˜๋ณต์ ์ด๊ณ  ์‹œ๊ฐ„ ์†Œ๋ชจ๊ฐ€ ํฌ๋ฉฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„์—์„œ ๋ฐ€๋ฆฌ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

TypeScript ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ Jest ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋†’๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋ฉด ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ธฐ๋ณด๋‹ค ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…

์ €๋Š” **ts-genai-test**๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” TypeScript (Node.js)์šฉ AIโ€‘๊ธฐ๋ฐ˜ Jest ํ…Œ์ŠคํŠธโ€‘์ผ€์ด์Šค ์ƒ์„ฑ๊ธฐ๋กœ, ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ƒ์„ฑโ€‘AI ์ œ๊ณต์ž๋ฅผ ์‚ฌ์šฉํ•ด ์˜๋ฏธ ์žˆ๋Š” ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • GitHub:
  • npm:

๐Ÿง  ๋ฌธ์ œ

  • ๋ฐ˜๋ณต์ ์ธ Jest ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ž‘์„ฑ
  • ์‹œ๊ฐ„ ์••๋ฐ•์œผ๋กœ ์ธํ•œ ๊ฒฝ๊ณ„ ์‚ฌ๋ก€ ๋ˆ„๋ฝ
  • ๋ฆฌํŒฉํ„ฐ๋ง ํ›„ ํ…Œ์ŠคํŠธ๊ฐ€ ์˜ค๋ž˜๋จ
  • ์ฝ”๋”ฉ๋ณด๋‹ค ํ…Œ์ŠคํŠธ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ์š”

๐Ÿค– ts-genai-test๋ž€?

ts-genai-test๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์ž…๋‹ˆ๋‹ค:

  • Jest ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • TypeScript (Node.js) ํ”„๋กœ์ ํŠธ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค
  • ์—ฌ๋Ÿฌ AI ์ œ๊ณต์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
  • ๋ชจ๋ธ ์ด๋ฆ„ ๋ฐ API ํ‚ค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ .test.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • CI/CD ์›Œํฌํ”Œ๋กœ์— ๊น”๋”ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์ด ํ”„๋กœ์ ํŠธ๋Š” TypeScript๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ pnpm์œผ๋กœ ํŒจํ‚ค์ง•๋˜๊ณ , ๋‹จ์ˆœํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

โœ… AIโ€‘์ƒ์„ฑ Jest ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

ํˆด์„ TypeScript ํŒŒ์ผ์ด๋‚˜ ํ•จ์ˆ˜์— ์ง€์ •ํ•˜๋ฉด Jest ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

import path from "path";
import { generateTests, functionalTypes } from "ts-genai-test";

const inputPrompt: functionalTypes.PromptInput[] = [
  {
    outputTestDir: path.resolve(__dirname, "../__tests__"), // ์„ ํƒ ์‚ฌํ•ญ, ๊ธฐ๋ณธ๊ฐ’์€ 'tests' ํด๋”
    folderPath: path.resolve(__dirname, "../src"),          // ์†Œ์Šค ํด๋”
    filePath: path.resolve(__dirname, "../src/index"),    // ์†Œ์Šค ํŒŒ์ผ
    functionName: "add",                                   // ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•  ํ•จ์ˆ˜
    testFileName: "",                                      // ์„ ํƒ ์‚ฌํ•ญ, ์‚ฌ์šฉ์ž ์ง€์ • ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋ช…
    rootPath: ""                                           // outputTestDir๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•„์š”
  }
];

await generateTests(inputPrompt);

์ƒ์„ฑ๋œ ์ถœ๋ ฅ์€ ๊น”๋”ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์œผ๋ฉฐ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹คโ€”์ˆ˜๋™ ์ •๋ฆฌ๊ฐ€ ์ „ํ˜€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฎ์–ด์“ฐ๊ธฐ (ํ”Œ๋ž˜๊ทธ ๊ธฐ๋ฐ˜ ์ œ์–ด)

๊ธฐ๋ณธ์ ์œผ๋กœ ts-genai-test๋Š” ๊ธฐ์กด ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ๋ณด์กดํ•˜์—ฌ ์‹ค์ˆ˜๋กœ ๋ฎ์–ด์“ฐ๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. override ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด:

  • ๊ธฐ์กด .test.ts ํŒŒ์ผ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฎ์–ด์”€
  • ์ด์ „์— ์ƒ์„ฑํ–ˆ๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ…Œ์ŠคํŠธ๋กœ ๊ต์ฒด ๊ฐ€๋Šฅ
  • ๊ฐœ๋ฐœ์ž๋Š” ์žฌ์ƒ์„ฑ ์‹œ์ ์„ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ

์ด์™€ ๊ฐ™์€ ์˜๋„์ ์ด๊ณ  ๋ช…์‹œ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์›์น˜ ์•Š๋Š” ๋ณ€๊ฒฝ ์œ„ํ—˜์„ ์ค„์ด๋ฉด์„œ๋„ ์žฌ์ƒ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ํญ๋„“๊ณ  ์œ ์—ฐํ•œ AI ์„ค์ •

๋ชจ๋ธ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค:

๋ณ€์ˆ˜์„ค๋ช…
AI_PROVIDERAI ์ œ๊ณต์ž (์˜ˆ: openai, gemini, groq)
AI_MODEL_NAME๋ชจ๋ธ ์ฝ”๋“œ ๋˜๋Š” ์ด๋ฆ„ (์˜ˆ: gemini-2.5-flash)
AI_API_KEY์ œ๊ณต์ž API ํ‚ค
AI_RETRY_COUNT์‹คํŒจํ•œ AI ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์žฌ์‹œ๋„ ํšŸ์ˆ˜

์ด ์œ ์—ฐ์„ฑ์„ ํ†ตํ•ด ํŒ€์€ ์ œ๊ณต์ž๋ฅผ ์ „ํ™˜ํ•˜๊ณ  ๋น„์šฉ์„ ์ œ์–ดํ•˜๋ฉฐ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฏธ๋ž˜์— ๋Œ€๋น„์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ ๋‚ด์žฅ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋‚˜ ๋ถˆ์™„์ „ํ•œ ์‘๋‹ต์œผ๋กœ AI ํ˜ธ์ถœ์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ts-genai-test๋Š” ํ•œ ๋ฒˆ์˜ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด, ์‹คํŒจํ•˜๊ธฐ ์ „์— ์žฌ์ƒ์„ฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹คโ€”CI ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฐ™์€ ์ž๋™ํ™” ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—‚ ์ž๋™ ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ฒ˜๋ฆฌ

๋Œ€์ƒ ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ํˆด์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์„ค์ • ๋งˆ์ฐฐ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงช ์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

export function add(a: number, b: number): number {
  return a + b;
}

ํˆด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Jest ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

test("adds two numbers", () => {
  expect(add(2, 3)).toBe(5);
});

๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์œผ๋ฉฐ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ ์ œํ•œ ์‚ฌํ•ญ

  • ๊ฒ€ํ†  ํ•„์š”: ์ƒ์„ฑ๋œ ํ…Œ์ŠคํŠธ๋Š” ํ”„๋กœ๋•์…˜์— ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ฒ€ํ† ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. AI ์ถœ๋ ฅ์€ ๊ฐœ๋ฐœ์ž๋ฅผ ๋•์ง€๋งŒ ์ธ๊ฐ„ ํŒ๋‹จ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ๋กœ์ง: ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋Š” ์ •ํ™•์„ฑ๊ณผ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์œ„ํ•ด ์ˆ˜๋™ ์กฐ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ”์œ„: ํ˜„์žฌ๋Š” ๊ธฐ๋Šฅ(๋‹จ์œ„ ์ˆ˜์ค€) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. REST API ํ…Œ์ŠคํŠธ, Swagger/OpenAPI ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ๋ฐ ์—”๋“œโ€‘ํˆฌโ€‘์—”๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์•„์ง ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ œ์•ฝ์€ ํ˜„์žฌ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•˜๊ณ  ํ–ฅํ›„ ๊ฐœ์„  ๊ธฐํšŒ๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค Open Source & Collaboration

ts-genai-test๋Š” ์™„์ „ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๊ธฐ์—ฌ, ์ด์Šˆ, ๊ธฐ๋Šฅ ์š”์ฒญ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

ํ…Œ์ŠคํŠธ๋ฅผ ์ฆ๊ธฐ์„ธ์š”!

Contributions Welcome

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ถ„์•ผ์—์„œ ๋„์›€์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ถ”๊ฐ€ AI ์ œ๊ณต์ž ์ง€์›
  • ํ”„๋กฌํ”„ํŠธ ํ’ˆ์งˆ ๊ฐœ์„ 
  • ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์› ์ถ”๊ฐ€
  • REST ๋˜๋Š” Swagger ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ ํƒ์ƒ‰
  • ์ง€์›๋˜์ง€ ์•Š๋Š” ์–ธ์–ด ๋ฐ ์ž˜๋ชป๋œ ์ฝ”๋“œ ์ฒ˜๋ฆฌ
  • TypeScript๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ ์ง€์›

๋ฌธ์„œ ๋ฐ ์˜ˆ์‹œ

๐Ÿ”— GitHub: testcase-gen-ai-ts
๐Ÿ“ฆ npm: ts-genai-test

๐Ÿงฐ ๊ธฐ์ˆ  ์Šคํƒ

  • TypeScript
  • Node.js
  • pnpm (v10.24.0)
  • Jest
  • Generative AI (LLMโ€‘based test generation)

๐Ÿ“ฆ ์„ค์น˜

pnpm ์‚ฌ์šฉ (๊ถŒ์žฅ):

pnpm install ts-genai-test

๋˜๋Š” npm ์‚ฌ์šฉ:

npm install ts-genai-test

๐Ÿ“Œ Final Thoughts

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

TypeScript ๋ฐฑ์—”๋“œ์—์„œ ์ž‘์—…ํ•˜๊ณ  Jest ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ๋„๊ตฌ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—ฌ๋Š” ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

Zapier vs. Custom Code: โ€˜Glueโ€™ ํˆด์„ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ

์ €๋Š” ์ž๋™ํ™” ์—์ด์ „์‹œ๋ฅผ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. ์ œ ์—…๋ฌด์˜ ์ ˆ๋ฐ˜์€ ์–ฝํžŒ Zapier ํ˜ผ๋ž€์„ ์ œ๊ฑฐํ•˜๊ณ  ๊นจ๋—ํ•œ ์ฝ”๋“œ๋กœ ๊ต์ฒดํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜์€? ์ฐฝ์—…์ž๋“ค์—๊ฒŒ โ€œ์•„๋‹ˆ์š”, ๋‹น์‹ ์€ โ€ฆโ€ ๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mendex: ๋‚ด๊ฐ€ ๋งŒ๋“œ๋Š” ์ด์œ 

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

์™œ Apache Ozone์ด ๋น… ๋ฐ์ดํ„ฐ์— ์„ ํ˜ธ๋˜๋Š” Object Store์ธ๊ฐ€

์ „ํ†ต์ ์ธ HDFS ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ˆ˜์‹ญ์–ต ๊ฐœ์˜ ์ž‘์€ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ง๋ฉดํ•˜๋Š” ํ•œ๊ณ„์™€ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ S3์™€ ๊ฐ™์€ ์œ ์—ฐ์„ฑ์„ ์ถ”๊ตฌํ•˜๋Š” ์š”๊ตฌ๊ฐ€ ๊ฒฐํ•ฉ๋œ ์ƒํ™ฉ.