기술 리뷰

Jest, Vitest, Mocha: 자바스크립트/타입스크립트 테스트 프레임워크 심층 비교 분석 및 선택 가이드

강코의 코딩 일기 2026. 5. 6. 13:10
반응형

Jest, Vitest, Mocha는 자바스크립트/타입스크립트 개발에서 핵심적인 테스트 프레임워크입니다. 각 프레임워크의 특징, 성능, 생태계, 사용 사례를 심층 비교 분석하여 프로젝트에 가장 적합한 도구를 선택하는 실질적인 가이드를 제시합니다.

소프트웨어 개발 과정에서 코드의 품질과 안정성을 확보하는 것은 필수적입니다. 특히 자바스크립트타입스크립트 기반의 애플리케이션 개발에서는 다양한 환경과 복잡한 로직으로 인해 테스트의 중요성이 더욱 부각됩니다. 견고한 소프트웨어를 구축하기 위한 핵심 도구 중 하나가 바로 테스트 프레임워크입니다. 시장에는 Jest, Vitest, Mocha와 같이 강력하고 인기 있는 여러 테스트 프레임워크가 존재하며, 각각 고유한 장점과 특징을 가지고 있습니다.

개발자는 프로젝트의 특성, 팀의 숙련도, 성능 요구사항 등을 종합적으로 고려하여 최적의 테스트 프레임워크를 선택해야 합니다. 잘못된 선택은 개발 생산성 저하, 유지보수 비용 증가, 심지어는 심각한 버그 발생으로 이어질 수 있습니다. 과연 어떤 프레임워크가 여러분의 프로젝트에 가장 적합할까요? 본 글에서는 Jest, Vitest, Mocha 세 가지 주요 자바스크립트/타입스크립트 테스트 프레임워크를 심층적으로 비교 분석하고, 실제 프로젝트 시나리오에 따른 현명한 선택 가이드를 제시하고자 합니다.

📑 목차

Jest, Vitest, Mocha: 자바스크립트/타입스크립트 테스트 프레임워크 심층 비교 분석 및 선택 가이드 - covid, testing, corona test, covid-19, corona, coronavirus, sars-cov-2, concept, quick test, pcr, pcr-test, covid test, covid, covid, covid, covid, covid, corona, corona, covid test, covid test, covid test

Image by analogicus on Pixabay

견고한 소프트웨어를 위한 테스트 프레임워크의 중요성

소프트웨어 개발 생명주기(SDLC)에서 테스트는 단순한 검증 단계를 넘어, 코드 품질 향상, 버그 조기 발견, 리팩토링 용이성 증대, 그리고 궁극적으로 개발 생산성 향상에 기여하는 핵심적인 활동입니다. 특히 모던 웹 애플리케이션은 복잡한 상호작용과 다양한 의존성을 가지므로, 체계적인 테스트 없이는 안정적인 서비스를 제공하기 어렵습니다. 테스트 프레임워크는 이러한 테스트 과정을 자동화하고 구조화하여 개발자가 효율적으로 테스트 코드를 작성하고 실행할 수 있도록 돕는 역할을 수행합니다.

유닛 테스트(Unit Test)를 통해 개별 함수나 컴포넌트의 동작을 검증하고, 통합 테스트(Integration Test)를 통해 여러 모듈 간의 상호작용을 확인하며, 엔드투엔드 테스트(End-to-End Test)를 통해 사용자 흐름 전체를 시뮬레이션함으로써 애플리케이션의 신뢰도를 높일 수 있습니다. 이 과정에서 테스트 프레임워크는 테스트 코드 작성의 일관성을 유지하고, 테스트 결과를 명확하게 보고하며, 테스트 실행 환경을 관리하는 등 다방면으로 기여합니다. 따라서 프로젝트 시작 단계에서 적합한 테스트 프레임워크를 선택하는 것은 장기적인 관점에서 개발 효율성과 소프트웨어 품질을 좌우하는 중요한 결정으로 판단됩니다.

Jest: Facebook이 만든 올인원 테스트 솔루션

Jest는 Facebook(Meta)에서 개발한 자바스크립트 테스트 프레임워크로, React 프로젝트에서 주로 사용되면서 큰 인기를 얻었습니다. Jest의 가장 큰 특징은 올인원(all-in-one) 솔루션이라는 점입니다. 테스트 러너, 어서션 라이브러리, 모킹 라이브러리, 코드 커버리지 도구 등이 모두 내장되어 있어 별도의 설정 없이 바로 테스트 환경을 구축할 수 있다는 장점을 가집니다. 이러한 편리함은 특히 신규 프로젝트의 초기 설정 비용을 크게 줄여줍니다.

간편한 설정과 풍부한 기능

Jest는 최소한의 설정만으로도 강력한 테스트 기능을 제공합니다. 예를 들어, expect 함수를 통한 직관적인 어서션 API는 테스트 코드의 가독성을 높여줍니다. 또한, 스냅샷 테스트(Snapshot Testing)는 UI 컴포넌트나 데이터 구조의 변화를 추적하는 데 매우 유용합니다. 첫 실행 시 현재 상태의 스냅샷을 저장하고, 이후 테스트 실행 시 저장된 스냅샷과 현재 상태를 비교하여 변경 사항을 감지합니다. 이는 예상치 못한 변화를 빠르게 파악하고 회귀를 방지하는 데 효과적입니다.


// example.js
function sum(a, b) {
  return a + b;
}

// example.test.js
describe('sum function', () => {
  test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
  });

  test('object assignment', () => {
    const data = { one: 1 };
    data['two'] = 2;
    expect(data).toEqual({ one: 1, two: 2 }); // toEqual은 객체의 깊은 비교를 수행
  });

  test('snapshot test for a simple object', () => {
    const user = {
      id: 1,
      name: 'John Doe',
      email: 'john.doe@example.com',
    };
    expect(user).toMatchSnapshot(); // 첫 실행 시 스냅샷 생성
  });
});

Jest는 또한 강력한 모킹(Mocking) 기능을 내장하고 있어, 외부 의존성(API 호출, 데이터베이스 등)을 쉽게 격리하고 테스트할 수 있습니다. 이는 유닛 테스트에서 특정 컴포넌트나 함수 자체의 로직에만 집중할 수 있도록 돕습니다. 거대한 커뮤니티와 풍부한 문서 덕분에 문제 발생 시 해결책을 찾기 용이하며, 지속적인 업데이트와 개선이 이루어지고 있다는 점도 큰 장점입니다.

하지만 Jest는 비교적 무거운 번들 크기와 콜드 스타트 시간으로 인해 테스트 파일 수가 많아질수록 초기 실행 속도가 느려질 수 있다는 단점이 지적되기도 합니다. 특히 개발 환경에서 빠른 피드백 루프를 중시하는 현대적인 개발 흐름에서는 이러한 부분이 고려될 수 있습니다.

Vitest: Vite 기반의 빠르고 현대적인 테스트 경험

Vitest는 Vite를 기반으로 구축된 테스트 프레임워크로, Vite의 빠른 개발 서버 경험을 테스트 환경에서도 제공하는 것을 목표로 합니다. Vite 프로젝트와의 시너지를 극대화하며, esbuild와 Rollup을 활용하여 초고속 테스트 실행을 자랑합니다. 모던 자바스크립트 생태계에서 번들링과 개발 서버의 성능이 중요해지면서 Vitest는 빠르게 주목받는 대안으로 떠올랐습니다.

Vite와의 완벽한 통합과 뛰어난 성능

Vitest의 핵심 강점은 Vite의 개발 서버를 재사용하여 테스트 파일을 즉시 컴파일하고 실행한다는 점입니다. 이는 Jest와 같은 기존 프레임워크들이 테스트 실행 시 매번 전체 파일을 다시 번들링하는 방식과 대조적이며, 특히 개발 중인 테스트의 빠른 피드백이 가능하게 합니다. HMR(Hot Module Replacement)과 유사한 메커니즘을 통해 변경된 파일만 다시 실행하여 놀라운 속도를 제공합니다.

Vitest는 Jest와 유사한 API를 제공하여 기존 Jest 사용자들도 쉽게 전환할 수 있도록 설계되었습니다. expect, describe, test (또는 it) 등 익숙한 문법을 사용할 수 있으며, TypeScript를 기본적으로 지원하여 타입스크립트 프로젝트에서 별도의 설정 없이 원활하게 동작합니다. 또한, 인소스 테스트(In-source testing) 기능을 지원하여 테스트 코드를 실제 코드 파일 내부에 작성할 수 있어, 컴포넌트 단위의 테스트를 더욱 직관적으로 관리할 수 있습니다.


// src/utils.ts
export function multiply(a: number, b: number): number {
  return a * b;
}

// src/utils.test.ts (또는 src/utils.ts 내부에 인소스 테스트로 작성)
import { multiply } from './utils';
import { expect, describe, it } from 'vitest';

describe('multiply function', () => {
  it('should multiply two numbers correctly', () => {
    expect(multiply(2, 3)).toBe(6);
    expect(multiply(-1, 5)).toBe(-5);
    expect(multiply(0, 10)).toBe(0);
  });
});

Vitest는 Jest가 제공하는 대부분의 기능을 지원하며, 특히 ES Modules 환경에서 더 효율적으로 작동합니다. 하지만 비교적 짧은 역사로 인해 Jest에 비해 커뮤니티 규모나 레퍼런스 자료가 적다는 점, 그리고 아직은 Jest만큼 다양한 플러그인 생태계를 갖추지 못했다는 점이 단점으로 지적될 수 있습니다. 그럼에도 불구하고 성능과 현대적인 개발 환경과의 통합 측면에서 Vitest는 매우 매력적인 선택지로 평가됩니다.

Jest, Vitest, Mocha: 자바스크립트/타입스크립트 테스트 프레임워크 심층 비교 분석 및 선택 가이드 - test, virus, coronavirus, self-test, covid-19, infection, lock down, hygiene, transmission, shutdown, pandemic, test, test, test, test, test, virus, virus, virus, virus, coronavirus, coronavirus, coronavirus, coronavirus, covid-19, covid-19, covid-19, covid-19, pandemic, pandemic

Image by Alexandra_Koch on Pixabay

Mocha: 유연성과 확장성을 겸비한 전통의 강자

Mocha는 자바스크립트 테스트 프레임워크의 전통적인 강자 중 하나로, Node.js 환경에서 오랫동안 사용되어 오며 그 안정성을 입증했습니다. Jest나 Vitest와 달리 Mocha는 테스트 러너(Test Runner) 역할에 집중하며, 어서션 라이브러리나 모킹 라이브러리를 내장하고 있지 않습니다. 이러한 설계 철학 덕분에 Mocha는 높은 유연성과 확장성을 자랑합니다.

개방적인 아키텍처와 다양한 조합

Mocha의 가장 큰 특징은 필요한 도구를 개발자가 직접 선택하여 조합할 수 있다는 점입니다. 예를 들어, 어서션 라이브러리로는 Chai, 모킹 라이브러리로는 Sinon을 함께 사용하는 것이 일반적인 조합입니다. 이러한 모듈성은 개발자가 특정 요구사항에 맞춰 최적의 테스트 스택을 구축할 수 있도록 합니다. Node.js 환경에서 서버 사이드 코드 테스트에 특히 강점을 보이며, 다양한 환경에서 안정적으로 동작합니다.


// test/calc.js
const assert = require('chai').assert; // 어서션 라이브러리 Chai
const sinon = require('sinon'); // 모킹 라이브러리 Sinon

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

describe('Calculator', () => {
  let spy;

  beforeEach(() => {
    // 테스트 전에 스파이 생성 (Sinon 예시)
    spy = sinon.spy(console, 'log');
  });

  afterEach(() => {
    // 테스트 후에 스파이 복원
    spy.restore();
  });

  it('should return the sum of two numbers', () => {
    assert.equal(add(2, 3), 5, 'add(2,3) should be 5');
    assert.equal(add(-1, 1), 0, 'add(-1,1) should be 0');
  });

  it('should log to console when adding', () => {
    add(1, 2);
    assert.ok(spy.calledOnce, 'console.log should be called once');
  });
});

Mocha는 오랜 기간 동안 커뮤니티의 검증을 거쳐왔기 때문에 매우 안정적이며, 풍부한 문서와 레퍼런스가 존재합니다. 또한, 비동기 테스트를 위한 다양한 방식을 지원하며, 훅(before, after, beforeEach, afterEach)을 통해 테스트 환경을 유연하게 설정할 수 있습니다. 이러한 유연성은 대규모 레거시 프로젝트나 특정 도구와의 연동이 필요한 복잡한 환경에서 빛을 발합니다.

하지만 Mocha의 유연성은 양날의 검으로 작용할 수 있습니다. 초기 설정이 Jest나 Vitest에 비해 복잡하며, 개발자가 직접 여러 라이브러리를 선택하고 조합해야 한다는 점은 진입 장벽으로 작용할 수 있습니다. 또한, 내장된 모킹이나 스냅샷 테스트 기능이 없기 때문에, Jest나 Vitest에서 기본 제공하는 편리한 기능들을 구현하려면 추가적인 라이브러리 도입과 설정이 필요합니다.

주요 기능 및 성능 비교 분석

세 가지 테스트 프레임워크는 각각의 강점과 약점을 가지고 있으며, 이를 객관적인 지표로 비교하는 것은 프로젝트에 적합한 도구를 선택하는 데 필수적입니다. 다음은 주요 기능 및 성능 지표를 비교한 표입니다.

항목 Jest Vitest Mocha
설계 철학 올인원(All-in-one) Vite 기반, 빠른 피드백 테스트 러너 역할 집중, 유연성
번들러/트랜스파일러 Babel, ts-jest 등 Vite (esbuild, Rollup) Babel, ts-node 등 (외부)
내장 기능 어서션, 모킹, 스냅샷, 코드 커버리지, 워치 모드 Jest 호환 어서션/모킹, 스냅샷, 코드 커버리지, 워치 모드, In-source testing 테스트 러너, 훅 (Hooks)
TypeScript 지원 플러그인(ts-jest) 필요 기본 지원 외부 라이브러리(ts-node) 필요
성능 (초기 실행) 보통 (대규모 프로젝트에서 느려질 수 있음) 매우 빠름 보통 (설정에 따라 가변적)
성능 (워치 모드) 빠름 (변경 파일만 실행) 매우 빠름 (HMR 유사) 외부 도구(nodemon)와 조합 가능
커뮤니티/생태계 매우 활발, 풍부한 문서 및 플러그인 빠르게 성장 중, Vite 생태계와 연동 오랜 역사, 안정적, 다양한 라이브러리 조합
학습 곡선 낮음 (간편한 설정) 낮음 (Jest 유사 API) 중간 (여러 라이브러리 학습 필요)

성능 (실행 속도 및 리소스 사용량)

성능 측면에서 Vitest는 단연 돋보입니다. Vite의 네이티브 ESM(ECMAScript Modules) 지원과 esbuild를 활용한 빠른 번들링 덕분에, 특히 수백 개 이상의 테스트 파일을 가진 대규모 프로젝트에서 Jest 대비 2~5배 빠른 초기 실행 속도를 보이는 경우가 많습니다. 또한, 개발 중 워치 모드(watch mode)에서의 파일 변경 감지 및 재실행 속도는 Jest보다 훨씬 빠르다고 평가됩니다. 이는 개발자에게 거의 즉각적인 피드백을 제공하여 생산성 향상에 크게 기여합니다.

Jest는 자체적인 번들링 및 트랜스파일링 과정을 거치므로, 초기 실행 시 콜드 스타트 시간이 상대적으로 길 수 있습니다. 그러나 병렬 처리(parallelization) 기능을 통해 멀티코어 CPU를 효율적으로 사용하여 전체 테스트 시간을 단축할 수 있습니다. Mocha는 테스트 러너 역할에 집중하므로, 성능은 함께 사용하는 번들러(예: Webpack)나 트랜스파일러(예: Babel)의 설정에 따라 크게 달라질 수 있습니다. 일반적으로는 Jest와 비슷한 수준이거나, 최적화되지 않은 설정에서는 더 느릴 수도 있습니다.

생태계 및 확장성

Jest는 가장 큰 사용자 기반을 가지고 있으며, 가장 성숙한 생태계를 자랑합니다. 수많은 플러그인, 확장 기능, 커뮤니티 지원이 활발하며, React, Vue, Angular 등 다양한 프레임워크와의 통합이 매우 용이합니다. 이는 문제 발생 시 해결책을 찾기 쉽고, 필요한 기능을 추가하기 편리하다는 의미입니다.

Vitest는 빠르게 성장하는 커뮤니티와 Vite 생태계의 지원을 받고 있습니다. Jest와 높은 API 호환성을 유지하려 노력하여, 기존 Jest 사용자들의 전환을 유도하고 있습니다. 아직 Jest만큼 방대한 플러그인이나 레퍼런스는 없지만, Vite를 사용하는 프로젝트에서는 가장 자연스럽고 효율적인 선택으로 부상하고 있습니다.

Mocha는 그 유연성 덕분에 가장 높은 확장성을 가집니다. 개발자가 원하는 어서션, 모킹, 코드 커버리지 라이브러리를 자유롭게 선택하여 조합할 수 있습니다. 이는 특정 환경이나 요구사항에 맞춰 최적화된 테스트 스택을 구축하는 데 유리합니다. 하지만 이러한 자유도는 개발팀의 숙련도와 초기 설정 비용 증가로 이어질 수 있습니다.

Jest, Vitest, Mocha: 자바스크립트/타입스크립트 테스트 프레임워크 심층 비교 분석 및 선택 가이드 - coronavirus, mass testing, covid-19, slovakia, swab test, swab testing, pandemic, new normal, antigen test, man, testing, coronavirus test, medical worker, healthcare professional, healthcare worker, face masks, žilina, slovakia, slovakia, slovakia, swab test, swab test, swab test, swab test, swab test, pandemic, antigen test, antigen test, antigen test, testing, testing, coronavirus test, coronavirus test, medical worker, healthcare professional, healthcare worker, healthcare worker

Image by lukasmilan on Pixabay

실제 프로젝트 시나리오별 프레임워크 선택 가이드

어떤 테스트 프레임워크가 가장 좋다고 단정하기는 어렵습니다. 각 프레임워크는 특정 시나리오와 프로젝트 요구사항에 더 적합한 강점을 가지고 있기 때문입니다. 다음은 몇 가지 일반적인 프로젝트 시나리오에 따른 선택 가이드입니다.

신규 프로젝트 또는 Vite 기반 프로젝트

만약 Vite를 기반으로 하는 새로운 프론트엔드 프로젝트를 시작하거나, 빠른 개발 피드백 루프를 최우선으로 고려한다면 Vitest가 가장 이상적인 선택입니다. Vitest는 Vite와의 완벽한 통합을 통해 압도적인 테스트 실행 속도를 제공하며, Jest와 유사한 API를 제공하여 학습 곡선도 낮습니다. TypeScript 프로젝트에서도 별다른 설정 없이 바로 사용할 수 있어 개발 편의성이 높습니다. 개발 초기에 빠르게 테스트를 작성하고 실행하며 생산성을 극대화할 수 있습니다.

예를 들어, React + Vite + TypeScript 스택으로 SPA를 개발하는 경우, Vitest는 컴포넌트 유닛 테스트, 유틸리티 함수 테스트 등에 매우 효과적입니다. 빠른 피드백을 통해 개발자는 코드 변경 후 즉시 테스트 결과를 확인하고 다음 작업으로 넘어갈 수 있습니다.

대규모 레거시 프로젝트 또는 안정성 중시 프로젝트

오랜 기간 운영되어 온 대규모 레거시 프로젝트이거나, 최고의 안정성과 검증된 솔루션을 중요하게 생각한다면 Jest 또는 Mocha가 적합할 수 있습니다. Jest는 방대한 커뮤니티와 풍부한 문서, 다양한 통합 기능을 통해 안정적인 테스트 환경을 제공합니다. 기존에 Jest를 사용하던 프로젝트라면 계속 Jest를 사용하는 것이 팀의 숙련도 측면에서 유리합니다.

Mocha는 특히 Node.js 기반의 백엔드 서비스나 복잡한 서버 로직 테스트에 강점을 보입니다. 유연한 아키텍처 덕분에 특정 환경에 필요한 라이브러리(예: 데이터베이스 모킹 라이브러리)와 쉽게 통합할 수 있습니다. 다만, Mocha는 설정이 상대적으로 복잡하고 여러 라이브러리를 조합해야 하므로, 팀이 이러한 구성에 익숙하거나 커스터마이징의 필요성이 높은 경우에 더 유리하다고 판단됩니다.

안정성이 중요한 금융권 시스템이나 대규모 엔터프라이즈 애플리케이션에서는 Mocha와 Chai, Sinon 조합이 제공하는 강력한 제어력과 검증된 신뢰성이 큰 장점으로 작용할 수 있습니다.

React/Vue 등 특정 프레임워크 기반 프로젝트

React 프로젝트에서는 Jest가 여전히 강력한 선택지입니다. Facebook에서 개발한 프레임워크인 만큼 React 컴포넌트 테스트에 최적화된 도구와 예시가 풍부합니다. react-testing-library와 같은 라이브러리와의 통합도 매우 원활하며, 스냅샷 테스트는 UI 컴포넌트의 회귀를 방지하는 데 특히 유용합니다.

Vue 프로젝트에서는 VitestJest 모두 좋은 선택이 될 수 있습니다. Vue 3와 Vite 기반의 프로젝트가 많아지면서 Vitest는 Vue 개발자들 사이에서 빠르게 채택되고 있습니다. Vue Test Utils와 Vitest의 조합은 매우 효율적인 테스트 환경을 제공합니다. 기존 Vue CLI 기반 프로젝트나 Jest에 익숙한 팀이라면 Jest를 계속 사용하는 것도 전혀 문제가 되지 않습니다.

결론적으로, 특정 프레임워크에 대한 최적화는 Jest와 Vitest가 더 두드러지며, Mocha는 프레임워크에 구애받지 않는 일반적인 자바스크립트/타입스크립트 로직 테스트에 강점을 가집니다.

결론: 프로젝트 요구사항에 따른 현명한 선택

Jest, Vitest, Mocha는 자바스크립트/타입스크립트 개발 생태계에서 각자의 위치를 확고히 한 강력한 테스트 프레임워크입니다. Jest는 간편한 설정과 풍부한 내장 기능으로 올인원 솔루션을 선호하는 팀에 적합하며, 특히 React 생태계에서 강력한 지지를 받습니다. Vitest는 Vite 기반 프로젝트와 빠른 개발 피드백을 중시하는 현대적인 개발 환경에 최적화된 선택으로, 압도적인 성능을 제공합니다. Mocha는 유연한 아키텍처를 통해 개발자가 필요한 도구를 자유롭게 조합할 수 있도록 하여, 특정 요구사항이나 복잡한 레거시 시스템에 유연하게 대응할 수 있는 전통의 강자입니다.

이러한 비교 분석을 통해 각 프레임워크의 핵심 강점과 약점을 이해하는 것이 중요합니다. 궁극적으로 테스트 프레임워크의 선택은 다음과 같은 요소를 종합적으로 고려하여 이루어져야 합니다:

  • 프로젝트의 규모와 특성: 신규 소규모 프로젝트인지, 대규모 레거시 시스템인지?
  • 주요 기술 스택: Vite를 사용하는지, React/Vue 등 특정 프레임워크에 의존하는지?
  • 팀의 숙련도와 선호도: 팀원들이 특정 프레임워크에 익숙한지, 새로운 학습에 대한 거부감은 없는지?
  • 성능 요구사항: 테스트 실행 속도와 개발 피드백 루프의 중요도?
  • 확장성 및 커스터마이징 필요성: 기본 기능 외에 특정 도구와의 통합이나 커스터마이징이 필요한지?

어떤 프레임워크를 선택하든, 가장 중요한 것은 테스트 코드를 꾸준히 작성하고 유지보수하는 문화를 정착시키는 것입니다. 올바른 테스트 프레임워크의 선택은 이러한 문화를 구축하고 개발 생산성을 높이는 데 중요한 초석이 될 것입니다. 본 가이드가 여러분의 프로젝트에 최적의 테스트 도구를 선택하는 데 실질적인 도움이 되기를 바랍니다.

여러분은 어떤 테스트 프레임워크를 사용하고 계신가요? 각 프레임워크를 사용하면서 느꼈던 경험이나 특별한 팁이 있다면 댓글로 공유해 주세요!

📌 함께 읽으면 좋은 글

  • [기술 리뷰] Vite vs Webpack: 현대 웹 개발 번들러 심층 비교 분석 및 선택 가이드
  • [커리어 취업] 개발자 연봉 협상 성공 전략: 시장 분석부터 제안 수락까지 실전 가이드
  • [튜토리얼] VS Code 원격 개발 환경 구축: WSL, SSH, Dev Containers 실전 활용 가이드

이 글이 도움이 되셨다면 공감(♥)댓글로 응원해 주세요!
궁금한 점이나 다루었으면 하는 주제가 있다면 댓글로 남겨주세요.

반응형