티스토리 뷰

DB

전체url주소 데이터 저장 타입 크기

goodmean 2025. 10. 15. 17:57

결론 [Inference]

  • 전체 URL(풀 URL) 저장 추천 규격
    1. 일반 권장: VARCHAR(2048) 이상(UTF-8 기준)
    2. 서버/프레임워크가 긴 URL을 허용하거나 내부 리다이렉트·서명 URL이 많은 경우: VARCHAR(4096) 또는 무제한 가변 문자열(예: PostgreSQL TEXT, MySQL TEXT/LONGTEXT, SQL Server NVARCHAR(MAX))
    3. DB별 실무 가이드(안전값)
      • PostgreSQL: TEXT (길이 제한 없음; 성능상 VARCHAR(n)과 실질 차이 거의 없음) PostgreSQL
      • MySQL/MariaDB: VARCHAR(2048~4096) 또는 TEXT (행 크기·문자집합 고려) MySQL+1
      • SQL Server: NVARCHAR(2048~4096) 또는 NVARCHAR(MAX) (유니코드 필요 시) Microsoft Learn+1

한 줄 권고: “호환성과 인덱싱 편의”가 필요하면 VARCHAR(2048~4096), “최대 유연성”이 필요하면 무제한 가변형(TEXT/NVARCHAR(MAX))을 사용.


이유 [Official/Academic]

  1. 표준에는 URL 길이 상한이 없습니다.
    • URI 일반 문법(RFC 3986)은 최대 길이를 정의하지 않습니다. IETF Datatracker
    • HTTP 표준(RFC 9110/9112)도 요청라인/헤더에 대한 구체 상한을 규정하지 않고, 구현체가 “합리적 한도”를 둘 수 있음을 전제합니다. IETF Datatracker+1
  2. 그러나 웹서버(구현체) 기본값이 사실상의 한도를 만듭니다.
    • Apache httpd: 요청라인 허용 기본값 LimitRequestLine 8190 바이트(약 8 KB). httpd.apache.org
    • Nginx: 요청라인은 **클라이언트 헤더 버퍼 하나의 크기(기본 8 KB)**를 초과할 수 없음. nginx.org
    • IIS: maxUrl 기본 4096바이트, maxQueryString 기본 2048바이트. Microsoft Learn
    ⇒ 실무에서는 2 KB~8 KB 수준이 “안전권”이며, 보수적으로는 2 KB(≈2048), 여유를 보려면 **4 KB(≈4096)**를 택합니다.
  3. DBMS 선택 관점(문자열 타입과 길이 제약)
    • PostgreSQL: TEXT와 VARCHAR(n)은 성능 차이가 사실상 없고(길이검사 정도만 추가), TEXT는 **“임의 길이”**를 저장 가능. 설계 단순화에 유리. PostgreSQL
    • MySQL: VARCHAR는 행 크기(최대 65,535바이트)와 **문자집합 바이트 수(UTF-8 가변)**의 영향을 받음. 긴 URL이 빈번하면 TEXT도 고려. MySQL+1
    • SQL Server: NVARCHAR(MAX)는 대용량(최대 2 GB) 저장 가능하나, 행당 고정 오버헤드 등 운영 특성 고려. 일반 필드는 NVARCHAR(2048~4096)가 실무 균형. Microsoft Learn+1

출처 [Official/Academic/News 구분]

  • [Official] RFC 3986 (URI): 길이 상한 미규정. IETF Datatracker
  • [Official] RFC 9110/9112 (HTTP): 구체 상한 대신 구현체 재량 언급. IETF Datatracker+1
  • [Official] Apache httpd 2.4: LimitRequestLine 기본 8190바이트. httpd.apache.org
  • [Official] Nginx core 모듈 문서: 요청라인=단일 버퍼(기본 8 KB) 초과 불가. nginx.org
  • [Official] Microsoft IIS requestLimits: maxUrl=4096, maxQueryString=2048(바이트) 기본. Microsoft Learn
  • [Official] PostgreSQL 문서(문자형): text와 varchar 성능 차이 거의 없음. PostgreSQL
  • [Official] MySQL 문서: VARCHAR 최대 길이와 행 크기 제약, 저장 방식. MySQL+1
  • [Official] SQL Server 문서: nvarchar(max)/용량·행 오버헤드 등. Microsoft Learn+1

요약 표 [Inference]

쓰임새권장 타입/크기비고
일반 웹서비스(호환성 중시) VARCHAR(2048) IIS 기본한계(4 KB URL, 2 KB 쿼리스트링)를 고려한 보수값. Microsoft Learn
긴 서명 URL/프록시/리다이렉트 많음 VARCHAR(4096) Apache/Nginx의 8 KB 선을 일부 반영한 실무 타협. httpd.apache.org+1
길이 예측이 어려움, 최대 유연성 PostgreSQL TEXT / MySQL TEXT(또는 LONGTEXT) / SQL Server NVARCHAR(MAX) 포스트그레스는 TEXT가 가장 단순·권장에 가깝고, MySQL/SQL Server는 운영정책에 따라 선택. PostgreSQL+2MySQL+2
인덱싱 필요(프리픽스 인덱스 등) VARCHAR(2048~4096) + 필요 시 프리픽스 인덱스 DB/엔진별 인덱스 길이 한도 고려(엔진 문서별 상이). [Inference]

추가 실무 팁 [Inference]

  • 문자집합: URL은 퍼센트인코딩으로 길이가 늘어납니다(UTF-8 멀티바이트 포함). 가급적 UTF-8로 통일하고 바이트 기준 한도를 감안해 여유 길이를 잡으세요.
  • 검증: 애플리케이션 레벨에서 RFC 3986 문법 검증최대 길이 검증을 함께 두고, 서버 한도(Apache/Nginx/IIS)와 DB 길이를 일치시켜 예외를 줄이세요. Microsoft Learn+3IETF Datatracker+3httpd.apache.org+3
  • 인덱스 전략: 전체 URL에 인덱스가 꼭 필요하지 않다면, **정규화된 핵심 키(도메인, 경로 해시 등)**에 인덱스를 두고 원문 URL은 비인덱스 컬럼으로 저장하는 설계가 효율적입니다. [Inference]

신뢰도(Verification Summary)

  • 표준(RFC)·공식 제품 문서 기반 권고이며, 상한 부재(표준) + 구현체 기본값(웹서버) + DB 타입 특성을 교차 확인했습니다.
  • 수치형 “기본값”은 제품 버전/설정에 따라 달라질 수 있으므로, 운영 환경의 실제 설정값(Apache LimitRequestLine, Nginx large_client_header_buffers, IIS requestLimits)을 최종 확인하는 것이 안전합니다.