모든 포스트

LLM 환각(할루시네이션): 원인과 실전 대응책
5 분 소요

LLM 환각(할루시네이션): 원인과 실전 대응책

LLM이 그럴듯한 거짓을 자신 있게 생성하는 환각 현상을 정리합니다. 다음 토큰 확률 예측이라는 동작 원리에서 환각이 필연적으로 나오는 이유, 사실 오류·출처 날조·코드 API 환각 같은 유형, RAG와 인용 강제, 도구 사용, 구조화 출력 검증, 평가 파이프라인까지 실무에서 환각을 줄이는 수단들, 그리고 완전히 없앨 수 없다는 전제 위에서 사람 검토 지점을 설계하는 운영 관점까지 다룹니다.

파이썬 패키징 #6 배포: wheel 빌드와 PyPI 업로드
5 분 소요

파이썬 패키징 #6 배포: wheel 빌드와 PyPI 업로드

받는 쪽에서 만드는 쪽으로 방향을 바꿔, 내 코드를 설치 가능한 패키지로 만들어 올리는 워크플로를 정리합니다. src 레이아웃과 빌드 백엔드의 역할, sdist와 wheel의 차이, uv build로 빌드하고 TestPyPI에서 리허설한 뒤 PyPI에 올리는 순서, GitHub Actions의 Trusted Publishing으로 토큰 없이 배포하는 현대 표준, 사내 전용 배포 대안까지 다룹니다.

임베딩과 벡터 검색: 의미로 찾는 검색의 동작 원리
5 분 소요

임베딩과 벡터 검색: 의미로 찾는 검색의 동작 원리

RAG와 시맨틱 검색의 기반인 임베딩과 벡터 검색을 한 편으로 정리합니다. 텍스트를 숫자 벡터로 바꾸는 임베딩의 개념, 코사인 유사도로 의미의 가까움을 재는 원리, 전수 조사 kNN과 근사 검색 ANN의 트레이드오프, pgvector·전용 벡터 DB·검색 엔진 확장 중에서 저장소를 고르는 기준, 키워드 매칭에 약한 임베딩의 한계와 하이브리드 검색, 모델 교체 시 전체 재색인 같은 운영 비용까지 다룹니다.

파이썬 패키징 #5 의존성 잠금: lock 파일과 재현성
5 분 소요

파이썬 패키징 #5 의존성 잠금: lock 파일과 재현성

선언과 잠금이 왜 분리되는지에서 시작해 uv.lock의 내용을 직접 읽습니다. 전이 의존성까지 전부 고정하는 해석 결과, 해시 검증이 막는 공급망 위험, CI에서 --frozen으로 잠금 그대로 재현하는 법, 업그레이드를 일상 업무로 만드는 전략, 도구 간 이동을 여는 표준 pylock.toml(PEP 751)까지 다룹니다.

토큰과 컨텍스트 윈도우: LLM 비용과 한계를 결정하는 단위
6 분 소요

토큰과 컨텍스트 윈도우: LLM 비용과 한계를 결정하는 단위

LLM 요금표와 스펙표에 빠지지 않는 토큰과 컨텍스트 윈도우를 한 편으로 정리합니다. 토큰이 어떻게 쪼개지는지, 한국어가 영어보다 토큰을 더 쓰는 이유, 입력·출력 단가가 다른 요금 구조와 대화가 길어질수록 비용이 불어나는 원리, 컨텍스트 윈도우가 실제로 제한하는 것, 긴 컨텍스트의 성능 함정, 프롬프트 캐싱과 히스토리 관리 같은 실무 대응까지 다룹니다.

파이썬 패키징 #4 uv: 2026년 표준 워크플로
5 분 소요

파이썬 패키징 #4 uv: 2026년 표준 워크플로

가상 환경, 의존성 설치, lock, 파이썬 버전 관리를 한 도구로 묶은 uv의 일상 워크플로를 정리합니다. init·add·sync·run 네 명령이 앞 편들의 수작업을 대체하는 과정, 파이썬 인터프리터까지 uv가 설치하는 구조, uvx와 uv tool로 전역 도구를 격리 설치하는 법, 기존 requirements.txt 프로젝트를 흡수하는 마이그레이션까지 다룹니다.

PySide6로 데스크톱 앱 만들기 #7 패키징과 배포 — PyInstaller로 실행 파일 만들기
7 분 소요

PySide6로 데스크톱 앱 만들기 #7 패키징과 배포 — PyInstaller로 실행 파일 만들기

파이썬이 설치되지 않은 컴퓨터에서도 실행되도록 PyInstaller로 앱을 묶는 절차를 정리합니다. onedir과 onefile의 트레이드오프, 데이터 파일 포함, 플랫폼별 주의점과 pyside6-deploy까지 다루는 시리즈의 마지막 편입니다.

파이썬 패키징 #3 pyproject.toml: 프로젝트 설정의 표준
5 분 소요

파이썬 패키징 #3 pyproject.toml: 프로젝트 설정의 표준

setup.py와 흩어진 설정 파일들의 시대가 pyproject.toml 한 파일로 수렴한 과정을 정리합니다. project 테이블의 메타데이터와 의존성 선언, extras와 dependency-groups로 선택 의존성과 개발 의존성을 가르는 법, build-system의 역할, ruff와 pytest 설정까지 tool 테이블로 모으는 실전 구성을 다룹니다.

PySide6로 데스크톱 앱 만들기 #6 스레드와 타이머 — 멈추지 않는 UI
6 분 소요

PySide6로 데스크톱 앱 만들기 #6 스레드와 타이머 — 멈추지 않는 UI

버튼 하나에 긴 작업을 연결하면 창 전체가 응답을 멈추는 이유를 이벤트 루프 구조로 확인하고, QThread와 Worker 패턴으로 UI를 멈추지 않게 만드는 정석 코드를 완성합니다. 주기 작업을 처리하는 QTimer까지 다룹니다.

파이썬 패키징 #2 pip와 requirements.txt: 전통 워크플로의 한계
5 분 소요

파이썬 패키징 #2 pip와 requirements.txt: 전통 워크플로의 한계

pip의 동작 원리와 requirements.txt 워크플로를 정리하고, 이 방식이 어디서 무너지는지 짚습니다. 버전 지정자를 읽는 법, pip freeze가 직접 의존성과 전이 의존성을 구분하지 못하는 문제, 버전을 안 박으면 설치 시점마다 결과가 달라지는 재현성 구멍, constraints 파일까지 다루며 다음 세대 도구가 나온 이유를 만듭니다.

PySide6로 데스크톱 앱 만들기 #5 모델과 뷰 — 리스트·테이블에 데이터 연결
7 분 소요

PySide6로 데스크톱 앱 만들기 #5 모델과 뷰 — 리스트·테이블에 데이터 연결

위젯에 데이터를 직접 넣는 방식의 한계를 짚고, Qt의 모델/뷰 구조로 넘어갑니다. QAbstractTableModel 상속 구현, 데이터 변경 통지, QSortFilterProxyModel 검색 필터, 선택 처리까지 할 일 테이블로 실습합니다.

파이썬 서버가 느릴 때: py-spy로 5분 안에 병목 찾기
5 분 소요

파이썬 서버가 느릴 때: py-spy로 5분 안에 병목 찾기

운영 중인 파이썬 프로세스에 코드 수정·재시작 없이 붙는 샘플링 프로파일러 py-spy 사용법을 정리합니다. dump로 멈춘 프로세스의 정체 확인, top으로 실시간 병목 관찰, record와 플레임그래프, --idle로 보는 off-CPU 대기, GIL 관점의 해석, 컨테이너에서 쓰는 법까지 다룹니다.