SlideShare a Scribd company logo
2022.01.28
서비스 개발팀
이연권
모듈시스템과 Webpack
날짜
팀
담당자
목차
##
목차
• 모듈의 기원
• 모듈 시스템
• 번들러
• Webpack
너무 길어지는 코드에 대한 처리
모듈의 기원
01
ODQ 코드의 일부
ODQ 코드의 라인 수
너무 길어지는 코드에 대한 처리
파일들의 의존성 및 순서 문제
모듈의 기원
01
파일의 의존성 및 순서 문제
CJS, AMD
모듈 시스템
02
CJS(CommonJS)
CommonJS는 웹 브라우저 밖의 자바스크립트를 위한 모듈 생태계 규칙을 설립하기 위해 만들어졌습니다. 그렇기 때문에 CommonJS 는 보통 서버 사이드 개발에 좀 더
적합하게 설계되었고 Node.js의 표준 모듈시스템으로 자리잡았습니다.
AMD(Asynchronous Module Definition)
CommonJS는 모든 파일이 디스크에 있어, 필요할 때 바로 불러올 수 있는 상황에서 주로 사용됩니다. 브라우저에서 이런 방식은 필요한 모듈이 모두 다운로드 될 때까지
아무것도 할 수 없는 상황이 발생합니다. 그래서 비동기 방식으로 자바스크립트 모듈을 사용하는 API인, AMD가 만들어졌습니다.
RequireJS
모듈 시스템
02
RequireJS (AMD)
fruits.js
main.js
apple.js banana.js
fruits.js
main.js
ESM(ECMAScript Module)
모듈 시스템
02
ESM(ECMAScript Module)
자바스크립트의 표준 스펙인 ECMAScript에서 모듈 시스템에 대한 문법을 내놓았습니다. CommonJS의 문제점인 비동기 방식에 대한 지원도 합
니다.
번들러의 역할과 이점
번들러
03
번들러의 역할과 이점
번들러는 웹사이트 개발과정에서 생기는 많은 리소스 파일들을 최적화 해주는 역할을 합니다.
1. 여러 개의 파일을 하나로 묶어줍니다 -> 네트워크 접속의 부담을 줄여 더 빠른 서비스를 제공할 수 있습니다.
2. 다양한 서드파티 라이브러리를 사용할 수 있습니다 -> 구형 브라우저를 지원하도록 도와주는 babel이나 보다 편하게 CSS를 작성할 수 있는
전처리기 등
3. 코드의 양을 최소화 해줍니다 -> 변수명, 띄어쓰기 및 개행을 변경, 제거하여 파일의 크기를 줄여줍니다.
번들러 빌드 예시
번들러
03
번들러 빌드 예시
HTML JavaScript
번들러를 통하여 작성한 파일들을 아래와 같이 번들링 할 수 있습니다.
번들러의 종류
번들러
03
번들러의 종류
PARCEL
번들러
03
PARCEL
Parcel은 2017년에 나온 웹 애플리케이션의 번들러 입니다.
Parcel의 특징은 설정이 필요 없는 zero-configuration 입니다.
큰 웹 애플리케이션을 빌드하면 소모되는 시간이 상당한데
Parcel은 캐싱을 하므로 최초 빌드보다는 두 번째 빌드 속도부터 빠른 속도로 빌드가 됩니다
Rollup
번들러
03
Rollup
Rollup은 ESM 형태로 번들링이 이루어져 라이브러리 제작에 적합한 번들러 입니다.
자바스크립트 파일에서 번들 전체에 사용하지 않는 코드를 제거해주는 Tree shaking이
잘 이루어진다는 장점이 있습니다.
여러 개의 모듈을 하나의 scope로 합쳐진 단일 모듈로 만들기 때문에 코드를 줄일 수 있습니다.
웹팩 번들링
롤업 번들링
Webpack
번들러
03
Webpack
Webpack은 2012년도에 나온 번들링 도구 입니다.
타 번들러에 비해 생태계가 풍부하여 많은 플러그인 지원이 장점이며 안정적입니다.
Development, Production 모드를 나눠 Production 모드에서는 코드 난독화, 압축, 트리셰이킹을 지원합니다,
Loader에서 babel을 통해 일부 브라우저에서 지원되지않는 ES6 문법에 대한 트랜스파일링을 지원합니다,
Webpack설치 및 필요한 파일
Webpack
04
Webpack설치 및 필요한 파일
프로젝트 생성 및 webpack 설치
cli를 사용하여 webpack 빌드
Webpack 환경설정
Webpack
04
Mode
Mode 매개 변수를 [development, production 또는 none]으로 설정하면 각 환경에 해당하는
Webpack의 내장 최적화를 사용할 수 있습니다. 아무런 설정을 하지 않으면 웹팩은 production으로
자동 설정합니다.
Entry point
Entry point는 내부 종속성 그래프를 시작하기 위해 번들링 프로세스를 시작할 지점을 나타냅니다.
Webpack은 Entry point에 의존하는 다른 모듈과 라이브러리를 파악합니다.
Entry point는 한 개일 수도 있고, 여러 개일 수도 있습니다.
Output
output 설정은 웹팩이 컴파일 된 파일을 어떻게 디스크에 생성할지 표현하는 것입니다.
Entry는 여러 개 있을 수 있지만, output은 오직 하나만 지정할 수 있습니다.
Plugin
Plugin은 웹팩에 기본적인 동작에 추가적인 기능을 제공하게 해줍니다.
Plugin은 다양한 커스텀 기능을 제공하는데, 번들링된 파일을 난독화, 압축할 수 있고, 파일 복사 파일
추출, 별칭 사용 등과 같은 작업을 수행할 수도 있습니다.
webpack.config.js
참고
JavaScript 번들러로 본 조선시대 붕당의 이해 | 요즘IT
[JavaScript] CJS, AMD, UMD, ESM
[Webpack] 웹팩 개념 알아보기
NAVER D2
NAVER D2
[ECMAScript] AMD, CommonJS 의 JavaScript 모듈화 | MINJUNG
자바스크립트 범용화와 모듈 시스템 | ESM, CommonJS
Webpack에서 Rollup전환기
감사합니다

More Related Content

What's hot

[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
종훈 박
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01
SangHun Lee
 
킴스큐Rb 설치
킴스큐Rb 설치킴스큐Rb 설치
킴스큐Rb 설치Gitaek kwon
 
Html초급 1강 웹표준의 이해
Html초급 1강 웹표준의 이해Html초급 1강 웹표준의 이해
Html초급 1강 웹표준의 이해
tailofmoon
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
Taegon Kim
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
Sangmin Yoon
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
Kim Hunmin
 
웹표준의 이해
웹표준의 이해웹표준의 이해
웹표준의 이해
Leehooan
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
Gunhee Lee
 
Vue
VueVue
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료
치웅 이
 
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
미래웹기술연구소 (MIRAE WEB)
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
NAVER Engineering
 
Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발
Aria (In Suk) Kim
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
복연 이
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
Sang Don Kim
 
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강 [토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
우영 주
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
nexusz99
 

What's hot (20)

[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
Mean stack Start
Mean stack StartMean stack Start
Mean stack Start
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01
 
킴스큐Rb 설치
킴스큐Rb 설치킴스큐Rb 설치
킴스큐Rb 설치
 
Html초급 1강 웹표준의 이해
Html초급 1강 웹표준의 이해Html초급 1강 웹표준의 이해
Html초급 1강 웹표준의 이해
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
웹표준의 이해
웹표준의 이해웹표준의 이해
웹표준의 이해
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
 
Vue
VueVue
Vue
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료
 
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발Vue.js와 Firebase를 활용한 웹 서비스 개발
Vue.js와 Firebase를 활용한 웹 서비스 개발
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강 [토크아이티] 프런트엔드 개발 시작하기 저자 특강
[토크아이티] 프런트엔드 개발 시작하기 저자 특강
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 

Similar to 모듈시스템과 webpack

Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
Dong-Jin Park
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
중선 곽
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
KwangSeob Jeong
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
중선 곽
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
dpTablo
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
Hankyo
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
Amazon Web Services Korea
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
NAVER D2
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서draghome
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
Open Source Consulting
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
KwangSeob Jeong
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST_NHNent
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
Jae Sung Park
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
NAVER D2
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
미래웹기술연구소 (MIRAE WEB)
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
cho hyun jong
 
Webpack&babel
Webpack&babelWebpack&babel
Webpack&babel
ChangHyeon Bae
 
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
JungWoon Lee
 

Similar to 모듈시스템과 webpack (20)

Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
Webpack&babel
Webpack&babelWebpack&babel
Webpack&babel
 
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
 

More from DataUs

220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
DataUs
 
0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션
DataUs
 
0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템
DataUs
 
Chrome Devtools
Chrome DevtoolsChrome Devtools
Chrome Devtools
DataUs
 
Spring Security
Spring SecuritySpring Security
Spring Security
DataUs
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
DataUs
 
Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1
DataUs
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기
DataUs
 
해커 그들은 누구인가?
해커 그들은 누구인가?해커 그들은 누구인가?
해커 그들은 누구인가?
DataUs
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
DataUs
 
데이터 모델이론 개념모델링
데이터 모델이론 개념모델링데이터 모델이론 개념모델링
데이터 모델이론 개념모델링
DataUs
 
[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드
DataUs
 
NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료
DataUs
 
html / css
html / csshtml / css
html / css
DataUs
 
네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화
DataUs
 
Systemd
SystemdSystemd
Systemd
DataUs
 

More from DataUs (16)

220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
 
0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션
 
0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템0222 사내세미나 이연권_추천시스템
0222 사내세미나 이연권_추천시스템
 
Chrome Devtools
Chrome DevtoolsChrome Devtools
Chrome Devtools
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
 
Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1Vue guide예제(vue todo-list)-v0.1
Vue guide예제(vue todo-list)-v0.1
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기
 
해커 그들은 누구인가?
해커 그들은 누구인가?해커 그들은 누구인가?
해커 그들은 누구인가?
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
 
데이터 모델이론 개념모델링
데이터 모델이론 개념모델링데이터 모델이론 개념모델링
데이터 모델이론 개념모델링
 
[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드[DataUs]클라우드 입문자를 위한 보안 가이드
[DataUs]클라우드 입문자를 위한 보안 가이드
 
NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료NHN Cloud 1차 교육자료
NHN Cloud 1차 교육자료
 
html / css
html / csshtml / css
html / css
 
네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화네트워킹과 웹 성능 최적화
네트워킹과 웹 성능 최적화
 
Systemd
SystemdSystemd
Systemd
 

모듈시스템과 webpack

  • 2. 목차 ## 목차 • 모듈의 기원 • 모듈 시스템 • 번들러 • Webpack
  • 3. 너무 길어지는 코드에 대한 처리 모듈의 기원 01 ODQ 코드의 일부 ODQ 코드의 라인 수 너무 길어지는 코드에 대한 처리
  • 4. 파일들의 의존성 및 순서 문제 모듈의 기원 01 파일의 의존성 및 순서 문제
  • 5. CJS, AMD 모듈 시스템 02 CJS(CommonJS) CommonJS는 웹 브라우저 밖의 자바스크립트를 위한 모듈 생태계 규칙을 설립하기 위해 만들어졌습니다. 그렇기 때문에 CommonJS 는 보통 서버 사이드 개발에 좀 더 적합하게 설계되었고 Node.js의 표준 모듈시스템으로 자리잡았습니다. AMD(Asynchronous Module Definition) CommonJS는 모든 파일이 디스크에 있어, 필요할 때 바로 불러올 수 있는 상황에서 주로 사용됩니다. 브라우저에서 이런 방식은 필요한 모듈이 모두 다운로드 될 때까지 아무것도 할 수 없는 상황이 발생합니다. 그래서 비동기 방식으로 자바스크립트 모듈을 사용하는 API인, AMD가 만들어졌습니다.
  • 7. ESM(ECMAScript Module) 모듈 시스템 02 ESM(ECMAScript Module) 자바스크립트의 표준 스펙인 ECMAScript에서 모듈 시스템에 대한 문법을 내놓았습니다. CommonJS의 문제점인 비동기 방식에 대한 지원도 합 니다.
  • 8. 번들러의 역할과 이점 번들러 03 번들러의 역할과 이점 번들러는 웹사이트 개발과정에서 생기는 많은 리소스 파일들을 최적화 해주는 역할을 합니다. 1. 여러 개의 파일을 하나로 묶어줍니다 -> 네트워크 접속의 부담을 줄여 더 빠른 서비스를 제공할 수 있습니다. 2. 다양한 서드파티 라이브러리를 사용할 수 있습니다 -> 구형 브라우저를 지원하도록 도와주는 babel이나 보다 편하게 CSS를 작성할 수 있는 전처리기 등 3. 코드의 양을 최소화 해줍니다 -> 변수명, 띄어쓰기 및 개행을 변경, 제거하여 파일의 크기를 줄여줍니다.
  • 9. 번들러 빌드 예시 번들러 03 번들러 빌드 예시 HTML JavaScript 번들러를 통하여 작성한 파일들을 아래와 같이 번들링 할 수 있습니다.
  • 11. PARCEL 번들러 03 PARCEL Parcel은 2017년에 나온 웹 애플리케이션의 번들러 입니다. Parcel의 특징은 설정이 필요 없는 zero-configuration 입니다. 큰 웹 애플리케이션을 빌드하면 소모되는 시간이 상당한데 Parcel은 캐싱을 하므로 최초 빌드보다는 두 번째 빌드 속도부터 빠른 속도로 빌드가 됩니다
  • 12. Rollup 번들러 03 Rollup Rollup은 ESM 형태로 번들링이 이루어져 라이브러리 제작에 적합한 번들러 입니다. 자바스크립트 파일에서 번들 전체에 사용하지 않는 코드를 제거해주는 Tree shaking이 잘 이루어진다는 장점이 있습니다. 여러 개의 모듈을 하나의 scope로 합쳐진 단일 모듈로 만들기 때문에 코드를 줄일 수 있습니다. 웹팩 번들링 롤업 번들링
  • 13. Webpack 번들러 03 Webpack Webpack은 2012년도에 나온 번들링 도구 입니다. 타 번들러에 비해 생태계가 풍부하여 많은 플러그인 지원이 장점이며 안정적입니다. Development, Production 모드를 나눠 Production 모드에서는 코드 난독화, 압축, 트리셰이킹을 지원합니다, Loader에서 babel을 통해 일부 브라우저에서 지원되지않는 ES6 문법에 대한 트랜스파일링을 지원합니다,
  • 14. Webpack설치 및 필요한 파일 Webpack 04 Webpack설치 및 필요한 파일 프로젝트 생성 및 webpack 설치 cli를 사용하여 webpack 빌드
  • 15. Webpack 환경설정 Webpack 04 Mode Mode 매개 변수를 [development, production 또는 none]으로 설정하면 각 환경에 해당하는 Webpack의 내장 최적화를 사용할 수 있습니다. 아무런 설정을 하지 않으면 웹팩은 production으로 자동 설정합니다. Entry point Entry point는 내부 종속성 그래프를 시작하기 위해 번들링 프로세스를 시작할 지점을 나타냅니다. Webpack은 Entry point에 의존하는 다른 모듈과 라이브러리를 파악합니다. Entry point는 한 개일 수도 있고, 여러 개일 수도 있습니다. Output output 설정은 웹팩이 컴파일 된 파일을 어떻게 디스크에 생성할지 표현하는 것입니다. Entry는 여러 개 있을 수 있지만, output은 오직 하나만 지정할 수 있습니다. Plugin Plugin은 웹팩에 기본적인 동작에 추가적인 기능을 제공하게 해줍니다. Plugin은 다양한 커스텀 기능을 제공하는데, 번들링된 파일을 난독화, 압축할 수 있고, 파일 복사 파일 추출, 별칭 사용 등과 같은 작업을 수행할 수도 있습니다. webpack.config.js
  • 16. 참고 JavaScript 번들러로 본 조선시대 붕당의 이해 | 요즘IT [JavaScript] CJS, AMD, UMD, ESM [Webpack] 웹팩 개념 알아보기 NAVER D2 NAVER D2 [ECMAScript] AMD, CommonJS 의 JavaScript 모듈화 | MINJUNG 자바스크립트 범용화와 모듈 시스템 | ESM, CommonJS Webpack에서 Rollup전환기

Editor's Notes

  1. 기본적으로 webpack은 환경설정 파일을 사용할 필요없이 다음과 같이 cli를 이용하여 간단하게 build 할 수 있습니다. 하지만 일반적으로 프로젝트에서 webpack의 구조는 간단하지 않고, 많은 기능들을 추가적으로 다루어야 합니다. 따라서 환경설정 파일을 통해 build 해주어야 합니다.
  2. mode 매개 변수를 development, production 또는 none으로 설정하면 각 환경에 해당하는 webpack의 내장 최적화를 사용할 수 있습니다. 아무런 설정을 하지 않으면 웹팩은 production으로 자동 설정합니다. webpack.config.js에 다음과 같이 설정해주면 됩니다.