| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- electron
- FastAPI
- python
- contextBridge
- 백엔드
- 소셜로그인
- Vite
- github actions
- 마이그레이션
- 도메인설계
- Android
- 크롤링
- 보안
- next.js
- sqlite
- 프론트엔드
- typescript
- Kotlin
- 아키텍처
- 상태관리
- playwright
- 온디바이스AI
- 배포
- JWT
- javascript
- 메일자동화
- REST API
- React
- php
- 인증
- Today
- Total
목록2026/06/11 (11)
HM소프트
FastAPI와 React 사이 경계를 다잡는다. TypeScript 인터페이스와 Pydantic 스키마를 snake_case로 글자까지 일치시켜 직렬화 버그를 없애고, axios /api 상대 경로와 Vite 프록시로 주소를 통일한다. 블로킹 SMTP를 asyncio.to_thread로 격리, 한글 폰트·OpenCV를 멀티스테이지 Docker 이미지에 봉인하고 Nginx 웹소켓 프록시까지 정리한다. 3편: 경계와 배포1편 템플릿 치환, 2편 PDF 첨부에 이어, 시리즈 마지막은 코드 위생, 프론트/백 경계, 그리고 Docker 배포다. 기능을 다 만든 뒤 "어떻게 안정적으로 굴릴 것인가"의 영역이다.프론트/백 경계 — 가장 흔한 버그의 원천2편에서도 짚었지만, 이 프로젝트에서 반복된 버그의 큰 줄기는 ..
수신자마다 다른 PDF를 붙이는 첨부 기능을 스키마·업로드·값 스캔·상태 관리·발송 다섯 단계로 쪼개 구현한다. 엑셀 한 컬럼을 매칭 키로 삼는 컬럼→값→파일 3단 구조, UUID 저장과 원본 파일명 복원, 업로드 디렉토리 누락 버그, 프론트 camelCase와 백엔드 snake_case 직렬화 불일치로 첨부가 조용히 빠지던 사고와 해결을 다룬다. 2편: 수신자별 PDF 첨부1편에서 템플릿 치환을 다뤘다. 이번 편은 이 도구에서 가장 공들인 기능이다. 단순히 같은 PDF를 모두에게 붙이는 게 아니라, 수신자마다 다른 PDF를 매칭해서 첨부한다. 예를 들어 각 거래처에 그 거래처용 견적서 PDF를 자동으로 붙이는 식이다.기능 하나지만, 프론트와 백엔드에 걸쳐 여러 조각이 맞물려야 했다. 한 번에 만들지 않..
대량 메일 자동화 도구의 템플릿 변수 치환 엔진 구현. 리치 텍스트 에디터가 변수 글자 사이에 HTML 태그를 끼워 넣어도 잡아내는 유연 정규식을 동적 생성하고, 흔한 경우는 replace로 거르는 2단 치환으로 비용을 줄인다. 엑셀 파싱 단계의 빈 셀·타입 정규화, 발송 전 컬럼 값 분포를 보여주는 값 미리보기로 틀린 메일 사고를 막는다. 시리즈를 시작하며수신자마다 내용이 다른 메일을 한 번에 보내는 도구를 만들었다. 표(스프레드시트)로 받은 수신자 데이터를 올리면, 템플릿의 변수가 각 행의 값으로 치환되어 개인화된 메일이 나가고, 행마다 다른 PDF를 첨부할 수도 있다.세 편으로 나눠 기록한다.(이 글) 템플릿 변수 치환과 값 미리보기 엔진수신자별 PDF 첨부 — 업로드부터 매칭·발송까지프론트/백 경..
오번역을 막는 번역 필요 여부 가드와 스레드 로컬 번역기 격리, 429 분기 백오프, 원문·번역 칸을 모두 훑는 다필드 LIKE 검색과 이스케이프, 화면과 일치하는 내보내기, 국가별 시각 분산과 직렬화 락 스케줄러, APScheduler 잠자기 방어, UNIQUE 마이그레이션, Electron 포트 폴백·트레이 상주까지 데스크톱 앱화 기록. 4편: 검색·번역·스케줄러·데스크톱시리즈 마지막이다. 1편 파이프라인, 2편 PDF 파싱, 3편 강건성에 이어, 이번엔 사용자가 실제로 만지는 부분과 운영 자동화를 한 번에 다룬다.번역 — "되게"보다 "틀리지 않게"수집한 외국어 원문은 googletrans로 번역했다. 네트워크 작업이라 실패가 잦아, 재시도와 백오프를 넣었다.def translate_with_ret..
cross-PC 재현 불가 버그를 잡은 기록. cp949 콘솔 인코딩으로 죽던 크롤러를 utf-8 reconfigure로, 파일은 항상 encoding 명시, 시각은 UTC 저장과 시계 오차 가드, 전각/반각 NFKC 정규화와 식별 번호 표기 통일, APPDATA 폴백 경로, SQLite WAL·busy_timeout·재시도·직렬화까지 암묵적 기본값을 코드로 못박은 방법.3편: cross-PC 강건성2편까지 수집과 파싱을 다뤘다. 이번 편은 가장 재현하기 까다로웠던 부류의 버그다. 같은 코드가 내 PC에서는 멀쩡한데 다른 PC에서는 데이터가 비뚤어지는 문제. 원인을 하나씩 추적해 잡은 기록이다.이런 버그가 무서운 건, 개발 PC에서는 안 보이고 배포된 현장에서만 터진다는 점이다. 그래서 "환경이 달라도 ..
pdfplumber extract_tables로 외국어 표 PDF에서 구조화 데이터를 뽑아낸 기록. 텍스트 흐름 대신 격자로 읽고, 라벨 사전으로 표기 변형 흡수, 헤더 행 오매핑 차단, 여러 페이지 표의 열 인덱스 이월, 부분합 중 최대값 선택, 외국어 연호 날짜 변환, 표→정규식→원본 페이지 3단 폴백, 합본 PDF 전용 파서, 스캔 PDF OCR 폴백까지. 2편: PDF 파싱1편에서 BaseCrawler 파이프라인을 다뤘다. 이번 편은 그중 가장 손이 많이 간 부분, 외국어로 된 PDF 문서 파싱이다. 일부 국가는 데이터를 웹페이지가 아니라 PDF로만 공개했다.첫 시도와 실패: 텍스트를 그냥 긁기처음엔 PDF에서 텍스트를 순서대로 추출했다. 결과는 엉망이었다.品名 改善対策 届出 2024年..