IT/python 52

Loguru를 활용한 파이썬 로깅 시스템 정리: 중앙 설정 방식 연구

파이썬 프로젝트의 복잡한 로그 관리를 Loguru 중앙 설정 방식으로 해결하는 방법을 정리했습니다. 멀티프로세스 환경에서도 충돌 없는 안전한 로깅, 레벨별 파일 분리, JSON 출력까지, 실전 예제 코드도 함께 보세요. 파이썬 프로젝트를 진행하면서 print()를 사용한 디버깅에서 벗어나 체계적인 로그 관리의 필요성을 느끼게 되었습니다. 특히 여러 모듈과 프로세스에서 동시에 로그를 남길 때, 설정이 중복되거나 로그가 충돌하는 등의 문제점을 경험했습니다. 이러한 문제를 해결하기 위해 Loguru 라이브러리의 중앙 설정(log_config.py) 방식을 학습하고 그 내용을 정리해 보았습니다. 이 방식은 프로젝트 로깅 시스템의 구조를 개선하는 데 유용한 접근법이라고 생각합니다. 중앙 설정 파일 log_conf..

IT/python 2025.09.16

Linux 네트워크 패킷 관리의 핵심: sk_buff 구조체와 메모리 레이아웃

sk_buff는 Linux 커널에서 네트워크 패킷을 표현하는 핵심 데이터 구조로, netdev_alloc_skb, skb_reserve, skb_put 함수를 통해 메모리 레이아웃이 동적으로 관리됩니다. 이 글에서는 네트워크 드라이버 개발자에게 필수적인 sk_buff를 할당하는 3형제를 소개합니다..1. sk_buff 의 세 가지 할당 단계1) netdev_alloc_skb() 실행 후head(0), data(0), tail(0), end(68) 포인터 초기화68바이트 전체가 사용 가능한 빈 버퍼 생성2) skb_reserve(2) 적용데이터 시작 위치를 2바이트로 설정(data=2)패킷 헤더 공간 확보를 위한 전형적인 작업3) skb_put(64) 실행64바이트 데이터 추가로 tail 포인터 66으로 ..

IT/python 2025.04.17

Valkey vs Redis: 2024 오픈소스 인메모리 DB 선택 가이드 및 기능 비교

Redis의 라이선스 변경 이후, 오픈소스 기반의 대안 DB를 찾는 움직임이 활발해졌고, 그 중심에 Valkey가 있습니다.이 글에서는 Redis와 Valkey의 기능, 사용 환경, 클라우드 지원, AI 확장성, 라이선스 구조를 비교하고, 실제 사용 시 어떤 선택이 적합한지 안내합니다.🚀 Redis의 라이선스 변화와 Valkey의 탄생 배경Redis는 2023년부터 라이선스를 RSAL/BSL 형태로 변경하면서, SaaS 환경이나 클라우드 제품에서의 자유로운 사용에 제약이 생겼습니다.이로 인해 기업과 커뮤니티에서는 기존과 동일한 API·구조를 유지하면서도 오픈소스 철학을 지키는 대안이 필요해졌고, 그 결과 Redis 7.2.4를 기반으로 한 Valkey가 Linux Foundation 주도로 등장했습니다..

IT/python 2025.03.27

[python3][one-liner] 섹션 헤더 없는 설정 파일 값 바꾸기

기록용으로 남깁니다.A=B 형태의 설정파일이고, REMOTE_ADDR 이란 변수가 있으며, 섹션 헤더는 없는 경우에 한줄로 원하는 값으로 바꾸는 명령을 소개합니다.참고로 ssh_config 파일 내용은 다음과 같습니다.REMOTE_ADDR=1.2.3.4바꾸고 싶은 값은 val='1' 에서 수정하고 파일명은 f='ssh_config' 에서 수정하도록 합니다.결과물!!python3 -c "val='1';from configparser import ConfigParser;f='ssh_config';c=ConfigParser();c.optionxform=str;c.read_string('[sec]\n'+open(f,'r').read());c['sec']['REMOTE_ADDR']=val;open(f,'w').w..

IT/python 2024.12.19

윈도우 디펜더에서 바이러스라며 pyinstaller 로 생성한 exe 막는 문제

윈도우에는 기본적으로 윈도우 디펜더라는 백신이 설치되어 있습니다.pyinstaller 로 생성한 exe 실행파일이 디펜더에게 바이러스라며 실행이 차단 당하는 문제를 겪었습니다.os 는 윈도우 11 이었습니다.pyinstaller 에는 bootloader 라는 개념이 있습니다.bootloader 는 os 의 그것과는 다르게 미리 컴파일된 특정 플랫폼 전용 라이브러리를 포함시킨 바이너리입니다.bootloader 가 지정되지 않은 pyinstaller 는 관련한 패키지나 소스를 내려받아 이를 빌드하는 구조입니다.pip 로 설치한 pyinstaller 로 생성된 exe 는 특정 플랫폼 전용이 아닌 범용이고 다운로드를 높은 확률로 시도할텐데 이를 백신이 바이러스로 판단하는 것으로 추정됩니다. 이것을 어떻게 구축해..

IT/python 2024.05.27

[python3] windows10 에서 pyenv + poetry 환경 구축하기

기록용으로 남깁니다.Win + X 키를 눌러 터미널을 관리자 권한으로 실행권한 설정powershell 이 실행된 상태에서 아래 명령 입력. 이 것 실행 없이 실치 시도하면 '보안 오류' 발생함. 스크립트를 실행할 수 없다고 함Set-ExecutionPolicy RemoteSignedpyenv 설치 명령 입력Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"pyenv 실행 확인설치 했더니.. 실행을 못하네?이..

IT/python 2024.05.03

[python3] 윈도우에서 한줄 실행하는 방법

python3 -c 'import os; print(os.environ)' 이 명령을 리눅스에서 실행할 때에는 다른 os 에서는 실행이 안 될지는 몰랐습니다. 잘 실행됬었으니까요.. 하지만 윈도우에서 실행하면 SyntaxError: EOL while scanning string litteral 이라는 오류가 발생합니다. 윈도우라고 안 될리는 없을텐데.. 하며 여러번 명령들을 바꿔가며 실패만 거듭하다가 포기할 즈음에 설마 윈도우는 따옴표를 가리나? 하는 생각에 큰 따옴표로 감싸봤습니다. 그러니... 잘 되네요!! 작은 따옴표 ' 와 큰 따옴표 " 모두 혼용할 수 있는 리눅스와 달리 윈도우에서는 -c 옵션으로 cli 상의 한 줄 명령을 주려면 반드시 큰 따옴표 " 로 둘러쌓아야 정상 실행됩니다.

IT/python 2024.02.01

[python3][auto py to exe] 설치해보기

설치 자체는 쉽습니다!!(사실이라면 이런 글도 안썼음..) python3 -m pip install auto-py-to-exe 이렇게 명령 내리면 2.42.0 버전이 설치됩니다(되어야 합니다) 그리고 어렵습니다.. ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. autoit-ripper 1.1.0 requires pefile==2019.4.18, but you have pefile 2023.2.7 which is incompatible. Suc..

IT/python 2024.01.26

[python3] 셸 명령 파싱하기 성능 비교

기존에 파이썬 cpu 온도 얻어오는 코드가 awk 를 두번 돌려서 파싱하는 구조로 되어 있었습니다. vcgencmd measure_temp 명령 결과를 파이썬에서 파싱해도 되는데 뭐가 성능이 더 좋을까 하는 궁금증이 생겼습니다. pi@RPwiznet013:~/wiznet/skp_arhis/app $ python3 Python 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> ret, res = subprocess.getstatusoutput("vcgencmd measure_te..

IT/python 2024.01.05