[Python] MAU(Monthly Active Users) 계산 방법
·
개발 (Development)/Python
이번 글에서는 텍스트 파일 형태의 사용자 접속 로그를 활용하여 MAU(Monthly Active Users) 를 계산하는 방법을 소개합니다.MAU는 한 달 동안 한 번이라도 활동한 고유 사용자 수를 의미하며, 서비스 이용 현황을 파악하는 데 중요한 지표입니다.1. 데이터 확인저는 다음과 같이 user, ip, event_time 세 컬럼을 가진 로그 파일을 준비했습니다.IP는 보안상 위험이 있을 수 있으므로, 아래 예시에서는 임의의 비공개 대역 IP(192.168.x.x)로 대체하였습니다.useripevent_timeadmin192.168.0.102023-11-08 01:02:17.883guest192.168.0.102023-11-08 01:04:47.914admin192.168.0.112023-11-0..
[Python/Docker] Python Docker 이미지에서 취약점 제거하기 (python:3.9.12-slim 기반)
·
개발 (Development)/Python
Docker로 Python 애플리케이션을 배포할 때, 보안 취약점(CVE)이 포함된 이미지가 생성되는 경우가 종종 있습니다. 특히 python:3.9.12-slim 이미지를 사용할 경우, 다음과 같은 치명적인 취약점들이 감지될 수 있습니다:OpenSSL, zlib, expat, pcre2, kerberos, libtasn1 등 주요 시스템 패키지 관련 CVE대표적으로 CVE-2022-2068, CVE-2022-1586, CVE-2024-45491 등이번 글에서는 해당 취약점들을 제거하기 위한 이미지 최적화 방법을 정리해 보았습니다.사용 환경베이스 이미지: python:3.9.12-slim빌드 플랫폼: linux/amd64취약점 검사 도구: docker scan, Trivy대상 취약점: CRITICAL 등..
[Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법
·
개발 (Development)/Python
Python으로 문자열을 다룰 때, 띄어쓰기를 기준으로 각 단어의 첫 글자를 대문자로 바꾸고 싶은 경우가 있습니다. 예를 들어, "hello world this is python"을 "Hello World This Is Python"처럼 만드는 것이죠.이 글에서는 이를 처리하는 방법 두 가지를 소개해 드리겠습니다.1. str.title() 메서드 사용가장 간단한 방법은 문자열의 title() 메서드를 사용하는 것입니다.text = "hello world this is python"result = text.title()print(result)출력 결과:Hello World This Is Pythontitle()은 문자열 내의 각 단어 첫 글자를 대문자로 변환해 줍니다. 다만 "i'm fine" 같은 문장은..
[Python] 폴더 내 CSV 형식 로그 파일 시각화하기
·
개발 (Development)/Python
시간에 따라 주기적으로 수집된 로그 데이터를 시각화해야 하는 경우가 종종 있습니다. 본 글에서는 여러 날짜 폴더에 저장된 CSV 형식의 로그 파일을 Python으로 읽어 들여, 특정 시간 기준 컬럼을 활용해 관심 있는 데이터를 시간 순으로 시각화하는 방법을 소개드립니다.문제 상황파일은 .csv 또는 유사한 포맷이며, 쉼표로 구분된 텍스트 형식으로 저장됨상위 폴더 아래 YYYYMMDD 형태의 날짜별 폴더가 존재하고, 각 폴더 내에는 5분 간격으로 생성된 로그 파일이 저장됨각 파일의 첫 줄은 컬럼명이 포함되어 있고, 그 아래에는 여러 줄의 데이터가 있음시간 기준은 예를 들어 Timestamp_UTC 같은 컬럼에 저장되어 있으며, 이 값은 UTC(협정 세계시) 기준시각화 대상이 되는 데이터는 예를 들어 Sen..
[Python] requests 요청 후 기다리는 로직과 타임아웃 설정
·
개발 (Development)/Python
Python에서 API 요청을 보낼 때 가장 많이 사용하는 라이브러리 중 하나가 requests입니다. 이 라이브러리를 사용할 때 요청 후 응답을 얼마나 기다리는지에 대한 로직을 이해하고, 타임아웃 설정을 적절히 사용하는 것이 중요합니다.이번 글에서는 requests 라이브러리의 응답 대기 방식과 타임아웃 기본값, 그리고 안정적인 요청 처리를 위한 팁을 정리해보겠습니다.요청을 보낸 후 어떻게 동작할까?requests 라이브러리는 기본적으로 동기(synchronous) 방식으로 작동합니다. 즉, 요청을 보내면 응답이 올 때까지 프로그램 실행을 멈추고 기다립니다.예를 들어 다음과 같은 코드는:import requestsresponse = requests.get("https://example.com")prin..