프로그래밍/Python 104

[python] CRC-32 검사하기

CRC 검사란 무엇인가요?CRC(Cyclic Redundancy Check)는 디지털 네트워크와 저장 장치에서 데이터의 무결성을 확인하는 데 사용되는 오류 검출 코드입니다. 주로 데이터 전송 과정에서 발생할 수 있는 오류를 검출하기 위해 사용되며, 신뢰성을 확보하는 중요한 방법 중 하나입니다.CRC 검사는 다항식을 이용하여 데이터 블록에 대한 체크섬을 계산하고, 수신 측에서 동일한 계산을 수행하여 비교하는 방식으로 오류를 감지합니다. 오류가 없는 경우 계산 결과가 일치하며, 오류가 발생한 경우 불일치가 발생하여 데이터를 다시 요청할 수 있습니다.CRC 검사의 기본 개념CRC 검사는 다음과 같은 단계를 통해 수행됩니다:다항식 선택: CRC 검사를 수행하기 위해 특정 다항식을 선택합니다. 예를 들어, CRC..

[python] Flask 단일 프로세스로 실행하기

개요Flask를 디버그 모드로 실행할 때, 동일한 서버에 대한 프로세스가 두 개가 실행됩니다.일반적인 웹 서비스라면 문제가 없는데, 프로세스 내에서 하나의 자원을 다루어야 하는 경우에 충돌이 발생하는 경우가 있습니다.Flask에서 두 개의 프로세스가 실행되는 것이 버그는 아니고 Flask의 변경된 소스를 다시 읽는(Reloader) 기능 때문입니다.이 기능은 개발 중 코드 변경을 감지하여 자동으로 서버를 재시작하는 데 사용됩니다.Flask는 코드 변경을 감지하기 위해 메인 프로세스와 함께 하위 프로세스를 생성하여 코드를 모니터링합니다.하위 프로세스가 동일하게 실행되기 때문에 서버의 초기화 코드가 두 번 실행됩니다. 그래서 하나의 자원을 다루어야 하는 경우 충돌이 발생하게 됩니다.Flask를 두 개의 프로..

[python] 코드가 실행중일 때, 디버깅 중인지 확인하는 방법

개요파이썬으로 만든 코드를 디버깅할 때와 실제 배포하여 실행될 때 서로 다른 동작을 시켜야할 경우가 있습니다. 디버깅할 때는 디버깅을 위하여 보다 상세한 정보를 출력한다던지 성능과 관계없이 디버깅을 위한 부분을 더 추가해 주게 되는데, 실제 실행할 때는 불필요한 부분입니다.이번에는 파이썬 코드가 실행중일 때, 디버깅 중인지 확인하는 방법을 알아 보도록 하겠습니다.sys.gettrace()from sys import gettracedef is_debugging(): return (gettrace() != None)DEBUGPY_RUNNING 환경변수from os import getenvdef is_debugging(): return bool(getenv('DEBUGPY_RUNNING'))pdb ..

[Python] 품질 설정과 함께 이미지를 JPEG로 저장 방법들

개요Python에서 이미지를 품질 (Quality)을 지정하여 JPEG 형식으로 저장하는 여러 가지 방법을 정리해 둡니다.PIL(Python Imaging Library)/Pillowfrom PIL import Image# 이미지 열기img = Image.open('input.png')# JPEG로 저장img.save('output.jpg', format = 'JPEG')# 품질 설정하여 저장 (1-95)img.save('output_quality.jpg', 'JPEG', quality=85)# RGB로 변환 후 저장 (알파 채널이 있는 경우)img_rgb = img.convert('RGB')img_rgb.convert('RGB').save('output_rgb.jpg', 'JPEG')가장 널리 사용되는..

[Python] Flask - Server 헤더 변경하기

개요Python Flask로 웹 애플리케이션을 구현하고, 서버의 응답 헤더를 보면 다음과 같은 형태로 표시됩니다.HTTP/1.1 200 OKServer: Werkzeug/2.2.2 Python/3.11.2Date: Tue, 07 Jan 2025 03:00:59 GMTContent-type: application/json; charset=utf-8Content-Length: 1043Connection: close"Server" 헤더에 Flask 및 Python 버전 정보가 표시됩니다.본 글에서는 보안상의 이유 등으로 "Server" 헤더 정보를 변경하는 방법에 대하여 자세히 살펴 보겠습니다.WSGIRequestHandler.server_version응답의 "Server" 헤더 정보를 변경하는 가장 확실한 ..

[python] "v1.v2.v3.v4" 버전 문자열을 숫자들로 변환하기

개요일반적으로 이용하는 "v1.v2.v3.v4" 버전 문자열에서 각각의 숫자들을 추출하는 방법을 알아 보겠습니다.크게 두 가지(split(), 정규식) 방법으로 추출할 수 있습니다.split() 메소드 이용법간단하게 문자열의 split() 메소드를 이용하여, 버전 문자열의 "." 문자로 나누어서 int 형식으로 변환하면 됩니다.version_str = "1.2.3.4"parts = version_str.split('.')v1, v2, v3, v4 = map(int, parts)직관적이지만 "1.2.3.4a"과 같이 알파벳이 입력된 경우 "ValueError: invalid literal for int() with base 10: '4a'"와 같은 오류가 발생합니다.따라서 올바른 버전 문자열이 입력되었는지..

[Python] 현재 시간대에 대한 OFFSET 시간 (UTC) 구하기

개요파이썬에서 현재 시간대에 대한 OFFSET 시간 정보를 확인하는 방법을 정리해 둡니다.datetime 활용UTC 기준 시각으로부터 현재 시간대에 대한 OFFSET 시간은, 우리 나라의 경우 +9시간입니다. 이 값을 구하는 몇 가지 방법을 간단하게 알아 보겠습니다.첫 번재는 datetime 패키지를 이용한 방법입니다.from datetime import datetimelocal_now = datetime.now()utc_now = datetime.utcnow()offset = local_now - utc_nowprint(f"UTC Offset : {offset} / {offset.seconds / 3600:+.1f} hours")단순하게 현재 시간대의 datetime을 구한다음 UTC 시간대의 date..

[python] dict 객체 복사의 세 가지 방법 : 참조 복사, 얕은 복사, 깊은 복사

개요Python에서 딕셔너리(dict ; dictionary) 객체를 복사할 때 알아야 할 세 가지 복사 방법을 상호 비교 정리해 둡니다.일반 복사 (참조 복사)등호 ('=') 기호를 통하여 딕셔너리 객체의 참조를 다른 변수에 참조만 그대로 복사합니다.따라서 두 객체는 완전히 동일합니다.original_dict = {'a': 1, 'b': [1, 2, 3]}copy_dict = original_dict# 값 변경 시 원본도 함께 변경됨copy_dict['a'] = 10print(original_dict) # {'a': 10, 'b': [1, 2, 3]}print("원본 딕셔너리 ID:", id(original_dict))print("참조 복사 딕셔너리 ID:", id(ref_copy))print("딕셔..

[python] struct.error: char format requires a bytes object of length 1

문제점 및 증상struct.pack() 함수를 bytes 데이터 생성 중, "c"로 한 문자를 입력받아 처리하는 과정에서 다음과 같은 오류가 발생하였습니다.pack('>c', 'C')Traceback (most recent call last): File "", line 1, in pack('>c', 'C')struct.error: char format requires a bytes object of length 1문제 분석파이썬 2.x 버전에서는 "pack('>c', 'C')"와 같은 코드가 문제가 없었으나, 3.x 버전으로 올라오면서 동일한 문장에 대하여 "struct.error: char format requires a bytes object of length 1" 오류가 발생합니다.다음과 ..

[python] 명령줄 인자 분석 - argparse.ArgumentParser

파이썬에서 명령줄 파라미터를 처리하는 방법을 알아겠습니다.일반적으로 가장 많이 사용되는 것은 파이썬에 내장된 argparse 모듈입니다. 본 글에서는 argparse 모듈의 ArgumentParser 클래스를 이용하는 방법에 대하여 알아 보도록 하겠습니다.명령줄 인자(Command-Line Arguments)란?프로그램을 실행할 때 프로그램에 전달하는 추가 정보입니다.다음과 같은 형식으로 프로그램 실행 시, 추가적인 정보를 전달합니다.$ my_app hello world 123위에서는 "hello" "world" "123" 등 3개의 정보를 추가로 전달하여 "my_app"을 실행하게 됩니다.파이썬에서는 sys.argv로 위와 같이 전달된 명령줄 인자를 받아서 처리할 수 있습니다.import sysprin..

728x90