Python
-
ChatGPT 를 사용한 RAG 구현 교육 및 최근 근황 회고회고 2024. 9. 8. 18:10
AI팀 입사 후 3개월간의 적응기AI팀에 입사하면서, FastAPI를 이용한 백엔드 서비스 개발에 본격적으로 참여하게 되었다.입사후 1주일 동안 현재 서비스가 어떻게 설계되어 있는지(RAG 및 프롬프트) 전반적인 설명을 들었다.팀원들의 설명과 나의 질문들로 이해하는데는 큰 어려움은 없었다.물론 갑자기 대량의 지식들을 흡수하느라 약간은 힘들었지만, 관심있었던 분야이기에 흥미로웠다.그러던 도중 PoC를 위해 조금(?) 바쁘게 API개발을 완료하였고, 뒤돌아보니 벌써 3개월이 지나있었다. RAG 교육을 듣게 된 계기3개월이 막 지난 시점, 현재 서비스에서는 RAG pipeline을 계속해서 개선해야 한다는 것을 인지했다.이미 구축되어 있는 상태에서 중간 중간 찍먹(?) 정도 해본 나는 100% 완벽히 알고 있..
-
[병렬 처리] python multithreading 도입기 (feat.multiprocess 차이)Backend/Python 2024. 2. 23. 15:28
필자는 현재 프로젝트에서 배치작업을 했었는데, 이상치 검증 로직 때문에 배치 시간이 무려 1분이나 되는 것을 발견하였다! 사실은 1분 30초 정도였는데, 구역을 나누어 진행하여 1구역당 50초 정도 소요되었다.하지만, 적재되어 있는 데이터가 늘어날수록, 소요 시간이 더 늘어날 것 같았고, 10분 단위 대시보드 프로젝트에서는 1분 1초가 소중하기 때문에 병렬 처리를 도입하기로 하였다. 먼저, 병렬처리를 하기에 앞서, 항상 언급되는 부분 Multithreading 과 Multiprocessing 에 관해 비교해보자 -> 필자도 항상 머리속에 있다고 생각하지만, 가끔 헷갈리는(?) 부분이라 같이 정리하고자 한다. 그렇다면, 가장 큰 차이점은 무엇일까?바로 Thread 와 Process 이다.나아가 이것은 c..
-
[TDD] FastAPI에서 pytest 로 단위테스트 하기 - 4. pytest 에서 테스트 병렬 수행 및 Html 결과 출력하기Backend/FastAPI 2024. 2. 18. 20:22
필자는 전체 통합 테스트를 하면서, main_test.py의 테스트 케이스가 많아서 시간이 좀 걸리는 것을 발견했다. 이를 관련하여 찾아보다가, pytest 자체적으로 병렬 처리를 하는 라이브러리가 있다는 것을 발견했고, 이를 적용해보았다. 그리고 나아가 결과물을 html로 볼 수 있도록 하는 방법도 같이 적어보도록 하겠다! 1. pytest-xdist 설치 : pip install pytest-xdist 실행방법_1 : pytest -n auto {test파일명}.py 실행방법_2: pytest -n {프로세스 개수} {test파일명}.py main_test.py를 실행했을 때! 저번과 달리 worker수가 등장한다 - > 이때 -n -auto 옵션이기 때문에 cpu 코어 개수에 다라 프로세스 개수를 ..
-
[TDD] FastAPI에서 pytest 로 단위테스트 하기 - 3. pytest 에서 Parameterize 사용법Backend/FastAPI 2024. 2. 18. 17:44
이번에는 본격적으로 테스트 파일을 만들면서, 여러가지 Request를 보내는 Parameterize 사용법에 대해 설명하겠다. 먼저, parameterize란 무엇일까? 테스트 케이스마다 테스트 값을 포함한 테스트 함수를 호출하는 코드도 중복 작성하는 부분이다. @pytest.mark.parametrize(args, argvalues) 데코레이터로 작성하여 테스트 코드를 간결하게 만들 수 있다. (필자의 경우 -> 테스트 값을 포함하지 않았다. - 통신 200이 목적이었기 때문에) 그렇다면, 어떻게 적용했는지 코드를 통해서 보자 import pytest from fastapi.testclient import TestClient from main import start_app app = start_app(..
-
Python에서 @staticmethod, @classmethod, instance method,개념 정리Backend/Python 2024. 2. 16. 11:32
필자는 다른 프로젝트에서 @classmethod를 사용하는 것을 보았다. python에서는 자주 사용하지 않았는데, 이번 기회에 개념을 정리하고 SQLALchemy에 적용하기 위해 알아보았다. 먼저, method에는 크게, instance method, static method, class method가 있는데, 그 중 가장 많이 쓰이는 instance method는 사실 우리가 가장 많이 사용하고 있었다. 먼저, Shape() 라는 클래스를 하나 만들었고, 클래스 변수를 선언했다. -> 클래스 변수는 내외적으로 호출(Shape.cnt) 할 수 있다! class Shape(): # 클래스 변수 cnt = 0 def __init__(self,width,height): self.width = width se..
-
파이썬 SMTP이용하여 email 보내기Backend/Python 2024. 1. 15. 11:13
필자는 프로젝트 중에 각 구역 별로 이상치 & 결측치 발생하는 알림을 이메일 발송하도록 하는 부분이 필요했다. 따라서, SMTP & IMAP 을 이용하였으며, 그 중 파이썬에서 smtplib 라이브러리를 사용하였다. 이 전에 필자는 SMTP와 IMAP에 대한 개념을 잘 몰랐는데, 이번 기회를 통해 정리해보았다. SMTP란? email을 보내는 데 있어서 업계 표준 프로토콜이다. IMAP란? 인터넷 메시지 액세스 프로토콜(IMAP)이며, 이메일을 받는 서버로부터 이메일 메세지를 관리하고 이메일을 꺼내서 가져오는데 사용되는 프로토콜이다. client A가 SMTP를 이용하여 서버로 메일을 보냄 → 그리고 다시 한번 SMTP를 통해 B가 있는 서버와 메일을 주고 받음 - > 마지막으로 B의 서버가 IMAP을 ..
-
배치 파일을 배포하기 위한 스크립트 파일 작성하기Data engineering/Batch&Pipeline 2023. 8. 20. 16:38
필자는 공공 API를 이용(2023년 전/월세 데이터) 하여 빅쿼리에 초기 적재를 하였다. 이것을 aws에 배포하기 위해 실행 파일 = script를 만들었다. (프로젝트에서 참고 해서 만듬!) 먼저, 환경 python이나 requirements.txt를 설치하기 위한 setting.sh를 작성했다. #!/bin/bash echo "- program : batch" echo "- pwd : ${PWD}/${0}" echo "- job : init setting" DIR="$( cd "$( dirname "$0" )" && pwd )" VENV_DIR="${DIR}/.venv" REQUIREMENT_DIR="${DIR}/requirement.txt" if [ -e "$VENV_DIR" ]; then #ec..
-
could not convert string to float: '' - 내가 만난 전처리 errorData engineering/데이터 전처리 2023. 8. 11. 17:37
오픈 API를 이용하여 빅쿼리에 적재하는 도중에 만난 오류인 could not convert string to float: '' 이때는 보통 타입이 일치하지 않아서 나는 경우가 많다. 스키마를 바꾸지 않는게 좋기 때문에 전처리 과정이 필요하다! 필자의 경우, float 자리에 '' -> 빈 문자열이 들어갔기 때문이었다. 따라서 이와 같은 경우 if 문을 통해 처리하였다. data['BEFORE_GRNTY_AMOUNT'] = None if res_json[i]['BEFORE_GRNTY_AMOUNT'] == '' else res_json[i]['BEFORE_GRNTY_AMOUNT'] 빈 문자열일 경우, None으로, 아닐 경우에는 원래 데이터로 ! 또 다른 방법은 빈 문자열이 없다는 가정 하에(불가능 할 것..