[일지]

URI 변경을 피하면서 글 분류 분리하기

후기, 소감 등을 ‘일지(diary)’ 분류로 추출하기

최초 게시
2023년 9월 12일 16시
키워드
URI, URL,
돌아보기

생각의 변화와 문제

원래는 이 블로그에 TIL 분류를 만들 생각이었다. 하지만 언제부턴가 검색 결과에 범람하는 TIL을 보면서, TIL은 블로그가 아닌 개인 메모에 기록해야겠다고 생각했다. 좋아 보인다고 무작정 따라하는 것처럼 비춰질 것 같았기 때문이다.

한편, 블로그에 글을 몇 편 쓰다 보니 뭔가를 한 뒤의 소감 위주로 글을 써 왔다는 것을 알았다. 그때부터였는지 내 소감 글이 (Today는 아니지만) 장기적인 TIL 같다는 생각이 들기 시작했다.

그래서 생각을 바꾸고, TIL과 소감 등을 모아 담을 ‘일지(diary)’ 분류를 만들기로 했다. 이전에 작성한 소감 글도 이 분류로 옮길 생각이었다. 하지만 원래 생각했던 블로그 구조(/blog/{category}/{YYYY}/...)에 따르면, 이미 작성한 게시글의 분류를 변경하면 그 글의 URI도 바뀐다.

이제 기존 글을 어떻게 하면 좋을까? 이미 URI를 가지고 있는 대상에게 URI가 바뀌었다는 사실을 완벽하게 알릴 방법은 없다. 깨져 버린 기존 링크는 쓸모가 없어지고, 방문자에게 실망감을 안기고, 나에 대한 신뢰 또한 떨어뜨릴 것이다.[1]

해결책 1: 리다이렉션 (기각)

가장 먼저 생각한 방법은 리다이렉션이었다. 기존 글 중 ‘일지’ 분류에 맞는 글을 옮기되, 기존 URI로 접근하면 (일지 분류로 옮기면서 바뀐) 새 URI로 넘겨주자는 것이다. 검색엔진을 위해서도 기존 URI가 가리키는 페이지에는 canonical 링크를 변경된 URI로 적용할 필요가 있다. URI를 변경하면 이와 같이 부작용에 대응하기 위해 추가로 조치해야 하는 내용이 많으므로, 피할 수 있다면 다른 방법을 적용하고 싶었다.

해결책 2: URI 유지하기 (채택)

URI를 변경하지 않으면 복잡한 조치를 할 필요가 없다. 내 사례에서는 게시글 URI 중간에서 ‘분류’를 가리키던 post를 그대로 유지하면 리다이렉션이나 canonical 링크 설정 등 복잡한 처리를 피할 수 있다. 마침 분류 ID로 썼던 post가 ‘게시글’이라는 의미로 사용하기에 무난한 단어이기도 하다. 따라서 ‘일지’ 분류를 신설하되 원래 게시글 URI 중간에 있던 post는 ‘게시글’이라는 의미로 남겨 놓기로 했다.

하지만 이렇게 하면 /blog/post/가 전체 글 목록인지, post 분류에 속한 글 목록인지 모호해져서 이런 구조를 적용할 수 없게 된다. 원래는 /blog/{category}/를 그 분류에 속한 글 목록 페이지로 쓰려고 했었기 때문이다. 따라서 아래와 같은 구조로 변경하기로 했다. — 아직 글이 많지 않아서 메인 페이지와 게시글 페이지만 만들었기 때문에 글 목록과 분류 관련 페이지에는 부작용이 없었다.

  • /blog/: 메인 페이지
    • /blog/post/: 최근 글 목록
      • /blog/post/{year}/: {year}년에 작성한 글 목록
        • /blog/post/{year}/{MM}/{DD}/{slug}: 게시글
    • /blog/category/: 분류 목록
      • /blog/category/{category}/: {category} 분류의 최근 글 목록
        • /blog/category/{category}/{year}/: {category} 분류의 {year}년 글 목록

교훈

지금으로부터 25년 전인 1998년에, 팀 버너스리 경은[1] 오래 유지되는 URI를 만드는 것은 의무라고 말하면서, URI를 설계하는 방법을 소개했다. 변하지 않는 것을 넣고, 변할 수 있는 것은 빼는 것이다. 부서 이름처럼 언젠가 변할 수 있는 것을 넣어야 한다면 앞부분을 날짜(처럼 변하지 않는 것으)로 보호해야 안전하다고도 말했다.

URI는 신중하게 설계해야 한다. URI를 바꾸는 행위는 여러 부작용을 낳는다. 내가 겪은 것처럼 부작용을 해소하기 위한 조치 또한 필요하다. 그런 부작용을 무시하면 나 또는 내가 속한 조직의 신뢰도를 해칠 수 있다.

참고 자료

yejunian / blog

© 2022-2024 yejunian

라이선스를 따로 명시하지 않았다면, 각 콘텐츠에는 아래와 같은 라이선스가 적용됩니다.

  • yejunian/blog-post에 업로드한 게시물(코드 블록 제외): CC-BY 4.0
  • 게시물에 삽입된 코드 블록의 내용: 퍼블릭 도메인
  • 댓글 등, 웹 사이트 방문자가 작성한 게시물의 저작권은 그 콘텐츠의 작성자에게 있으며, 이를 활용하려면 저작권자의 이용허락이 필요합니다.

게시물에 포함된 이미지 등을 외부 서비스에서 사용하려면, 해당 콘텐츠를 다운로드한 뒤 공유하려는 서비스의 콘텐츠 첨부 기능을 활용하기 바랍니다. 이 사이트에 첨부한 파일의 URL은 언제든지 변경될 수 있습니다.

Powered by Gatsby. Hosted on GitHub.