기술 리뷰

프론트엔드 빌드 도구 비교: Webpack, Vite, Rollup, Esbuild 특징 및 선택 가이드

강코의 코딩 일기 2026. 5. 28. 20:10
반응형

프론트엔드 개발의 핵심 빌드 도구인 Webpack, Vite, Rollup, Esbuild의 특징과 장단점을 심층 비교하고, 프로젝트 상황에 맞는 최적의 도구 선택 가이드를 제시합니다.

프론트엔드 개발 과정에서 빌드 도구 선택은 왜 중요할까요? 단순히 코드를 하나로 묶는 것을 넘어, 개발 효율성, 애플리케이션 성능, 그리고 궁극적으로 개발 경험에 지대한 영향을 미치기 때문입니다. 모듈 번들링, 코드 트랜스파일링, 최적화, 개발 서버 운영 등 복잡한 작업을 효율적으로 처리해주는 빌드 도구는 현대 웹 개발의 필수 요소로 자리 잡았습니다.

수많은 프론트엔드 빌드 도구 중에서도 Webpack, Vite, Rollup, Esbuild는 각기 다른 철학과 강점을 가지고 개발자들의 선택을 기다리고 있습니다. 이 글에서는 이 네 가지 핵심 빌드 도구의 특징과 장단점을 심도 있게 비교 분석하고, 다양한 프로젝트 상황에 맞춰 어떤 도구를 선택하는 것이 현명한지 실질적인 가이드를 제공하고자 합니다.

프론트엔드 빌드 도구 비교: Webpack, Vite, Rollup, Esbuild 특징 및 선택 가이드 - handyman, construction site, workers, force, characters, fun, diy, construction work, work, to build, construction worker, building, housebuilding, craft, tool, architecture, maurer, renovation, hard work, helmet, building trade, works, handyman, handyman, workers, workers, workers, workers, diy, work, work, work, work, work, construction worker, building, hard work

Image by Alexas_Fotos on Pixabay

프론트엔드 빌드 도구, 왜 중요할까?

웹 애플리케이션의 규모가 커지고 사용하는 기술 스택이 다양해지면서, 개발 생산성을 유지하고 최종 사용자에게 최적의 경험을 제공하기 위한 빌드 도구의 역할은 더욱 중요해졌습니다. 빌드 도구는 다음과 같은 핵심 기능을 수행합니다.

  • 모듈 번들링 (Module Bundling): 수많은 자바스크립트, CSS, 이미지 등 개별 모듈들을 하나의 파일 또는 몇 개의 파일로 묶어 브라우저가 효율적으로 로드할 수 있도록 합니다.
  • 트랜스파일링 (Transpiling): 최신 자바스크립트 문법(ES6+)이나 타입스크립트, JSX 등을 구형 브라우저에서도 동작할 수 있는 형태로 변환합니다.
  • 코드 최적화 (Code Optimization): 불필요한 코드(데드 코드) 제거, 코드 난독화(Uglify), 압축(Minify) 등을 통해 파일 크기를 줄이고 로딩 속도를 향상시킵니다.
  • 개발 서버 및 HMR (Hot Module Replacement): 개발 중 변경된 코드만 빠르게 반영하여 페이지 전체를 새로고침하지 않고도 변경 사항을 즉시 확인할 수 있도록 돕습니다. 이는 개발 워크플로우의 생산성을 크게 향상시킵니다.
  • 자산 관리 (Asset Management): 이미지, 폰트, CSS 등 다양한 유형의 정적 자산들을 처리하고 최적화합니다.

이러한 기능들은 개발자가 비즈니스 로직에 집중할 수 있도록 돕고, 최종적으로 더 빠르고 안정적인 웹 애플리케이션을 배포하는 데 필수적입니다. 이제 각각의 빌드 도구들이 이러한 역할을 어떻게 수행하며, 어떤 차이점을 가지는지 자세히 살펴보겠습니다.

Webpack: 강력한 기능과 거대한 생태계의 선구자

Webpack은 오랫동안 프론트엔드 빌드 도구의 사실상 표준으로 자리매김해 온 도구입니다. 복잡한 의존성 그래프를 이해하고 모든 종류의 자산을 모듈로 취급하여 번들링하는 데 탁월한 능력을 보여줍니다.

주요 특징 및 장점

  • 광범위한 모듈 지원: 자바스크립트뿐만 아니라 CSS, 이미지, 폰트 등 거의 모든 파일을 모듈로 처리할 수 있습니다. 각 파일 유형에 맞는 로더(Loader)를 통해 변환 및 처리가 가능합니다.
  • 강력한 플러그인 생태계: Webpack의 핵심은 플러그인(Plugin) 시스템입니다. 번들 최적화, 환경 변수 주입, 캐싱, 코드 분할 등 거의 모든 빌드 프로세스를 플러그인을 통해 커스터마이징하고 확장할 수 있습니다. 수많은 오픈소스 플러그인이 존재하여 다양한 요구사항을 충족시킬 수 있습니다.
  • 코드 스플리팅 (Code Splitting): 애플리케이션을 여러 개의 작은 번들로 나누어 필요한 시점에만 로드함으로써 초기 로딩 속도를 향상시킬 수 있습니다. 이는 대규모 애플리케이션 성능 최적화에 필수적입니다.
  • 안정성과 성숙도: 오랜 기간 사용되어 오면서 수많은 문제 해결 사례와 방대한 문서, 커뮤니티 지원을 확보하고 있습니다.

단점 및 고려사항

  • 복잡한 설정: Webpack은 매우 유연하지만, 그만큼 설정 파일(webpack.config.js)이 복잡하고 학습 곡선이 가파릅니다. 특히 초기 설정이나 커스터마이징 시 많은 시간과 노력이 필요합니다.
  • 느린 빌드 속도: 대규모 프로젝트의 경우, 초기 빌드 및 개발 중 변경 사항 반영(리빌드) 속도가 상대적으로 느릴 수 있습니다. 이는 개발 생산성에 부정적인 영향을 미치기도 합니다.

사용 사례: 대규모 엔터프라이즈 애플리케이션, 고도로 커스터마이징된 빌드 프로세스가 필요한 프로젝트, 레거시 브라우저 지원이 필수적인 경우 등.

예시: 간단한 Webpack 설정의 일부


// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react']
          }
        }
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './public/index.html'
    })
  ],
  devServer: {
    static: './dist',
    hot: true,
  },
};

Rollup: 라이브러리 개발에 최적화된 번들러

Rollup은 Webpack과는 다른 철학을 가지고 있습니다. 주로 자바스크립트 라이브러리나 컴포넌트 개발에 특화되어 있으며, ESM(ECMAScript Modules)을 기반으로 더욱 효율적인 번들을 생성하는 데 강점을 보입니다.

주요 특징 및 장점

  • 트리 쉐이킹 (Tree Shaking) 효율성: Rollup은 ESM의 정적 분석 특성을 활용하여 트리 쉐이킹을 매우 효율적으로 수행합니다. 이는 최종 번들에서 사용되지 않는 코드를 완벽하게 제거하여 불필요한 용량 낭비를 최소화합니다. 결과적으로 더 작고 가벼운 번들을 생성하여 라이브러리 사용자에게 빠른 로딩 속도를 제공합니다.
  • ESM 기반 번들링: Rollup은 ESM을 기본으로 번들링하기 때문에, 결과물이 CommonJS나 UMD 형식으로 변환될 때도 원본 ESM 구조를 최대한 유지하려 노력합니다. 이는 다른 ESM 기반 환경과의 호환성을 높여줍니다.
  • 간결한 출력: 생성되는 번들 코드가 비교적 간결하고 읽기 쉽습니다. 불필요한 래퍼(wrapper) 코드가 적어 디버깅에도 유리합니다.
  • 설정의 간결함: Webpack에 비해 설정 파일이 훨씬 간결하며, 핵심 기능에 집중되어 있어 학습 곡선이 완만합니다.

단점 및 고려사항

  • 애플리케이션 빌드에는 부적합: Rollup은 라이브러리 번들링에 최적화되어 있어, 복잡한 HTML, CSS, 이미지 자산 관리가 필요한 대규모 SPA(Single Page Application) 빌드에는 Webpack이나 Vite보다 적합하지 않습니다.
  • 상대적으로 부족한 플러그인 생태계: Webpack만큼 방대한 플러그인 생태계를 가지고 있지 않습니다. 필요한 기능이 없을 경우 직접 구현하거나 다른 도구를 고려해야 할 수 있습니다.
  • 개발 서버 기능의 한계: HMR(Hot Module Replacement) 등 개발 편의 기능을 제공하지만, Webpack이나 Vite만큼 강력하고 유연하지 않습니다.

사용 사례: React 컴포넌트 라이브러리, Vue 컴포넌트 라이브러리, 유틸리티 함수 모음 라이브러리, 웹 컴포넌트 등 재사용 가능한 자바스크립트 라이브러리 개발.

예시: 간단한 Rollup 설정


// rollup.config.js
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import babel from '@rollup/plugin-babel';
import { terser } from 'rollup-plugin-terser';

export default {
  input: 'src/index.js',
  output: [
    {
      file: 'dist/bundle.cjs.js',
      format: 'cjs'
    },
    {
      file: 'dist/bundle.esm.js',
      format: 'esm'
    },
    {
      file: 'dist/bundle.umd.js',
      format: 'umd',
      name: 'MyLibrary'
    }
  ],
  plugins: [
    resolve(), // Node.js 모듈을 번들링 가능하게 합니다.
    commonjs(), // CommonJS 모듈을 ESM으로 변환합니다.
    babel({
      babelHelpers: 'bundled',
      presets: ['@babel/preset-env']
    }),
    terser() // 번들 코드 압축
  ]
};

Vite: 개발 경험 혁신을 이끄는 차세대 도구

Vite는 Vue.js의 창시자인 Evan You가 개발한 차세대 프론트엔드 빌드 도구로, 개발 서버의 압도적인 속도와 간편한 설정을 통해 개발 경험(DX)을 혁신하고 있습니다. 네이티브 ESM을 활용하여 개발 서버를 구동하는 것이 핵심입니다.

주요 특징 및 장점

  • 압도적인 개발 서버 속도: Vite는 개발 환경에서 번들링 과정을 거치지 않고 브라우저가 직접 네이티브 ESM을 통해 모듈을 로드하게 합니다. 이는 서버 시작 시간HMR 속도를 획기적으로 단축시켜, 대규모 프로젝트에서도 거의 즉각적인 피드백을 제공합니다.
  • Esbuild 활용: 의존성 사전 번들링(Dependency Pre-Bundling) 시에는 Esbuild를 사용하여 매우 빠른 속도로 처리합니다. 이는 CommonJS나 UMD 형식의 의존성 모듈을 ESM으로 변환하여 네이티브 ESM 환경에서 사용할 수 있도록 돕습니다.
  • Rollup 기반 프로덕션 빌드: 프로덕션 빌드 시에는 Rollup을 내부적으로 사용하여 최적화된 번들을 생성합니다. 이는 Rollup의 효율적인 트리 쉐이킹과 작은 번들 생성 능력을 활용하면서도, 개발 환경의 빠른 속도를 동시에 제공합니다.
  • 간결한 설정: 최소한의 설정만으로도 대부분의 프로젝트를 시작할 수 있으며, 필요한 경우 플러그인을 통해 기능을 확장할 수 있습니다. Webpack에 비해 설정 복잡도가 현저히 낮습니다.
  • 프레임워크 agnostic: Vue, React, Svelte 등 다양한 프레임워크를 공식적으로 지원하며, 템플릿 프로젝트를 제공하여 쉽게 시작할 수 있습니다.

단점 및 고려사항

  • 브라우저 호환성: 네이티브 ESM을 사용하기 때문에 구형 브라우저에서는 폴리필(polyfill)이나 추가적인 번들링 설정이 필요할 수 있습니다.
  • 생태계 성숙도: Webpack에 비하면 아직 플러그인 생태계가 빠르게 성장 중인 단계입니다. 특정 커스터마이징이 필요한 경우, Webpack만큼 다양한 솔루션이 없을 수 있습니다.

사용 사례: 새로운 SPA 개발, Vue/React/Svelte 등 모던 프레임워크 기반 프로젝트, 개발 속도와 생산성이 최우선인 팀.

예시: Vite 프로젝트 시작 및 간단한 설정


# Vite 프로젝트 생성
npm create vite@latest my-vite-app -- --template react

# 프로젝트 디렉토리로 이동
cd my-vite-app

# 개발 서버 실행
npm run dev

# vite.config.js (기본 설정)
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    port: 3000,
    open: true, // 서버 시작 시 브라우저 자동 열기
  },
  build: {
    outDir: 'dist',
    sourcemap: true,
  }
});
프론트엔드 빌드 도구 비교: Webpack, Vite, Rollup, Esbuild 특징 및 선택 가이드 - technology, computer, code, javascript, developer, programming, programmer, jquery, css, html, website, technology, technology, computer, code, code, code, code, code, javascript, javascript, javascript, developer, programming, programming, programming, programming, programmer, html, website, website, website

Image by Pexels on Pixabay

Esbuild: 압도적인 속도의 새로운 강자

Esbuild는 Go 언어로 작성된 자바스크립트 번들러 및 미니파이어(minifier)로, 압도적인 빌드 속도를 자랑합니다. 다른 빌드 도구들이 몇 초에서 몇 분이 걸리는 작업을 Esbuild는 수 밀리초에서 몇 초 만에 처리할 수 있습니다.

주요 특징 및 장점

  • 극강의 빌드 속도: Esbuild의 가장 큰 장점은 성능입니다. Go 언어의 병렬 처리 능력과 최적화된 아키텍처 덕분에 기존 자바스크립트 기반 번들러보다 10배에서 100배 이상 빠른 속도를 보여줍니다. 이는 CI/CD 파이프라인이나 대규모 프로젝트의 개발 생산성을 획기적으로 향상시킬 수 있습니다.
  • 단순하고 직관적인 API: 복잡한 설정 없이도 기본적인 번들링, 트랜스파일링, 압축 등의 작업을 수행할 수 있습니다. CLI(Command Line Interface)를 통해 간편하게 사용할 수 있습니다.
  • 트랜스파일링 지원: 최신 자바스크립트(ESNext), TypeScript, JSX 등을 빠르게 트랜스파일링할 수 있습니다.
  • 경량화된 번들: 빠른 속도만큼이나 효율적인 번들링을 통해 결과물의 크기도 작습니다.

단점 및 고려사항

  • 제한적인 기능: Webpack이나 Vite처럼 HMR, 코드 스플리팅, 고급 자산 관리 등 풀스택 빌드 도구가 제공하는 모든 기능을 기본적으로 제공하지 않습니다. Esbuild는 주로 '빌드' 자체에 초점을 맞춥니다.
  • 플러그인 생태계 부족: Go 언어로 작성되어 있어 자바스크립트 생태계의 플러그인과 직접 호환되지 않습니다. 플러그인 시스템이 존재하지만 Webpack만큼 활발하지는 않습니다.
  • 독립적인 사용의 한계: 대부분의 경우 Esbuild는 Vite와 같은 다른 빌드 도구의 내부 엔진으로 사용되거나, 특정 빌드 단계에서 속도를 개선하기 위한 용도로 활용됩니다. 복잡한 웹 애플리케이션의 엔드-투-엔드 빌드 도구로는 단독으로 사용하기 어렵습니다.

사용 사례: Vite의 내부 번들러, Next.js나 Remix와 같은 프레임워크의 일부, 빠른 빌드 속도가 핵심적인 특정 빌드 스크립트, 프로덕션 환경에서 코드 압축 및 번들링 최적화.

예시: Esbuild를 사용한 간단한 번들링


// src/index.js
import { greet } from './utils';
console.log(greet('World'));

// src/utils.js
export function greet(name) {
  return `Hello, ${name}!`;
}

// 터미널에서 Esbuild 실행
# npm install esbuild
# npx esbuild src/index.js --bundle --outfile=dist/output.js --minify

// dist/output.js (번들링 및 압축된 결과)
// console.log("Hello, World!");

주요 빌드 도구 비교 분석

네 가지 빌드 도구의 핵심 특징들을 비교 테이블을 통해 한눈에 살펴보겠습니다.

도구 주요 특징 개발 서버 속도 번들링 속도 (프로덕션) 설정 복잡도 주 사용 목적 생태계 및 확장성
Webpack 모든 자산 모듈화, 강력한 플러그인/로더, 코드 스플리팅 느림 (대규모 프로젝트) 보통 높음 대규모 SPA, 복잡한 커스터마이징 매우 넓고 성숙함
Rollup ESM 기반, 효율적인 트리 쉐이킹, 간결한 번들 보통 (HMR 제한적) 빠름 (작은 번들) 낮음 JS 라이브러리, 컴포넌트 개발 Webpack보다 작음
Vite 네이티브 ESM 개발 서버, Esbuild 활용, Rollup 프로덕션 빌드 매우 빠름 (즉각적인 HMR) 빠름 매우 낮음 모던 SPA, 빠른 개발 경험 빠르게 성장 중
Esbuild Go 기반, 압도적인 빌드 속도, 단순 번들링/트랜스파일링 N/A (개발 서버 기능 미약) 압도적으로 빠름 매우 낮음 빠른 번들링, 다른 도구의 엔진 제한적, 주로 CLI/API 사용
프론트엔드 빌드 도구 비교: Webpack, Vite, Rollup, Esbuild 특징 및 선택 가이드 - programming, html, css, javascript, php, website development, code, html code, computer code, coding, digital, computer programming, pc, www, cyberspace, programmer, web development, computer, technology, developer, computer programmer, internet, ide, lines of code, hacker, hacking, gray computer, gray technology, gray laptop, gray website, gray internet, gray digital, gray web, gray code, gray coding, gray programming, programming, programming, programming, javascript, code, code, code, coding, coding, coding, coding, coding, digital, web development, computer, computer, computer, technology, technology, technology, developer, internet, hacker, hacker, hacker, hacking

Image by Boskampi on Pixabay

나에게 맞는 빌드 도구 선택 가이드

각 도구의 장단점과 특징을 살펴보았으니, 이제 실제 프로젝트에서 어떤 도구를 선택해야 할지에 대한 가이드를 제시합니다. 선택은 프로젝트의 규모, 팀의 경험, 성능 요구사항, 그리고 개발하려는 결과물의 성격에 따라 달라져야 합니다.

프로젝트 규모 및 복잡성

  • 대규모, 복잡한 엔터프라이즈 애플리케이션:Webpack을 고려하는 것이 좋습니다. Webpack은 고도로 커스터마이징 가능한 설정과 방대한 플러그인 생태계를 통해 복잡한 요구사항과 다양한 레거시 시스템과의 통합을 효과적으로 지원할 수 있습니다. 초기 설정 비용과 빌드 속도가 느릴 수 있지만, 일단 구축되면 강력한 제어력을 제공합니다.
  • // 예시: Webpack을 사용하는 복잡한 모노레포 설정 // webpack.config.js 내에서 여러 하위 프로젝트를 위한 설정 분리 및 병합 // new webpack.DefinePlugin(), CopyWebpackPlugin, SplitChunksPlugin 등 다양한 플러그인 활용
  • 중소규모 또는 신규 SPA, 빠른 개발 경험이 중요:Vite가 최적의 선택입니다. Vite는 놀라운 개발 서버 속도와 간결한 설정으로 개발 생산성을 극대화합니다. Vue, React 등 최신 프레임워크 기반의 프로젝트에 특히 적합하며, 빠르게 프로토타입을 만들거나 개발 반복 주기를 단축해야 할 때 빛을 발합니다.
  • // 예시: Vite를 사용하는 React 프로젝트의 개발 시작 // npm create vite@latest my-react-app -- --template react // cd my-react-app && npm install && npm run dev

개발하려는 결과물의 성격

  • 재사용 가능한 JavaScript 라이브러리 또는 UI 컴포넌트:Rollup을 강력히 추천합니다. Rollup은 효율적인 트리 쉐이킹을 통해 불필요한 코드를 제거하고, ESM 기반의 작고 깨끗한 번들을 생성하는 데 특화되어 있습니다. 라이브러리가 다른 프로젝트에 통합될 때 최소한의 오버헤드를 제공하여 성능을 최적화합니다.
  • // 예시: Rollup을 사용한 유틸리티 라이브러리 번들링 // rollup.config.js에서 cjs, esm, umd 등 다양한 출력 포맷 설정 // import { terser } from 'rollup-plugin-terser'; 플러그인으로 최종 번들 압축
  • 극단적인 빌드 속도가 필요한 경우 (다른 도구의 엔진으로 활용):Esbuild는 이러한 용도로 탁월합니다. Esbuild 자체는 풀스택 빌드 도구라기보다는 번들링 및 트랜스파일링 엔진에 가깝습니다. Vite가 개발 환경에서 Esbuild를 의존성 사전 번들링에 활용하는 것처럼, 특정 빌드 단계에서 압도적인 속도가 필요할 때 Esbuild를 독립적으로 사용하거나 기존 빌드 시스템의 일부로 통합할 수 있습니다.
  • // 예시: CI/CD 환경에서 특정 스크립트의 빌드 속도 개선에 Esbuild 활용 // npx esbuild src/entry.js --bundle --minify --target=es2017 --outfile=dist/bundle.js

팀의 숙련도 및 생태계 의존성

  • Webpack: 팀에 Webpack 설정에 능숙한 인력이 있거나, 특정 레거시 시스템과의 연동, 복잡한 빌드 파이프라인이 필수적인 경우 선택할 수 있습니다. 방대한 생태계는 문제 해결에 큰 도움이 됩니다.
  • Vite: 최신 프론트엔드 기술 스택에 익숙하고, 빠른 개발 주기를 선호하며, 설정 복잡성을 최소화하고 싶은 팀에 적합합니다. 아직 Webpack만큼 넓지는 않지만, 빠르게 성장하는 커뮤니티와 생태계를 가지고 있습니다.
  • Rollup: 순수 자바스크립트 라이브러리 개발에 집중하는 팀에 적합합니다. 비교적 간단한 설정과 명확한 목적을 가지고 있어 학습 부담이 적습니다.
  • Esbuild: 개발자가 Go 언어 기반 도구 사용에 거부감이 없고, 빌드 속도 외의 다른 기능은 다른 도구로 보완할 수 있는 경우에 고려할 수 있습니다.

결론 및 요약

프론트엔드 빌드 도구는 개발자의 생산성과 애플리케이션의 성능을 결정하는 중요한 요소입니다. Webpack은 강력한 기능과 방대한 생태계로 복잡한 프로젝트에 안정적인 기반을 제공하지만, 높은 학습 곡선과 상대적으로 느린 빌드 속도를 가집니다. Rollup은 라이브러리 개발에 특화되어 효율적인 트리 쉐이킹과 작은 번들을 생성하는 데 탁월합니다. Vite는 네이티브 ESM을 활용한 혁신적인 개발 서버로 압도적인 개발 경험을 제공하며, Esbuild는 Go 언어 기반의 뛰어난 속도로 번들링 및 트랜스파일링의 새로운 기준을 제시합니다.

이처럼 각 도구는 명확한 강점과 약점을 가지고 있으며, 어떤 도구가 '최고'라고 단정하기보다는 프로젝트의 특성과 목표에 가장 적합한 도구를 선택하는 것이 중요합니다. 현재 진행 중인 프로젝트의 규모, 팀의 기술 스택, 요구되는 성능, 그리고 개발 경험을 종합적으로 고려하여 현명한 결정을 내리시길 바랍니다.

어떤 빌드 도구를 선호하시나요? 혹은 특정 도구를 사용하면서 겪었던 특별한 경험이나 팁이 있다면 댓글로 자유롭게 공유해주세요!

📌 함께 읽으면 좋은 글

  • [보안] OWASP Top 10 활용: 웹 애플리케이션 보안 취약점 진단 및 방어 전략
  • [개발 도구] VS Code 생산성 극대화: 개발 효율을 높이는 필수 확장 프로그램과 설정
  • [기술 리뷰] Spring Boot vs NestJS: 백엔드 프레임워크 선택 가이드

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

반응형