Experiments never fail s2

실험에 실패란 없다 블로그 시즌 2

블로그 홈 URL을 최신 포스팅으로 리다이렉션

Pythonist - 2013년 4월 7일 2:48:06 오전

블로그 URL 설계시 하는 고민가운데 하나가 "홈" URL을 어떻게 하느냐이다. 별도의 목록 페이지를 보여줄 수도 있고, 최근 포스팅으로 리다이렉션시킬 수도 있다. 여기 시즌1의 테터툴즈의 경우 여러개의 포스트를 정해진 갯수만큼 표시하는 목록 페이지가 있었고 "?page=2" 처럼 URL 변수로 다음페이지로 페이지화(pagination) 하고 있었다. 나름 만족하고 쓰긴 했으나, 이 방법의 단점은 특정 포스트를 향한 여러개의 URL이 존재한다는 것이다. 포스트마다 고유의 URL이 있긴 하지만, 이동한 방법에 따라 다른 URL이 해당 글을 가리키고 있는 경우가 있는 것. 검색엔진을 타고 들어가서 괜찮은 글이네 하고 URL을 복사해뒀는데 새글이 또 등록되고 "?page=2" 로 바뀌면서 엉뚱한 글로 링크가 되는 것이다.

파프리카(paprika)는 이런 문제를 최소화하고자 "홈" 링크도 최신 포스트로 리다이렉션 시키는 방법을 썼다. 홈 URL 의 컨텐츠가 그때그때 바뀌는게 싫어서 아예 최신 글 URL로 넘겨 버리게끔.

그런데, 이럴 때 URL 리다이렉션이 다 같은게 아니다. "301 moved permanently" 와 "302 found"의 차이가 있으니, 301의 경우 브라우저가 해당 리다이렉션 URL을 캐시에 넣기 때문에 이런 경우는 302를 써야 그때 그때 바뀐 새글로 리다이렉션된다.

여기 블로그의 두번째 글을 쓰고 나서야 알게됐다는. 쉬워보이는 웹 프로그래밍이지만 자세히 보면 신경써야 할 부분이 많다.

장고(Django) RedirectView를 쓸 경우, 클래스 변수 "permanent = False" 를 적어줘야 302로 리다이렉션한다.

class HomeView(RedirectView):
    permanent = False

디폴트가 True 이기 때문에 생각없이 그냥 쓴 경우, 사용자 브라우저 캐시에 남아, "홈" 링크만 봐서는 새글이 없는 것으로 오해를 줄 수 있다. (디폴트가 False 여야 하는것 아닐까 싶음). 밖에서 사용자들의 브라우저 캐시를 임의로 삭제해줄 수 없기 때문에 서비스를 제공하는 입장에서는 매우 조심히 써야 하는 기능이다.

암튼 그래서 만일 이곳 블로그에 오셨다가 "홈" 링크를 클릭해보신 분이 있다면 캐시를 꼭 지워주세요.


Posted by Hyungyong Kim (yong27)

태그(들): cache, django, paprika, redirect, url


comments powered by Disqus

« 파프리카 태그 클라우드 적용

iOS의 메모와 미리 알림 »