-
[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처럼 공통 경로를 사용해 클라이언트의 가독성을 높이고 싶었습니다.
따라서 과감하게 users 폴더를 정리하고 모든 계정 관련 로직을 Auth 모듈로 통합했습니다.
🛠️ 2. 기술적 도전: PATCH 메서드와 Partial Update
사용자가 닉네임만 바꾸고 싶을 때, 목표 칼로리 데이터가 유실되면 안 됩니다. 이를 위해 전체 교체인 PUT 대신 **PATCH**를 선택했습니다.
핵심 로직 (Spread Operator 활용)
Prisma를 사용할 때 전개 연산자를 활용하면 DTO에 담긴 데이터만 동적으로 업데이트할 수 있습니다.
TypeScriptasync updateUserPreferences(userId: string, dto: UpdateUserPreferencesDto) { return this.prisma.user.update({ where: { id: userId }, data: { ...(dto.nickname && { nickname: dto.nickname }), ...(dto.goalCalories !== undefined && { goalCalories: dto.goalCalories }), }, }); }
⚠️ 3. 트러블슈팅: 사라진 목표 칼로리를 찾아서
Issue 1: 응답 객체에서 특정 필드가 누락되는 현상
수정 API 개발 후 조회를 해보니 goalCalories 필드가 보이지 않았습니다.
- 원인: 보안을 위해 도입한 UserResponseDto에서 해당 필드를 정의하지 않아 데이터가 정제(Sanitization) 과정에서 걸러졌습니다.
- 해결: DTO에 goalCalories 필드를 추가하고 매핑 로직을 보완하여 해결했습니다.
Issue 2: NotFoundException 임포트 에러
예외 처리를 추가하는 과정에서 TS2304: Cannot find name 'NotFoundException' 에러가 발생했습니다. 상단의 @nestjs/common 임포트 리스트에 해당 클래스를 추가하여 즉시 해결했습니다.
🍒 4. Postman 테스트 결과
통합된 모듈이 의도대로 작동하는지 단계별로 검증했습니다.





프로필 수정: PATCH 요청을 통해 닉네임과 목표 칼로리가 정상적으로 업데이트됨을 확인
🏁 마치며
단순히 기능을 만드는 것보다 "왜 이 구조가 더 나은가?"를 고민하며 리팩토링하는 과정에서 많은 것을 배웠습니다. 특히 DTO를 통한 데이터 정제가 보안에는 강력하지만, 필드 추가 시 꼼꼼한 관리가 필요하다는 점을 다시 한번 깨달았습니다.
다음 단계로는 오늘 설정한 목표 데이터를 바탕으로 식단 추천 알고리즘을 고도화해 볼 예정입니다! 🌻
'프로젝트 > 개인프로젝트' 카테고리의 다른 글
[FastAPI] 파이썬 분석 엔진 기지 건설! RabbitMQ 메시지 수신 성공기 (feat. zsh 트러블슈팅) (0) 2026.03.10 🚀 [NestJS] Saga 패턴의 시작: RabbitMQ와 함께하는 비동기 메뉴 분석 API 구현기 (0) 2026.03.08 🥗 [NestJS/Prisma] 식단 관리 서비스의 꽃, 주간 리포트 API 구현 및 트러블슈팅 (0) 2026.03.05 Meal API Troubleshooting(API 보안 강화) (0) 2026.03.04 [NestJS/Prisma] 식단 관리 서비스 백엔드 고도화 및 트러블슈팅 기록 (0) 2026.03.04