Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
Python 프로그래밍Unit 7: 예외처리와 디버깅Topic 4: 안전한 프로그램 만들기

Topic 4: 안전한 프로그램 만들기 🛡️

🎯 학습 목표

지금까지 배운 예외처리와 디버깅을 활용해서 사용자 친화적이고 안전한 프로그램을 만들어요!

  • 사용자 입력을 안전하게 처리하기
  • 프로그램이 멈추지 않도록 설계하기
  • 친절한 에러 메시지 작성하기

🏗️ 안전한 프로그램의 특징

좋은 프로그램은:

  1. 예상치 못한 입력에도 멈추지 않아요
  2. 친절한 안내 메시지를 제공해요
  3. 다시 시도할 기회를 줘요
  4. 데이터를 안전하게 보호해요

💪 실전 예제 1: 안전한 숫자 입력받기

기본 버전 (위험!)

# 문제가 있는 코드 age = int(input("나이를 입력하세요: ")) print(f"당신은 {age}살입니다.")

개선된 버전

def get_age(): while True: try: age = int(input("나이를 입력하세요: ")) if age < 0: print("나이는 음수일 수 없어요!") continue elif age > 150: print("정말 그렇게 나이가 많으신가요? 다시 입력해주세요.") continue return age except ValueError: print("숫자로 입력해주세요!") # 사용하기 age = get_age() print(f"당신은 {age}살입니다.")

🎮 실전 예제 2: 메뉴 선택 시스템

def show_menu(): """안전한 메뉴 시스템""" menu_items = { "1": "게임 시작", "2": "점수 보기", "3": "설정", "4": "종료" } while True: print("\n=== 게임 메뉴 ===") for key, value in menu_items.items(): print(f"{key}. {value}") choice = input("\n메뉴를 선택하세요: ") if choice in menu_items: return choice else: print("잘못된 선택입니다. 1-4 중에서 선택해주세요!") def run_game(): while True: choice = show_menu() if choice == "1": print("게임을 시작합니다! 🎮") # 게임 로직 elif choice == "2": print("현재 점수: 100점 🏆") elif choice == "3": print("설정 메뉴입니다 ⚙️") elif choice == "4": print("게임을 종료합니다. 안녕히 가세요! 👋") break # 프로그램 실행 run_game()

📁 실전 예제 3: 파일 안전하게 다루기

def read_file_safely(filename): """파일을 안전하게 읽는 함수""" try: with open(filename, 'r', encoding='utf-8') as file: content = file.read() return content except FileNotFoundError: print(f"'{filename}' 파일을 찾을 수 없어요.") return None except PermissionError: print(f"'{filename}' 파일을 읽을 권한이 없어요.") return None except Exception as e: print(f"파일을 읽는 중 오류가 발생했어요: {e}") return None def save_file_safely(filename, content): """파일을 안전하게 저장하는 함수""" try: # 백업 먼저 만들기 backup_name = filename + ".backup" # 기존 파일이 있으면 백업 try: with open(filename, 'r', encoding='utf-8') as f: backup_content = f.read() with open(backup_name, 'w', encoding='utf-8') as f: f.write(backup_content) except: pass # 기존 파일이 없으면 백업 안 함 # 새 내용 저장 with open(filename, 'w', encoding='utf-8') as file: file.write(content) print(f"파일이 성공적으로 저장되었어요!") return True except PermissionError: print("파일을 저장할 권한이 없어요.") return False except Exception as e: print(f"파일 저장 중 오류가 발생했어요: {e}") return False

🔒 실전 예제 4: 로그인 시스템

def login_system(): """안전한 로그인 시스템""" # 실제로는 데이터베이스를 사용하지만, 예제를 위해 딕셔너리 사용 users = { "user1": "password123", "admin": "admin456" } max_attempts = 3 attempts = 0 while attempts < max_attempts: try: username = input("사용자 이름: ") password = input("비밀번호: ") if not username or not password: print("사용자 이름과 비밀번호를 모두 입력해주세요!") continue if username in users and users[username] == password: print(f"환영합니다, {username}님! 🎉") return True else: attempts += 1 remaining = max_attempts - attempts if remaining > 0: print(f"로그인 실패. {remaining}번의 기회가 남았습니다.") else: print("로그인 시도 횟수를 초과했습니다. 😔") except KeyboardInterrupt: print("\n로그인을 취소했습니다.") return False except Exception as e: print(f"오류가 발생했습니다: {e}") attempts += 1 return False # 사용 예시 if login_system(): print("프로그램을 시작합니다...") else: print("로그인에 실패했습니다.")

🎯 안전한 프로그래밍 체크리스트

✅ 입력 처리

  • 모든 사용자 입력을 검증하기
  • 범위와 타입 확인하기
  • 재시도 기회 제공하기

✅ 에러 처리

  • 예상 가능한 모든 에러 처리하기
  • 사용자 친화적인 메시지 제공하기
  • 프로그램이 멈추지 않도록 하기

✅ 데이터 보호

  • 중요한 작업 전 백업하기
  • 파일 작업 시 권한 확인하기
  • 민감한 정보 보호하기

💡 퀴즈: 안전한 프로그래밍 이해도 체크

Q1. 왜 while True와 try-except를 함께 사용할까요?

정답:

  • while True: 올바른 입력을 받을 때까지 계속 시도
  • try-except: 잘못된 입력이 들어와도 프로그램이 멈추지 않음
  • 함께 사용하면 사용자가 실수해도 다시 입력할 기회를 줄 수 있어요!

Q2. 파일을 저장할 때 백업을 만드는 이유는?

정답:

  • 저장 중 오류가 발생하면 원본 데이터가 손실될 수 있어요
  • 백업이 있으면 문제가 생겨도 복구할 수 있어요
  • 사용자의 소중한 데이터를 보호하는 것이 중요해요!

✅ 안전한 프로그램 만들기 마스터 체크리스트

✅ 안전한 프로그램 만들기 마스터 체크리스트

🚀 다음 단계

축하합니다! 예외처리와 디버깅을 마스터했어요! 🎉

이제 여러분은:

  • 에러 메시지를 읽고 이해할 수 있어요
  • try-except로 에러를 우아하게 처리할 수 있어요
  • 디버깅으로 버그를 찾고 수정할 수 있어요
  • 안전하고 사용자 친화적인 프로그램을 만들 수 있어요

다음 유닛에서는 파일을 다루는 방법을 배워볼게요! 📁

Last updated on