분류 전체보기
-
[FastAPI] 분석 엔진에 '눈', EasyOCR 연동 및 트러블슈팅 (Saga Step 2)프로젝트/개인프로젝트 2026. 3. 10. 10:29
안녕하세요! 오늘은 우리 분석 요원(FastAPI)에게 이미지 속 글자를 읽을 수 있는 능력을 부여했습니다. 🤖 파이썬의 강력한 라이브러리인 EasyOCR을 활용해 실제 메뉴판을 텍스트로 변환하는 과정을 공유할게요!🏗️ 1. 왜 EasyOCR인가요?메뉴판은 한글과 영어가 섞여 있는 경우가 많아요. 🇰🇷🇺🇸다국어 지원: 80개 이상의 언어를 지원하며, 특히 한글 인식률이 매우 뛰어납니다.가벼움과 고성능: 별도의 클라우드 유료 API 없이도 로컬에서 딥러닝 기반의 정확한 분석이 가능해요.🛠️ 2. 오늘 만난 에러 에러들 (Troubleshooting)❌ Issue 1: "이미지가 어디 있는지 모르겠어요!" (경로 문제)메시지는 잘 수신했는데, 자꾸 파일을 못 찾는다는 에러가 떴습니다.원인: 모노..
-
[FastAPI] 파이썬 분석 엔진 기지 건설! RabbitMQ 메시지 수신 성공기 (feat. zsh 트러블슈팅)프로젝트/개인프로젝트 2026. 3. 10. 09:46
안녕하세요! 오늘은 스마트 식단 관리 에이전트 프로젝트의 두 번째 주인공, FastAPI 분석 엔진(Analysis Engine)의 기초를 다져보았습니다. NestJS가 보낸 분석 요청 메시지를 RabbitMQ라는 기차역에서 낚아채는 비동기 컨슈머(Consumer)*를 구현하며 겪은 에러 해결입니다.🏗️ 1. 왜 FastAPI를 선택했나요?우리 프로젝트의 핵심은 메뉴판 이미지 분석(OCR & AI)입니다. 🤖Python 생태계: AI 및 이미지 처리 라이브러리가 가장 풍부한 언어를 선택했습니다.성능: 비동기(Async) 처리에 최적화된 FastAPI를 통해 여러 분석 요청을 효율적으로 처리하기 위함입니다.🛠️ 2. 오늘의 에러 (Troubleshooting)❌ Issue 1: "python 명령어를..
-
🚀 [NestJS] Saga 패턴의 시작: RabbitMQ와 함께하는 비동기 메뉴 분석 API 구현기프로젝트/개인프로젝트 2026. 3. 8. 12:59
안녕하세요! 오늘은 스마트 식단 관리 에이전트 프로젝트의 핵심, 메뉴판 분석 요청 API를 개발하며 겪은 우여곡절과 기술적 고민들을 정리해 보려고 합니다. 🥗✨이번 작업의 핵심은 "무거운 AI 분석 작업을 어떻게 사용자 대기 시간 없이 처리할 것인가?"였습니다.🏗️ 1. 아키텍처 설계: 왜 Saga 패턴인가?사용자가 메뉴판 이미지를 업로드하면 OCR과 AI 분석이 돌아가야 하는데, 이 작업은 수 초 이상 걸릴 수 있습니다. 이를 동기(Sync) 방식으로 처리하면 유저는 화면이 멈춘 듯한 경험을 하게 되죠.그래서 저는 Saga 패턴의 첫 단계를 도입했습니다.NestJS: 이미지 업로드 즉시 DB에 태스크를 저장하고 taskId를 반환 (비동기 처리 시작).RabbitMQ: 분석에 필요한 정보를 메시지 ..
-
[NestJS] 회원가입부터 사용자 취향 설정까지: 인증 및 유저 모듈 통합기 (F-03, F-04)프로젝트/개인프로젝트 2026. 3. 7. 13:43
안녕하세요! Smart Diet Agent 프로젝트를 개발하고 있는 백엔드 엔지니어 로즈입니다. 오늘은 프로젝트의 초기 설계를 리팩토링하고, 사용자의 개인화된 목표를 관리하기 위한 API를 구축한 과정을 공유하려 합니다.🏗️ 1. 설계의 변화: 왜 모듈을 통합했는가?초기 구조에서는 UsersController가 회원가입을, AuthController가 로그인을 담당하고 있었습니다. 하지만 F-04(프로필 및 목표 설정) 기능을 추가하며 다음과 같은 고민이 생겼습니다.관심사의 집중: 가입, 로그인, 정보 수정은 모두 '계정 관리'라는 하나의 맥락에 있습니다.경로의 일관성: /auth/signup, /auth/login, /auth/preferences처럼 공통 경로를 사용해 클라이언트의 가독성을 높이고 ..
-
🥗 [NestJS/Prisma] 식단 관리 서비스의 꽃, 주간 리포트 API 구현 및 트러블슈팅프로젝트/개인프로젝트 2026. 3. 5. 11:52
1. 개요: 왜 주간 리포트인가?사용자가 매일 식단을 기록하는 이유는 결국 '내가 잘하고 있는가?'를 확인하기 위함입니다. 단순히 리스트를 보여주는 CRUD를 넘어, 지난 7일간의 데이터를 집계하여 성취도를 시각화해 주는 리포트 API를 구현했습니다.2. 주요 구현 포인트: "데이터가 없는 날은 어떻게 하죠?"✅ 시계열 데이터의 완전성 보장 (Zero-filling)가장 큰 고민은 식단을 기록하지 않은 날이었습니다. DB 쿼리 결과만 그대로 반환하면 차트에서 해당 날짜가 통째로 빠져버려 흐름이 끊기게 됩니다.해결: 서버에서 최근 7일치 빈 객체를 포함한 Map을 미리 생성(dailyMap)하여 0으로 채워두고, DB에서 가져온 데이터를 덮어쓰는 방식을 채택했습니다.결과: 프론트엔드 차트 구현이 훨씬 단순..
-
Meal API Troubleshooting(API 보안 강화)프로젝트/개인프로젝트 2026. 3. 4. 14:05
🥗 Meal API 구현 중 발생한 설계 이슈 및 해결 (Troubleshooting)1. IDOR(Insecure Direct Object Reference) 취약점 방지문제 상황: 특정 식단 조회(GET /meals/:id) 시, 식단의 id값(UUID)만으로 조회할 경우 다른 사용자의 UUID를 추측하거나 입수하여 타인의 식단 기록을 열람할 위험이 있었습니다.해결 방법: 서비스 계층에서 조회 쿼리 작성 시, id와 함께 JWT에서 추출한 userId를 복합 조건으로 사용하도록 수정했습니다.코드 변화: // 변경 전: 단순 ID 조회const meal = await this.prisma.meal.findUnique({ where: { id } });// 변경 후: 소유권 검증 포함const meal..
-
[NestJS/Prisma] 식단 관리 서비스 백엔드 고도화 및 트러블슈팅 기록프로젝트/개인프로젝트 2026. 3. 4. 13:50
본 포스팅에서는 NestJS 환경에서 Prisma 7을 도입하며 겪은 설정 이슈와 인프라 최적화, 그리고 API 보안 강화를 위한 설계 결정 사항을 공유합니다.1. Prisma 7 환경 설정 및 스키마 구조 최적화문제 상황프로젝트 규모가 커짐에 따라 단일 schema.prisma 파일 관리의 한계가 예상되었습니다. 또한, Prisma 7에서 새롭게 도입된 설정 방식을 프로젝트에 적용해야 했습니다. 해결 방법Prisma Config 도입: prisma.config.ts를 생성하고 defineConfig를 사용하여 데이터베이스 경로 및 마이그레이션 설정을 중앙 집중화했습니다.스키마 폴더 분할: prismaSchemaFolder 프리뷰 기능을 활성화하여 도메인별(User, Meal 등)로 스키마 파일을 분리,..
-
[NestJS] Prisma 7과 JWT로 철벽 보안 로그인 구현하기 (feat. 드라이버 어댑터의 늪)프로젝트/개인프로젝트 2026. 3. 2. 16:27
[NestJS] Prisma 7 Driver Adapter 도입 및 JWT 기반 인증 시스템 구축 (F-03)본 포스팅은 'Smart Diet Agent' 프로젝트의 인가(Authorization) 시스템 구축 과정에서 발생한 기술적 이슈와 의사결정 과정을 정리한 기록입니다.1. 개요작업 내용: JWT를 활용한 인증/인가 시스템 구축 및 Prisma 7 마이그레이션요구사항: F-03 (사용자 인가 관리)핵심 스택: NestJS, Prisma 7, Passport.js, PostgreSQL2. Architecture Decision Records (ADR)기능 구현에 앞서 기술적 부채를 최소화하기 위해 다음과 같은 설계 결정을 내렸습니다.ADR-001: Prisma 7 드라이버 어댑터 패턴 채택Prisma..