Git Actions란?
소프트웨어 개발 워크플로우를 자동화할 수 있는 CI/CD(지속적 통합/지속적 배포) 플랫폼.
주요 특징
- 자동화된 워크플로우: 코드 빌드, 테스트, 배포 등을 자동으로 실행.
- 다양한 트리거: push, pull request, 스케줄링 등 다양한 이벤트로 워크플로우 실행 가능.
- 매트릭스 빌드: 여러 운영체제나 Node.js 버전에서 동시에 테스트 가능.
- 재사용 가능한 액션: 커뮤니티에서 제공하는 다양한 액션 사용 가능.
실습
먼저 .github/workflows 디렉토리 생성 후 ci.yml 파일 만들기.
name: Node.js CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x] # Node.js 버전을 18.x와 20.x로 변경
steps:
- uses: actions/checkout@v3
- name: Node.js ${{ matrix.node-version }} 설정
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: yarn 캐시 설정
uses: actions/cache@v3
with:
path: |
**/node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: 의존성 설치
run: yarn install --frozen-lockfile
- name: 린트 검사
run: yarn lint
- name: 테스트 실행
run: yarn test
해당 워크플로우는 다음과 같은 작업을 수행한다.
- main 브랜치에 push하거나 pull request가 생성될 때 실행
- Node.js 16.x와 18.x 버전에서 테스트
- 코드 체크아웃
- Node.js 설정
- 의존성 설치
- 린트 검사
- 테스트 실행
더보기
참고로 ESLint와 Jest 같은 개발 의존성 설치 꼭 기억하자!
다음으로 테스트 코드를 작성한다. 나는 간단하게 세션 생성과 조회 API로 테스트 코드를 작성했다.
describe("세션 API 테스트", () => {
test("POST /sessions - 세션 생성", async () => {
const response = await request(app)
.post("/sessions")
.send({ userId: "testUser" });
expect(response.status).toBe(200);
expect(response.body.message).toBe("세션 설정을 완료하였습니다.");
});
test("GET /sessions - 세션 조회", async () => {
const response = await request(app).get("/sessions");
expect(response.status).toBe(200);
expect(response.body.message).toBe("세션을 조회하였습니다.");
});
});
이후 터미널로 가서 아래를 순서대로 입력한다.
git add .
git commit -m "GitHub Actions CI 설정 추가"
git push origin main
Github에 접속해서 해당 레포지토리의 Actions 탭을 클릭해서 결과를 확인할 수 있다.
Git Actions 설정이 완료되었으니 main 브랜치에 push하거나, 다른 브랜치에서 main으로 pull request를 생성하면 자동으로 CI가 실행된다.
실행 결과 양식은 아래와 같다.
- ✅ 초록색 체크표시: 모든 테스트 통과
- ❌ 빨간색 X표시: 테스트 실패
- 각 단계별 로그 확인 가능
- 실패한 경우 어떤 테스트가 실패했는지 자세히 확인 가능
더보기

실패 예시.


'Side Projects' 카테고리의 다른 글
체스말 이동하기 로직 (0) | 2025.02.21 |
---|---|
채팅 시스템 성능 향상시키기 (0) | 2025.02.18 |
DI(의존성 주입)? (0) | 2025.01.12 |
분산서버 확립하기 (0) | 2025.01.10 |
서비스 레이어 패턴 활용하기 (0) | 2024.12.28 |