packages/common/common/ 폴더 구조가 이상한가요? Python Src Layout 완벽 가이드
·
Backend Development
"이거... 폴더 이름 실수로 두 번 쓴 거 아닌가?"들어가며사내 물류 자동화 시스템을 Turborepo 모노레포로 구축하던 중이었다.packages/└── common/ ├── pyproject.toml └── common/ ← 이게 뭐야? ├── __init__.py └── utils.py처음 보는 사람은 십중팔구 "폴더명 중복 아니냐"고 묻는다. 나도 그랬다."Hatchling 설정을 잘못 건드린 건가?""common 하나만 있으면 되는 거 아닌가?"결론부터 말하면, 이건 실수가 아니다. Python 패키징의 정석 중 하나인 Flat Layout이다.하지만 팩트 체크를 하다가 충격적인 사실을 알았다. requests, 그 유명한 requests도 ..
AI가 100% 정확하지 않아도 괜찮다: Human-in-the-Loop로 만드는 의류 불량 검수 시스템
·
AI · ML/Computer Vision
Image Source: Generated by Nano Banana"AI 정확도가 100%가 아니면 현업에서 못 쓰는 거 아니에요?"라는 질문을 받았다. 답은 "아니다"였다.들어가며의류 반품 검수 현장은 생각보다 복잡하다.하루 반품량: 5,000벌검수 항목: 오염, 찢어짐, 변색, 보풀, 단추 이탈 등 12가지작업자 1명당 처리량: 200벌/일소요 시간: 1벌당 평균 2분문제는 검수 품질이다. 사람이 하루 종일 옷을 보면 집중력이 떨어진다. 저녁 6시쯤 되면 오탐률이 30%까지 치솟는다."AI로 자동화하면 되지 않나요?"시도해봤다. YOLOv8 기반 불량 검출 모델을 만들어서 파일럿 테스트를 돌렸다.결과:- mAP50: 0.83 (83%)- Precision: 0.79- Recall: 0.8583%면 ..
PyTorch 하드웨어 의존성 제거하기: Hugging Face Accelerate로 갈아타야 하는 이유
·
AI · ML/Computer Vision
"로컬에서 잘 돌던 코드가 GPU 서버에 올리니 터진다"는 경험, 한 번쯤 있지 않은가?들어가며PyTorch로 딥러닝 모델을 개발하다 보면, 모델 아키텍처 자체보다 '학습 환경 설정(Boilerplate Code)' 때문에 스트레스를 받는 순간이 반드시 온다."로컬(CPU)에서 짤 때는 잘 돌아갔는데, 서버(GPU)에 올리니 에러가 나네?""단일 GPU 코드를 멀티 GPU(DDP)로 바꾸려니 코드를 다 뜯어고쳐야 하네?"이런 하드웨어 의존적인 코드를 획기적으로 줄여주는 Hugging Face Accelerate 라이브러리를 소개한다. 기존 PyTorch 코드와 비교하여 얼마나 생산성이 높아지는지 살펴보자.The "Before": 순수 PyTorch의 고통PyTorch만 사용하여 멀티 GPU 환경과 Mix..
CI가 5분씩 걸려서 뜯어봤더니... 린트(Lint)에 무거운 의존성을 태우고 있었다
·
Backend Development
Lint에 PyTorch를 설치하고 있었다.발단PR 올릴 때마다 CI가 5분씩 걸렸다. 코드 한 줄 고쳐서 올렸는데 초록불 보려면 5분. 커피 타 오기엔 애매하고, 가만히 기다리기엔 긴 시간이다."원래 CI가 이렇게 오래 걸리나?"아니었다. 뜯어보니 Lint job에서 PyTorch, transformers, ultralytics를 설치하고 있었다. ruff 돌리려고.문제의 워크플로우# Before: ci.ymljobs: lint: name: Lint & Type Check steps: - name: Install Poetry uses: snok/install-poetry@v1 - name: Install dependencies run: poetry..
Next.js 16 릴리즈: 캐싱, 드디어 명시적으로 바뀌다
·
Frontend Development
v15에서 "왜 자꾸 캐싱 안 돼?"라고 당황했던 개발자라면, v16의 변화가 반가울 것이다.들어가며2025년 10월 21일, Next.js 16이 정식 출시됐다.릴리즈 노트를 읽다가 눈이 멈춘 부분이 있었다. revalidateTag() 시그니처 변경. 이거 기존 코드 전부 깨지는 거 아닌가? 확인해보니 맞았다. 그것도 두 번째 인자가 필수로 바뀌는 Breaking Change였다.단순히 API 하나 바뀐 게 아니다. v14 → v15 → v16으로 이어지는 캐싱 철학의 변화가 이번 버전에서 완성됐다. 이 흐름을 이해하지 않으면 마이그레이션할 때 "왜 이렇게 바꿨지?"라는 의문만 남는다.정리해봤다.버전별 캐싱 정책의 변화먼저 세 버전의 캐싱 정책을 한눈에 보자.버전캐싱 기본값개발자 반응v14Cached..
YOLO만 쓰던 개발자가 RT-DETR을 선택한 이유
·
AI · ML/Computer Vision
의류 검수 AI 시스템을 설계하면서 깨달은 Object Detection 모델 선택의 기준들어가며"객체 탐지? 그럼 YOLO지."솔직히 이게 그동안 내 접근 방식이었다. 차량 번호판 인식 프로젝트에서 YOLO를 써본 이후로, Object Detection이 필요하면 자연스럽게 YOLO를 꺼내 들었다. 빠르고, 정확하고, 레퍼런스도 많으니까.그런데 최근 의류 품질 검수 AI 시스템을 설계하면서 생각이 바뀌었다. 이 글에서는 왜 YOLO 대신 RT-DETR을 선택했는지, 그 과정에서 알게 된 두 모델의 근본적인 차이를 정리해보려 한다.과거 경험: 번호판 인식에서의 YOLO이전에 차량 번호판 인식 시스템을 개발한 적이 있다. 당시 YOLO를 선택했고, 결과는 대만족이었다.번호판 인식은 "쉬운" 문제다번호판 검..
YOLO26: 엣지 디바이스를 위한 차세대 객체 탐지 모델
·
AI · ML/Computer Vision
목차들어가며YOLO26을 검토하게 된 계기왜 YOLO26인가?YOLO26이란?핵심 개선사항지원 태스크성능 벤치마크사용 방법YOLOE-26: 개방형 어휘 지원이전 버전과의 비교실무 적용 가이드실제 도입 사례: 중고 의류 자동 검수 시스템마치며1. 들어가며1.1 YOLO26을 검토하게 된 계기최근 중고 의류 자동 검수 AI 시스템을 설계하면서 객체 탐지 모델을 검토하던 중이었습니다. 반품된 중고 의류의 결함(오염, 손상, 변색 등)을 자동으로 탐지하고, S/A/B/F 등급을 판정하는 시스템인데요. 처리 속도 목표가 의류 1벌당 1초 이내였고, 향후 물류센터 현장의 엣지 디바이스 배포도 고려해야 했습니다.마침 2025년 1월 14일, Ultralytics에서 YOLO 시리즈의 최신 버전인 YOLO26을 공식 ..
Vercel KV로 배너 클릭 추적 시스템 만들기: Redis를 서버리스에서 사용하는 법
·
Backend Development
들어가며블로그에 광고 배너를 달면서 이런 요구사항이 생겼습니다.요구사항:- 좌측/우측 배너 각각 클릭 수 추적- 일별, 시간대별 통계 확인- 관리자 대시보드에서 시각화- 서버리스 환경 (Next.js on Vercel)처음엔 간단할 줄 알았습니다. "그냥 데이터베이스에 저장하면 되지 않나?" 하고요.// ❌ 순진한 첫 시도async function trackClick(bannerId: string) { await prisma.bannerClick.create({ data: { bannerId, timestamp: new Date() } });}문제:매 클릭마다 DB 쓰기 → 비용 증가통계 조회 시 전체 레코드 스캔 → 느림시간대별 집계를 매번 계산 → 비효율그래서 선택한 것이 Vercel KV ..
[프로그래머스 / JavaScript] 2021 KAKAO BLIND RECRUITMENT / 숫자 문자열과 영단어
·
Algorithm/프로그래머스
문제 출처문제 보러가기문제 설명네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.영단어 변환 예시:1478 → "one4seveneight"234567 → "23four5six7"10203 → "1zerotwozero3"이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.숫자-영단어 대응표:숫자영단어0zero1one2two3three4four5five6six7seven8eight9nine제한사항1 ≤ s의 길이 ≤ 50s가 "zero" 또는 "0"으로 시..
자료구조, 왜 배워야 할까? 스택부터 해시테이블까지 핵심 정리
·
자료구조
들어가며"자료구조? 그거 학교에서나 배우는 거 아니야?"실무에서 코딩만 하면 되지, 왜 자료구조를 알아야 하는지 의문을 가진 적 있으신가요? 저도 처음에는 그랬습니다. 하지만 자료구조는 단순히 이론이 아닙니다. 우리가 매일 작성하는 코드의 효율성과 직결되는 실전 개념입니다.컴퓨터의 메모리는 무한해 보이지만, 사실은 매우 한정적입니다. 이 한정된 공간에서 데이터를 어떻게 효율적으로 저장하고 관리할 것인가. 이것이 바로 자료구조를 배우는 이유입니다.오늘은 실무에서 가장 많이 사용되는 4가지 핵심 자료구조를 알아보겠습니다.1. 스택 (Stack): 드럼통처럼 쌓이는 구조스택이란?스택을 이해하는 가장 쉬운 방법은 드럼통을 떠올리는 것입니다. 드럼통에 물건을 하나씩 넣으면 위로 쌓이죠? 꺼낼 때는 가장 나중에 넣..