분류 전체보기 1102

[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..

[git] MERGE_HEAD exists 문제 해결하기

문제점 및 증상새로운 브랜치에서 작업하던 것을 상위 브랜치에서 머지한 후, 작업 폴더를 pull 하려는 도중에 다음과 같은 오류를 만나게 되었습니다.$ git pullerror: You have not concluded your merge (MERGE_HEAD exists).hint: Please, commit your changes before merging.fatal: Exiting because of unfinished merge.위와 같이 "error: You have not concluded your merge (MERGE_HEAD exists)." 오류가 발생하였을 때 문제 해결 과정을 정리해 둡니다.해결 과정우선 다음과 같이 머지를 취소합니다.$ git merge --abort이후 pull ..

[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("딕셔..

[javascript] 올바른 IP 주소인지 확인하는 방법

올바른 IP 주소인지 유효성을 검사하는 간단한 javascript 함수를 소개해 드리겠습니다.IPv4 주소 문자열 형식은 0 ~ 255 사이의 숫자 4개가 점으로 구분되어 있어야만 합니다.다음 isValidIP() 함수는 IP 주소 문자열 "nnn.nnn.nnn.nnn"이 올바른 범위 내 주소로 구성되어 있는지 확인합니다.function isValidIP(ipAddress) { // 문자열이 비어있거나 undefined인 경우 if (!ipAddress) { return false; } // 점으로 구분된 부분들로 분리 const parts = ipAddress.split('.'); // IPv4는 반드시 4개의 부분으로 구성되어야 함 if (parts...

[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