Vue.js 애플리케이션을 자동으로 배포하는 방법을 소개하고자 한다.
수동으로 진행하던 배포 작업을 GitHub Actions를 통해 자동화하고 pages를 통해 배포하여, 코드를 푸시하기만 하면 빌드와 배포가 자동으로 진행되도록 설정할 수 있다.
이번 글에서는 Vite를 사용한 Vue.js 애플리케이션을 GitHub Pages로 자동 배포하는 방법을 설명하겠다.
먼저, Vue 프로젝트를 위한 GitHub 저장소를 생성해야 한다. 이 저장소는 코드와 자동화 스크립트를 저장하는 공간으로 사용된다.
배포 자동화를 위해 다음과 같은 도구들이 필요하다. npm을 사용하여 설치할 수 있다. 물론 yarn을 사용해도 상관없다.
Node.js
(20 버전 이상)Vite
npm create vite@latest
생성 과정에서 지시에 따라 프로젝트를 설정한 후, 프로젝트 디렉터리로 이동한다.
npm install
npm run dev
import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
base: "/{자신의 레포지토리 이름}/",
plugins: [vue()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
저장소 이름과 일치해야 한다.
나같은 경우
/metal-wallet-frontend/
로 base 를 설정해두었다.base를
/metal-wallet-frontend/
로 설정해야 하는 이유는 GitHub Pages에서 프로젝트가 호스팅될 때 해당 저장소 이름이 URL의 일부가 되기 때문이다.GitHub Pages는 기본적으로
https://사용자이름.github.io/**저장소이름**/
형식의 URL을 사용한다.따라서 Vite 설정에서 base 옵션을 저장소 이름과 일치시켜야, 빌드된 애플리케이션의 자산(CSS, JavaScript 등)이 올바른 경로에서 로드될 수 있다.
GitHub Actions를 이용하여 배포 작업을 자동화할 수 있다. 이제 deploy.yml 파일을 생성
하여, 코드를 main
브랜치에 푸시할 때마다 자동으로 빌드와 배포가 이루어지도록 설정하겠다.
프로젝트 디렉터리에서 .github/workflows/ 폴더를 생성한 뒤, deploy.yml 파일을 생성한다.
name: Deploy # Workflow 이름
on: # main 브랜치에 푸시할 때 트리거됨
push:
branches:
- main
jobs:
build: # 첫 번째 작업: 빌드
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout repo # 저장소 체크아웃
uses: actions/checkout@v4
- name: Setup Node # Node.js 설치
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies # 패키지 설치
run: npm install
- name: Print working directory # 현재 작업 디렉토리 출력
run: pwd
- name: List project files before build # 빌드 전 파일 구조 확인
run: ls -al
- name: Build project # 프로젝트 빌드
run: npm run build
- name: List build files # 빌드 후 파일 확인
run: ls -al ./dist
- name: Upload production-ready build files # 빌드된 파일 업로드
uses: actions/upload-artifact@v4
with:
name: production-files
path: ./dist
deploy: # 두 번째 작업: 배포
name: Deploy
needs: build # build 작업이 완료되어야 실행됨
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' # 브랜치 확인
steps:
- name: Download artifact # 빌드된 파일 다운로드
uses: actions/download-artifact@v4
with:
name: production-files
path: ./dist
- name: Deploy to GitHub Pages # GitHub Pages로 배포
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
GitHub Actions를 통해 저장소에 푸시가 되면 자동으로 빌드 및 배포가 진행된다. 이 과정에서 .github/workflows/
디렉토리에 deploy.yml
파일을 생성하여 설정한다.
name: Deploy # Workflow 이름
on: # main 브랜치에 푸시할 때 트리거됨
push:
branches:
- main
name: Deploy
: 워크플로우의 이름을 “Deploy”로 지정한다.on
: 특정 이벤트에 따라 워크플로우가 실행되도록 트리거를 설정한다. 여기서는 push 이벤트로 main 브랜치에 푸시할 때마다 워크플로우가 실행된다.jobs:
build: # 첫 번째 작업: 빌드
name: Build
runs-on: ubuntu-latest
jobs
: 워크플로우에서 실행할 작업 목록을 정의한다. build는 첫 번째 작업으로 애플리케이션을 빌드한다.runs-on: Ubuntu
최신 버전의 가상 환경에서 작업이 실행된다.steps:
- name: Checkout repo # 저장소 체크아웃
uses: actions/checkout@v4
Checkout repo:
GitHub Actions가 저장소를 체크아웃하여 코드를 가져오는 단계이다. actions/checkout@v4를 사용하여 저장소를 다운로드한다. - name: Setup Node # Node.js 설치
uses: actions/setup-node@v4
with:
node-version: "20"
Setup Node:
Node.js 20 버전을 설치한다. 프로젝트 빌드와 패키지 설치를 위해 필요하다. - name: Install dependencies # 패키지 설치
run: npm install
Install dependencies:
npm install을 통해 프로젝트의 의존성을 설치한다. - name: List project files before build # 빌드 전 파일 구조 확인
run: ls -al
List project files before build:
빌드 전에 파일 구조를 확인한다. - name: Build project # 프로젝트 빌드
run: npm run build
- name: List build files # 빌드 후 파일 확인
run: ls -al ./dist
Build project: npm run build
명령어로 프로젝트를 빌드한다. 빌드된 파일은 dist 폴더에 생성된다. - name: Upload production-ready build files # 빌드된 파일 업로드
uses: actions/upload-artifact@v4
with:
name: production-files
path: ./dist
Upload production-ready build files:
빌드된 파일을 artifact로 업로드하여 다음 단계에서 사용할 수 있도록 한다. deploy: # 두 번째 작업: 배포
name: Deploy
needs: build # build 작업이 완료되어야 실행됨
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' # 브랜치 확인
if: github.ref == 'refs/heads/main'
: main 브랜치에서만 배포 작업이 실행되도록 조건을 설정한다. - name: Download artifact # 빌드된 파일 다운로드
uses: actions/download-artifact@v4
with:
name: production-files
path: ./dist
Download artifact:
빌드된 파일을 다운로드하여 dist 폴더에 저장한다. - name: Deploy to GitHub Pages # GitHub Pages로 배포
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
Deploy to GitHub Pages: peaceiris/actions-gh-pages@v4
액션을 사용하여 빌드된 파일을 GitHub Pages에 배포한다. 이때 GITHUB_TOKEN을 통해 GitHub 저장소에 푸시할 수 있는 권한을 부여받는다.이제 설정이 완료되었으니, 제대로 작동하는지 확인해야 한다.
Home.vue 파일의 내용을 수정하여 테스트를 진행한다.
수정된 내용을 main 브랜치에 커밋하고 푸시한다.
GitHub 저장소의 Actions 탭에서 워크플로우가 정상적으로 동작하는지 확인한다.'
이제 코드 작성에만 집중할 수 있다. 배포 과정이 자동화되었기 때문에 수동으로 진행해야 할 반복 작업을 줄일 수 있다.
언제나 결과물이 실제로 배포되어 이를 확인하는 경험은 즐겁다. BE도 어서 작업해놔야지
다음으로는 해당 작업물을 PWA로 배포하는 과정을 설명하겠다.