텍스트 Slugify (URL)

전문적인 텍스트 Slugify 도구로, 텍스트를 URL 친화적인 슬러그로 정규화합니다. 소문자 변환, 사용자 지정 구분자 지원, 영어 불용어 제거 등의 기능을 제공합니다. Unicode 정규화를 적용하여 대부분의 언어 문자를 지원하며, 생성된 슬러그가 SEO 모범 사례를 따르도록 보장합니다. 블로그 게시물 URL, 파일 이름 지정, 데이터베이스 식별자 등에 적합하며, 모든 처리는 로컬에서 이루어져 개인 정보를 보호하고 가입이 필요 없습니다. 고품질 슬러그 생성을 위한 상세한 사용 가이드와 모범 사례 제안을 제공합니다.

파라미터 및 입력

- 또는 _를 사용하는 것이 권장되며, 길이는 1~3자로 설정하세요

결과

왜 Slugify가 필요한가요?

🔍 SEO 최적화

URL 내 키워드는 검색 엔진이 페이지 내용을 이해하고 순위를 높이는 데 도움이 됩니다. 예: example.com/blog/how-to-learn-javascript 는 example.com/blog/123 보다 더 친화적입니다.

👁️ 가독성 및 공유

사용자는 URL만 보고도 콘텐츠를 바로 파악할 수 있으며, 소셜 미디어 공유 시 더 친화적이고 기억하기 쉽고 수동 입력도 편리합니다.

💻 시스템 호환성

특수 문자로 인한 파일명/URL 오류를 방지하고, Windows/Linux/Mac 등 다양한 플랫폼에서 호환되며 인코딩 문제를 피합니다.

🗄️ 데이터베이스 친화적

사용자명, 태그 등 고유 식별자로 사용 시 SQL 인젝션 리스크를 줄이고, 인덱싱 및 쿼리가 용이합니다.

Slugify란 무엇인가요?

Slug는 텍스트를 표준화하여 URL, 파일명, 식별자로 사용하는 짧은 문자열입니다. 일반적인 처리 방법으로는 대소문자 통일, 구두점 제거, 단어 간 구분자 연결이 있습니다.

  • ASCII 우선: 악센트 및 기호를 최대한 제거하고 알파벳, 숫자, 공백만 유지
  • Unicode 호환: 대부분의 언어 문자를 NFKD 표준화 후 처리
  • URL 친화적: 결과는 알파벳, 숫자, 구분자만 포함되어 경로에 바로 사용 가능

사용 사례

블로그 글 URL

자바스크립트를 어떻게 배우나요?

how-to-learn-javascript

파일명

제품 요구사항 문서 v2.0.docx

product-requirements-v2-0.docx

데이터베이스 식별자

사용자-张三

user-zhang-san

자주 묻는 질문

Q: 중국어 문자는 어떻게 처리되나요?

A: 기본적으로 음표는 제거되고 핑inyin 문자만 유지됩니다. 완전한 중국어는 빈 문자열이 될 수 있으므로, slugify 전에 먼저 수동으로 핑inyin으로 변환하거나 중국어 핑inyin 변환 도구를 사용하는 것을 권장합니다.

Q: 결과가 비어 있는 이유는 무엇인가요?

A: 입력된 내용이 모두 문장 부호/기호/공백일 수 있으며, 정지어 필터링을 활성화한 후 남은 단어가 없을 수도 있습니다. 정지어 옵션을 비활성화하거나 입력 내용을 조정해 보세요.

Q: 구분자로 - 와 _ 중 어떤 것을 사용해야 하나요?

A: SEO 관점에서는 - (하이픈)을 사용하는 것이 좋습니다. Google은 이를 공백으로 인식하지만, _ (밑줄)은 연결 기호로 인식되어 단어 분리에 불리합니다. 파일명의 경우 어느 것을 사용해도 상관없습니다.

Q: Slug의 길이에 제한이 있나요?

A: 기술적으로 제한은 없지만, URL 표시 및 SEO를 위해 50자 이내로 유지하는 것이 좋습니다. 너무 긴 slug는 검색 엔진에 의해 자르힐 수 있습니다.

최선의 실천 방법

권장 사항

  • ✓ 짧게 유지하세요 (50자 미만 권장)
  • ✓ 특수 문자는 사용하지 말고, 알파벳, 숫자, 구분자만 사용하세요
  • ✓ 대소문자 민감성 문제를 피하기 위해 소문자로 변환하세요
  • ✓ 의미 밀도를 높이기 위해 정지어를 제거하세요

피해야 할 사항

  • ✗ 민감한 정보(예: ID, 이메일, 비밀번호)를 포함하지 마세요
  • ✗ 특수 문자(@#$%^&*)를 사용하지 마세요
  • ✗ 공백이나 연속된 구분자를 유지하지 마세요
  • ✗ 같은 단어를 반복해서 사용하지 마세요

기술 설명

유니코드 정규화:

NFKD 분해 + 조합 음표(\p{M}) 제거를 사용하여 Café를 Cafe로 변환합니다. 대부분의 라틴어 계열 문자를 지원합니다.

정지어 목록:

영어 일반 단어(a/an/the/and/or/of/to/in/on/for/at/by/with) 기반으로 구성되며, 사용자가 확장할 수 있습니다. 중국어 정지어는 별도 처리가 필요합니다.

브라우저 호환성:

ES6+ 및 유니코드 정규식(\p{...}) 지원이 필요합니다. 최신 브라우저(Chrome 64+, Firefox 78+, Safari 11.1+)는 모두 지원합니다.

프로그래밍 언어를 사용하여 Slug를 생성하는 방법

JavaScript

function slugify(text) {
  return text
    .toLowerCase()
    .normalize("NFKD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/[^\w\s-]/g, "")
    .trim()
    .replace(/[\s_-]+/g, "-")
    .replace(/^-+|-+$/g, "");
}

PHP

function slugify($text) {
  $text = mb_strtolower($text);
  $text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
  $text = preg_replace("/[^\w\s-]/", "", $text);
  $text = preg_replace("/[\s_-]+/", "-", $text);
  return trim($text, "-");
}

Python

import re
import unicodedata

def slugify(text):
    text = text.lower()
    text = unicodedata.normalize("NFKD", text)
    text = text.encode("ascii", "ignore").decode("ascii")
    text = re.sub(r"[^\w\s-]", "", text)
    text = re.sub(r"[\s_-]+", "-", text)
    return text.strip("-")

Go

import (
    "regexp"
    "strings"
    "golang.org/x/text/unicode/norm"
)

func Slugify(text string) string {
    text = strings.ToLower(text)
    text = norm.NFKD.String(text)
    re := regexp.MustCompile(`[^\w\s-]`)
    text = re.ReplaceAllString(text, "")
    re = regexp.MustCompile(`[\s_-]+`)
    text = re.ReplaceAllString(text, "-")
    return strings.Trim(text, "-")
}

Ruby

require "unicode"

def slugify(text)
  text = text.downcase
  text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
  text = text.gsub(/[^\w\s-]/, "")
  text = text.gsub(/[\s_-]+/, "-")
  text.strip.gsub(/^-+|-+$/, "")
end

Java

import java.text.Normalizer;

public static String slugify(String text) {
    text = text.toLowerCase();
    text = Normalizer.normalize(text, Normalizer.Form.NFKD);
    text = text.replaceAll("[^\\w\\s-]", "");
    text = text.replaceAll("[\\s_-]+", "-");
    return text.replaceAll("^-+|-+$", "");
}