Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4faef9a
chore: Astro 7 프로젝트 설정과 URL 보존 규칙 고정
devFancy Sep 20, 2026
cc10eaa
feat: Content Layer 스키마와 파일럿 5편 변환
devFancy Sep 20, 2026
2199ef3
feat: 디자인 토큰과 self-host 폰트, 파비콘 추가
devFancy Sep 20, 2026
91d6fd8
feat: 공통 레이아웃과 스크롤 반응형 헤더
devFancy Sep 20, 2026
f15cb57
feat: Hero 배경 이미지와 글 목록 카드
devFancy Sep 20, 2026
66fe64e
feat: 읽기 화면에 목차와 Recommend 추가
devFancy Sep 20, 2026
a184f74
feat: About 페이지 추가
devFancy Sep 20, 2026
7526638
style: About 자기소개 문구 다듬기
devFancy Sep 20, 2026
b079d23
style: About 소개와 인용 문구를 회색으로
devFancy Sep 20, 2026
100127a
feat: Jekyll 포스트 변환 스크립트 추가
devFancy Sep 20, 2026
8aadb67
feat: 319편 변환과 카테고리 재편 반영
devFancy Sep 20, 2026
afa88a7
feat: 카테고리 2단 계층 선언
devFancy Sep 20, 2026
8d68d3a
feat: 카테고리·아카이브·문제풀이 페이지 추가
devFancy Sep 20, 2026
b9108f7
feat: 모바일 햄버거 메뉴와 스크롤 반응 헤더
devFancy Sep 20, 2026
6bf3350
style: 타이포·칩·인용구·본문 색을 하나의 기준으로 정리
devFancy Sep 20, 2026
e7aa5bd
feat: 히어로·프로필 이미지와 파비콘 교체
devFancy Sep 20, 2026
ae93185
refactor: 태그가 카테고리 한 곳에만 속하도록 분류 재편
devFancy Sep 20, 2026
018b36b
chore: 이미지를 public으로 옮기고 임시 이미지 플러그인 제거
devFancy Sep 20, 2026
3a3f9ec
fix: 이미지 대소문자 교정과 2026 Plan Note 복구
devFancy Sep 20, 2026
bb0cd29
style: 자기소개 문구 정리
devFancy Sep 20, 2026
277390e
chore: 작업 메모 docs/ 를 추적에서 제외
devFancy Sep 20, 2026
cc8f9d5
feat: RSS 피드·robots.txt·GA4 태그와 Pages 배포 워크플로 추가
devFancy Sep 20, 2026
49fd20d
feat: About 에 Technical Writing·Dev History 추가하고 주석 정리
devFancy Sep 20, 2026
5d5616d
style: 기술 외의 해결책도 열어두도록 자기소개 문장 조정
devFancy Sep 20, 2026
14e42ca
fix: 마크다운 잔재·오탈자 정리하고 배포에서 빠질 정적 파일 복구
devFancy Sep 20, 2026
f5d3d41
Merge pull request #9 from devFancy/feat/astro-01-scaffold
devFancy Sep 20, 2026
6a34505
Merge pull request #10 from devFancy/feat/astro-02-content
devFancy Sep 20, 2026
c2519f7
Merge pull request #11 from devFancy/feat/astro-03-pages
devFancy Sep 20, 2026
4610fed
Merge pull request #12 from devFancy/feat/astro-04-deploy
devFancy Sep 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# 기계 생성 잠금 파일. GitHub PR diff에서 기본 접힘 처리한다.
package-lock.json linguist-generated=true
16 changes: 16 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Key changes

-

### Additional changes

-

## Tests completed

-

## Notes

- Base branch:
- Merge order:
58 changes: 58 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# NOTE Astro 를 빌드해 GitHub Pages 로 올린다
# - 저장소 설정 Pages -> Source 가 "GitHub Actions" 여야 동작한다
# - 이미지가 586MB 라 체크아웃과 업로드가 느리다. 타임아웃을 넉넉히 둔다
name: Deploy

on:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

# 배포는 한 번에 하나만 돈다. 진행 중인 배포는 끝까지 보낸다
# - 중간에 끊으면 Pages 가 반쯤 올라간 상태로 남을 수 있다
concurrency:
group: pages
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
env:
# 한글 파일명이 깨지지 않도록 로케일을 고정한다 [로케일 고정]
LC_ALL: en_US.UTF-8
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm

- run: npm ci

# 빌드 전에 막는다. 배포한 뒤 깨진 것을 발견하면 늦다
- run: npm run lint
- run: npm run check

- run: npm run build

- uses: actions/upload-pages-artifact@v3
with:
path: dist

deploy:
needs: build
runs-on: ubuntu-latest
timeout-minutes: 20
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v4
20 changes: 15 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
.sass-cache/*
.DS_Store
_site/*
.jekyll-cache/*
# Astro
dist/
.astro/
node_modules/

# Jekyll (Phase 5 컷오버까지 유지)
_site/
.jekyll-cache/
.jekyll-metadata
*.xml
.sass-cache/

# 작업 메모. 공개 저장소에 둘 내용이 아니다
docs/

# OS / IDE
.DS_Store
.idea/
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
113 changes: 46 additions & 67 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,87 +1,66 @@
<a href="https://hits.seeyoufarm.com"/><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https://github.com/devfancy/devfancy.github.io"/></a>
# devfancy.github.io

> 📌 The template is based on the [Github Blog Template](https://github.com/Gaohaoyang/gaohaoyang.github.io) created by [HyG](https://github.com/gaohaoyang).
[Astro](https://astro.build) 로 만든 개인 블로그입니다. 글은 https://devfancy.github.io 에서 볼 수 있습니다.

For the Korean version of the template, I referred to the [Github Blog Template](https://github.com/goodGid/goodGid.github.io) by [Gid](https://github.com/goodGid).
## 로컬에서 실행하기

### Writing Commit Messages
Node 버전은 `.nvmrc` 를 따릅니다.

* When **creating a new post** for the first time, write the commit message as `Write {Category} Post " {Title} "`.

* Example: If the category is `DevHistory` and the title is "2024 Dev History",

* the commit message should be written as `Write DevHistory Post " 2024 Dev History "`.

* If you are **updating an existing post**, write the commit message as `Update {Category} Post " {Title}`.
```bash
nvm use
npm ci
npm run dev # http://localhost:4321
```

### How to Add or Modify Categories
| 명령 | 하는 일 |
| --- | --- |
| `npm run dev` | 개발 서버 |
| `npm run build` | `dist/` 로 정적 빌드 |
| `npm run preview` | 빌드 결과 미리보기 |
| `npm run check` | `astro check` 타입 검사 |
| `npm run lint` | Biome 검사 |
| `npm run format` | Biome 자동 수정 |

> Unlike the original template, which generates category order randomly, I have opted for a manual addition/modification approach.
> 로케일이 `C` 면 한글 파일명에서 인코딩 오류가 납니다. CI 는 `LC_ALL=en_US.UTF-8` 을 고정해 두었습니다.

* Add the desired categories to the `categories_order` section in the `_config.yml` file.
## 글 쓰기

* As of (2024.12.22), the **current setup** is as follows:
글은 `src/content/posts/*.md` 에 둡니다. **파일명이 곧 URL** 입니다.
`src/content/posts/Spring-Transaction.md` → `/Spring-Transaction/`

```yaml
categories_order:
- "DevHistory"
- "TechInsight"
- "Java"
- "Spring"
- "SpringBoot"
- "JPA"
- "MySQL"
- "Flyway"
- "Technology"
# More categories...
---
title: "제목"
date: 2026-09-21
categories: ["서버"]
tags: ["Spring", "JPA"]
use_math: true # 수식이 있을 때만
---
```

### How to Run Locally

* Follow these steps to set up and run the project on your local machine:
- `categories` 는 한 편에 하나입니다. 쓸 수 있는 값은 `src/config.ts` 의 `CATEGORY_GROUPS` 에 있습니다
- 태그 노출 순서는 같은 파일의 `TAG_ORDER` 가 정합니다
- 이미지는 `public/assets/img/` 아래에 두고 `/assets/img/...` 로 참조합니다

#### 1. Install Bundler
## 폴더 구조

* Run the following command to install the specified version of Bundler.

```bash
$ sudo gem install bundler:2.1.4
```

#### 2. Install Dependencies and Start the Server

* Use the following commands to install all dependencies and start the Jekyll server.

```bash
$ bundle install
$ bundle exec jekyll serve
src/
components/ Hero, Header, Chip 같은 공용 조각
layouts/ Base.astro — 모든 페이지의 껍데기
pages/ 라우트. [...slug].astro 가 글 상세를 만든다
content/ posts/ 아래 마크다운
styles/ global.css — 색 토큰과 .prose 본문 스타일
config.ts 사이트 정보, 네비, 카테고리·태그 순서
public/assets/img/ 글 본문 이미지
```

#### 3. Expected Output

* Upon successful execution, you should see output similar to the following

```bash
$ bundle exec jekyll serve

Configuration file: /path/to/_config.yml
Source: /path/to/source
Destination: /path/to/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
Conflict: The following destination is shared by multiple files.
- /path/to/_site/example.html
- /path/to/_posts/example.md
...
done in X.XXX seconds.
Auto-regeneration: enabled for '/path/to/project'
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
```
## 배포

#### 4. Access the Local Server
`main` 에 푸시되면 `.github/workflows/deploy.yml` 이 GitHub Pages 로 배포합니다.
저장소 설정의 Pages → Source 는 **GitHub Actions** 여야 합니다.

* Open your browser and navigate to: `http://127.0.0.1:4000`
---

![](/assets/img/github_local_server.png)
Jekyll 판은 [HyG](https://github.com/gaohaoyang) 의 [템플릿](https://github.com/Gaohaoyang/gaohaoyang.github.io) 과
[Gid](https://github.com/goodGid) 의 [한국어 판](https://github.com/goodGid/goodGid.github.io) 을 바탕으로 했습니다.
25 changes: 25 additions & 0 deletions astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { unified } from "@astrojs/markdown-remark";
import sitemap from "@astrojs/sitemap";
import tailwindcss from "@tailwindcss/vite";
import { defineConfig } from "astro/config";
import rehypeKatex from "rehype-katex";
import remarkMath from "remark-math";

export default defineConfig({
// NOTE: 이 세 줄이 URL 1:1 보존의 전부다. 바꾸지 말 것 (MIGRATION.md 2-2)
site: "https://devfancy.github.io",
trailingSlash: "always",
build: { format: "directory" },

integrations: [sitemap()],

markdown: {
// NOTE: 수식은 전역 적용된다. 프론트매터로 끌 수 없다 [수식 전역 적용]
processor: unified({
remarkPlugins: [remarkMath],
rehypePlugins: [[rehypeKatex, { throwOnError: false }]],
}),
},

vite: { plugins: [tailwindcss()] },
});
6 changes: 6 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
"files": { "includes": ["src/**/*.ts", "astro.config.mjs"] },
"formatter": { "indentStyle": "space", "indentWidth": 2, "lineWidth": 100 },
"linter": { "enabled": true, "rules": { "preset": "recommended" } }
}
Loading