SCSS 컴파일 - by. UXKM

  • Gulp
  • Assets 세팅
  • SCSS 컴파일

요약 설명

편리하고 효율적인 CSS 코딩을 위해 Gulp에 Sass(SCSS)를 세팅합니다.
웹에서는 Sass(SCSS)가 직접 동작하지 않으므로 웹에서 동작 가능한 표준의 CSS로 컴파일(Compile) 해야 합니다.
gulp-sass와 관련 부가 패키지를 세팅하여 Gulp에서 편리하게 Sass(SCSS)를 컴파일(Compile) 하는 방법을 알아봅니다.

6.1.1. Sass(SCSS)란?

Sass(SCSS)CSS 문법과 매우 유사한 CSS 전처리기(CSS Preprocessor)입니다.
표준 CSS에는 없는 선택자 중첩(Nesting), 조건문, 반복문, 다양한 단위(Unit)의 연산 등의 기능을 제공하여 더 편리하고 효율적으로 스타일을 작성할 수 있습니다.

주요 CSS 전처리기로는 Sass(SCSS), Less, Stylus가 있습니다.
이 중 Sass(SCSS)는 2006년부터 시작된 가장 오래된 CSS 확장 언어로, 높은 성숙도와 풍부한 커뮤니티를 보유하고 있으며, Less와 Stylus의 장점을 모두 갖추고 있어 가장 보편적으로 사용됩니다.
따라서 본 커리큘럼에서는 Sass(SCSS)로 세팅을 진행합니다.

CSS를 할 줄 안다면 Sass(SCSS)에 적응하는 데 큰 무리가 없을 정도로 진입 장벽이 낮습니다.
Sass(SCSS)를 완전히 활용하려면 충분한 학습이 필요하지만, 간단하게 중첩(Nesting)과 변수($, variable)만 사용해도 코드 작성 효율을 크게 향상시킬 수 있습니다.

Sass(SCSS) 문법 등 자세한 커리큘럼은 추후 업데이트될 예정입니다.

6.1.2. Sass 및 부가 패키지 설치

터미널에서 아래 명령을 실행하여 gulp-sassSass 컴파일(Compile)에 필요한 부가적인 패키지를 설치합니다.

gulp-sass / dart-sass

gulp-sass를 사용하려면 gulp-sass 자체와 Sass 컴파일러를 모두 설치해야 합니다.

dart-sassDart 언어로 작성된 Sass 컴파일러로, 현재 Sass의 공식 권장 구현입니다.
원래 Sass는 Ruby로 작성되었지만, dart-sass더 빠른 컴파일 속도더 자세하고 의미 있는 오류 메시지를 제공합니다.
또한 Ruby의 업데이트와 관련된 버전 충돌 문제 없이 Sass의 최신 기능을 지속적으로 지원하며, 모든 주요 브라우저와 최신 CSS 기능을 안정적으로 컴파일할 수 있습니다.

gulp-dependents

파일 간의 종속성을 추적하고 현재 스트림에 있는 파일에 종속되는 모든 파일을 추가하여 PCs, less, scss, sass의 *증분 빌드를 가능하게 하는 Gulp 플러그인입니다.

*증분 빌드란?
효율적인 빌드를 위해 이전에 빌드된, 아직까지 최신 상태인 구성 요소는 다시 빌드하지 않게 해주는 방식입니다.

gulp-postcss / autoprefixer

PostCSS는 Sass(SCSS), LESS 등의 CSS 전처리기와 반대로 CSS 후처리기입니다.
JavaScript 기반 플러그인을 사용하는 소프트웨어 개발 도구로, 특정 플러그인을 조합하여 원하는 CSS 변환 과정을 정의할 수 있습니다.

AutoprefixerPostCSS의 가장 유명한 플러그인 중 하나로, 벤더 접두사(Vendor Prefix. '-webkit-', '-moz-', '-ms-', '-o-')를 자동으로 추가해 주는 역할을 합니다.
표준 CSS 코드를 작성하고 Autoprefixer를 사용하면, 다양한 브라우저에 필요한 벤더 접두사를 자동으로 추가하여 일관된 스타일을 유지할 수 있습니다.

gulp-sourcemaps

소스맵(sourcemaps)은 컴파일된 코드와 원본 코드 간의 위치를 매핑해주는 파일입니다.
브라우저 개발자 도구에서 원본 파일의 위치를 정확히 표시하여 디버깅을 용이하게 해줍니다.

일반 CSS를 사용하면 개발자 도구를 통해 해당 요소에 적용된 스타일을 쉽게 찾아 디버깅할 수 있습니다.

하지만 Sass(SCSS)를 사용하면 HTML에 원본 Sass(SCSS) 파일이 아닌 컴파일된 CSS 파일을 연결하기 때문에 개발자 도구에서 원본 파일의 위치를 확인하기 어렵습니다.
(Sass(SCSS)는 웹에서 직접 동작하지 않으므로 컴파일 후 CSS 파일을 연결해야 합니다.)

gulp-sourcemaps를 설정하면 개발자 도구에서 원본 Sass(SCSS) 파일의 위치를 정확히 표시하므로 위에서 언급한 불편함을 해소할 수 있습니다.

Sourcemaps이 적용되지 않은 경우
[Sourcemaps이 적용되지 않은 경우]
Sourcemaps이 적용된 경우
[Sourcemaps이 적용된 경우]

gulp-minify-css / gulp-rename

gulp-minify-cssCSS를 압축하여 코드를 최소화할 수 있습니다.
줄바꿈과 띄어쓰기도 각각 1byte의 용량을 차지하므로, 짧은 CSS의 경우 용량 부담이 없지만 코드가 많은 CSS일 경우 부담이 될 수 있습니다.
gulp-minify-css를 이용해서 줄바꿈과 띄어쓰기를 제거하여 용량을 줄이고, 줄인 용량만큼 파일 전송량도 줄일 수 있습니다.

gulp-minify-css로 압축한 코드를
gulp-rename을 이용하여 파일 이름을 변경하여 새 파일을 생성할 수 있습니다.
압축된 새 파일의 이름에는 보통 minify의 줄임말인 min을 붙입니다.
따라서 컴파일 후 파일명.css, 파일명.min.css 이렇게 두 개의 파일이 생성됩니다.

이 과정을 생략한다고 해서 표준에 어긋나거나 오류가 발생하는 것은 아닙니다.
하지만 사이트를 최적화하는 목적으로 조금의 용량이라도 줄일 수 있다면 의미가 있습니다.

6.1.3. gulpfile.babel.js 세팅

gulpfile.babel.js 파일의 코드를 아래처럼 추가 및 수정합니다. (영역별 설명은 주석으로 표시합니다.)
변경이 없는 부분은 생략되며, 추가된 부분수정, 삭제된 부분의 코드만 표시됩니다.
또한 변경 없음, 추가된 부분, 수정, 삭제된 부분을 표시하는 텍스트는 마우스로 드래그해도 선택되지 않으므로 코드를 편리하게 복사할 수 있습니다.
전체 코드는 에디터 오른쪽의 [View full code]를 클릭하여 확인할 수 있습니다.

6.1.4. gulp dev 실행

gulpfile.babel.js 파일을 세팅한 후 터미널에서 아래 명령을 실행합니다.

Gulp가 실행되고 터미널에 Gulp의 작업 내용이 출력됩니다.

gulp dev 실행시 터미널에 작업내용 출력

세팅한 작업 순서에 따라 html 다음으로 css가 실행되는 것을 확인할 수 있습니다.
간혹 css task 사이에 아래와 같이 browserslist를 업데이트하라는 메시지가 출력이 되는 경우가 있습니다.

browserslist update message

지속적으로 업데이트되는 브라우저에 대응하기 위한 것으로, 이 메시지가 노출되면 Gulp를 종료(Ctrl + C 후 y 입력)하고 업데이트를 진행합니다.
터미널에서 아래 명령을 실행합니다.

자동으로 설치가 완료되지 않고 중간에 설치를 계속 진행할지 물어보는 단계가 있습니다. (아래 이미지 빨간 줄)
y 클릭 후 설치를 계속합니다.

browserslist update procee

위 이미지처럼 출력되면 browserslist가 성공적으로 업데이트되고, 업데이트 메시지가 당분간 나오지 않습니다.
browserslist는 지속적으로 업데이트되기 때문에 시간이 지나면 다시 나타납니다.

6.1.5. 빌드된 Sass(SCSS) 결과물 확인

6.1.5.1. CSS가 적용된 브라우저 확인

미리 세팅한 SCSS가 CSS로 컴파일 되어 브라우저에 적용됩니다.

CSS 적용 전
[CSS 적용 전]
CSS 적용 후
[CSS 적용 후]

6.1.5.2. dist > assets 폴더와 css 파일 확인

dist > assets > css 폴더 안에 style.cssstyle.min.css 파일이 컴파일되어 있는 것을 확인할 수 있습니다.
src 폴더의 _reset.scss_variable.scssstyle.scss에 병합되어 컴파일되기 때문에 dist 폴더에는 존재하지 않습니다.

빌드 후 dist > assets > css 폴더 확인

6.1.5.3. 컴파일된 css 코드 확인

병합된 _reset.scss 코드와 브라우저별 접두어가 적용된 CSS 결과물을 확인합니다.

6.1.5.4. 컴파일 동작 확인

아래 동영상처럼 실시간으로 SCSS가 컴파일 되는지 확인해 보세요.