반응형

분류 전체보기 93

Python decorator(파이썬 데코레이터) functools.wraps 사용하기 / 디버깅 가능한 데코레이터 작성

데코레이터는 감싼 함수가 실행 되기 전과 후에 다른 코드를 실행 할 수 있게하고, 재사용 가능한 빌딩 블록을 정의하며, 그 빌딩 블록으로 다른 함수의 동작을 변경하거나 확장할 수 있는 python의 유용한 기능입니다. 하지만, 단점이 있다면 디버깅이 어렵고 기존(감싸지는) 함수의 메타데이터를 숨겨버리는 단점이 있습니다. 메타 데이터로써 원래 함수명, docstring, 매개변수 리스트는 클로저(closure)에 의해 숨겨집니다. Meta data를 잃어버리는 데코레이터(Decorator) 아래 코드는 인자로 전달 받은 함수(Python에서 함수는 일급 객체) 의 반환 값을 대문자(uppercase)로 변환하여 반환하는 데코레이터(decorator) 를 작성하고, hello_world 메소드를 데코레이터(..

Python 2023.03.08

PEP-3102 Keyword-Only-Arguments / python method 에서 asterisk(별표) 의미 (*, *args, **kwargs)

안녕하세요. 글쓰는 개발자 입니다. Python 개발을 하다보면 종종 보이는 것이 있습니다. 바로, 흔히들 별표라고 부르는 asterisk, * 입니다. Python 개발자라면 누구나 익히 알고 있듯이 곱셉 연산, unpacking 등에 사용되는 것은 물론, *args / **kwargs와 같이 positional / keword arguments 역할도 할 수 있습니다. 그런데 최근 단순 궁금증으로 FastAPI의 APIRouter 구현을 뜯어보던 중 FastAPI에 작성된 mutiple arguments를 받는 method들은 대부분 arguments로 asterisk (*)를 포함하고 있었습니다. '그림1'과 같이 fastapi/routing.py 파일의 APIRouter Class의 add_api..

Python 2023.03.03

FastAPI, Django, Django REST Framework, Flask 비교 - 어떤 프레임워크를 선택해야 할까?

안녕하세요. 글쓰는 개발자 입니다. 약 2년 간 Django 를 사용했던 제가 이번 신규 프로젝트의 프레임워크로 FastAPI를 선택했습니다. 그 과정에서 여러 고민이 있었는데요. 제가 FastAPI 사용 결정을 내리는 동안 Django 와 어떤 것이 다른 지 정리한 것을 소개합니다. Intro Django Dynamic Website 개발을 위한 Fullstack Web Framework 입니다. Fullstack인 만큼 방대한 기능을 보유하고 있습니다. 내장 ORM과 DB migration 덕분에 model을 쉽게 관리 할 수 있습니다. 또한, 높은 보안성 으로부터 cross-site scripting, SQL injecttion 등의 위험으로부터 안전합니다. Instagram 개발에 사용되었을 정도..

Python 2023.03.01

[2023년 2월 회고] 소스코드 처럼 업무도 모듈화가 되려면... / 오, 나의 Python

안녕하세요. 글쓰는 개발자 입니다. 1월 회고를 2월 중순에 쓰는 바람에 금방 2월 회고를 쓰는 것 같아 시간이 더 빨리 가는 것 처럼 느껴집니다. 1월이 지난 1년 7개월을 돌아보면서 후련하면서 아쉽기도 하고 또 어떤 것을 새롭게 시작해야 할까 고민했던 시간이라면, 2월은 무언가 시작해야 했던 시간이었습니다. 신규 프로젝트를 설계하고 그 과정에서 약간의 깨달음도 있었습니다. 소스 코드는 인터페이스만 바라보지만 사람은 그 너머를 볼 수 있었기 때문에동료들과 원활한 소통도 가능했구나 하는 그런 것들 말이지요. 신규 프로젝트 아키텍처 설계 필요 기술 자료 조사 MLOps 의 ML Engine 쪽을 맡으면서 학습 Metric, 시스템 Log를 수집하는 Pipeline 아키텍처 설계를 마쳤습니다. 생각만큼 쉬운..

[Solved!] m1 macOS tensorflow error / tensorflow.python.framework.errors_impl.NotFoundError: Graph execution error:

m1 macbook에 anaconda를 설치하고 tensorflow 사용 중 발생한 에러를 기록합니다. 1. 환경 - python version : 3.8 - 가상환경 : conda - 설치 과정 conda env list # 가상환경 목록 확인 conda create --name tf python=3.8 # tf라는 이름의 가상환경을 생성하고 python 3.8 사용 conda activate tf # conda 환경 진입 # M1 chip tensorflow 설치 conda install -c apple tensorflow-deps # tensorflow dependencies 설치 python -m pip install tensorflow-macos python -m pip install tenso..

solved! windows python pre-commit error

Windows 환경에서 적용 불가 에러 해결 야심차게 Pre-commit을 잘 적용했고 동료들이 잘 썼지만 변수가 하나 있었습니다. 바로 Windows PC를 사용하는 환경에서는 pre-commit을 제대로 수행 할 수 없었습니다. 원인은 Python PATH 문제 였으며, 해결 방법으로 아래 처럼 pytest 수행 시 entry: 부분에 python path를 직접 넣는 방법이 있었습니다. ... - id: pytest name: pytest entry: C:\\Users\\sobor\\anaconda3\\envs\\venv\\python.exe -m pytest -s ... 하지만 이것은 아니라는 생각이 들었습니다. 각자 local 환경의 python PATH 를 위와 같이 입력하고, .pre-com..

Backend 2023.02.16

python pre-commit Git Hook / flake8 / pytest / PEP8, python pre-commit python path error

안녕하세요. 글쓰는 개발자 입니다. 원활한 협업을 위해 필요한 pre-commit 적용기를 소개합니다. 프로젝트를 리딩하면서 제가 꼭 하고 싶었던 코드 리뷰를 도입하고 실제로 활발히 진행 중입니다. 그런데 로직보다 PEP8에 맞지 않는 code convention check에 많은 시간이 소요된다는 것을 알게 되었습니다. 그래서 예전부터 적용해야겠다고 생각한 Git Hook 을 사용하여 pre-commit을 적용하였고 코드 리뷰 시, 조금 더 코드 구조와 로직에 집중할 수 있게되었습니다. 그럼 python backend (FastAPI) 환경에 어떻게 pre-commit을 적용했는 지 소개하겠습니다. 2023. 2. 16(목) 추가 내용 : 3. Windows 환경에서 적용 불가 에러 해결 (아래 링크)..

Backend 2023.02.15

Docker 환경에서 postgreSQL 설치, backup, restore 하기

안녕하세요. 글쓰는 개발자 입니다. "GNU GPL 2 license"여서 상업용으로 사용할 경우 "소스코드 공개 의무"가 있는 MariaDB 대신 쓸 수 있는 PostgreSQL을 Docker 를 활용해 설치하고 백업 및 복구 방법까지 소개합니다. 본래 docker compose로 작성하는 것이 가장 간편하지만 전체 인프라가 MSA로 구성 될 예정이고 최종적으로 kubenetes 로 관리 할 예정이기에 이런 방식이 굳이 필요하지는 않지만, 사내 docker network 교육 세미나를 위해 단계별로 작업한 내용을 공유합니다. 목차 1. 개발 환경 2. postgreSQL Docker Container 실행 3. DB 생성 4. postgres backup 5. postgres restore 6. doc..

Backend 2023.02.15

[2023년 1월 회고] 1년 7개월, AI 계약 관리 시스템 완성

안녕하세요, 글쓰는 개발자 입니다. 올해 목표 중 하나로 '매주 회고를 작성하는 것'과 과감히 타협하고 '매월 회고를 작성하는 것' 으로 방향을 틀었으나, 벌써 2월 중순이 되어서야 1월 회고를 쓰게 되었습니다. 이번 달 회고는 늦지 않도록 노력해야 할 것 같습니다. 올 1월 회고는 저에게 특별한 의미를 가집니다. 사실상 지난 1년 7개월의 회고라고 봐도 무방합니다. 제가 1년 7개월 동안 개발한 'AI 계약관리 시스템' 이 그랜드 오픈 하였고 오늘 이 시점으로 1개월 동안 사용자들이 잘 쓰고 있는 모습을 보니 감개무량 합니다. 그래서 1월 회고만 예외로 'AI 계약관리 시스템' 프로젝트 회고를 겸하려 합니다. '내가 하는 게 맞나?' 일을 미루거나 하기 싫다는 의미가 아닙니다. 이 프로젝트를 시작했을 ..

[Error] SCRAM authentication requires libpq version 10 or above 해결 / M1 Mac

안녕하세요. 글쓰는 개발자 입니다. 최근 기존 제품의 MSA 화 및 재 개발을 위해 설계를 마치고 그 중 Machine Learning 을 담당하는 Server 를 구축하던 중 발생한 Error 와 해결 과정을 간단히 소개하겠습니다. 요약 1. 에러 : FastAPI Server 를 Container로 띄우는 과정에서 발생 psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above 2. 원인 : m1 based macOS Computer 에서 발생하는 'libpg' error 3. 해결 방법 : Dockerfile 최상단 FROM 영역 '--platform=linux/amd64' 추가 # pull official b..

반응형