이번 글에서는 Python의 Enum과 namedtuple을 활용하여 데이터를 효율적으로 관리하는 방법을 소개합니다. 특히, 웹 자동화나 스크래핑 작업에서 여러 계정을 랜덤하게 선택하는 실제 사례를 중심으로 설명하겠습니다. 또한, 이전에 작성한 네이버 로그인 자동화 코드를 개선하는 방법도 함께 알아보겠습니다.
1. Enum과 namedtuple이란?
○ Enum (열거형)
Enum은 Python 3.4 버전부터 표준 라이브러리에 포함되어 있으며, 상수를 효율적으로 관리할 수 있습니다. 예를 들어, 웹 서비스에서 사용자의 권한을 관리할 때 Enum을 활용하면 코드의 가독성과 유지보수성이 크게 향상됩니다. 특히, 여러 상수 값들을 묶어서 관리할 때 유용하게 사용됩니다.
from enum import Enum
class UserRole(Enum):
ADMIN = 'admin'
EDITOR = 'editor'
VIEWER = 'viewer'
# Enum 값 호출
print(UserRole.ADMIN.value) # Output: admin
print(UserRole.EDITOR.value) # Output: editor
# 권한 확인
def check_permission(role):
if role == UserRole.ADMIN:
print("You have full access.")
elif role == UserRole.EDITOR:
print("You can edit content.")
else:
print("You can only view content.")
check_permission(UserRole.ADMIN) # Output: You have full access.
○ namedtuple
namedtuple은 Python의 'collections' 모듈에 있는 튜플의 서브클래스입니다. 예를 들어, 데이터베이스에서 가져온 사용자 정보를 namedtuple로 관리하면 각 필드에 이름을 부여하여 코드의 가독성을 높일 수 있으며, 각 필드에 직접적으로 접근할 수 있습니다.
from collections import namedtuple
UserInfo = namedtuple('UserInfo', ['userid', 'username', 'email'])
user = UserInfo(userid="aday7", username="aiden", email="aday7@tistory.com")
# namedtuple 값 호출
print(user) # Output: UserInfo(userid='aday7', username='aiden', email='aday7@tistory.com')
print(user.username) # Output: aiden
print(user.email) # Output: aday7@tistory.com
# 이메일 변경
updated_user = user._replace(email="aday7@naver.com")
print(updated_user.email) # Output: aday7@naver.com
2. Enum과 namedtuple의 실제 활용: 계정 정보 랜덤 선택
웹 자동화나 스크래핑 작업에서 여러 개의 계정을 랜덤하게 선택해야 하는 경우가 종종 있습니다. 이런 상황에서 Enum과 namedtuple을 활용하면 코드가 훨씬 깔끔해지고 유지보수도 쉬워집니다. 이 섹션에서는 그러한 실제 사례를 중심으로 설명하겠습니다.
○ Enum과 namedtuple로 계정 정보 관리하기
먼저, 여러 개의 계정 정보를 Enum과 namedtuple로 정의합니다.
from enum import Enum
from collections import namedtuple
NaverAccount = namedtuple('NaverAccount', ['id', 'password'])
class NaverAccountEnum(Enum):
ACCOUNT1 = NaverAccount(id="NAVER_ID_1", password="NAVER_PASSWORD_1")
ACCOUNT2 = NaverAccount(id="NAVER_ID_2", password="NAVER_PASSWORD_2")
ACCOUNT3 = NaverAccount(id="NAVER_ID_3", password="NAVER_PASSWORD_3")
○ 랜덤 계정 선택하기
이제 'random.choice' 함수를 사용하여 랜덤하게 계정을 선택합니다.
import random
def get_random_account():
random_choice = random.choice(list(NaverAccountEnum))
return random_choice.value
○ 최종 코드: naver_account.py
이제까지 설명한 내용을 바탕으로 'naver_account.py' 파일에 Enum과 namedtuple을 활용한 최종 코드를 작성해 보겠습니다.
from enum import Enum
from collections import namedtuple
import random
NaverAccount = namedtuple('NaverAccount', ['id', 'password'])
class NaverAccountEnum(Enum):
ACCOUNT1 = NaverAccount(id="NAVER_ID_1", password="NAVER_PASSWORD_1")
ACCOUNT2 = NaverAccount(id="NAVER_ID_2", password="NAVER_PASSWORD_2")
ACCOUNT3 = NaverAccount(id="NAVER_ID_3", password="NAVER_PASSWORD_3")
@classmethod
def get_random_account(cls):
random_choice = random.choice(list(cls))
return random_choice.value
이렇게 작성한 'naver_account.py' 파일은 여러 계정 정보를 효율적으로 관리하고, 필요에 따라 랜덤하게 계정을 선택할 수 있게 해줍니다. 이 코드를 다른 웹 자동화나 스크래핑 프로젝트에도 쉽게 적용할 수 있습니다.
실제 적용 사례: 이전 글의 코드 개선
이전에 작성한 '네이버 로그인 자동화: 보안 캡챠 회피 방법' 글에서는 네이버 로그인을 자동화하는 방법을 다루었습니다. 그 코드에서 계정 정보(ID, PASSWORD)는 하드코딩되어 있었는데, 이번에는 'naver_account.py'에서 작성한 Enum과 namedtuple, 그리고 random.choice를 활용하여 코드를 개선해 보겠습니다.
※ 개선된 코드
from naver_account import NaverAccountEnum
class NaverLoginService():
def login(self):
# 기존 하드코딩된 ID, PASSWORD.
# test_id = "NAVER_ID"
# test_passwd = "NAVER_PASSWORD"
# 랜덤하게 계정 정보를 가져옵니다.
random_account = NaverAccountEnum.get_random_account()
test_id = random_account.id
test_passwd = random_account.password
# 나머지 로그인 로직은 이전 글과 동일합니다.
이렇게 하면 이전에 하드코딩되어 있던 계정 정보를 'naver_account.py'에서 랜덤하게 가져와 사용할 수 있습니다. 이로 인해 코드의 유지보수성과 가독성이 향상됩니다. 이번 글을 통해 Python의 Enum과 namedtuple을 활용하여 데이터를 효율적으로 관리하는 방법과 실제 코드에 어떻게 적용할 수 있는지를 알아보았습니다. 다음 글에서는 더 다양한 자동화 기법을 소개할 예정입니다.
'IT 개발 이야기 > Python' 카테고리의 다른 글
Mac OS에서 Python 환경 구축: 설치, 환경 변수 설정, IntelliJ 연동 (0) | 2023.11.08 |
---|---|
Python & Selenium으로 네이버 로그인 자동화: 보안 캡챠 회피 방법 (32) | 2023.09.09 |
Python으로 Chrome 제어하기: Selenium 및 ChromeDriver 설치부터 기본 사용까지 (4) | 2023.08.19 |
IntelliJ IDEA에서 Python 설치와 환경 설정 가이드: 첫 프로그램까지 (0) | 2023.07.25 |
금융 데이터 분석을 위한 Python 프로그래밍: 주식 및 환율 데이터 수집 방법 (0) | 2023.07.23 |
댓글