목차
대부분의 튜토리얼이나 강의에서는 이 모듈을 다루지 않습니다. 이유는 간단합니다. 출력 포맷을 보기 좋게 바꾸는 일은 본질적인 로직 작성에 비해 덜 중요해 보이기 때문입니다.
그런데 저는 Python 공식 문서를 보다가 textwrap 을 알게 되었고, 처음에는 “굳이 이걸 쓸 일이 있을까?” 싶었습니다. 하지만 실제로 Slack, Telegram, Gmail 등 다양한 플랫폼으로 보고서를 받는 자동화 작업을 하다 보니, 이 함수의 필요성과 가치가 확실히 느껴졌습니다.
Python textwrap
이란?
Python textwrap 표준 라이브러리로, 긴 문자열을 자동으로 줄바꿈하거나, 들여쓰기하거나, 길이에 맞게 축약해주는 기능을 제공합니다. 특히 모바일 메시지나 터미널 출력, 로그 메시지 정리, 봇 응답 최적화 등에 매우 유용합니다.
예제 1: fill()
로 자동 줄바꿈
import textwrap
long_text = "In the journey of achieving your dreams, remember that success is not final, failure is not fatal: it is the courage to continue that counts. Every setback is a chance to learn and grow, and every victory is just a step towards your next challenge. Stay resilient and keep moving forward."
wrapped_text = textwrap.fill(long_text, width=60)
print(wrapped_text)
출력:
In the journey of achieving your dreams, remember that
success is not final, failure is not fatal: it is the
courage to continue that counts. Every setback is a chance
to learn and grow, and every victory is just a step towards
your next challenge. Stay resilient and keep moving forward.
예제 2: wrap()
으로 리스트로 줄바꿈
lines = textwrap.wrap(long_text, width=60)
for line in lines:
print(line)
wrap()
은 리스트로 반환하므로 한 줄씩 개별 처리 가능- Slack에서 코드 블록(““ “`)으로 포맷할 때 유용
예제 3: 들여쓰기 추가 (indent
)
indented = textwrap.indent(wrapped_text, prefix=' ')
print(indented)
출력:
In the journey of achieving your dreams, remember that
success is not final, failure is not fatal: it is the
courage to continue that counts. Every setback is a chance
...
예제 4: 들여쓰기 제거 (dedent
)
dedented = textwrap.dedent(indented)
print(dedented)
주의: 들여쓰기가 동일하게 되어 있어야 dedent
가 정확히 작동합니다.
예제 5: 글자 수 제한하여 축약 (shorten
)
shortened = textwrap.shorten(long_text, width=50, placeholder="...")
print(shortened)
출력:
In the journey of achieving your dreams, remember...
- Slack, Telegram, SMS 같은 문자 제한 있는 플랫폼에 최적
예제 6: TextWrapper
로 포맷 조절
wrapper = textwrap.TextWrapper(
width=60,
initial_indent='* ',
subsequent_indent=' '
)
print(wrapper.fill(long_text))
출력:
* In the journey of achieving your dreams, remember that
success is not final, failure is not fatal: it is the
courage to continue that counts...
- 마크다운 블록, 알림 메시지 포맷에 딱!
실무에서의 사용 사례
저는 뉴스 및 정보를 수집한 후 요약하고, 중복을 제거하고, 이 정보를 기반으로 자동 보고서를 만들어 Gmail, Slack, Telegram으로 전송하는 구조를 만들고 있습니다.
- Gmail: 줄바꿈이 자동으로 정리되기 때문에 필요 없음
- Slack/Telegram: 한 줄이 너무 길면 가독성 급감 →
textwrap
사용 시 명확히 개선
하이퍼링크 문제
개인적으로 겪은 문제는 하이퍼링크(http://...
)가 줄바꿈 되면 밑줄이 어색해 보이는 현상이 있었습니다. 이건 textwrap
이 문법 단위가 아닌 문자 길이 기준으로 자르기 때문이죠.
문화와 생산성 이야기
저는 원래 “출력 포맷은 불필요하다”는 생각이 강했습니다.
- 보기 좋게 만드는 것보다 빠르게 결과를 내는 게 더 중요하다고 생각했죠.
하지만 전 직장은 엄격한 형식과 규율을 중시하는 곳이었습니다. 그 덕분에 가독성의 중요성에 대해 다시 생각하게 되었고, 실제로 그게 서비스 품질 향상에 큰 역할을 한다는 걸 체감했습니다.
반면 현재 회사는 자유로운 분위기로, 속도 중심의 업무 스타일을 가지고 있습니다. 그 중간 어딘가에서 저는 이제 속도와 형식이 공존할 수 있는 절충점을 찾고 싶어졌습니다.
“속도가 있어야 하고, 형식도 어느 정도는 갖춰야 한다.”
Python textwrap 사용법 마무리
Python의 textwrap
은 가볍고 단순하지만, 보고서나 알림 메시지의 완성도를 한 단계 끌어올리는 도구입니다. 특히 텍스트 기반 작업을 많이 하는 개발자나 자동화 시스템 구축자라면 반드시 알아야 할 유틸리티입니다.
가독성은 성능 못지않게 중요합니다. 특히 사람이 읽는 출력이라면 더욱 그렇습니다. textwrap
은 그 가독성을 손쉽게 확보하게 해주는 고마운 도구입니다.