SCSS 컴파일 - by. UXKM

요약 설명

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

6.1.1. Sass(SCSS)란?

CSS 문법과 굉장히 유사하지만 선택자의 중첩(Nesting)이나 조건문, 반복문, 다양한 단위(Unit)의 연산 등. 표준 CSS 보다 훨씬 많은 기능을 사용해서 편리하게 작성할 수 있는
CSS 전처리기(CSS Preprocessor)입니다.

보통 언급되는 전처리기 3대장으로 Sass(SCSS), Less, Stylus가 있지만 Sass(SCSS)는 Less, Stylus의 장점을 모두 가지고 있고, 2006년부터 시작하여 가장 오래된 CSS 확장 언어이며 그만큼 높은 성숙도와 많은 커뮤니티를 가지고 있기 때문에 보편적으로 사용되는 Sass(SCSS)로 세팅을 진행합니다.

Sass(SCSS)를 제대로 활용하려면 충분한 공부가 필요하지만 간단하게 중첩(Nesting)과 변수($, variable)만 사용해도 Sass(SCSS)를 사용하는 데에 의미가 있습니다.

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

6.1.2. Sass 및 부가 패키지 설치

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

gulp-sass / dart-sass

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

dart-sass는 Dart 언어로 되어 있는 Sass 컴파일러입니다.
일반 Sass에 비해 빠르게 컴파일되고, Sass의 모든 버전을 지원하며, 'CSS Modules', 'CSS Grid' 등의 최신 기능을 지원합니다.
dart-sass는 더욱 자세하고 의미 있는 오류 메시지를 제공합니다. 이는 Sass에서 발생한 문제를 식별하고 해결하는 데 도움이 됩니다.
Sass는 Ruby로 작성된 라이브러리이므로, Ruby의 업데이트와 관련하여 버전 충돌이 발생할 수 있는 반면, dart-sass는 자체 업데이트 기능을 갖추고 있으며, Sass의 최신 기능을 지속적으로 지원합니다.

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를 사용하면 우리가 하던 일반적인 방법으로 개발자 모드를 통해 해당 엘리먼드에 적용된 style를 찾아 편리하게 디버깅을 할 수 있습니다.

하지만 Sass(SCSS)을 사용하면 html에 원본(Sass(SCSS))이 아닌 컴파일된 CSS 파일을 link 하기 때문에 개발자 모드에서 디버깅하기에 어려움이 있습니다.
(Sass(SCSS)는 웹에서 직접 동작하지 않으므로 컴파일 후 CSS 파일을 연결해야 합니다.)

gulp-sourcemaps를 설정하면 개발자 모드에서 Sass(SCSS) 파일의 위치를 알려주기 때문에 위에 언급된 불편함을 해소할 수 있습니다.

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

gulp-minify-css / gulp-rename

gulp-minify-css는 CSS를 압축하여 코드를 최소화할 수 있습니다.
줄바꿈과 띄어쓰기도 각각 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 and y)하고 업데이트를 진행합니다.
터미널에서 아래 명령을 실행합니다.

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

browserslist update procee

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

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

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

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

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

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

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

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

6.2.5.3. 컴파일된 css 코드 확인

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

6.2.5.4. 컴파일 동작 확인

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