대부분의 튜토리얼이나 강의에서는 이 모듈을 다루지 않습니다. 이유는 간단합니다. 출력 포맷을 보기 좋게 바꾸는 일은 본질적인 로직 작성에 비해 덜 중요해 보이기 때문입니다.

그런데 저는 Python 공식 문서를 보다가 textwrap 을 알게 되었고, 처음에는 “굳이 이걸 쓸 일이 있을까?” 싶었습니다. 하지만 실제로 Slack, Telegram, Gmail 등 다양한 플랫폼으로 보고서를 받는 자동화 작업을 하다 보니, 이 함수의 필요성과 가치가 확실히 느껴졌습니다.

Python textwrap

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은 그 가독성을 손쉽게 확보하게 해주는 고마운 도구입니다.

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다