케이스 변환기

텍스트를 UPPERCASE, lowercase, 타이틀 케이스, camelCase, snake_case 등으로 변환

예시 시도

입력

출력

로컬에서 실행 · 시크릿 붙여넣기 안전
변환된 텍스트가 여기에 표시됩니다…

텍스트 케이스 변환이란?

텍스트 케이스 변환은 문자열의 대소문자 또는 단어 구분 방식을 변경하는 작업입니다. 케이스 변환기는 "hello world"와 같은 입력을 UPPERCASE, lowercase, 타이틀 케이스, camelCase, snake_case, kebab-case 등의 형식으로 변환합니다. 단순한 ASCII 텍스트는 변환이 간단하지만 약어("XMLParser"), 로케일 규칙(터키어 점 있는 I), 혼합 문자 문자열에서는 예외 상황이 발생할 수 있습니다.

프로그래밍 언어, 파일 시스템, 스타일 가이드는 각자의 명명 규칙을 따릅니다. JavaScript 변수는 일반적으로 camelCase를 사용합니다. Python 함수와 변수는 PEP 8에 따라 snake_case를 따릅니다. CSS 클래스명은 kebab-case를 사용합니다. 데이터베이스 컬럼은 팀마다 다르지만 PostgreSQL과 MySQL에서는 snake_case가 지배적입니다. 이러한 규칙 간에 수동으로 변환하는 것은 느리고 오류가 발생하기 쉬우며, 특히 수십 개의 파일에서 이름을 바꿀 때는 더욱 그렇습니다.

케이스 규칙은 코드 외부에서도 중요합니다. 타이틀 케이스는 시카고 매뉴얼 오브 스타일 및 APA와 같은 스타일 가이드에서 정의한 규칙을 따르며, 관사와 짧은 전치사는 문장 첫 단어가 아닌 한 소문자로 유지됩니다. 문장 케이스는 첫 번째 단어와 고유명사만 대문자로 표기합니다. 미국 영어 출판물은 헤드라인에 타이틀 케이스를 기본으로 사용하고, 유럽과 기술 문서 대부분은 문장 케이스를 사용합니다.

이 케이스 변환기를 사용해야 하는 이유

텍스트를 붙여넣고 9가지 케이스 형식으로 즉시 변환합니다. VS Code 확장 설치나 일회용 스크립트 작성이 필요 없습니다.

즉각적인 변환
케이스 형식을 선택하면 결과가 즉시 표시됩니다. 서버 왕복이나 대기 시간이 없습니다. 형식 간에 전환하여 결과를 나란히 비교할 수 있습니다.
🔒
개인정보 우선 처리
모든 변환은 JavaScript로 브라우저에서 실행됩니다. 텍스트는 기기에만 보관됩니다. 서버로 전송되거나 어디에도 저장되지 않습니다.
🔄
하나의 도구로 9가지 형식
UPPERCASE, lowercase, 타이틀 케이스, 문장 케이스, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE. 하나의 입력으로 모든 일반적인 규칙을 처리합니다.
🌍
계정 불필요
페이지를 열고 바로 변환을 시작합니다. 회원가입, 브라우저 확장, 데스크톱 설치가 필요 없습니다. 최신 브라우저가 있는 모든 기기에서 작동합니다.

케이스 변환기 활용 사례

프런트엔드 개발
API 응답의 snake_case 프로퍼티명을 JavaScript 객체의 camelCase로 변환합니다. BEM 또는 유틸리티 우선 명명 체계로 마이그레이션할 때 CSS 클래스를 camelCase에서 kebab-case로 변경합니다.
백엔드 API 설계
데이터베이스 컬럼(snake_case)을 JSON 응답 키(camelCase)로 매핑할 때 필드명 규칙을 변환합니다. 직렬화 레이어가 예상한 출력 형식을 생성하는지 검증합니다.
DevOps 및 인프라
설명적인 문구에서 CONSTANT_CASE 환경 변수명을 생성합니다. 팀 스타일 가이드에 맞게 Terraform 리소스명을 snake_case와 kebab-case 간에 변환합니다.
QA 및 테스트 자동화
올바른 케이스의 필드명으로 테스트 픽스처 데이터를 준비합니다. API 계약과 클라이언트 기대값 간의 케이스 불일치를 프로덕션에 도달하기 전에 발견합니다.
데이터 엔지니어링
CSV 또는 Excel 파일을 데이터베이스로 가져올 때 컬럼 헤더를 정규화합니다. "First Name"과 같은 혼합 케이스 헤더를 일관된 스키마 설계를 위해 "first_name"과 같은 snake_case 컬럼으로 변환합니다.
기술 문서 작성
문서에서 코드 참조를 올바른 케이스로 형식화합니다. 일반 영어 설명을 기술 명세의 일관성을 위해 PascalCase 클래스명 또는 kebab-case URL 슬러그로 변환합니다.

케이스 규칙 참고

각 명명 규칙은 대소문자 표기와 단어 구분에 대한 고유한 규칙을 가지고 있습니다. 아래 표는 이 도구가 지원하는 9가지 형식을 "the quick brown fox" 입력 예시와 함께 보여줍니다.

케이스규칙예시
UPPERCASEEvery letter capitalizedTHE QUICK BROWN FOX
lowercaseEvery letter lowercasedthe quick brown fox
Title CaseFirst letter of each word capitalizedThe Quick Brown Fox
Sentence caseFirst letter of each sentence capitalizedThe quick brown fox
camelCaseNo separators, first word lowercasetheQuickBrownFox
PascalCaseNo separators, every word capitalizedTheQuickBrownFox
snake_caseWords joined by underscores, all lowercasethe_quick_brown_fox
kebab-caseWords joined by hyphens, all lowercasethe-quick-brown-fox
CONSTANT_CASEWords joined by underscores, all uppercaseTHE_QUICK_BROWN_FOX

camelCase vs snake_case vs kebab-case

이 세 가지 규칙은 소프트웨어 개발에서 지배적이지만, 각각 다른 생태계에 속합니다. 잘못된 규칙을 선택하면 린터가 오류를 발생시키고, API 계약을 위반하거나, 일관성 없는 코드베이스가 됩니다.

camelCase
JavaScript와 TypeScript의 변수, 함수명, 객체 키의 표준입니다. Java와 C#은 지역 변수와 메서드 매개변수에 사용합니다. JavaScript 클라이언트용 JSON API는 일반적으로 camelCase 키를 사용합니다. 첫 번째 단어는 소문자이고, 이후 각 단어는 대문자로 시작합니다.
snake_case
Python(PEP 8), Ruby, Rust, 대부분의 SQL 데이터베이스의 기본값입니다. C 표준 라이브러리 함수도 이 패턴을 따릅니다. 단어는 밑줄로 구분되며 모두 소문자입니다. CONSTANT_CASE(모두 대문자에 밑줄)는 상수와 환경 변수에 사용되는 변형입니다.
kebab-case
CSS 클래스명, HTML 속성, URL 슬러그, CLI 플래그명(--output-dir)의 표준입니다. Lisp와 Clojure에서도 일반적으로 사용됩니다. 단어는 하이픈으로 구분되며 모두 소문자입니다. 대부분의 프로그래밍 언어는 식별자에 하이픈을 사용할 수 없으므로 kebab-case는 문자열, 파일명, 마크업에 국한됩니다.

코드 예시

프로그래밍 방식으로 케이스 규칙 간에 변환하는 방법입니다. 각 예시는 camelCase에서 snake_case로, snake_case에서 camelCase로, 그리고 기본적인 대소문자 및 타이틀 케이스 변환을 다룹니다.

JavaScript
// camelCase → snake_case
function toSnakeCase(str) {
  return str
    .replace(/([a-z])([A-Z])/g, '$1_$2')
    .replace(/[\s-]+/g, '_')
    .toLowerCase()
}
toSnakeCase('myVariableName')  // → "my_variable_name"
toSnakeCase('kebab-case-str')  // → "kebab_case_str"

// snake_case → camelCase
function toCamelCase(str) {
  return str
    .toLowerCase()
    .replace(/[_-](\w)/g, (_, c) => c.toUpperCase())
}
toCamelCase('my_variable_name')  // → "myVariableName"

// Title Case
function toTitleCase(str) {
  return str.replace(/\w\S*/g, w =>
    w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()
  )
}
toTitleCase('the quick brown fox')  // → "The Quick Brown Fox"
Python
import re

text = "the quick brown fox"

# UPPERCASE / lowercase
text.upper()  # → "THE QUICK BROWN FOX"
text.lower()  # → "the quick brown fox"

# Title Case
text.title()  # → "The Quick Brown Fox"

# camelCase
def to_camel(s):
    words = re.split(r'[\s_-]+', s)
    return words[0].lower() + ''.join(w.capitalize() for w in words[1:])

to_camel("my_variable_name")  # → "myVariableName"

# snake_case from camelCase
def to_snake(s):
    return re.sub(r'([a-z])([A-Z])', r'\1_\2', s).lower()

to_snake("myVariableName")  # → "my_variable_name"

# kebab-case
def to_kebab(s):
    return re.sub(r'([a-z])([A-Z])', r'\1-\2', s).replace('_', '-').lower()

to_kebab("myVariableName")  # → "my-variable-name"
Go
package main

import (
	"fmt"
	"regexp"
	"strings"
)

// camelCase → snake_case
func toSnake(s string) string {
	re := regexp.MustCompile("([a-z])([A-Z])")
	snake := re.ReplaceAllString(s, "${1}_${2}")
	return strings.ToLower(snake)
}

// snake_case → camelCase
func toCamel(s string) string {
	parts := strings.Split(strings.ToLower(s), "_")
	for i := 1; i < len(parts); i++ {
		parts[i] = strings.Title(parts[i])
	}
	return strings.Join(parts, "")
}

func main() {
	fmt.Println(toSnake("myVariableName"))  // → my_variable_name
	fmt.Println(toCamel("my_variable_name")) // → myVariableName
	fmt.Println(strings.ToUpper("hello"))    // → HELLO
	fmt.Println(strings.ToUpper("hello world")) // → HELLO WORLD
}
CLI (bash / sed)
# UPPERCASE
echo "hello world" | tr '[:lower:]' '[:upper:]'
# → HELLO WORLD

# lowercase
echo "HELLO WORLD" | tr '[:upper:]' '[:lower:]'
# → hello world

# camelCase → snake_case (using sed)
echo "myVariableName" | sed 's/\([a-z]\)\([A-Z]\)/\1_\2/g' | tr '[:upper:]' '[:lower:]'
# → my_variable_name

# snake_case → kebab-case
echo "my_variable_name" | tr '_' '-'
# → my-variable-name

자주 묻는 질문

camelCase와 PascalCase의 차이점은 무엇인가요?
camelCase는 소문자로 시작하고(myVariable), PascalCase는 대문자로 시작합니다(MyVariable). JavaScript에서 camelCase는 변수와 함수에, PascalCase는 클래스명과 React 컴포넌트명에 사용됩니다. C#은 공개 메서드와 프로퍼티에 PascalCase를 사용합니다. 구조적 차이는 첫 번째 문자뿐입니다.
JavaScript에서 camelCase를 snake_case로 변환하려면 어떻게 하나요?
정규식을 사용하여 각 대문자 앞에 밑줄을 삽입한 후 소문자로 변환합니다: str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(). 이 방법은 표준 camelCase를 처리합니다. "XMLParser"처럼 연속된 대문자가 있는 문자열은 대문자 연속을 올바르게 분리하기 위해 추가적인 정규식 처리가 필요합니다.
Python은 왜 camelCase 대신 snake_case를 사용하나요?
2001년에 발표된 Python 공식 스타일 가이드인 PEP 8은 Guido van Rossum과 핵심 팀이 한눈에 읽기 더 쉽다고 판단하여 함수와 변수에 snake_case를 선택했습니다. Binkley 외(2009년) 연구에서 특정 읽기 작업에서 프로그래머들이 camelCase보다 snake_case 식별자를 더 빨리 인식하는 것으로 나타났습니다. 이 규칙은 flake8과 pylint 같은 린터에 의해 강제됩니다.
타이틀 케이스는 모든 단어를 대문자로 하는 것과 같은가요?
단순 타이틀 케이스는 모든 단어의 첫 글자를 대문자로 하며, 이 도구가 수행하는 방식입니다. 공식 타이틀 케이스(AP, 시카고, APA)는 추가 규칙이 있습니다: 관사(a, an, the), 짧은 접속사(and, but, or), 짧은 전치사(in, on, at)는 첫 번째 또는 마지막 단어가 아닌 한 소문자를 유지합니다. 공식 타이틀 케이스는 문자 수준 변환이 아닌 사전 조회가 필요합니다.
이 도구는 유니코드 및 비라틴 문자를 처리할 수 있나요?
이 도구는 JavaScript의 기본 제공 toUpperCase()와 toLowerCase() 메서드를 사용하며, 이는 유니코드 표준(3장, 섹션 3.13)에서 정의한 유니코드 케이스 규칙을 따릅니다. 악센트 문자(é에서 É), 독일어 에스체트(ss에서 SS), 그리스 문자를 올바르게 처리합니다. 단, 터키어 케이스 규칙(소문자 i가 점 있는 İ로 대문자화되어야 하는 경우)과 같은 로케일별 규칙은 도구가 아닌 브라우저의 로케일 설정에 따라 달라집니다.
CONSTANT_CASE는 어디에 사용되나요?
CONSTANT_CASE(SCREAMING_SNAKE_CASE라고도 함)는 상수와 환경 변수에 사용됩니다. JavaScript에서: const MAX_RETRIES = 3. Python에서: MAX_RETRIES = 3(Python에는 진정한 상수가 없으므로 관례상). 셸 스크립트에서: export DATABASE_URL=.... 모두 대문자 스타일은 초기화 후 값이 재할당되어서는 안 된다는 것을 나타냅니다.
프로젝트에 올바른 케이스 규칙을 어떻게 선택하나요?
언어와 프레임워크의 지배적인 규칙을 따르세요. JavaScript/TypeScript: 변수에 camelCase, 클래스와 컴포넌트에 PascalCase. Python: 함수와 변수에 snake_case, 클래스에 PascalCase. CSS: kebab-case. SQL: 컬럼과 테이블에 snake_case. REST API JSON 키: 프런트엔드 언어에 맞추세요(JS 클라이언트에는 camelCase, Python 클라이언트에는 snake_case). 확실하지 않으면 프로젝트 루트의 린터 설정이나 .editorconfig를 확인하세요.