본문 바로가기
IT 개발 이야기/Python

Python에서 Enum과 namedtuple로 데이터 관리: random.choice로 랜덤 선택하기

by 개발자 Aiden 2023. 9. 9.
반응형

이번 글에서는 Python의 Enum과 namedtuple을 활용하여 데이터를 효율적으로 관리하는 방법을 소개합니다. 특히, 웹 자동화나 스크래핑 작업에서 여러 계정을 랜덤하게 선택하는 실제 사례를 중심으로 설명하겠습니다. 또한, 이전에 작성한 네이버 로그인 자동화 코드를 개선하는 방법도 함께 알아보겠습니다.

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을 활용하여 데이터를 효율적으로 관리하는 방법과 실제 코드에 어떻게 적용할 수 있는지를 알아보았습니다. 다음 글에서는 더 다양한 자동화 기법을 소개할 예정입니다.

반응형

댓글


loading