[Python] psycopg2에서 ALTER TABLE 실행하는 올바른 방법
·
개발 (Development)/Python
데이터베이스 작업 중 테이블 구조를 변경해야 할 때, ALTER TABLE 명령을 사용하게 됩니다. 하지만 pandas.read_sql_query()로 이 명령을 실행하려고 하면 오류가 발생합니다. 이번 글에서는 그 이유와 함께, psycopg2를 사용해 ALTER TABLE을 올바르게 실행하는 방법을 정리했습니다.1. 왜 pd.read_sql_query()로는 ALTER TABLE이 안 될까?pandas.read_sql_query()는 SELECT 결과를 DataFrame으로 읽어오는 용도로 만들어졌습니다.즉, 쿼리 실행 후 결과 집합을 반환해야 하는데, ALTER TABLE은 반환값이 없습니다.따라서 아래와 같은 에러가 발생합니다.pandas.io.sql.DatabaseError: Execution ..
[Python] requests에서 대량 배열 전송 시 403 오류 해결
·
개발 (Development)/Python
문제 상황Python requests 라이브러리로 API에 PUT/POST 요청을 보낼 때, 배열 길이가 100개를 초과하면 403 Forbidden 오류가 발생했습니다.같은 API를 브라우저 UI나 Postman에서 호출하면 정상 동작했기 때문에, Python에서의 요청 형식에 문제가 있다고 판단했습니다.원인 분석requests 자체 제한 없음: 라이브러리 차원에서 배열 크기나 본문 길이를 제한하지는 않습니다.직렬화 방식 차이: json= 옵션은 기본적으로 ensure_ascii=True, 직렬화 시 공백 포함 → 바디가 불필요하게 길어짐.전송 형식 차이: Content-Length가 명확히 지정되지 않거나 청크드 전송이 되면, 보안 장비(WAF)가 차단할 수 있음.UI와 차이: 브라우저/포스트맨은 항..
[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" 같은 문장은..