Briefcase를 활용한 외부 바이너리의 OS별 배포 패키지 생성 가이드
Python 생태계의 패키징 도구인 Briefcase는 직접 관리하지 않는 외부 빌드 결과물(Artifacts)을 가져와 각 운영체제에 최적화된 설치 프로그램으로 변환하는 기능을 제공합니다. 이 방식은 PyInstaller나 py2app 등 다른 도구로 먼저 빌드된 애플리케이션을 MSI, DMG, DEB와 같은 공식 배포 형식으로 래핑할 때 매우 유용합니다.
외부 애플리케이션 패키징의 핵심 개념
...
8월 6일 13:58에 게시됨
Python 기반 Selenium 및 Unittest를 활용한 POM 패턴 자동화 테스트 프레임워크 구축
프레임워크 아키텍처 및 디렉토리 구조
UI 자동화 테스트의 유지보수성과 재사용성을 높이기 위해서는 체계적인 프레임워크 구축이 필수적입니다. 본 가이드에서는 Page Object Model(POM) 디자인 패턴을 적용하여 Selenium과 Unittest 기반의 자동화 테스트 프레임워크를 설계하는 방법을 다룹니다.
프로젝트의 표준 디렉토리 구조는 다음과 같이 구성합니다.
...
8월 6일 07:10에 게시됨
Python IDNA 인코딩 취약점을 활용한 URL 필터링 우회와 SSRF 분석
Python의 표준 라이브러리인 urllib.parse를 활용한 URL 파싱 과정에서 발생할 수 있는 보안 취약점은 상당히 고전적이면서도 강력합니다. 특히 IDNA(Internationalizing Domain Names in Applications) 인코딩 처리 과정에서 특정 유니코드 문자가 ASCII 문자로 변환되는 특성을 이용하면, 서버 측의 URL 필터링 로직을 무력화할 수 있습니다. SUCTF 2019의 'Pythonginx' ...
8월 4일 16:15에 게시됨
루고 P15440 문제 해설
루고 문제에 대한 제 해법입니다.
문제의 핵심은 신호등의 수가 2025개라는 점에서 출발하며, 이때 시간 복잡도가 O(n^2)보다 작은 동적 계획법(DP)을 고려해야 합니다.
각 조작 후 불이 켜진 횟수와 초기 상태 간의 차이를 상태로 설정하면 편리합니다. 첫 번째 조작 후 상태는 0으로 시작합니다. 여기서 dp[i][j]는 (i+1)번째 조작 후 상태 j를 가질 경우의 수를 나타냅 ...
8월 3일 16:20에 게시됨
파이썬에서의 다형성
객체 지향 프로그래밍에서 클래스는 상속 관계를 가질 수 있으며, 자식 클래스 타입의 객체는 부모 클래스 타입으로 간주될 수 있습니다. 이때 부모 클래스에 정의된 메서드가 자식 클래스에서 재정의되었다면, 해당 메서드를 호출했을 때 객체의 실제 타입에 따라 다른 동작을 수행하게 됩니다. 이러한 특성을 다형성(Polymorphism)이라고 합니다.
예를 들어, Human이 ...
8월 3일 12:39에 게시됨
Selenium을 활용한 웹 요청, 응답 및 WebSocket 데이터 캡처
Selenium으로 웹 또는 ElectronJS/Cef 기반 애플리케이션을 테스트할 때, 특정 요소 조작 후 발생하는 네트워크 요청과 그 파라미터가 올바른지 확인해야 하는 경우가 있습니다. 이러한 필요성을 충족하기 위해 Chrome의 성능 로그를 활성화하고 driver.get_log("performance")를 사용하여 요청 정보를 확인할 수 있습니다. 이 과정에서 네트워크 관련 로그를 필터링하고, ...
8월 3일 08:10에 게시됨
Scrapy CrawlSpider 기반 자동 페이지 탐색 및 크롤링 구현
CrawlSpider 클래스 개요
CrawlSpider는 Scrapy의 기본 Spider 클래스를 상속받아 확장된 클래스입니다. 기본 Spider는 start_urls에 정의된 초기 URL만 크롤링하는 데 적합하지만, CrawlSpider는 추출된 링크를 자동으로 따라가며 탐색하는 규칙(Rule) 기반 메커니즘을 제공합니다. 대규모 웹사이트나 페이지네이션이 있는 사이트를 크롤링할 때 매우 효율적입니다.
아 ...
8월 3일 04:47에 게시됨
NumPy 핵심 정리: 배열 생성, 조작, 연산 가이드
1. NumPy 배열(ndarray) 기본 구조
NumPy 배열은 ndarray라고 불리는 다차원 배열 객체입니다. 다음과 같은 두 부분으로 구성됩니다:
실제 데이터
데이터를 설명하는 메타데이터 (차원, 모양, 데이터 타입 등)
2. 배열의 주요 속성
import numpy as np
# 3차원 배열 생성
data = np.array([
[[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7] ...
8월 1일 16:32에 게시됨
Django ORM 모델 계층 완벽 가이드
모델 계층 구축
데이터베이스 연결 설정
Django는 기본적으로 SQLite3를 사용하지만, 시간 필드 처리에 민감하지 않아 일반적으로 다른 데이터베이스를 선택합니다.
가장 흔히 사용되는 MySQL 데이터베이스 연결을 위해 설정 파일을 수정해야 합니다:
# settings.py 설정 변경
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'N ...
8월 1일 14:24에 게시됨
YARL로 URL 다루기: 설치부터 객체 활용까지
YARL 설치 방법
YARL(Yet Another URL Library)은 Python에서 URL을 쉽게 다루기 위한 라이브러리입니다. 다음 두 가지 방법으로 설치할 수 있습니다.
pip을 이용한 간편 설치
터미널에서 다음 명령어를 실행하면 최신 버전의 YARL이 자동으로 설치됩니다.
pip install yarl
이 명령은 PyPI에서 YARL과 함께 필요한 의존성(dependency) 패키지들을 함께 내려받아 설치 ...
8월 1일 14:19에 게시됨