diff --git a/fundamentals/bundling/tutorial/basic.md b/fundamentals/bundling/tutorial/basic.md deleted file mode 100644 index 976abe0e..00000000 --- a/fundamentals/bundling/tutorial/basic.md +++ /dev/null @@ -1,166 +0,0 @@ -# 번들링 시작하기 - -## 1. 새 프로젝트 폴더 만들고 npm 초기화하기 - -먼저 웹팩 설정을 실습할 새 폴더를 만들어 주세요. Node.js 버전은 [가이드](https://nodejs.org/ko/download)를 참고해서 `22.14.0` 버전으로 설치해 주세요. - -```bash -mkdir webpack-tutorial -``` - -프로젝트 폴더로 이동한 뒤 터미널에 다음 명령어를 입력해 npm을 초기화해요 - -```bash -cd webpack-tutorial -npm init -y -``` -`npm init -y` 명령어는 기본 설정으로 `package.json` 파일을 자동으로 만들어줘요. `package.json` 파일은 프로젝트의 정보와 사용 중인 패키지를 기록하는 역할을 해요. - -## 2. 웹팩과 웹팩 CLI 설치하기 - -웹팩을 실행하려면 두 가지 패키지를 설치해야 해요. - -- `webpack`: 웹팩의 핵심 기능을 제공해요. -- `webpack-cli`: 터미널에서 `webpack` 명령어를 사용할 수 있도록 해줘요. - -```bash -npm install webpack webpack-cli --save-dev -``` - -`--save-dev` 옵션은 이 도구들이 앱 코드가 아니라 **개발 도구**라는 의미로 설치해요. 설치가 끝나면 `node_modules` 폴더와 `package-lock.json` 파일이 생겨요. - -::: details 개발 도구로 설치하는 것의 의미 - -라이브러리를 `--save-dev` 옵션으로 개발 도구로 설치하면, 실제 운영 환경이나 라이브러리 코드로 사용될 때 설치를 건너뜀으로써 설치 시간과 공간을 아낄 수 있어요. - -- `npm install` 명령어를 `--production` 옵션과 함께 실행하거나, `NODE_ENV` 환경 변수가 `"production"` 으로 설정되었을 때, devDependencies 에 명시된 패키지들은 설치되지 않아요. -- 내가 만든 패키지를 다른 프로젝트에서 다운로드 하더라도, devDependencies에 명시된 패키지들은 함께 설치되지 않아요. - -::: - -## 3. 기본 폴더 구조 만들기 - -아래와 같이 간단한 4개 파일을 만들어 보세요. - -```javascript -// src/utils/add.js -export function add(a, b) { - return a + b; -} -``` - -```javascript -// src/utils/subtract.js -export function subtract(a, b) { - return a - b; -} -``` - -```javascript -// src/utils/index.js -export { add } from './add.js'; -export { subtract } from './subtract.js'; -``` - -```javascript -// src/index.js -import { add } from './utils/index.js'; - -console.log(add(1, 2)); -``` - -이때 파일 구조는 다음과 같아요. - -``` -webpack-tutorial/ -├── src/ -│ ├── index.js -│ └── utils/ -│ ├── add.js -│ ├── index.js -│ └── subtract.js -├── webpack.config.js -├── package.json -└── node_modules/ -``` - -## 4. 웹팩 설정 파일 만들기 - -웹팩을 사용하려면 [어떤 파일부터 읽고](../deep-dive/bundling-process/entry.md), [결과를 어디에 저장할지](../deep-dive/bundling-process/output.md) 알려줘야 해요. 이걸 설정하는 파일이 `webpack.config.js`예요. - -프로젝트 루트에 다음처럼 작성해요. - -```javascript{6,9-12} -// webpack.config.js -const path = require('path'); - -module.exports = { - // 웹팩이 시작할 파일 경로예요. - entry: './src/index.js', - - // 번들된 결과 파일을 저장할 위치와 파일 이름이에요. - output: { - filename: 'bundle.js', - path: path.resolve(__dirname, 'dist'), - }, - - // 배포용 설정이에요. 코드 압축이나 최적화를 수행해요. - mode: 'production', -}; -``` - -여기서 중요한 설정 두 가지는 `entry`와 `output`이에요. 각 설정에 대한 더 자세한 내용은 링크에서 학습할 수 있어요. - -- [`entry`](../deep-dive/bundling-process/entry.md): 웹팩이 처음으로 불러올 파일이에요. 이 파일에서부터 필요한 모든 모듈을 찾아요. -- [`output`](../deep-dive/bundling-process/output.md): 번들 파일을 어느 위치에 어떤 이름으로 저장할지 정해요. - -### 5. `npm run build` 명령어 등록하기 - -이제 `webpack` 명령어를 쉽게 실행할 수 있도록 `package.json`에 다음과 같은 스크립트를 추가해요. - -```json -{ - "scripts": { - "build": "webpack" - } -} -``` - -이제 터미널에서 아래처럼 간단하게 실행할 수 있어요. - -```bash -npm run build -``` - -이 명령어는 웹팩을 실행해서 `src/index.js`부터 시작해 모든 의존 파일을 분석하고, `dist/bundle.js`로 하나로 묶어요. - -### 6. 웹팩으로 빌드하기 - -이제 아래 명령어로 실제 번들링을 실행해요. - -```bash -npm run build -``` - -그러면 `dist` 폴더에 `bundle.js` 파일이 생겨요. 이 파일은 4개 파일의 내용을 합쳐서 최적화된 형태로 만든 거예요. -원래 소스 코드와 동작은 같지만, 훨씬 최적화되었어요. 불필요한 공백이 없고, 사용하지 않는 코드들은 모두 삭제되었어요. - -```javascript -(()=>{"use strict";console.log(3)})(); -``` - -이제 폴더 구조는 다음과 같을 거예요. - -```{4} -webpack-tutorial/ -├── dist/ -│ └── bundle.js # 웹팩이 만든 번들 파일 -├── src/ -│ ├── index.js -│ └── message.js -├── package.json -├── webpack.config.js -└── node_modules/ -``` - -🎉 축하해요! 웹팩 설정을 성공적으로 마쳤어요. 이제 다음 단계로 넘어가 볼까요? diff --git a/fundamentals/bundling/tutorial/css.md b/fundamentals/bundling/tutorial/css.md deleted file mode 100644 index 6365e7e8..00000000 --- a/fundamentals/bundling/tutorial/css.md +++ /dev/null @@ -1,282 +0,0 @@ -# CSS 파일 번들링하기 - -이번에는 CSS 파일을 웹팩으로 어떻게 처리하는지 배워볼게요. - -웹팩의 강력한 기능 중 하나는 JavaScript뿐 아니라 CSS, 이미지, 폰트 등 다양한 자원도 하나의 JavaScript 모듈처럼 다룰 수 있다는 점이에요. - -## CSS를 JavaScript 모듈처럼 다루기 - -CSS 파일을 JavaScript 모듈처럼 다룰 수 있다는 것은 JavaScript 코드 안에서 import 문을 사용해 특정 컴포넌트나 모듈에 필요한 스타일만 가져올 수 있다는 뜻이에요. 이렇게 하면 스타일 충돌을 방지하고, 유지 보수가 쉬운 구조로 만들 수 있어요. - -CSS 클래스 이름을 겹치지 않게 컴포넌트 단위로 사용할 수 있도록 도와주는 [CSS Modules](https://css-tricks.com/css-modules-part-1-need/)를 사용하는 React 앱을 살펴볼게요. - -`Component.js` 파일에서 `Component.module.css`를 import하고 있어요. - -```javascript 2,6 -// src/Component.js -import css from './Component.module.css'; - -export function Component() { - return ( -

- Hello, world! -

- ) -} -``` - -```css 2-4 -/* src/Component.module.css */ -.title { - color: red; -} -``` - -그런데 이렇게 JavaScript에서 CSS를 import하면 어떤 일이 일어날까요? JavaScript는 CSS를 직접 해석하거나 적용할 수 없기 때문에, 단순히 import한다고 해서 스타일이 자동으로 적용되지는 않아요. - -이 문제를 해결하기 위해 **번들러는 [로더](../deep-dive/bundling-process/loader.md)를 사용해 CSS 파일을 자바스크립트가 사용할 수 있는 모듈 형태로 변환해줘요.** 대표적인 예로 CSS 로더(css-loader)는 CSS 파일을 객체 형태로 바꿔주는데, 특히 CSS Modules와 함께 사용하면 원본 클래스 이름은 객체의 프로퍼티로, 중복을 방지하기 위해 변환된 클래스 이름은 프로퍼티 값으로 저장돼요. - -```javascript -// 변환된 Component.module.css -export default { - title: '_styles__title_309571057', -}; -``` - -## CSS 파일 웹팩에서 다루기 - -### 1. 새 프로젝트 폴더 만들고 npm 초기화하기 - -CSS 설정을 실습할 새 프로젝트를 만들어 볼게요. 프로젝트를 만들고 React와 관련된 라이브러리를 설치해요. - -```bash -npm init -y -npm install react react-dom -``` - -프로젝트에서 웹팩과 TypeScript도 사용하기 위해 설치해 주세요. - -```bash -npm install webpack webpack-cli typescript --save-dev -``` - -`react`와 `react-dom`의 타입 정보를 불러오기 위해 타입 패키지도 설치해 주세요. - -```bash -npm install @types/react @types/react-dom -``` - -[React 프로젝트를 웹팩에서 사용](./with-react.md)하기 위한 패키지도 설치해 주세요. - -```bash -npm install babel-loader @babel/core @babel/preset-react @babel/preset-typescript html-webpack-plugin --save-dev -``` - -다음과 같이 `tsconfig.json`을 작성해 주세요. - -```json -{ - "compilerOptions": { - "target": "es6", - "module": "esnext", - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "noEmit": true, - "strict": true, - "jsx": "react" - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] -} -``` - -### 2. CSS 파일 만들고 import하기 - -`src/Component.tsx`에 간단한 React 컴포넌트를 작성해요. 이 React 컴포넌트에서는 CSS Modules로 작성된 CSS 파일을 import해요. - -```typescript 3 -// src/Component.tsx -import React from 'react'; -import css from './Component.module.css'; - -export function Component() { - return ( -

- Hello, world! -

- ) -} -``` - -`src/Component.module.css`에 사용할 CSS 파일을 만들어 주세요. - -```css -/* src/Component.module.css */ -.title { - color: red; -} -``` - -`src/index.tsx` 파일을 만들고 위에서 만든 `Component` 컴포넌트를 브라우저에 렌더링하는 코드를 작성해 주세요. - -```typescript -// src/index.tsx -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import App from './App'; - -const container = document.getElementById('root')!; -const root = createRoot(container); -root.render(); -``` - -마지막으로 React 서비스를 실행하는 데에 사용할 HTML 파일을 만들어 주세요. - -```html - - - - - - - - -
- - -``` - -이때 파일 구조는 다음과 같아요. - -``` -webpack-tutorial/ -├── src/ -│ ├── Component.tsx -│ ├── Component.module.css -│ ├── index.tsx -│ └── template.html -├── tsconfig.json -├── package.json -└── node_modules/ -``` - -### 3. CSS 로더 설치하기 - -웹팩이 CSS 파일을 해석하고 JavaScript로 변환할 수 있도록 하기 위해 [로더](../deep-dive/bundling-process/loader.md)를 활용해 볼게요. -다음 2가지 로더를 설치할 거예요. - -```bash -npm install style-loader css-loader --save-dev -``` - -각 로더의 역할은 아래와 같아요. - -- [`css-loader`](../deep-dive/bundling-process/loader.md#css-loader): `.css` 파일의 내용을 읽고, JavaScript에서 사용할 수 있는 형식으로 바꿔줘요. -- [`style-loader`](../deep-dive/bundling-process/loader.md#style-loader): JavaScript로 바뀐 CSS를 웹페이지에 `