포스트

Jekyll 이미지 관리하기

Jekyll 이미지 관리하기

Jekyll에서는 일반적으로 글은 _posts 에 이미지는 assets 에 저장한다.

하지만 이러한 방식의 경우 추후 image가 많아 질경우 두가지 디렉토리에 관리를 해줘야하는 불편함이 예상되었다..

일반적인 jekyll의 이미지 리소스 관리

1
2
3
4
5
6
7
8
9
10
11
12
13
learninghub/                 # 프로젝트의 루트 디렉토리
├── _config.yml              # Jekyll 설정 파일
├── _posts/                  # 블로그 게시글을 저장하는 디렉토리
   ├── 2024-12-14-ubuntu-upgrade.md    # 블로그 포스트
   └── ...                  # 다른 포스트들
├── _site/                   # 빌드  생성되는 사이트 파일
├── assets/                  # 정적 파일들 (이미지, CSS, JavaScript)
   ├── images/              # 이미지 파일들
      ├── image1.png       # 이미지 파일1
      ├── image2.jpg       # 이미지 파일2
      └── ...              # 다른 이미지들
└── ...

만약 카테고리와 포스트가 많아지게 된다면… 이미지가 너무 복잡해 질거라 예상했다.

만약 _post.md 와 image를 같이 저장한다면?

1
2
3
4
5
6
7
8
9
learninghub/                     # 프로젝트의 루트 디렉토리
├── _config.yml                   # Jekyll 설정 파일
├── _posts/                       # 블로그 게시글을 저장하는 디렉토리
   ├── 2024-12-14-ubuntu-upgrade.md    # 블로그 포스트 파일
   ├── 2024-12-14-ubuntu-upgrade/      # 해당 포스트의 이미지 폴더
      ├── ubuntu-runner-upgrade.png   # 이미지1
      └── ubuntu-runner-upgrade2.jpg  # 이미지2
      └── ...              # 다른 이미지들
└── ...

게시글에 대한 마크다운과 이미지가 같이 관리 된다면 더욱 편하다고 생각했다.

Jekyll에서 이미지를 관리하는 방법

CDN(Content Delivery Network)

1
2
3
4
5
6
# The CDN endpoint for media resources.
# Notice that once it is assigned, the CDN url
# will be added to all media resources (site avatar, posts' images, audio and video files) paths starting with '/'
#
# e.g. 'https://cdn.com'
cdn: "https://unggu0704.github.io/learninghub"
  • CDN은 웹 콘텐츠를 여러 데이터 센터(엣지 서버)에서 복제
  • 사용자가 이미지를 요청할 때 가장 가까운 서버에서 전송.. .하는 개념

하지만 jekyll에서 블로그 호스팅으로 쓰기에 현재로써는 image를 호스팅하는 서버 즉 내 블로그 url을 적어둔다.

이렇게 되면 jekyll은 이미지를 가져올 때 내 블로그의 url을 찾아간다.

baseurl

1
2
# The base URL of your site
baseurl: "/learninghub"
  • 일반적인 baseurl을 사용하여 로컬 환경에서도 url이 통일 될 수 있게 설정한다.

시도 방법

플러그인 - jekyll-postfiles를 사용 (X)

https://github.com/nhoizey/jekyll-postfiles

  • permalink의 설정에 맞춰 폴더를 생성해 이미지 경로를 쉽게 해주는 플러그인… 이지만
  • Github Page에서는 동작하지 않는다고 한다…

CDN을 통한 사용법 (X)

하지만.. 해당 방법은 확장성이 낮으며 로컬 환경에서 이미지 테스트를 해볼 수가 없다.

해결

permalink와 site.url을 사용

결국 중요한건 이미지가 있는 경로까지 url 설정을 해야한다. (배포/로컬 환경 동일하게!)

1
2
3
4
5
6
7
8
└─Tech
    └─jekyll-blog
          2024-12-15-Jekyll-로컬-환경-구축.md
        
        └─2024-12-15-Ubuntu에러
                2024-12-15-Ubuntu에러.md
                image 1.png
                image.png
  • 본래는 _post 에 모든 .md 파일을 넣어야하지만 카테고리 관리를 위해 내부에 별도의 폴더를 디렉토리 이름으로 설정해 관리하고 있다.
  • 불러와야할 url
    • {환경에따른 주소}/learninghub/categories/tech/jekyll-blog/Ubuntu에러/image경로

/learninghub

  • baseurl 설정으로 가져올 수 있다.

기존의 permalink 설정

1
permalink: /posts/:title/
  • post에 접근시 접근 url은
    • https://unggu0704.github.io/learninghub/posts/post 제목
  • 해당 디렉토리 경로를 가져오기 위해 permalink를 실제 디렉토리 이름과 동일하게 작업

변경된 permalink 설정

1
permalink: /:categories/:title/
  • 실제 _post 안에서 카테고리 이름과 동일하게 폴더를 만들어 관리하여 url을 통일
  • 이럴 경우 실제 url과 디렉토리 구조와 동일하게 맞추어진다.

baseurl과 permalink의 조합

1
![image.png](/tech/jekyll-blog/jekyll%EC%9D%B4%EB%AF%B8%EC%A7%80%EA%B4%80%EB%A6%AC//image.png)
  • baseurl + page.url (현재 접속url) 을 하여 이미지 경로를 설정
  • Liquid 템플릿 구문을 사용하기 위해서 render_with_liquid: true` 작업이 필수적

이미지가 정상적으로 로드 되는 것을 확인할 수 있었다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.