2026년 7월 21일 화요일

app/colors.py



from enum import StrEnum


# Enum 클래스 이름은 대문자로 지어도 상수 그룹의 의미로 잘 받아들여집니다.
class ANSI(StrEnum):
  # 공통 스타일 및 리셋
  RESET = "\x1b[0m"
  BOLD = "\x1b[1m"
  UNDERLINE = "\x1b[4m"
  INVERT = "\x1b[7m"
  STRIKE = "\x1b[9m"

  # 시작 신호를 아예 통째로 변수에 담아둡니다.
  START = "\x1b["
  END = "m"

  # 글자색 그룹
  BLACK = "\x1b[30m"
  RED = "\x1b[31m"
  GREEN = "\x1b[32m"
  YELLOW = "\x1b[33m"
  BLUE = "\x1b[34m"
  MAGENTA = "\x1b[35m"
  CYAN = "\x1b[36m"
  WHITE = "\x1b[37m"

  # 배경색 그룹
  BG_BLACK = "\x1b[40m"
  BG_RED = "\x1b[41m"
  BG_GREEN = "\x1b[42m"
  BG_YELLOW = "\x1b[43m"
  BG_BLUE = "\x1b[44m"
  BG_MAGENTA = "\x1b[45m"
  BG_CYAN = "\x1b[46m"
  BG_WHITE = "\x1b[47m"

  # 256색 확장 규격 (실제 색상을 명확하게 분리)
  TRUE_MAGENTA = "\x1b[38;5;201m"  # 형광빛 도는 진분홍 (마젠타)
  TRUE_PURPLE = "\x1b[38;5;129m"  # 푸른빛 도는 진짜 보라색 (퍼플)
  PASTEL_PURPLE = "\x1b[38;5;141m"  # 부드러운 연보라색

  ORANGE = "\x1b[38;5;208m"

  BG_BRIGHT_GREEN = "\x1b[48;5;46m"
  # 48;5;46번 배경에 검은 글자(30)를 결합한 완벽한 올인원 코드
  BG_BRIGHT_GREEN_FG_BLACK = "\x1b[48;5;46;30m"

  # 1. 배경색 먼저 정의하고 글자색 붙이기
  CODE_A = "\x1b[48;5;46;30m"  # 48;5;46 (배경) + 30 (검은글자)

  # 2. 글자색 먼저 정의하고 배경색 붙이기 (순서 변경 가능)
  CODE_B = "\x1b[30;48;5;46m"  # 30 (검은글자) + 48;5;46 (배경)

  # 사용할 때 가운데 숫자만 쏙 넣기
  # print(f"{ANSI_START}1;31{ANSI_END}굵은 빨간색{RESET}")


database.py

import os from contextlib import contextmanager # contextmanager 임포트 from typing import Generator from dotenv...