728x90
1. 기능 및 기술 소개
1.1 핵심 기능 소개
- 주문 현황 조회: orderInfo
- 주문 내역 조회: paymentInfo
- 주문 상태 수정: editStatus
- 매장 전체 조회: allRestaurant
- 매장 검색:
- 식당 유형 검색: restaurantByType
- 주소 검색: restaurantByAddress
- 키워드 검색: searchRestaurants
- 상세 조회: restaurantDetail
- 매장 랭킹 조회: ranking
1.2 사용 기술 및 아키텍처
- 프레임워크: Node.js, Express.js
- 서비스 패턴: 컨트롤러-서비스 계층형 아키텍처
- 비동기 처리: async/await를 활용
- ORM: Prisma
- Database: MySQL
- HTTP 상태 코드: 표준화된 HTTP 응답 상태 코드 사용
구조:
- Router: 요청을 컨트롤러로 전달
- Controller: 서비스 호출 및 응답 처리
- Service: 비즈니스 로직 및 데이터 검증
- Repository: 데이터베이스와의 직접 상호작용
1.3 기술적 특징
- 에러 핸들링: try/catch와 미들웨어로 오류 전달
- 데이터 가공: 사용자 친화적인 데이터 제공
- 동적 쿼리 생성: whereCondition을 사용해 ID 기반 데이터 조회
- 모듈화: MVC 패턴 적용으로 유지보수성 향상
- ORM 활용: Prisma로 데이터베이스와 상호작용 간소화
- 유효성 검증: 매개변수와 결과 데이터 검증
- 검색 기능:
- 식당 이름, 메뉴 이름, 메뉴 소개 기반 검색 지원
1.4 데이터 처리 방식
- 정렬: 매출 순서(totalPoint), 별점 순서(averageStar)
- 필터링: 주소(address), 유형(restaurantType), 키워드 검색 지원
- 데이터 구조화: JSON으로 클라이언트 친화적 응답 제공
- 지연 로드: 필요한 필드만 선택해 쿼리 성능 최적화
- 중첩 데이터 처리: 배열(map)을 활용해 주문 조회 데이터 생성
1.5 중요 기능 구현 방식
- 랭킹 조회: 결제 테이블의 매출 데이터를 기준으로 정렬 후 상위 20개 레스토랑 반환
- 매장 검색: Prisma의 contains와 OR 조건을 활용한 다중 조건 검색 구현
- 매장 상세 조회:
- 식당 정보, 메뉴, 리뷰, 소유자 데이터를 함께 반환
- Prisma의 관계 모델링 활용
- 유효성 검증:
- 검색 키워드 누락 시 예외 처리 및 오류 메시지 제공
- 주문/결제 데이터 처리:
- 데이터 배열로 가공하여 직관적인 응답 제공
2. 문제점과 해결 과정
2.1 주요 문제점 및 해결 과정
- 데이터 최적화 오류:
- payment.order가 배열 상태임을 인지하지 못하고 최적화 시도
- paymentId로 연결된 데이터가 중복 조회되는 문제 발생
- Prisma 명령어 실행 문제:
- mode: 'insensitive' 옵션이 최신 버전에서 실행되지 않음
- where 조건으로 %${keyword}%가 작동하지 않음
2.2 기술적 난관 극복 사례
- payment.order 배열을 forEach로 가공하여 해결
- 고객은 userId, 가게는 restaurantId로 조회하도록 수정
- mode: 'insensitive'를 삭제하고 한글 검색 기능에 집중
- where 조건은 contains로 일부분만 일치해도 선택되게 구현.
3. 아쉬운 점 및 개선 방향
3.1 아쉬운 점
- 프론트엔드 미구현으로 웹소켓 연결 기능 제공 불가
- JEST를 활용한 테스트 미진행
- Mocking 부족으로 데이터베이스 의존성 최소화 미흡
- 에러 처리 방식이 단순하여 사용자 피드백 부족
3.2 개선 방향
- 사용자 친화적인 에러 메시지 세분화
- Mock 데이터 및 통합 테스트 프레임워크 추가
- 비동기 작업에 대한 테스트 범위 확장
- 웹소켓을 활용한 실시간 기능 연결
KPT (Keep, Problem, Try)
Keep
- 프로젝트의 전반적인 구조 설계(MVC 패턴, 계층형 아키텍처)가 명확하여 개발 과정에서 유지보수성과 확장성이 높았다.
- 상수 상태넘버와 메시지를 작성하여 코드를 수정하기 쉬워졌다.
- 검색 기능과 데이터 가공 로직(map 활용)에서 사용자 친화적이고 데이터를 프론트에서 사용하기 쉬워졌다.
Problem
- 초기 설계 단계에서 Prisma 최신 버전 호환성을 충분히 검토하지 않아 일부 기능에서 비효율이 발생했다.
- 자동화 테스트와 Mock 데이터를 활용한 테스트 범위가 부족하여 의존성 문제나 예외 상황에 대한 대응이 미흡했다.
- 프론트엔드와의 통합 및 실시간 기능(WebSocket) 구현이 이루어지지 않아 사용자 경험의 완성도가 낮았다.
Try
- 프로젝트 초기에 기술 선택과 설계 검토를 철저히 하고, 최신 기술 사용 시 호환성 테스트를 강화해 문제를 사전에 방지한다.
- JEST와 Mock 데이터를 활용한 테스트 환경을 구축해 모든 기능의 안정성을 점검하고, 예외 처리 로직을 개선한다.
- 데이터 처리시 프론트엔드와의 협업을 고려한다
- 프론트엔드와 협업하여 실시간 기능을 구현하고, 사용자 친화적인 UI와 에러 메시지 설계로 프로젝트의 완성도를 높인다.
'내일배움 과제 > CH4-2(배달앱)' 카테고리의 다른 글
주문진행, 내역 화면 (0) | 2025.01.15 |
---|---|
주문현황 프론트 (0) | 2025.01.14 |
테스트 중에 막힌 것 250109 (0) | 2025.01.09 |
식당 조회 api 구현 (0) | 2025.01.08 |
6조 과제 설계 (0) | 2025.01.06 |