FastAPI 비동기 처리와 이벤트 루프 이해 — uvicorn, uvloop, asyncio, libuv

개요 FastAPI의 비동기 처리 흐름을 이벤트 루프 관점에서 정리 Node.js의 libuv 기반 모델을 기준선으로, Python의 asyncio와 uvloop, 그리고 Uvicorn이 FastAPI 요청을 어떻게 비동기로 처리하는지 비교 I/O 바운드 중심의 동작 원리와 GIL 제약, 실무에서의 주의점을 함께 정리 Node.js 이벤트 루프 요약 싱글 스레드 논블로킹 모델의 핵심은 이벤트 루프와 비동기 I/O 위임 Node.js는 C로 구현된 libuv를 통해 커널 비동기 I/O를 활용하거나, 미지원 경우 스레드풀로 오프로드 기본 스레드풀 크기는 4로 시작, 환경변수로 조정 가능 libuv가 커널 비동기 I/O를 직접 쓰는 경우와 아닌 경우의 차이 참고 ...

March 24, 2026

Python의 Call by Object Reference 정확히 이해하기

개요 파이썬 변수와 함수 인수 전달 방식을 정리함 주요 키워드 세 가지 정리 call by value call by reference call by object reference (aka call by sharing) 헷갈리는 포인트는 call by reference와 call by object reference의 차이임 파이썬에서 실제로 일어나는 바인딩과 가변성의 조합으로 이해 필요 호출 방식 개념 정리 Call by Value 인수 전달 시 값의 복사 전달 함수 내부에서 인자를 변경해도 호출자 쪽 원본에는 영향 없음 Call by Reference 인수 전달 시 변수 자체를 참조로 전달하는 모델 함수 내부 변경이 호출자 변수에 그대로 반영됨 특정 언어에서만 엄밀히 지원되는 개념이며, C는 포인터를 값으로 전달해 유사 동작을 만들 수 있으나 언어 차원의 call by reference와는 구분 필요 Java는 참조 자체를 값으로 전달하므로 call by reference가 아님에 주의 ...

March 19, 2026

파이썬 MRO(Method Resolution Order)와 super 동작 원리 정리

개요 파이썬은 다중 상속을 지원하며 동일한 이름의 메소드가 여러 부모에 존재할 때 어떤 구현을 선택할지 결정해야 함 이 결정 규칙이 MRO(Method Resolution Order)로, 클래스 계층 전체에서 메소드를 탐색하는 순서를 정의함 MRO가 없다면 동일 시그니처 메소드가 교차 상속되는 상황에서 해석 모호성, 이른바 death diamond 문제가 발생함 핵심 개념 MRO의 본질은 메소드 탐색 순서의 선형화 파이썬은 C3 linearization 알고리즘으로 일관된 순서를 계산함 규칙 요약 자식 클래스가 먼저 왼쪽에서 오른쪽으로 명시한 부모 순서를 존중 각 부모의 MRO를 안정적으로 병합하여 일관성 유지 클래스 속성 mro 또는 클래스 메소드 mro()로 확인 가능 동작 원리 탐색 순서 기본 형태 자식 클래스 → 명시된 순서의 부모들 → 각 부모의 상위 클래스들 → 최상위 object 순으로 선형화 C3 linearization은 다음 제약을 동시에 만족하는 유일한 순서를 생성 자식은 항상 부모보다 앞선다 부모 목록의 왼쪽 우선 순서를 보존한다 부모들의 MRO 순서를 보존한다 이 규칙으로 동일 이름 메소드가 다수 존재해도 첫 번째로 만나는 구현이 선택됨 사용법과 간단 예시 다중 상속에서 실제 탐색 순서를 눈으로 확인하는 것이 가장 빠름 ...

March 16, 2026

Django Middleware 핵심 이해와 커스텀 구현 가이드

개요 Django의 미들웨어는 요청과 응답을 전역적으로 가로채어 공통 로직을 삽입하는 경량 플러그인 시스템임. 입력 또는 출력의 전역 수정이 필요할 때 사용함 미들웨어 시스템과 순서 settings.py의 MIDDLEWARE 리스트에 등록된 항목을 기준으로 동작함. 요청 단계는 위에서 아래 순서로 통과, 응답 단계는 아래에서 위 순서로 역순 통과. 순서가 기능적 의존성과 직결되므로 중요함. 예시로 AuthenticationMiddleware는 세션을 읽기 때문에 SessionMiddleware 이후 배치 필요 커스텀 미들웨어 만들기 미들웨어는 함수 기반 또는 클래스 기반 중 하나로 작성. get_response를 호출하면 다음 미들웨어 혹은 최종 view로 제어가 넘어가며, 반환 이후 구간이 응답 후 처리 지점이 됨 ...

March 2, 2026

Selenium WebDriver pageLoadStrategy 동작 원리와 설정 가이드

개요 pageLoadStrategy는 WebDriver가 페이지 이동 명령을 언제 완료로 판단할지 결정하는 세션 단위 설정값임. 핵심은 document.readyState 조회 시점을 어떻게 보느냐이며 전략별 대기 조건이 다름. 기본값은 normal이며, 네트워크 리소스가 많아 느린 페이지에서 eager 또는 none으로 바꿔 세션 체감 속도를 높일 수 있음 SPA처럼 자바스크립트가 동적으로 화면을 채우는 사이트에서는 readyState가 complete여도 실제 사용자 관점의 완료와 다를 수 있음. 전략 변경 시 명시적 대기 조합 설계가 필수임 주의할 점은 get 등 URL 기반 내비게이션과 달리, 클릭이나 폼 제출로 발생한 내비게이션에는 동일한 대기 규칙이 그대로 적용되지 않을 수 있음. 이 경우에도 별도의 대기 전략으로 안정성을 확보해야 함 ...

February 17, 2026