사이드프로젝트 slecs

블로그 도메인 이전 후 URL prefix 빈 값 처리 개선

목차

블로그 도메인을 새 주소로 이전하면서, 기존 코드에 박혀 있던 URL prefix 가정을 걷어냈다.

배경: 도메인 이전이 생각보다 간단하지 않은 이유

도메인 이전이라고 하면 보통 DNS 레코드 바꾸고 끝이라고 생각하기 쉬운데, 실제로는 애플리케이션 레벨에서 URL 구조가 얼마나 하드코딩되어 있는지가 핵심이다. 이번에 blog.slecs.net 으로 이전하면서 딱 그 지점이 걸렸다.

기존 배포 환경에서는 서브패스 기반으로 서비스가 올라가 있었던 것 같다. 예를 들어 /blog 같은 prefix 아래에 라우팅이 붙어 있는 구조. 그 환경에서 URL_PREFIX 같은 설정값이 생겼고, 코드 곳곳에서 해당 prefix를 붙여 URL을 조립하는 패턴이 자연스럽게 정착했을 거다.

그런데 blog.slecs.net 처럼 서브도메인이 전용으로 붙는 구조가 되면 얘기가 달라진다. 이제 prefix가 없어도 된다. 도메인 자체가 이미 블로그를 가리키고 있으니까. 이 상황에서 URL_PREFIX 가 빈 값 "" 이 되면 어떻게 되느냐 — 코드가 이 케이스를 전혀 고려하지 않았다면 경로가 깨진다.

실제 문제: 빈 prefix 를 못 받는 코드

app/main.py 한 파일이 변경 포인트였다. 파일 범위가 좁다는 건 변경 자체는 핀포인트지만, 이 파일이 애플리케이션의 진입점이라는 걸 감안하면 영향 반경은 결코 좁지 않다.

문제가 되는 패턴은 대략 이런 식이다.

# 기존: prefix 가 항상 존재한다고 가정
url = f"{URL_PREFIX}/posts/{slug}"

# 또는 조건 없이 join
base = URL_PREFIX
path = "/posts/" + slug
full_url = base + path  # prefix 가 "" 이면 그냥 /posts/slug 가 되어야 하는데
                        # 로직에 따라 앞에 불필요한 처리가 생길 수 있음

빈 문자열이 들어왔을 때 //posts/slug 같은 더블 슬래시나, 반대로 prefix 관련 조건 분기에서 빈 값이 falsy 로 처리돼 의도치 않은 기본값이 끼어드는 경우가 흔하다. 이번 수정은 아마 그 경계 케이스를 명시적으로 처리한 것.

# 수정 방향: 빈 값이면 prefix 없이 경로 조립
def build_url(path: str, prefix: str = "") -> str:
    if prefix:
        return f"{prefix.rstrip('/')}/{path.lstrip('/')}"
    return f"/{path.lstrip('/')}"

이런 식으로 prefix 가 비었을 때와 아닐 때를 명시적으로 분기하거나, 아니면 아예 prefix"" 로 세팅하면 자연스럽게 prefix 없는 경로가 나오도록 문자열 조합 로직을 정리하는 게 깔끔하다.

이런 작업에서 놓치기 쉬운 것들

확인 항목 놓쳤을 때 증상
정적 파일 경로 (CSS/JS) 화면이 깨지거나 404
sitemap / robots.txt URL SEO 크롤링 누락
OG 태그, canonical URL 소셜 공유 링크 오동작
내부 링크 생성 로직 포스트 간 이동 404
리다이렉트 규칙 구 URL → 신 URL 누락

main.py 에서 URL 조립 방식을 고쳤다고 해서 끝이 아니다. 템플릿이나 설정 파일에서 URL 을 직접 박아놓은 곳이 있다면 거기도 같이 따라가야 한다. 이번엔 변경 파일이 main.py 하나이니, 나머지 영역은 이미 설정값을 참조하는 구조로 잘 잡혀 있었거나, 혹은 도메인 수준에서 처리가 되는 구조였겠다고 본다.

짧은 회고

사실 이런 환경 설정 수준의 작업은 "그냥 빠르게 처리하면 되지" 싶어서 꼼꼼히 보지 않는 경향이 있다. 그런데 URL prefix 처럼 암묵적으로 "항상 값이 있을 것"이라고 가정된 변수들이 의외로 많다. 도메인 구조가 바뀌는 시점이 바로 그 가정들이 한꺼번에 깨지는 순간이다.

URL_PREFIX = "" 한 줄이 유효한 설정값이 될 수 있다는 걸 코드가 처음부터 알고 있었다면 이번 작업은 그냥 설정 파일 한 줄 바꾸는 것으로 끝났을 거다. 빈 값을 예외 상황이 아닌 정상 케이스로 다루는 습관, 생각보다 중요하다.

다음

댓글 0

첫 댓글 달아줘.