Backend
-
[병렬 처리] 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(..
-
[TDD] FastAPI에서 pytest 로 단위테스트 하기 - 2. pytest 적용하기Backend/FastAPI 2024. 2. 16. 22:26
필자는 앞서, TDD에 대한 설명을 했다. 이제는 바로 적용해보자 (가상환경): pip install pytest 와 같이, Pytest library를 설치한다. 이후, 1. 구조 2. 명명규칙 만 잘 따르면 금방 진행된다! 1. 구조 구조는 기존의 app 과 같은 선상에 test 폴더를 위치해준다. app > api test > api 꼭 __init__.py 파일을 넣어준다! (넣지 않을 경우 -> ModuleNotFoundError가 발생 ) 2. 명명 규칙 파일 이름 : test_*.py 혹은 *_test.py(python3.8 ver) 형식으로 지정 클래스 명칭: class Test* 형식 클래스 메서드 혹은 함수 명칭 : def test_* 형식 (pytest라는 Librarys는 test...
-
[TDD] FastAPI에서 pytest 로 단위테스트 하기 - 1. 단위 테스트란?Backend/FastAPI 2024. 2. 16. 21:40
필자는, 현재 프로젝트를 진행하며 수정사항이 있을 때 마다 main.py를 구동하여 테스트 하였다. 테스트 코드를 미리 작성하면 편리하다는 것을 알지만,,, 마감이 얼마 남지 않았기에 개발을 후다닥 하였다. 하지만 지금이라도 늦지 않았다 생각하고, 마음먹고 작성해보았다. pytest를 적용하기 앞서, 단위 테스트가 왜 중요한지, 좋은 단위 테스트란 무엇인지 찾아보았다. 단위테스트(Unit Test)를 작성해야 하는 이유 1. 코드 수정 혹은 기능 추가 -> 바로바로 검증 가능 2. 리팩토링 -> 안정성 & 빠른 속도 3. 테스트에 대한 시간과 비용 감소 (ex - db 연결) 우리가 주로 하는 테스트는 과연 좋은 테스트 일까? 만약 100개 넘는 API에, request의 종류가 각 5개씩이라면, 총 5..
-
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..
-
MariaDB 에서 함수 생성하기 - sql 함수 생성 및 적용 방법Backend/SQL(Mariadb_ver) 및 DB 2024. 2. 14. 10:54
현재 프로젝트의 쿼리를 직접 만들면서, 쿼리와 DB에 관해 좀 더 깊이 공부해보고 싶은 생각이 생겼다. 기존 쿼리 속도를 높이는 튜닝도 차차 진행하려고 한다. 그 전에 sql에서도 함수가 존재한다는 사실을 최근에 알게되었고, 이 부분을 공부하여 기록하고자 한다. ※주의해야 할 점 -> DBeaver 같은 데이터베이스 관리도구에서는 function을 만들 수 없다(mariadb 같은 경우) 필자의 경우, HeidiSQL에 접속 -> 데이터베이스 -> 새로생성 -> 저장함수를 순서대로 클릭한다. 클릭을 하면 아래와 같은 화면이 나온다. HeidiSQL은 친절하게도, 옵션, 매개변수, create 코드로 분리되어 있어서, 처음이라도 쉽게 만들 수 있었다. 이름 : 함수 이름 기입 유형 : 함수(결과 반환) 으..
-
4개의 with절과 union all을 사용해서 집계 결과 만들기Backend/SQL(Mariadb_ver) 및 DB 2024. 2. 4. 16:36
필자는 이 전에 다루었던 union all의 원리를 이용해서, with절 여러개를 만들어 하나의 결과로 만드는 쿼리를 만들었다. 그 전에 다루었던 공통 테이블식을 사용하였고, 테이블은 다르지만 지정된 구역의 값의 개수를 count하여 집계하여 보는 것이 나의 목표였다. 1. 현재 날짜, 시간 기준이다. 2. 이상치 혹은 결측치에 대한 값을 집계한다. 3. 만약 이 구역에서 집계된 부분이 0 이면 0으로 결과값이 나타나도록 한다. 위를 만족하는 쿼리를 만들기 위해 5번 정도(?) 수정이 필요했지만, 결국에는 완성되었다. 완성된 쿼리는 아래를 참고하자. WITH all_combinations_alarm AS ( SELECT DISTINCT region, null as area, con_type FROM te..