Skip to content

Diff of Dev Page

Changes between revision 1 - initial and revision 2 - 페이지명과 URL 을 오가는 규칙을 PageNameUrl 한 곳으로 모은 것을 기록한다 — encode 가 두 형태로 갈라져 같은 페이지의 URL 이 둘이었다
--- Dev Page
+++ Dev Page
@@ -42,10 +42,21 @@
 
 페이지 이름 목록과 최신 페이지 목록/size는 `PageMeta` 기반 캐시를 사용한다.
 
  * `AhaWikiCache.PageMeta.SeqPageName`
  * `AhaWikiCache.PageMeta.SeqPageLatestSummary`
  * `ContextSite.setPageName`
  * `ContextSite.seqPageByPermission`
  * Admin Page 목록과 재계산 대상 선택
 
 페이지 생성, 수정, 삭제, rename 시 관련 `PageMeta` row와 캐시를 갱신하거나 무효화한다.
+
+== 페이지명과 URL
+
+페이지명을 URL 조각으로 바꾸는 것과 되돌리는 것은 `logics.wikis.PageNameUrl` 한 곳에 있습니다.
+
+ * `encode` — `/w/{encode(name)}` 형태로 쓰는 경로 조각. `UriUtil.encodeURIComponent` 와 같아서 `!'()~` 는 그대로 둡니다.
+ * `decode` — 라우트로 들어온 이름을 되돌립니다. `+` 를 `%2B` 로 먼저 바꾸는데, 이걸 빼면 페이지명 안의 `+` 가 공백으로 읽혀 엉뚱한 페이지를 찾습니다.
+
+전에는 decode 가 4곳, encode 가 8곳에 흩어져 있었고 encode 는 두 형태로 갈라져 있었습니다. 어떤 코드가 링크를 만드느냐에 따라 **같은 페이지의 URL 이 두 가지** 였습니다 — sitemap, 텔레그램 알림, 렌더링된 위키 링크가 서로 달랐습니다.
+
+`encodeURIComponent` 쪽으로 맞춘 이유는 브라우저가 이미 그 함수를 쓰기 때문입니다. 서버가 만든 링크와 클라이언트가 만든 링크가 같아집니다. 두 형태 모두 같은 페이지로 해석되므로 겉모습 차이였지만, 정규 URL 이 두 가지인 상태는 그대로 둘 수 없습니다.