GIL(Global Interpreter Lock)
·
프로그래밍 언어/파이썬
python Interpreter GIL 이해를 위해 수행되어야 하는 것은 파이썬 인터프리터의 이해입니다. 파이썬 인터프리터 : 파이썬 문법으로 작성된 코드를 한 줄씩 읽으면서 실행하는 프로그램 파이썬 인터프리터의 표준은 CPython입니다. C언어를 이용하여 구현한 파이썬 인터프리터입니다. GIL(Goloba Interpreter Lock) 전역 인터프리터 락. 위키에서의 정의는 아래와 같음. > In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. This..
데코레이터란?
·
프로그래밍 언어/파이썬
뭐지? 파이썬의 데코레이터는 함수나 메소드의 변환을 위해 사용되는 함수입니다. 데코레이터를 사용하면 기존의 코드를 수정하지 않고도 함수의 기능을 확장하거나 변경할 수 있습니다. 이는 코드의 재사용성을 높이고, 가독성을 향상시키며, 유지보수를 용이하게 합니다. 데코레이터는 @(골뱅이) 기호를 함수 위에 적용하게 됩니다. 데코레이터는 실행시간에 함수를 감싸서(wrap) 실행 전후에 추가적인 코드를 실행할 수 있게 해주며, 이를 통해 함수의 행동을 수정합니다. 기본구조 def my_decorator(func): def wrapper(): # 여기에 함수 호출 전 실행할 코드를 작성합니다. print("함수 호출 전") func() # 여기에 함수 호출 후 실행할 코드를 작성합니다. print("함수 호출 후"..
코루틴이란?
·
프로그래밍 언어/파이썬
파이썬의 코루틴(coroutine)은 동시성 프로그래밍을 가능하게 하는 고급 함수입니다. 코루틴은 서브루틴(subroutine)의 일종으로 생각할 수 있는데, 서브루틴은 특정 작업을 수행하기 위해 프로그램의 실행 흐름을 잠시 중단하고 해당 작업이 완료되면 다시 원래의 실행 흐름으로 돌아오는 함수입니다. 하지만 코루틴은 이보다 더 강력한 기능을 제공합니다. 코루틴은 실행을 중지(suspend)하고 재개(resume)할 수 있는 여러 진입점(entry points)을 가지고 있으며, 이를 통해 함수의 실행 상태를 저장하거나 나중에 다시 실행을 계속할 수 있습니다. 코루틴의 주요 특징: 비동기 실행: 코루틴은 비동기 작업을 쉽게 처리할 수 있게 해주며, 이는 I/O 바운드 작업(파일 읽기/쓰기, 네트워크 요청..
List와 Tuple의 차이
·
프로그래밍 언어/파이썬
개요 리스트와 튜플은 파이썬에서 가장 기본적인 데이터 구조 중 2가지 여러 값을 하나의 변수에 저장 할 수 있게함. 특징 1. 변경 가능성 리스트 변경 가능한 객체 리스트 생성 후 내용을 변경 할 수 있음(추가, 삭제, 변경) 튜플 변경 불가능한 객체 생성 후 내용을 변경 불가 2. 문법적 차이 리스트 대괄호([]) 사용. 예: my_list = [1, 2, 3] my_list = [1, 2, 3] 튜플 소괄호(()) 사용. 예: my_tuple = (1, 2, 3) 소괄호 생략 가능하지만, 단일 항목 튜플은 콤마(,) 필요. 예: single_tuple = (4,) my_tuple = (1, 2, 3) single_tuple = (4,) # 단일 항목 튜플 3. 사용 용도 리스트 요소 변경이 필요한 경..
FastAPI를 이용한 TDD 개발 - 7
·
프로그래밍 언어/파이썬
Heroku 서버에 배포를 해보겠습니다. Gunicorn 프로덕션급 WSGI 서버인 Gunicorn을 사용하려면 먼저 requirements.txt 파일에 라이브러리와 버전을 명시합니다. gunicorn==21.0.1 Gunicorn과 Uvicorn을 함께 사용하는 이유는 동시성과 병렬성의 장점을 모두 활용하기 위해서입니다. Gunicorn은 여러 Uvicorn 프로세스를 동시에 관리하여 이를 달성합니다. Dockerfile.prod 라는 Dockerfile를 새로게 작성해줍니다. # pull official base image FROM python:3.12.1-slim-bookworm # create directory for the app user RUN mkdir -p /home/app # creat..
FastAPI를 이용한 TDD 개발 - 8
·
프로그래밍 언어/파이썬
Code Coverage 코드 커버리지는 테스트 중에 실행되는 코드의 양을 측정한 것입니다. 테스트 스위트에 코드 적용 범위를 추가하면 테스트에서 다루지 않는 코드 영역을 찾을 수 있습니다. Coverage.py 는 Python 기반 애플리케이션에서 코드 적용 범위를 측정하는 데 널리 사용되는 도구입니다. 이제 pytest를 사용하고 있으므로 pytest-cov를 사용하여 Coverage.py를 pytest와 통합하겠습니다 . requirements.txt에 추가적으로 라이브러리와 버전을 작성합니다. pytest-cov==4.1.0 `.coveragerc` 파일을 이용하여 coverage report 를 수정 할 수 있습니다. project 디렉토리에 추가해주도록 합니다. [run] omit = test..
FastAPI를 이용한 TDD 개발 - 6
·
프로그래밍 언어/파이썬
TDD 를 이용하여서 3개의 새로운 endpoint를 RESTful 개발로 진행하겠습니다. /summaries GET READ get all summaries /summaries/:id GET READ get a single summary /summaries POST CREATE add a summary 각각의 엔드포인트에서 1. 테스트를 작성합니다. 2. 테스트 코드가 실패하는 것을 확인합니다.(레드) 3. 테스트 코드가 통과 되도록 코드를 작성합니다(그린) 4. 리팩토링합니다. Post Route app 디렉토리 아래 api 디렉토리 아래 summaries.py 모듈을 작성하겠습니다. # project/app/api/summaries.py from fastapi import APIRouter, HTT..
FastAPI를 이용한 TDD 개발 - 5
·
프로그래밍 언어/파이썬
App Structure 테스트가 잘 수행 되었면 앱을 리팩터링하고 FastAPI의 APIRouter, 새로운 데이터베이스 초기화 함수 및 pydantic 모델을 추가해 보겠습니다. API라우터 먼저 "app" 폴더에 "api"라는 새 폴더를 추가합니다. 새로 생성된 폴더에 __init__.py 파일을 추가합니다 . 이제 경로를 project/app/api/ping.py/ping 라는 새 파일로 이동할 수 있습니다 . # project/app/api/ping.py from fastapi import APIRouter, Depends from app.config import get_settings, Settings router = APIRouter() @router.get("/ping") async def..