Skip to content
Beside the Wheel
Search
Ctrl
K
Cancel
Email
GitHub
Select theme
Dark
Light
Auto
공부
(5)
spot 인스턴스에서 서버 가용성 개선하기
eBPF로 서버 성능 Profiling하는 법: Pyroscope의 구현 살펴보기
정수론부터 RSA까지
strace로 shaka-packager 버그 추적
Kubernetes The Hard Way
TIL
(956)
AI
(43)
DevOps
(230)
Network
(61)
OS
(155)
개발
(113)
데이터베이스
(64)
서버
(72)
수학
(20)
알고리즘
(24)
암호학
(32)
언어
(113)
컴퓨터구조
(5)
코드
(24)
독후감
(43)
과학
(1)
사회
(2)
산문
(3)
소설
(12)
인문
(11)
자기계발
(7)
철학
(7)
생각
(6)
고민
변화에 대하여
의식의 영역에 대하여
본질을 보려면
짧은 생각들
소유냐 존재냐
회고
(14)
2022.03-04 대덕소마고 입학소감/다짐
2022.05-08 프로젝트와 인간관계
2022.09-2023.02 불안과 판단
2023.03-07 DMS 리더 회고
2023.08-11 나는 누구인가?
2023.12 더 많은 걸 배우기 위한 경험
2024.01-02 회사 인턴 회고
2024.03-04 고3 근황
2024.05-07 고등학교 마무리
2024.08-12 첫 회사
2025.01-03 입출력
2025.03-08 효능감이란 무엇일까
2025.09-12 연말회고
2026.01-08 담론
Email
GitHub
Select theme
Dark
Light
Auto
태그: python
총 11개의 글이 있습니다.
Python VM
python
2026. 9. 2.
PVM(Python Virtual Machine)은 컴파일된 바이트코드를 한 명령어씩 해석해서 실행하는 인터프리터 루프이다. `python` 실행 파일을 돌렸을 때 실제로 코드를 실행하는 주체가 이것이다. 실행 흐름 1. 소스코드(`.py`)를 파서가 AST(Abstract Syntax Tree)로 변환한다. 2. 컴파일러가 AST를 바이트코드로 변환한다. `__pycache__`에 `.pyc`로 캐싱되어, 소스가 바뀌지 않으면 재컴파일을 건너뛴다. 3. PVM이 바이트코드를 프레임 단위로 한 명령어씩 실행한다. 소스코드(.py) → AST → 바이트코드(.pyc) → PVM 실행 CPython 기준으로 이 인터프리터 루프는 `Python/ceval.c`의 `_Py
타입 시스템 부트스트랩
python
2026. 9. 2.
`type`, `object`, `weakref`처럼 파이썬 타입 시스템의 뿌리가 되는 타입들은 정상적인 방법(이미 존재하는 `type`을 이용해 새 타입을 만드는 방법)으로는 만들 수 없다. `type`은 자기 자신의 타입이어야 하고, `object`는 모든 것의 조상이면서 동시에 그 자신도 객체여야 하기 때문이다. [[RustPython]]이 이 문제를 `init_type_hierarchy()` 안에서 `unsafe` 코드로 메모리를 직접 조립해 푸는 걸 보고, CPython은 같은 문제를 어떻게 푸는지 찾아봤다. CPython은 이 순환을 런타임에 풀지 않는다. `PyTypeObject`를 힙에 할당하는 대신, C의 정적(static) 전역 구조체로 소스 코드에 박아버린다. `Objects/t
Dunder Attribute
python
2026. 7. 17.
Dunder는 double underscore의 줄임말로, 이름 앞뒤에 밑줄 두 개가 붙은 식별자(`__init__`, `__call__`, `__dict__` 등)를 말한다. Python이 언어 차원에서 특별하게 취급하는 이름들이며, 크게 두 부류로 나뉜다. dunder method (special method, magic method): 인터프리터가 특정 문법·내장 함수를 만나면 암묵적으로 호출하는 메서드. `a + b` → `__add__`, `len(x)` → `__len__`, `x()` → `__call__` 등. dunder attribute: 객체·클래스·모듈의 메타데이터를 담는 속성. `__dict__`, `__class__`, `__name__` 등. `__
PyPy
python
2026. 7. 12.
PyPy gives itself the goal to try to be extremely compatible with all the quirks of the Python language. We don't change the Python language to make things easier to compile and we support the introspection and debugging features of Python. We try very hard to have no opinions on language design. The CPython core developers come up with the semantics, we somehow deal with them. PyPy는 Python 언어의 모든
RustPython
python
2026. 7. 12.
RustPython` 도중 비교 함수가 리스트 자체를 변경하면 예외를 던진다. python class Evil: def __init__(self, v): self.v = v def __lt__(self, other): L.append(3) L.pop()
Python 구현체
python
2026. 3. 16.
Python은 언어 명세와 구현체가 분리되어 있다. 문법과 동작을 정의한 것이 명세이고, 이를 실행하는 인터프리터는 여러 개 존재한다. 터미널에서 `python`을 실행하면 시스템에 설치된 구현체가 동작하는데, 별도 설정이 없다면 CPython이다. bash $ python -c " print(platform.python_implementation())" CPython CPython C로 작성된 레퍼런스 구현체. `python.org`에서 배포하는 바이너리가 이것이다. 소스코드를 바이트코드(`.pyc`)로 컴파일한 뒤 CPython VM이 한 명령어씩 해석하며 실행한다. 언어 명세의 기준. 새 문법이나 기능은 CPython에 먼저 구현된다. C 확장 API(`Python.h`)를 제공
Weak Reference
python
2026. 3. 16.
Weak reference(약한 참조)는 객체를 참조하되, reference count를 증가시키지 않는 참조 방식이다. `weakref` 모듈로 사용한다. CPython은 레퍼런스 카운팅으로 메모리를 관리한다. 일반 참조(strong reference)는 ref count를 올리므로, 참조가 남아있는 한 객체가 해제되지 않는다. 이게 문제가 되는 경우가 있다. 캐시: 캐시가 객체를 잡고 있으면 원본이 필요 없어져도 메모리에서 안 사라진다. 순환 참조: observer 패턴 등에서 상호 참조 시 메모리 누수가 발생할 수 있다. 대형 객체 매핑: 객체→메타데이터 매핑에서 키가 객체의 수명을 연장하는 것을 방지해야 한다. weak reference는 ref co
연산자 규칙
python
2026. 3. 16.
Python의 연산자(`+`, `-`, `*` 등)는 특수 메서드(dunder method)로 구현된다. `a + b`는 내부적으로 `a.__add__(b)`를 호출하는 것이다. 이항 연산자 dispatch 순서 `a + b`를 실행하면 Python은 다음 순서로 시도한다. 1. `a.__add__(b)` 호출 2. `NotImplemented`를 반환하면 → `b.__radd__(a)` 호출 3. 둘 다 `NotImplemented`면 → `TypeError` 발생 `__radd__`는 reflected(역방향) 연산자다. `a`가 `b`와의 덧셈을 모르면 `b`에게 기회를 넘기는 구조다. python class A: def __add__(self, other): re
sort
python
2026. 3. 15.
Python의 정렬은 `sorted()`와 `list.sort()`로 수행한다. 정렬 기준을 지정하는 방식이 Python 2와 3에서 다르다. cmp Python 2 스타일의 비교 함수이다ㅓ. 두 원소를 받아서 비교 결과를 반환한다. Python 3에서는 제거되었다. python 두 원소를 받아서 음수, 0, 양수 반환 def compare(a, b): return a b sorted([3, 1, 2], cmp=compare) Python 2에서만 동작 key Python 3 스타일의 키 함수이다. 각 원소를 받아서 비교용 값을 반환한다. python sorted([3, 1, 2], key=lambda x: -x) Python 3에서 `cmp`가 제거되
GIL
python
2026. 3. 12.
GIL(Global Interpreter Lock)은 CPython 인터프리터에서 한 번에 하나의 스레드만 Python 바이트코드를 실행할 수 있도록 강제하는 뮤텍스이다. 레퍼런스 카운팅과 GIL CPython은 객체의 메모리 관리를 레퍼런스 카운팅으로 한다. 모든 객체에 참조 횟수(`ob_refcnt`)가 있고, 이 값이 0이 되면 메모리를 해제한다. c // CPython 내부의 참조 카운트 조작 Py_INCREF(op); // ob_refcnt++ Py_DECREF(op); // ob_refcnt--, 0이면 해제 여러 스레드가 동시에 이 카운터를 수정하면 race condition이 발생한다. 예를 들어 두 스레드가 동시에 `Py_DECREF`를 호출하면, 카운터가 1인 객체
패키지 관리자
python
2026. 1. 29.
Python 패키지 관리자는 의존성 설치, 가상 환경 관리, 프로젝트 설정 등을 담당하는 도구이다. Python 생태계에는 다양한 패키지 관리자가 존재하며, 각각 해결하고자 하는 문제와 접근 방식이 다르다. 크게 패키지 설치 도구와 프로젝트 관리 도구, 그리고 환경 관리 도구로 구분할 수 있다. pip Python의 기본 패키지 설치 도구이다. PyPI(Python Package Index)에서 패키지를 다운로드하여 설치한다. bash 패키지 설치 pip install requests 버전 지정 pip install requests==2.31.0 requirements.txt로 일괄 설치 pip install -r requirements.txt 현재 환경을 파