텍스트 자릿수 맞추기, 어떻게 계산되나

여러 줄로 된 목록을 모두 같은 글자수로 가지런히 맞추고 싶은데, 공백을 아무리 넣어도 줄 끝이 어긋나는 분들을 위한 글입니다. 결론부터 말하면 텍스트 패딩(자릿수 맞추기)은 "각 행의 글자수를 세고, 목표 너비에서 모자란 만큼을 지정한 문자로 채우는" 단순한 계산입니다. 어디에 채우는지(왼쪽·오른쪽·양쪽)와 무엇을 한 글자로 세는지만 알면 결과가 왜 그렇게 나오는지 정확히 읽을 수 있습니다.
요약 ① 방향은 모자란 칸을 어디에 붙일지만 정합니다. 왼쪽=앞, 오른쪽=뒤, 양쪽=반씩이며 나누어 떨어지지 않으면 왼쪽은 내림(Math.floor)이라 남는 한 칸이 오른쪽으로 갑니다. ② 글자수는 코드포인트 단위(Array.from)로 세어 한글과 대부분의 이모지가 1글자로 잡히고, 화면상 폭(전각·반각)이 아니라 글자 개수로 맞춥니다. ③ 이미 목표 너비보다 긴 행은 기본적으로 그대로 두고, '너비 초과 라인 잘라내기'를 켜야만 앞에서부터 잘립니다.
줄마다 길이가 달라 끝이 안 맞는 상황
등폭(monospace) 글꼴 문서에서 목록을 만들 때 이 문제가 자주 생깁니다. 예를 들어 "사과 / 바나나 / 키위"처럼 이름 길이가 제각각이면, 뒤에 가격이나 설명을 붙였을 때 시작 위치가 줄마다 어긋납니다.
눈으로 보기에 표처럼 반듯하게 정렬하려면 각 행이 모두 같은 글자수가 되도록 짧은 행 뒤(또는 앞)에 공백이나 기호를 채워 길이를 맞춰야 합니다. 이것이 바로 텍스트 패딩입니다.
문제는 이 "채우는 규칙"이 눈에 잘 안 보인다는 점입니다. 공백으로 채우면 결과가 그대로처럼 보이고, 한글과 영어가 섞이면 글자수를 맞췄는데도 끝이 안 맞는 것처럼 느껴집니다. 그래서 계산이 실제로 어떻게 이뤄지는지 알아둘 필요가 있습니다.
도구 없이 직접 맞추는 방법
원리는 손으로도 그대로 할 수 있습니다. 순서는 세 단계입니다.
- 각 행의 글자수를 센다. 여기서 세는 단위는 '글자 개수'입니다. 한글 한 글자, 영문 한 글자, 대부분의 이모지 하나가 각각 1로 셉니다. 바이트 수가 아니라는 점이 중요합니다.
- 부족분을 계산한다. 목표 너비에서 그 행의 글자수를 뺍니다. 예를 들어 목표 너비가 5인데 "사과"는 2글자이므로 부족분은 3입니다.
- 방향에 맞춰 채운다. 오른쪽 정렬이면 뒤에, 왼쪽 정렬이면 앞에 부족분만큼 채웁니다. 양쪽이면 부족분을 반으로 나눠 왼쪽은 내림으로 넣고 남는 칸은 오른쪽으로 보냅니다.
"사과 / 바나나 / 키위"를 목표 너비 5, 오른쪽 방향, 채움 문자를 점(.)으로 두고 손으로 계산하면 이렇게 나옵니다.
사과...
바나나..
키위...
스프레드시트로도 같은 계산을 할 수 있습니다. 오른쪽 채우기는 =A1 & REPT(".", 5-LEN(A1)) 형태입니다. 여기서 LEN은 글자 개수를 세고 LENB는 바이트 수를 세므로, 자릿수를 맞출 때는 LEN을 쓴다는 점이 위 도구의 계산 기준과 같습니다.
다만 행이 많아지면 한 줄씩 세어 채우는 일이 번거롭고, 양쪽 정렬처럼 부족분을 반으로 나누는 계산에서 실수가 나기 쉽습니다. 아래 도구는 입력을 넣으면 줄 단위로 나눠 같은 규칙을 실시간으로 적용해 보여줍니다.
저희 도구로 확인하기.
설치·회원가입 없이 여러 줄 텍스트를 지정한 글자수로 실시간 정렬하고 바로 복사합니다.

자주 헷갈리는 지점
방향에 따라 어디에 채워지는지, 양쪽일 때 남는 칸이 어디로 가는지를 한 표로 보면 명확합니다. 아래는 "가"(1글자)를 목표 너비 4, 채움 문자 대시(-)로 맞춘 결과입니다.
| 방향 | 채우는 위치 | 부족분 처리 | 결과 |
|---|---|---|---|
| 왼쪽 | 앞 | 앞에 3칸 | ---가 |
| 오른쪽 | 뒤 | 뒤에 3칸 | 가--- |
| 양쪽 | 앞뒤 반씩 | 왼쪽 1칸(내림), 오른쪽 2칸 | -가-- |
양쪽 정렬에서 부족분이 3처럼 홀수면 정확히 반으로 나뉘지 않습니다. 이때 왼쪽은 내림으로 1칸, 나머지 2칸이 오른쪽으로 갑니다. 그래서 좌우가 완벽히 대칭이 아니라 오른쪽이 한 칸 더 많아 보일 수 있는데, 이는 오류가 아니라 정해진 계산 규칙입니다.
가장 흔한 착각은 두 가지입니다. 첫째, 채움 문자를 공백으로 두면 결과가 화면에 그대로처럼 보여 "안 됐다"고 오해하기 쉽습니다. 실제로는 공백이 채워져 있으므로, 계산이 되고 있는지 확인하려면 점(.)이나 대시(-) 같은 보이는 문자로 바꿔 보면 됩니다.
둘째, 글자수와 바이트 수를 혼동하는 경우입니다. "사과"는 2글자이지만 UTF-8 기준 6바이트입니다. 이 도구는 바이트가 아니라 글자 개수로 맞추므로, 바이트 기준 정렬을 기대하면 결과가 예상과 달라 보입니다.
정리
- 방향은 부족한 칸을 어디에 붙일지만 정합니다. 왼쪽은 앞, 오른쪽은 뒤, 양쪽은 반씩입니다.
- 양쪽에서 부족분이 홀수면 왼쪽은 내림(Math.floor), 남는 한 칸은 오른쪽으로 갑니다.
- 글자수는 코드포인트 단위로 세어 한글과 대부분의 이모지가 1글자이며, 화면 폭이 아니라 글자 개수로 맞춥니다.
- 이미 목표 너비보다 긴 행은 기본적으로 그대로 두고, '잘라내기'를 켜야 앞에서부터 목표 너비만큼만 남깁니다.
- 결과가 그대로처럼 보이면 채움 문자를 점이나 대시로 바꿔 확인하고, 글자수와 바이트 수를 혼동하지 않습니다.
설치·회원가입 없이 여러 줄 텍스트를 지정한 글자수로 실시간 정렬하고 바로 복사합니다.
자주 묻는 질문
공백으로 채웠는데 결과가 그대로인 것 같아요
공백은 눈에 보이지 않아서 채워져도 화면상 변화가 잘 느껴지지 않습니다. 결과를 복사해 붙여 보면 각 행이 같은 글자수로 채워져 있는 것을 확인할 수 있습니다. 계산이 되는지 눈으로 보고 싶다면 채움 문자를 점(.)이나 대시(-)로 바꾸면 채워진 칸이 그대로 드러납니다.
한글과 영어가 섞이면 끝이 안 맞아 보여요
글자수는 맞았는데 화면에서 어긋나 보이는 이유는, 이 도구가 화면상 폭이 아니라 글자 개수로 맞추기 때문입니다. 한글은 코드포인트로 1글자로 세지만, 많은 글꼴에서 한글 한 글자가 영문·공백보다 넓게 그려집니다. 그래서 글자 개수는 같아도 등폭 글꼴에서 오른쪽 끝이 조금 어긋나 보일 수 있습니다. 이는 계산이 틀린 것이 아니라 세는 기준(글자 개수)과 보이는 폭이 다르기 때문입니다.
이미 목표 너비보다 긴 줄은 어떻게 되나요
기본값에서는 그대로 둡니다. 목표 너비보다 글자수가 이미 크거나 같으면 채울 것이 없으므로 원래 행이 유지됩니다. '너비 초과 라인 잘라내기'를 켜면 그 행을 앞에서부터 목표 너비만큼만 남기고 잘라냅니다.
이모지도 1글자로 세나요
대부분의 이모지는 코드포인트 하나여서 1글자로 셉니다. 다만 여러 코드포인트가 합쳐진 이모지(가족 이모지, 국기, 피부색이 결합된 이모지 등)는 여러 글자로 계산될 수 있습니다. 이 경우 화면에는 하나로 보여도 글자수는 2 이상으로 잡혀 채워지는 칸 수가 달라집니다.
