본문으로 건너뛰기
웹 개발 기초집LESSON 29

GitHub Pages로 정적 사이트 배포하기

난이도입문
예상 시간25분
선수지식이전 강의

29강. GitHub Pages로 정적 사이트 배포하기

이번 강의의 결과물은 GitHub 저장소의 기본 브랜치에서 배포되어 공개 URL로 접속할 수 있는 정적 웹 페이지입니다.

1. 이번 강의에서 해결할 문제​

로컬 서버의 localhost 주소는 내 컴퓨터 안에서만 사용할 수 있습니다. 포트폴리오를 다른 사람에게 보여 주려면 HTML, CSS, JavaScript 파일을 인터넷에서 응답하는 호스팅 환경에 배포해야 합니다.

학습 목표​

  • 로컬 서버의 localhost 주소는 내 컴퓨터 안에서만 사용할 수 있습니다. 포트폴리오를 다른 사람에게 보여 주려면 HTML, CSS, JavaScript 파일을 인터넷에서 응답하는 호스팅 환경에 배포해야 합니다.
  • 핵심 개념을 코드 예시와 짧은 실습에 적용하고 결과를 설명합니다.

2. 핵심 개념​

  • 배포: 개발한 결과물을 사용자가 접근할 수 있는 환경에 올리는 과정
  • 정적 사이트: 서버에서 코드를 실행해 매번 HTML을 만들지 않고 준비된 파일을 전달하는 사이트
  • 호스팅: 웹 파일을 저장하고 HTTP로 제공하는 서비스
  • 배포 소스: GitHub Pages가 공개 파일을 읽을 브랜치와 폴더
  • 프로젝트 사이트: 보통 https://사용자명.github.io/저장소명/ 경로에 배포되는 사이트. 이 교재의 계정 예시는 https://baggu4402.github.io/portfolio-site/

GitHub Pages의 브랜치 배포는 선택한 브랜치의 루트(/) 또는 /docs 폴더를 게시할 수 있습니다. 메뉴와 지원 범위는 바뀔 수 있으므로 실제 설정 전 GitHub Pages 게시 소스 공식 문서를 확인합니다.

이 강의에서는 학습 저장소 전체가 아니라 포트폴리오 파일만 루트에 둔 별도 저장소를 사용합니다. 그러면 복잡한 자동화 없이 main의 루트를 바로 배포할 수 있습니다.

3. 코드 예시​

로컬 프로젝트 위치 예시: D:\WebProject\portfolio-site

배포할 저장소의 파일 구조:

portfolio-site/
├─ index.html
├─ css/
│ └─ styles.css
├─ data/
│ └─ projects.json
└─ js/
└─ main.js

프로젝트 사이트에서는 /css/styles.css처럼 /로 시작하는 경로보다 다음과 같은 상대 경로를 사용합니다.

파일명: index.html

<link rel="stylesheet" href="./css/styles.css">
<script type="module" src="./js/main.js"></script>

파일명: js/main.js

const response = await fetch("./data/projects.json");

저장소를 준비하고 GitHub 원격에 올리는 명령 예시:

cd D:\WebProject\portfolio-site
git init
git branch -M main
git add .
git commit -m "feat: publish initial portfolio"
git remote add origin https://github.com/baggu4402/portfolio-site.git
git push -u origin main

GitHub 저장소에서 다음 순서로 설정합니다.

Settings → Pages
Build and deployment → Source → Deploy from a branch
Branch → main / (root) → Save

배포 전 로컬 실행 위치: D:\WebProject\portfolio-site

python -m http.server 5500

4. 코드가 동작하는 이유​

  1. push한 커밋에 배포할 정적 파일과 index.html이 포함됩니다.
  2. GitHub Pages가 설정한 main 브랜치의 루트를 게시 소스로 읽습니다.
  3. Pages 서버가 공개 URL의 요청에 저장소 파일을 응답합니다.
  4. ./ 상대 경로는 프로젝트 사이트의 저장소 경로 아래에서 CSS, JavaScript, JSON을 찾습니다.
  5. 이후 main에 새 커밋을 push하면 Pages가 변경을 다시 게시합니다.
  6. 배포 상태와 실패 원인은 저장소의 Actions 또는 Pages 설정에서 확인할 수 있습니다.

배포는 git push와 같은 뜻이 아닙니다. push는 커밋을 원격 저장소로 전송하고, Pages 게시 과정은 그 커밋의 파일을 웹에서 제공하도록 만듭니다.

5. 자주 하는 실수​

  • 저장소 루트에 index.html이 없음
  • 파일명의 대소문자가 실제 경로와 다름
  • /css/styles.css 같은 루트 절대 경로를 사용해 프로젝트 사이트에서 깨짐
  • 로컬에만 있는 파일을 커밋하거나 push하지 않음
  • Pages 배포가 끝나기 전에 공개 URL을 반복해서 새로 고침
  • 저장소 공개 여부와 계정 요금제에 따른 Pages 지원 조건을 확인하지 않음
  • API 키나 비밀번호를 JavaScript에 넣고 배포함

GitHub Pages에 게시된 파일은 방문자가 내려받아 볼 수 있습니다. 비밀 정보는 프론트엔드 저장소에 넣지 않습니다.

6. 짧은 실습 과제​

  1. GitHub에 정적 사이트용 저장소를 하나 준비합니다.
  2. index.html, CSS, JavaScript를 저장소 루트 기준으로 배치합니다.
  3. 모든 내부 파일 경로가 ./ 상대 경로인지 확인합니다.
  4. 로컬 HTTP 서버에서 Network 오류가 없는지 확인합니다.
  5. 변경을 커밋하고 main에 push합니다.
  6. Pages에서 main / (root)를 게시 소스로 선택합니다.
  7. 공개 URL에서 화면, 필터 버튼, JSON 요청을 확인합니다.

완료 기준은 다른 기기에서도 공개 URL을 열 수 있고, 개발자 도구 Network 탭에서 핵심 파일이 모두 성공 상태인 것입니다.

7. 이해 점검 질문 3개​

  1. git push와 웹사이트 배포는 어떤 점이 다른가요?
  2. 프로젝트 사이트에서 /css/styles.css보다 ./css/styles.css가 안전한 이유는 무엇인가요?
  3. GitHub Pages 같은 정적 호스팅에 API 키를 넣으면 안 되는 이유는 무엇인가요?

핵심 요약​

  • 이번 강의의 핵심 개념을 코드의 구조와 실행 결과에 연결했습니다.
  • 코드 예시를 직접 바꾸는 짧은 실습으로 핵심 동작을 확인했습니다.
  • 이해 점검 질문에 답하며 다음 강의에 필요한 기준을 정리했습니다.
MINI QUIZ

GitHub Pages로 정적 사이트 배포하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“GitHub Pages로 정적 사이트 배포하기”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2“GitHub Pages로 정적 사이트 배포하기” 실습에서 결과를 확인할 때 적용할 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

29강. GitHub Pages로 정적 사이트 배포하기 미완료 상태