Skip to content

leegyurak/ktx-srt-auto-reservation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

52 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš„ KTX/SRT κΈ°μ°¨ν‘œ μžλ™ μ˜ˆμ•½ ν”„λ‘œκ·Έλž¨

λΉ λ₯΄κ³  νŽΈλ¦¬ν•œ κΈ°μ°¨ν‘œ μ˜ˆμ•½μ„ μœ„ν•œ 슀마트 μ†”λ£¨μ…˜

Python uv Tests codecov License


⚠️ 면책사항

μ€‘μš”: ν”„λ‘œκ·Έλž¨ μ‚¬μš© μ „ λ°˜λ“œμ‹œ μ½μ–΄μ£Όμ„Έμš”

이 ν”„λ‘œκ·Έλž¨μ€ ꡐ윑 및 개인 μ‚¬μš© λͺ©μ μœΌλ‘œ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

⚠️ μ‚¬μš©μžλŠ” μ½”λ ˆμΌ 및 SRT의 μ΄μš©μ•½κ΄€μ„ μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€
⚠️ ν”„λ‘œκ·Έλž¨ μ‚¬μš©μœΌλ‘œ μΈν•œ λͺ¨λ“  μ±…μž„μ€ μ‚¬μš©μžμ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€
⚠️ 상업적 λͺ©μ μ˜ μ‚¬μš©μ€ κΈˆμ§€λ©λ‹ˆλ‹€
⚠️ κ³Όλ„ν•œ μ‚¬μš©μ€ μ„œλΉ„μŠ€ 제곡자의 정책에 μœ„λ°°λ  수 μžˆμŠ΅λ‹ˆλ‹€
⚠️ 이 ν”„λ‘œκ·Έλž¨μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” μ–΄λ– ν•œ 법적 λ¬Έμ œλ„ κ°œλ°œμžλŠ” μ±…μž„μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€

ν”„λ‘œκ·Έλž¨ μ‚¬μš© μ‹œ 각 μ„œλΉ„μŠ€(μ½”λ ˆμΌ, SRT)의 곡식 μ΄μš©μ•½κ΄€μ„ λ¨Όμ € ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.


πŸ“– μ†Œκ°œ

KTX/SRT κΈ°μ°¨ν‘œ μžλ™ μ˜ˆμ•½ ν”„λ‘œκ·Έλž¨μ€ μ½”λ ˆμΌ(KTX)κ³Ό SRT의 온라인 μ˜ˆμ•½ μ‹œμŠ€ν…œμ„ μžλ™ν™”ν•˜μ—¬, μ›ν•˜λŠ” μ—΄μ°¨ν‘œλ₯Ό λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ μ˜ˆμ•½ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λ°μŠ€ν¬ν†± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.

μ›ν•˜λŠ” μ‹œκ°„λŒ€μ˜ ν‘œλ₯Ό κ΅¬ν•˜κΈ° μ–΄λ €μš΄ μƒν™©μ—μ„œ, μžλ™μœΌλ‘œ κ²€μƒ‰ν•˜μ—¬ μ˜ˆμ•½ κ°€λŠ₯ν•œ μ’Œμ„μ„ μ°Ύμ•„μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

πŸš„ 톡합 μ˜ˆμ•½ μ‹œμŠ€ν…œ

  • KTX μžλ™ μ˜ˆμ•½: μ½”λ ˆμΌ μ‹œμŠ€ν…œ μ™„λ²½ 지원
  • SRT μžλ™ μ˜ˆμ•½: SRT μ‹œμŠ€ν…œ μ™„λ²½ 지원
  • λ™μ‹œ 닀쀑 검색: μ—¬λŸ¬ μ‹œκ°„λŒ€μ˜ μ—΄μ°¨λ₯Ό λ™μ‹œμ— λͺ¨λ‹ˆν„°λ§

🎯 슀마트 μ˜ˆμ•½

  • μ‹€μ‹œκ°„ μ’Œμ„ 확인: 0.1초 λ‹¨μœ„μ˜ λΉ λ₯Έ μ’Œμ„ 검색
  • μžλ™ μž¬μ‹œλ„: μ˜ˆμ•½ μ‹€νŒ¨ μ‹œ μžλ™μœΌλ‘œ μž¬μ‹œλ„
  • μš°μ„ μˆœμœ„ μ„€μ •: μ„ ν˜Έν•˜λŠ” μ—΄μ°¨ μ’…λ₯˜ 및 μ’Œμ„ νƒ€μž… μ§€μ •
  • μ‹œκ°„λŒ€ λ²”μœ„ μ„€μ •: 좜발/도착 μ‹œκ°„ λ²”μœ„ λ‚΄μ—μ„œ μžλ™ 검색

πŸ’³ νŽΈλ¦¬ν•œ 결제

  • μžλ™ 결제 지원: μΉ΄λ“œ 정보 μž…λ ₯ μ‹œ μ˜ˆμ•½ ν›„ μžλ™ 결제
  • λ³΄μ•ˆ 자격 증λͺ… μ €μž₯: 둜그인 정보와 결제 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ (선택사항)
    • macOS: Keychain에 μ•”ν˜Έν™” μ €μž₯
    • Windows: Windows Credential Locker에 μ•”ν˜Έν™” μ €μž₯
    • Linux: Secret Service API에 μ•”ν˜Έν™” μ €μž₯
  • 결제 확인: 결제 μ „ μ΅œμ’… 확인 단계 제곡

🎨 μ‚¬μš©μž μΉœν™”μ  μΈν„°νŽ˜μ΄μŠ€

  • 직관적인 GUI: PyQt6 기반의 κΉ”λ”ν•˜κ³  ν˜„λŒ€μ μΈ λ””μžμΈ
  • μ‹€μ‹œκ°„ 둜그: μ˜ˆμ•½ μ§„ν–‰ 상황을 μ‹€μ‹œκ°„μœΌλ‘œ 확인
  • 닀크 λͺ¨λ“œ: 눈의 ν”Όλ‘œλ₯Ό μ€„μ΄λŠ” 닀크 λͺ¨λ“œ 지원
  • 크둜슀 ν”Œλž«νΌ: Windows와 macOS λͺ¨λ‘ 지원

πŸ”’ λ³΄μ•ˆ 및 μ•ˆμ •μ„±

  • ν”Œλž«νΌ λ„€μ΄ν‹°λΈŒ λ³΄μ•ˆ μ €μž₯μ†Œ: OS의 λ³΄μ•ˆ μ €μž₯μ†Œλ₯Ό ν™œμš©ν•œ 자격 증λͺ… 관리
    • macOS Keychain, Windows Credential Locker, Linux Secret Service 지원
  • μ•”ν˜Έν™” 톡신: λͺ¨λ“  κ°œμΈμ •λ³΄λŠ” μ•”ν˜Έν™”λ˜μ–΄ 전솑
  • μ„Έμ…˜ 관리: μ•ˆμ „ν•œ 둜그인 μ„Έμ…˜ μœ μ§€
  • μ—λŸ¬ 핸듀링: μ˜ˆμ™Έ 상황에 λŒ€ν•œ μ² μ €ν•œ 처리
  • μ•ˆμ „ν•œ μ’…λ£Œ: μ–Έμ œλ“ μ§€ μ•ˆμ „ν•˜κ²Œ ν”„λ‘œμ„ΈμŠ€ 쀑단 κ°€λŠ₯

πŸš€ λΉ λ₯Έ μ‹œμž‘

πŸ“₯ λ‹€μš΄λ‘œλ“œ

방법 1: μ‹€ν–‰ 파일 λ‹€μš΄λ‘œλ“œ (ꢌμž₯)

κ°€μž₯ κ°„λ‹¨ν•œ λ°©λ²•μž…λ‹ˆλ‹€. λ³„λ„μ˜ μ„€μΉ˜ 없이 λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. Releases νŽ˜μ΄μ§€μ—μ„œ μ΅œμ‹  버전 λ‹€μš΄λ‘œλ“œ
  2. Windows: KTX-SRT-Macro.exe μ‹€ν–‰
  3. macOS: KTX-SRT-Macro.app μ‹€ν–‰

방법 2: μ†ŒμŠ€ μ½”λ“œμ—μ„œ μ‹€ν–‰

개발 ν™˜κ²½μ΄ κ΅¬μΆ•λ˜μ–΄ μžˆκ±°λ‚˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  싢은 경우 μ‚¬μš©ν•©λ‹ˆλ‹€.

사전 μš”κ΅¬μ‚¬ν•­

  • Python 3.10 이상
  • uv νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €

1. uv μ„€μΉ˜

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

2. ν”„λ‘œμ νŠΈ μ„€μ • 및 μ‹€ν–‰

# μ €μž₯μ†Œ 클둠
git clone https://github.com/yourusername/ktx-srt-macro.git
cd ktx-srt-macro

# μ˜μ‘΄μ„± μžλ™ μ„€μΉ˜ 및 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰
uv run python main.py

πŸ’‘ Tip: uv run λͺ…λ Ήμ–΄λŠ” ν•„μš”ν•œ λͺ¨λ“  μ˜μ‘΄μ„±μ„ μžλ™μœΌλ‘œ μ„€μΉ˜ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

πŸ“– μ‚¬μš© 방법

1️⃣ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 및 둜그인

KTX/ITX μ˜ˆμ•½

  1. KTX νƒ­ 선택
  2. μ½”λ ˆμΌ νšŒμ› 아이디/λΉ„λ°€λ²ˆν˜Έ μž…λ ₯
  3. "둜그인 정보 μ €μž₯" 체크 (선택사항)
  4. "μ—΄μ°¨ 검색" λ²„νŠΌ 클릭

SRT μ˜ˆμ•½

  1. SRT νƒ­ 선택
  2. SRT νšŒμ› 아이디/λΉ„λ°€λ²ˆν˜Έ μž…λ ₯
  3. "둜그인 정보 μ €μž₯" 체크 (선택사항)
  4. "μ—΄μ°¨ 검색" λ²„νŠΌ 클릭

πŸ’‘ Tip: "둜그인 정보 μ €μž₯"을 μ²΄ν¬ν•˜λ©΄ λ‹€μŒ μ‹€ν–‰ μ‹œ μžλ™μœΌλ‘œ 둜그인 정보가 μž…λ ₯λ©λ‹ˆλ‹€. λͺ¨λ“  μ •λ³΄λŠ” OS의 λ³΄μ•ˆ μ €μž₯μ†Œμ— μ•”ν˜Έν™”λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€.

2️⃣ 검색 쑰건 μ„€μ •

πŸ“ μΆœλ°œμ—­: μ„œμšΈ
πŸ“ 도착역: λΆ€μ‚°
πŸ“… λ‚ μ§œ: 2025-10-10
⏰ μ‹œκ°„: 09:00 ~ 12:00
πŸ’Ί μ’Œμ„: μΌλ°˜μ‹€

3️⃣ 결제 정보 μž…λ ₯ (선택사항)

μžλ™ 결제λ₯Ό 원할 경우:

  • μΉ΄λ“œλ²ˆν˜Έ (16자리)
  • μΉ΄λ“œ λΉ„λ°€λ²ˆν˜Έ μ•ž 2자리
  • μœ νš¨κΈ°κ°„ (YYMM)
  • 생년월일 (YYMMDD) λ˜λŠ” μ‚¬μ—…μžλ“±λ‘λ²ˆν˜Έ (10자리)
  • "결제 정보 μ €μž₯" 체크 (선택사항)

πŸ” λ³΄μ•ˆ μ•ˆλ‚΄:

  • "결제 정보 μ €μž₯"을 μ²΄ν¬ν•˜λ©΄ 운영체제의 λ³΄μ•ˆ μ €μž₯μ†Œμ— μ•”ν˜Έν™”λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€
  • macOSλŠ” Keychain, WindowsλŠ” Credential Lockerλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€
  • ν‰λ¬ΈμœΌλ‘œ νŒŒμΌμ— μ €μž₯λ˜μ§€ μ•ŠμœΌλ©°, λ‹€λ₯Έ μ•±μ—μ„œ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€

4️⃣ μ˜ˆμ•½ μ‹œμž‘

  1. "μ˜ˆμ•½ μ‹œμž‘" λ²„νŠΌ 클릭
  2. μ‹€μ‹œκ°„ λ‘œκ·Έμ—μ„œ μ§„ν–‰ 상황 확인
  3. μ’Œμ„ 발견 μ‹œ μžλ™ μ˜ˆμ•½ μ§„ν–‰
  4. 결제 정보 μž…λ ₯ μ‹œ μžλ™ 결제 μ™„λ£Œ

5️⃣ μ˜ˆμ•½ μ™„λ£Œ

βœ… μ˜ˆμ•½ 성곡!
🎫 μ—΄μ°¨: KTX-101
πŸ• 좜발: 09:00
πŸ“ 경둜: μ„œμšΈ β†’ λΆ€μ‚°
πŸ’Ί μ’Œμ„: 3호차 12A

πŸ› οΈ 개발자 κ°€μ΄λ“œ

πŸ§ͺ ν…ŒμŠ€νŠΈ μ‹€ν–‰

ν”„λ‘œμ νŠΈλŠ” 포괄적인 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

# λͺ¨λ“  ν…ŒμŠ€νŠΈ μ‹€ν–‰
uv run pytest tests/ -v

# ν…ŒμŠ€νŠΈ 컀버리지 포함
uv run pytest tests/ -v --cov=src --cov-report=html

# νŠΉμ • ν…ŒμŠ€νŠΈλ§Œ μ‹€ν–‰
uv run pytest tests/unit/ -v                    # λ‹¨μœ„ ν…ŒμŠ€νŠΈλ§Œ
uv run pytest tests/integration/ -v             # 톡합 ν…ŒμŠ€νŠΈλ§Œ
uv run pytest tests/ -k "external" -v           # μ™ΈλΆ€ λͺ¨λ“ˆ ν…ŒμŠ€νŠΈλ§Œ

컀버리지 λ¦¬ν¬νŠΈλŠ” htmlcov/index.htmlμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

CI/CD: λͺ¨λ“  Push와 Pull Request에 λŒ€ν•΄ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

  • 3개 OS (Ubuntu, Windows, macOS)
  • 3개 Python 버전 (3.11, 3.12, 3.13)
  • 총 9개 μ‘°ν•©μ—μ„œ ν…ŒμŠ€νŠΈ

πŸ“¦ 독립 μ‹€ν–‰ 파일 λΉŒλ“œ

λ‘œμ»¬μ—μ„œ λΉŒλ“œ

Windows

# μ˜μ‘΄μ„± μ„€μΉ˜
uv sync

# λΉŒλ“œ μ‹€ν–‰
uv run pyinstaller --name KTX-SRT-Macro --onefile --windowed \
  --icon "assets/favicon.ico" --add-data "src;src" --add-data "assets;assets" \
  --noupx main.py

macOS

# μ˜μ‘΄μ„± μ„€μΉ˜
uv sync

# λΉŒλ“œ μ‹€ν–‰
uv run pyinstaller --name KTX-SRT-Macro --onefile --windowed \
  --icon "assets/favicon.icns" --add-data "src:src" --add-data "assets:assets" main.py

λΉŒλ“œλœ μ‹€ν–‰ νŒŒμΌμ€ dist/ 디렉토리에 μƒμ„±λ©λ‹ˆλ‹€.

GitHub Actions μžλ™ λΉŒλ“œ 및 릴리슀

버전 νƒœκ·Έλ₯Ό ν‘Έμ‹œν•˜λ©΄ μžλ™μœΌλ‘œ Windows와 macOS용 μ‹€ν–‰ νŒŒμΌμ„ λΉŒλ“œν•˜κ³  릴리슀λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€:

# μƒˆ 버전 νƒœκ·Έ 생성 (Semantic Versioning ν˜•μ‹)
git tag v1.0.0

# νƒœκ·Έ ν‘Έμ‹œ
git push origin v1.0.0

# GitHub Actionsκ°€ μžλ™μœΌλ‘œ:
# 1. Windows와 macOS용 μ‹€ν–‰ 파일 λΉŒλ“œ
# 2. μžλ™ 릴리슀 λ…ΈνŠΈ 생성
#    - 이전 릴리슀 이후 λ³€κ²½ 사항
#    - λ‹€μš΄λ‘œλ“œ κ°€μ΄λ“œ
#    - κΈ°μ—¬μž λͺ©λ‘
# 3. GitHub Releases νŽ˜μ΄μ§€μ— 릴리슀 생성
# 4. λΉŒλ“œλœ μ‹€ν–‰ 파일 μžλ™ μ—…λ‘œλ“œ

πŸ“Œ μ°Έκ³ :

  • νƒœκ·ΈλŠ” λ°˜λ“œμ‹œ v*.*.* ν˜•μ‹μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€ (예: v1.0.0, v2.1.3)
  • 릴리슀 λ…ΈνŠΈλŠ” 이전 νƒœκ·Έμ™€ λΉ„κ΅ν•˜μ—¬ μžλ™μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€
  • 첫 번째 릴리슀의 경우 전체 컀밋 νžˆμŠ€ν† λ¦¬κ°€ ν¬ν•¨λ©λ‹ˆλ‹€

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

ν”„λ‘œμ νŠΈλŠ” 클린 μ•„ν‚€ν…μ²˜ 원칙에 따라 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

ktx-srt-macro/
β”‚
β”œβ”€β”€ πŸ“‚ src/                          # μ†ŒμŠ€ μ½”λ“œ 루트
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ constants/                # μƒμˆ˜ 및 μ„€μ •
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ stations.py              # κΈ°μ°¨μ—­ 정보
β”‚   β”‚   └── ui.py                    # UI κ΄€λ ¨ μƒμˆ˜
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ domain/                   # 도메인 λ ˆμ΄μ–΄ (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직)
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ models/               # 도메인 λͺ¨λΈ
β”‚   β”‚   β”‚   β”œβ”€β”€ entities.py          # 핡심 μ—”ν‹°ν‹° (Train, Passenger λ“±)
β”‚   β”‚   β”‚   └── enums.py             # μ—΄κ±°ν˜• (TrainType, SeatType λ“±)
β”‚   β”‚   └── πŸ“‚ services/             # 도메인 μ„œλΉ„μŠ€
β”‚   β”‚       └── train_service.py     # κΈ°μ°¨ μ˜ˆμ•½ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ infrastructure/           # μΈν”„λΌμŠ€νŠΈλŸ­μ²˜ λ ˆμ΄μ–΄
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ adapters/             # μ™ΈλΆ€ μ„œλΉ„μŠ€ μ–΄λŒ‘ν„°
β”‚   β”‚   β”‚   β”œβ”€β”€ ktx_service.py       # KTX μ„œλΉ„μŠ€ μ–΄λŒ‘ν„°
β”‚   β”‚   β”‚   └── srt_service.py       # SRT μ„œλΉ„μŠ€ μ–΄λŒ‘ν„°
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ external/             # μ™ΈλΆ€ API ν΄λΌμ΄μ–ΈνŠΈ
β”‚   β”‚   β”‚   β”œβ”€β”€ ktx.py               # μ½”λ ˆμΌ API ν΄λΌμ΄μ–ΈνŠΈ
β”‚   β”‚   β”‚   └── srt.py               # SRT API ν΄λΌμ΄μ–ΈνŠΈ
β”‚   β”‚   └── πŸ“‚ security/             # λ³΄μ•ˆ 인프라
β”‚   β”‚       β”œβ”€β”€ credential_storage.py # 자격 증λͺ… μ €μž₯μ†Œ (DAO)
β”‚   β”‚       └── dto.py               # λ³΄μ•ˆ DTO
β”‚   β”‚
β”‚   └── πŸ“‚ presentation/             # ν”„λ ˆμ  ν…Œμ΄μ…˜ λ ˆμ΄μ–΄ (UI)
β”‚       └── qt.py                    # PyQt6 GUI μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”‚
β”œβ”€β”€ πŸ“‚ assets/                       # λ¦¬μ†ŒμŠ€ 파일
β”‚   β”œβ”€β”€ favicon.ico                  # Windows μ•„μ΄μ½˜
β”‚   └── favicon.icns                 # macOS μ•„μ΄μ½˜
β”‚
β”œβ”€β”€ πŸ“‚ .github/                      # GitHub μ„€μ •
β”‚   └── πŸ“‚ workflows/                # CI/CD νŒŒμ΄ν”„λΌμΈ
β”‚       └── build.yml                # μžλ™ λΉŒλ“œ μ›Œν¬ν”Œλ‘œμš°
β”‚
β”œβ”€β”€ πŸ“„ main.py                       # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ§„μž…μ 
β”œβ”€β”€ πŸ“„ pyproject.toml                # ν”„λ‘œμ νŠΈ 메타데이터 및 μ˜μ‘΄μ„±
β”œβ”€β”€ πŸ“„ .gitignore                    # Git μ œμ™Έ 파일
└── πŸ“„ README.md                     # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ”§ 기술 μŠ€νƒ

Core

  • Python ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • PyQt6 GUI ν”„λ ˆμž„μ›Œν¬
  • uv νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €

Libraries

  • requests - HTTP ν΄λΌμ΄μ–ΈνŠΈ
  • curl-cffi - TLS μ§€λ¬Έ 우회
  • cryptography - μ•”ν˜Έν™”
  • pycryptodome - μΆ”κ°€ μ•”ν˜Έν™” κΈ°λŠ₯
  • keyring - ν”Œλž«νΌ λ³΄μ•ˆ μ €μž₯μ†Œ

Build & Deploy

  • PyInstaller - μ‹€ν–‰ 파일 λΉŒλ“œ
  • GitHub Actions - CI/CD μžλ™ν™”

Architecture

  • Clean Architecture
  • Domain-Driven Design
  • Repository Pattern

πŸ” λ³΄μ•ˆ 및 κ°œμΈμ •λ³΄ 보호

πŸ›‘οΈ λ³΄μ•ˆ μ •μ±…

  • ν”Œλž«νΌ λ„€μ΄ν‹°λΈŒ λ³΄μ•ˆ μ €μž₯μ†Œ:
    • macOS의 Keychain, Windows의 Credential Locker, Linux의 Secret Service API μ‚¬μš©
    • 운영체제 μˆ˜μ€€μ˜ μ•”ν˜Έν™”λ‘œ 자격 증λͺ… 보호
    • λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ ‘κ·Ό 차단
  • μ•”ν˜Έν™” 전솑: λͺ¨λ“  κ°œμΈμ •λ³΄λŠ” HTTPSλ₯Ό 톡해 μ•”ν˜Έν™”λ˜μ–΄ μ „μ†‘λ©λ‹ˆλ‹€
  • 파일 μ €μž₯ μ—†μŒ: 자격 증λͺ…을 평문 파일둜 μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
  • 선택적 μ €μž₯: "정보 μ €μž₯" μ˜΅μ…˜μ„ ν•΄μ œν•˜λ©΄ 정보가 μ €μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
  • μ„Έμ…˜ λ³΄μ•ˆ: μ•ˆμ „ν•œ μ„Έμ…˜ 관리λ₯Ό 톡해 무단 μ•‘μ„ΈμŠ€λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€

πŸ”’ λ³΄μ•ˆ μ €μž₯μ†Œ μž‘λ™ 방식

  1. μ €μž₯ μ‹œ: "정보 μ €μž₯"을 μ²΄ν¬ν•˜λ©΄ OS의 λ³΄μ•ˆ μ €μž₯μ†Œμ— μ•”ν˜Έν™”λ˜μ–΄ μ €μž₯
  2. 뢈러였기: λ‹€μŒ μ‹€ν–‰ μ‹œ λ³΄μ•ˆ μ €μž₯μ†Œμ—μ„œ μžλ™μœΌλ‘œ λ³΅ν˜Έν™”ν•˜μ—¬ λ‘œλ“œ
  3. μ‚­μ œ: "정보 μ €μž₯" 체크 ν•΄μ œ ν›„ λ‘œκ·ΈμΈν•˜λ©΄ λ³΄μ•ˆ μ €μž₯μ†Œμ—μ„œ μ‚­μ œ

⚠️ μ£Όμ˜μ‚¬ν•­

  • 곡용 μ»΄ν“¨ν„°μ—μ„œλŠ” "정보 μ €μž₯" μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ λ§ˆμ„Έμš”
  • ν”„λ‘œκ·Έλž¨ μ‚¬μš© ν›„ λ°˜λ“œμ‹œ λ‘œκ·Έμ•„μ›ƒν•˜μ„Έμš”
  • μ˜μ‹¬μŠ€λŸ¬μš΄ μ˜ˆμ•½ 내역은 μ¦‰μ‹œ ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—μ„œ ν™•μΈν•˜μ„Έμš”
  • 자격 증λͺ…을 μ‚­μ œν•˜λ €λ©΄ μ²΄ν¬λ°•μŠ€λ₯Ό ν•΄μ œν•˜κ³  λ‹€μ‹œ λ‘œκ·ΈμΈν•˜μ„Έμš”

❓ FAQ (자주 λ¬»λŠ” 질문)

Q1. μ˜ˆμ•½μ΄ μ‹€νŒ¨ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?
  • μ’Œμ„μ΄ λ§€μ§„λ˜μ—ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€
  • 둜그인 μ„Έμ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€ (재둜그인 ν•„μš”)
  • λ„€νŠΈμ›Œν¬ 연결이 λΆˆμ•ˆμ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€
  • μž…λ ₯ν•œ 정보가 잘λͺ»λ˜μ—ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€
Q2. μΉ΄λ“œ 정보λ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ λ˜λ‚˜μš”?

λ„€, μΉ΄λ“œ μ •λ³΄λŠ” μ„ νƒμ‚¬ν•­μž…λ‹ˆλ‹€. μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ μ˜ˆμ•½κΉŒμ§€λ§Œ μ§„ν–‰λ˜κ³ , μ‚¬μš©μžκ°€ 직접 ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—μ„œ 결제λ₯Ό μ™„λ£Œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Q3. μ—¬λŸ¬ μ‹œκ°„λŒ€λ₯Ό λ™μ‹œμ— 검색할 수 μžˆλ‚˜μš”?

ν˜„μž¬ λ²„μ „μ—μ„œλŠ” μ§€μ •λœ μ‹œκ°„ λ²”μœ„ λ‚΄μ˜ λͺ¨λ“  μ—΄μ°¨λ₯Ό 순차적으둜 κ²€μƒ‰ν•©λ‹ˆλ‹€. μ›ν•˜λŠ” μ‹œκ°„λŒ€λ₯Ό λ²”μœ„λ‘œ μ„€μ •ν•˜λ©΄ ν•΄λ‹Ή λ²”μœ„ λ‚΄μ—μ„œ κ°€μž₯ λΉ λ₯΄κ²Œ μ˜ˆμ•½ κ°€λŠ₯ν•œ μ’Œμ„μ„ μ°ΎμŠ΅λ‹ˆλ‹€.

Q4. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜μ§€ μ•Šμ•„μš”.

Windows: Windows Defenderλ‚˜ λ°±μ‹  ν”„λ‘œκ·Έλž¨μ΄ 차단할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹ λ’°ν•  수 μžˆλŠ” μ•±μœΌλ‘œ μΆ”κ°€ν•˜μ„Έμš”.

macOS: "ν™•μΈλ˜μ§€ μ•Šμ€ 개발자" 였λ₯˜ λ°œμƒ μ‹œ:

  1. μ‹œμŠ€ν…œ ν™˜κ²½μ„€μ • > λ³΄μ•ˆ 및 κ°œμΈμ •λ³΄ 보호
  2. "확인 없이 μ—΄κΈ°" 클릭
Q5. μ˜ˆμ•½ 속도λ₯Ό 더 λΉ λ₯΄κ²Œ ν•  수 μžˆλ‚˜μš”?

ν”„λ‘œκ·Έλž¨μ€ 이미 μ΅œμ ν™”λœ 검색 μ£ΌκΈ°λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ„ˆλ¬΄ λΉ λ₯Έ μš”μ²­μ€ μ„œλ²„ μΈ‘μ—μ„œ 차단될 수 μžˆμ–΄ μ μ ˆν•œ κ°„κ²©μœΌλ‘œ μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

Q6. μ €μž₯된 μ •λ³΄λŠ” μ•ˆμ „ν•œκ°€μš”?

λ„€, 맀우 μ•ˆμ „ν•©λ‹ˆλ‹€:

  • macOS: Keychain에 μ €μž₯ (Mac λΉ„λ°€λ²ˆν˜Έλ‘œ 보호)
  • Windows: Credential Locker에 μ €μž₯ (Windows κ³„μ •μœΌλ‘œ 보호)
  • Linux: Secret Service API에 μ €μž₯ (μ‹œμŠ€ν…œ μ•”ν˜Έν™”)

λͺ¨λ“  μ •λ³΄λŠ” 운영체제 μˆ˜μ€€μ—μ„œ μ•”ν˜Έν™”λ˜λ©°, λ‹€λ₯Έ μ•±μ—μ„œ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€. 평문 파일둜 μ €μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Q7. μ €μž₯된 정보λ₯Ό μ‚­μ œν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?
  1. 각 μ„Ήμ…˜μ˜ "정보 μ €μž₯" μ²΄ν¬λ°•μŠ€λ₯Ό ν•΄μ œ
  2. 둜그인 λ˜λŠ” μ˜ˆμ•½ μ§„ν–‰
  3. μ²΄ν¬λ°•μŠ€κ°€ ν•΄μ œλœ μƒνƒœμ—μ„œ μ €μž₯μ†Œμ˜ 정보가 μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€

λ˜λŠ” 운영체제의 λ³΄μ•ˆ μ €μž₯μ†Œμ—μ„œ 직접 μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • macOS: Keychain Access μ•±μ—μ„œ "KTX-SRT-Macro" ν•­λͺ© μ‚­μ œ
  • Windows: 자격 증λͺ… κ΄€λ¦¬μžμ—μ„œ "KTX-SRT-Macro" ν•­λͺ© μ‚­μ œ

πŸ› 문제 ν•΄κ²°

일반적인 였λ₯˜

문제 ν•΄κ²° 방법
둜그인 μ‹€νŒ¨ 아이디/λΉ„λ°€λ²ˆν˜Έ 확인, ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—μ„œ 직접 둜그인 ν…ŒμŠ€νŠΈ
λ„€νŠΈμ›Œν¬ 였λ₯˜ 인터넷 μ—°κ²° 확인, λ°©ν™”λ²½ μ„€μ • 확인
μ„Έμ…˜ 만료 ν”„λ‘œκ·Έλž¨ μž¬μ‹œμž‘ ν›„ λ‹€μ‹œ 둜그인
결제 μ‹€νŒ¨ μΉ΄λ“œ 정보 μž¬ν™•μΈ, μΉ΄λ“œμ‚¬ 승인 μƒνƒœ 확인

둜그 확인

문제 λ°œμƒ μ‹œ μ‹€μ‹œκ°„ 둜그 창에 ν‘œμ‹œλ˜λŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό ν™•μΈν•˜μ„Έμš”. λŒ€λΆ€λΆ„μ˜ λ¬Έμ œλŠ” 둜그λ₯Ό 톡해 원인을 νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🀝 κΈ°μ—¬ν•˜κΈ°

ν”„λ‘œμ νŠΈμ— κΈ°μ—¬ν•˜κ³  μ‹ΆμœΌμ‹ κ°€μš”? ν™˜μ˜ν•©λ‹ˆλ‹€!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.

μ˜€ν”ˆμ†ŒμŠ€ λΌμ΄μ„ μŠ€ κ³ μ§€

이 ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈμ˜ μ½”λ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€:

  • SRT by ryanking13 - MIT License
  • korail2 by carpedm20 - BSD License

각 λΌμ΄μ„ μŠ€μ˜ 전문은 ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ˜ μ €μž₯μ†Œμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ž 문의

ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ˜μ‚¬ν•­μ΄ μžˆμœΌμ‹œλ©΄ Issues νŽ˜μ΄μ§€λ₯Ό μ΄μš©ν•΄μ£Όμ„Έμš”.


⭐ 이 ν”„λ‘œμ νŠΈκ°€ 도움이 λ˜μ—ˆλ‹€λ©΄ Starλ₯Ό λˆŒλŸ¬μ£Όμ„Έμš”! ⭐

Made with ❀️ by developers, for travelers

About

ktx srt reservation assistant

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published