PYTHON
자바 백엔드 개발자가 Python 기반 ML 서비스를 분석하며 정리한 학습 기록. 문법부터 PyTorch·OCR 기초까지 시리즈로 묶었다. GPU·CUDA·모델 서빙 운영은 mlops 카테고리로 옮겼다.
AutoCloseable·Iterator 비교FastAPI 기초 — Spring Boot 사용자가 빠르게 익히는 법
Python ML 서비스를 분석하면서 가장 빨리 익숙해진 것이 FastAPI 였다. Spring Boot 를 써 본 사람이라면 손에 익기까지 한두 시간이면 충분하다. "어노테이션으로 라우팅 매핑하고, 클래스로 DTO 정의하고, 의존성 주입 받는다" 라는 큰 틀이 거의 그대로 옮겨온다. 다만 세부에서 사고방식이 다르다. Pydantic 이 자바 Bean Va...
Java 개발자를 위한 Python 문법 핵심
자바 백엔드만 다뤄오다가 Python 기반 ML 서비스를 분석해야 할 일이 생겼다. 코드를 읽기 시작하자마자 한 줄짜리 함수가 데코레이터로 둘러싸여 있고, 타입은 어디 갔는지 모르겠고, self 가 왜 첫 인자에 박혀 있는지 헷갈렸다. 이 글은 그때 내가 정리한 노트다. Python 을 처음부터 끝까지 훑는 게 아니라, 자바 개발자가 Python 코드를 빨...
Java 개발자를 위한 Python 심화 — OOP·데코레이터·컨텍스트 매니저
Post 1 (Python 문법 핵심) 에서 클래스·데코레이터·with·yield 는 다음 글로 미뤘다. 이 글에서 마저 정리한다. 코드를 "쓰는" 단계로 넘어가려면 이 다섯을 알아야 한다. 자바 record·Lombok·annotation·AutoCloseable·Iterator 와 1:1 로 비교해 가며 차이만 짚는다. Post 1 에서 양 옆에 언더스...
OCR 동작 원리 — Layout · Text · Post-process 3단계
자바 백엔드만 다뤄오다가 OCR (Optical Character Recognition) 서비스를 분석할 일이 생겼다. "이미지에서 글자를 뽑는다" 라는 한 줄 요약은 알았지만, 실제 코드를 열어보면 모델이 둘이상이고, 여러 단계가 직렬·병렬로 엮여 있고, "왜 이 단계가 따로 있지" 같은 의문이 계속 생긴다. 이 글은 OCR 파이프라인의 표준 구조를 정리...
Python async/await — CompletableFuture·Reactor 와 다른 점, 그리고 blocking I/O 함정
자바에서 비동기를 다루는 방법은 시대마다 달랐다. Future.get() 의 블로킹 시절, CompletableFuture 의 콜백 체인, Reactor·RxJava 의 스트림. 모두 별도 스레드에서 작업을 돌리고 결과를 받아오는 모델이다. Python 의 async/await 는 다르다. 단일 스레드 안에서 이벤트 루프가 코루틴을 번갈아 실행한다. 처음...
Python 서버의 RSS 가 안 줄어드는 이유 — gc.collect 의 한계와 malloc_trim
Python 으로 long-running 서버 (FastAPI / Flask / Celery / uWSGI 등) 를 운영하다 보면 한 번쯤 마주치는 증상이 있다. - 워커 프로세스의 RSS 가 시간이 지날수록 단조 증가한다 - 큰 객체를 del 하고 gc.collect() 를 불러도 RSS 가 줄지 않는다 - 결국 max-requests / workerma...
Python 의존성 관리 — Java Maven/Gradle 사용자가 만나는 첫 충격
자바 백엔드만 다뤄오다가 Python 프로젝트를 처음 받았을 때 가장 황당했던 게 의존성 관리였다. Maven 이면 pom.xml 한 파일, Gradle 이면 build.gradle 한 파일에서 의존성·빌드·플러그인이 다 처리된다. Python 프로젝트는 다음 파일이 섞여 있어 어디서부터 봐야 할지도 모르겠다. - requirements.txt - pypr...
PyTorch 기초 — 텐서, 디바이스, 그리고 모델 로딩이 무거운 이유
자바 백엔드에서 Spring Boot 가 부팅하는 시간이 5-30초 걸리는 게 일반적이다. 클래스 로딩, 컴포넌트 스캔, 의존성 주입, EntityManagerFactory 초기화 등이 누적된다. 한 번 부팅하면 그 뒤로는 요청 처리에 거의 영향이 없다. PyTorch 기반 ML 서비스는 비슷하지만 한 단계 더 무겁다. 우리 프로젝트의 KR Worker 가...
ThreadLocal 에서 contextvars 로 — Python 의 요청 컨텍스트 전파
자바에서 요청 단위로 값을 들고 다니는 일은 ThreadLocal, 더 정확히는 그 위에 얹은 SLF4J MDC 의 몫이었다. 요청이 들어오면 인터셉터에서 requestId 를 MDC 에 넣고, 로그 패턴에 %X{requestId} 만 박아두면 그 요청에서 찍히는 모든 로그 줄에 같은 id 가 자동으로 붙는다. 함수 인자로 requestId 를 일일이 넘기...