코드 품질 검사
ESLint를 통한 코딩 스타일 검사npm audit를 통한 보안 취약점 검사 Jest를 통한 각 함수 검증Jest + jsdom을 통한 모듈 연동 검증jsdom: Node.js안에서 가상의 브라우저 DOM을 흉내내는 라이브러리4개의 검사는 서로 의존하지 않으며, 병렬로 실행됨
하나라도 실패하면 merge 불가능
# CI - PR이 열릴 때, 그리고 main에 push될 때 자동으로 실행
name: CI
#: 주석으로 YAML이 무시하지만, 사람이 읽을 때 도움name: CI-workflow의 이름을 CI로 지정on:
pull_request:
branches: [main]
push:
branches: [main]
main에 대해 push, PR 이벤트 발생 시 실행됨
PR: merge 전 검사
push: merge 후 검사 → main과 기능이 섞일 수 있기 때문
CD는 push만 트리거
jobs:
lint:
name: 1) 린트 검사 (ESLint)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
lint: 이 job의 고유 IDname: UI에 보이는 이름 (한글도 가능)runs-on: ubuntu-latest: 최신 우분투 가상머신 사용actions/checkout@v4: 저장소 코드를 가상머신으로 다운로드- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- run: npm ci
- run: npm run lint
== 대신 === 권장security:
name: 2) 보안 검사 (npm audit)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- run: npm ci
의존성 패키지의 보안 취약성을 검사하는 작업
각 job은 완전히 새로운 가상 머신에서 실행하기 때문에
모든 준비를 처음부터 다시 해야 함
job 1.에서 설치한 것들을 다시 설치하는 이유
- run: npm run audit
내부적으로 npm audit --audit-level=high 같은 명령을 호출
심각도가 높은 취약점이 발견되면 0이 아닌 종료 코드 → job 실패
npm run audit != npm audit
두 명령어는 서로 다른 명령임
unit-test:
name: 3) 단위 테스트 (Jest)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- run: npm ci
- run: npm run test:unit
검증 대상
순수 함수의 입출력
add(2, 3) == 5 인지 확인
유틸리티 함수의 동작
formatDate('2026-04-30')의 결과 검증
예외 처리
divide(1, 0)이 에러를 던지는지 확인
경계값(edge case)
빈 배열, null, undefined 입력 시 동작
DB, 네트워크, 파일 시스템은 사용하지 않음
빠르고 환경에 관계없이 같은 결과가 나옴
integration-test:
name: 4) 통합 테스트 (Jest + jsdom)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- run: npm ci
- run: npm run test:integration
jsdom은 document나 윈도우 브라우저 객체를 가짜로 만들어줌
Node.js는 서버용이라 document나 윈도우 같은 브라우저 객체가 없음
실제 브라우저를 띄우지 않고도 dom 조작 코드를 실행할 수 있게 해줌
E2E 테스트(Playwright)보다 훨씬 빠르고, 단위 테스트보다 현실적
E2E 테스는 Docker 컨테이너를 실제로 띄워야 하기 때문에 무겁고 느림
보통 CI에서는 가볍고 빠른 검사를 진행함

# 모든 job의 공통 패턴
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- run: npm ci
- run: npm run XXX


