들어가며 분류 로직과 이미지 처리 레이어가 완성되었다면, 이제 이걸 ‘쓸 수 있는 도구’로 만드는 작업이 남았다. 코드가 아무리 잘 설계되어 있어도 설치와 사용이 불편하면 재사용되지 않는다. 이 글에서는 OutfitAI를 완성된 파이썬 패키지로 만들기까지의 과정을 다룬다. pydantic-settings 기반 설정 관리, CLI와 라이브러리 이중 ...
배경 초기 OutfitAI는 로컬 파일 경로를 통해서만 이미지를 입력받았다. classify_single("path/to/image.jpg")처럼 파일 시스템에 저장된 이미지를 읽어 API에 넘기는 구조였다. 하지만 실제 앱에서는 이미지가 로컬 파일보다 URL로 존재하는 경우가 더 많았다. S3에 업로드한 사용자의 옷 사진, 제품 상세 이미지 모두...
배경 OutfitAI 개발 초기에는 AI 프로바이더로 OpenAI만을 지원하였다. 함수 하나에 OpenAI API 호출 로직이 담겨 있었고, 분류 결과를 반환하는 단순한 구조였다. 이 시점에는 “다른 프로바이더도 지원해야 할 이유”가 없었기 때문이다. 그러나 개발을 진행하면서 두 가지 필요...
배경 멀티모달 AI 모델은 이미지를 보고 자유롭게 텍스트를 생성한다. 이 자유로움은 장점이지만, 서비스에서 AI 출력을 데이터베이스에 저장하거나 후속 로직에서 활용하려면 오히려 독이 된다. OutfitAI에서 분류해야 하는 항목은 색상, 카테고리, 드레스코드, 시즌이다. 모델에게 단순히 “이 옷의 색상을 알려줘”라고 물으면 어떻게 될까? "n...
들어가며 지난 몇 달간 패션 관련 사이드 프로젝트에 참여했다. 당시 프로젝트의 핵심 기능 중 하나는 사용자가 옷 사진을 찍어 올리면, AI가 해당 옷의 색상·카테고리·드레스코드·시즌을 자동으로 분류하여 앱 내 옷장에 저장하는 기능이었다. 이 기능을 구현하기 위해 처음에는 상용 이미지 분류 서비스를 도입하려 했지만, 비용 문제로 인해 직접 라이브러리...
최근 블로그 댓글 시스템을 utterances에서 giscus로 전환했다. 이 글에서는 giscus를 적용한 과정을 다룬다. 배경 기존 댓글 시스템 utterances에서 댓글을 관리하던 방식 블로그를 처음 만들 당시에 댓글 시스템으로 utterances를 선택했다. utterances는 GitHub Issues를 기반으로 동작하며, 다음과 ...
서론 이 글에서는 시대팅 시즌5의 매칭 결과에 영향을 미친 주요 요인들을 분석한 내용을 다룬다. 특히 이번 학기 고급프로그래밍 강의에서 배운 로지스틱 회귀를 활용하여 분석을 진행하였는데, 이를 통해 매칭 알고리즘 개선을 위한 유용한 인사이트를 도출하고자 했다. 로지스틱 회귀 분석 기본 개념 학습 시간에 따른 시험 합격 확률을 나타낸 로지스틱 ...
문제 상황 JWT 인증 시스템 개발 초기에 Spring Boot 애플리케이션에서 JWT 토큰 설정값을 application.yml로 관리하던 중 한 가지 문제가 발생했다. SecurityConstants object에서 @Value 어노테이션으로 토큰 만료 시간을 주입받으려 했으나, 값이 정상적으로 주입되지 않아 모든 토큰의 만료 시간이 0으로 설정...
배경 백엔드를 배포한 이후, 프론트엔드가 로컬 환경에서 리프레시 토큰이 담긴 쿠키를 설정하지 못하는 문제가 발생했다. 이 문제는 쿠키의 Secure와 SameSite 설정과 관련이 있었다. 이를 해결한 과정을 정리한다. 프론트엔드 팀원이 슬랙에 남긴 이슈 접근 과정 프론트엔드는 개발 환경에서 localhost를, 백엔드는 운영 환경에서 uos...
들어가며 이번 시대팅 서비스의 핵심적인 역할을 한 매칭 알고리즘의 개발 과정을 공유하고자 한다. 이번에는 1대1 매칭과 3대3 매칭으로 역할을 나누어 개발을 진행했으며, 나는 그중 1대1 매칭 알고리즘 개발을 담당했다. 특히 이번 개발은 이전 시즌(시즌4) 알고리즘을 리팩토링하고 새로운 요구사항을 반영하는 데 중점을 두었다. 이 글에서는 1대1 ...