[CRM 개발일지 #7] 상담 신청 기능 구현 (완료 페이지, 공통코드 연동, Validation)

2026. 5. 13. 23:55·SpringBoot
728x90

🚀 TODAY WORK

백엔드

  • 상담 신청 완료 페이지(/consult/complete) 이동 구조 적용
  • 상담 희망 시간(CONSULT_TIME) 공통코드(code_mng) 추가
  • 상담 신청 요청 DTO(ConsultApplyRequestDto)에 preferredTime 필드 추가
  • 상담 희망 시간 Spring Validation(@Valid, @NotBlank) 적용
  • activity_logs 테이블 preferred_time 컬럼 추가
  • ActivityLog 엔티티 preferredTime 필드 추가
  • 상담 신청 시 ActivityLog에 상담 희망 시간 저장 로직 구현
  • 상담 희망 시간을 고객 정보가 아닌 상담 이력(ActivityLog)으로 관리하도록 구조 개선
  • 상담 신청 API 및 DB 저장 테스트 완료

프론트엔드

  • 상담 신청 완료 페이지(/consult/complete) 구현
  • 상담 신청 성공 시 완료 페이지 이동 처리
  • 상담 희망 시간 Select UI 추가
  • 공통코드(Store) 기반 CONSULT_TIME Select 연동
  • 상담 희망 시간 필수 입력 Validation 추가
  • 상담 신청 완료 UX 개선(성공 메시지 → 완료 페이지 이동)
  • 상담 신청 기능 통합 테스트 완료

🚨 TODAY ISSUE

상담 희망 시간 공통코드가 화면에 표시되지 않는 문제

상담 희망 시간을 공통코드(CONSULT_TIME)로 관리하도록 변경했지만,

Select에는 "선택하세요."만 표시되고 코드 목록이 출력되지 않는 문제가 발생했다.

 

기존 구현

상담 희망 시간 → 하드코딩 Option 사용
 

변경 구조

상담 희망 시간
        ↓
COMMON_CODE(CONSULT_TIME)
        ↓
Zustand Store
        ↓
Select 자동 생성
 

1-1) 공통코드(Store) 기반 상담 희망 시간 구성

하드코딩을 제거하고 공통코드를 사용하도록 변경했다.

<select
    name="preferredTime"
    value={form.preferredTime}
    onChange={handleChange}
>
    <option value="">선택하세요.</option>

    {codes.CONSULT_TIME?.map((time) => (
        <option
            key={time.code}
            value={time.code}
        >
            {time.name}
        </option>
    ))}
</select>

 

 

1-2) 상담 신청 완료 페이지 구현

상담 신청 성공 후 완료 페이지로 이동하도록 변경했다.

 

기존 구조

상담 신청
→ 성공 메시지 출력
 

변경 구조

상담 신청
        ↓
API 성공
        ↓
/consult/complete 이동
await applyConsult(form);

router.push("/consult/complete");

1-3) 상담 희망 시간 Validation 적용

프론트와 백엔드 모두 필수값으로 검증하도록 수정했다.

Frontend

if (!form.preferredTime) {
    return "상담 희망 시간대를 선택하세요.";
}

Backend

@NotBlank(message = "상담 희망 시간을 선택하세요.")
private String preferredTime;

 

Controller에서도 @Valid를 적용하여 API 요청 시 Validation이 동작하도록 구성했다.

@PostMapping("/apply")
public ResponseEntity<Void> apply(
        @Valid @RequestBody ConsultApplyRequestDto request
) {
    customerService.applyConsult(request);

    return ResponseEntity.ok().build();
}

1-4) ActivityLog 상담 희망 시간 저장

상담 희망 시간은 고객의 고정 정보가 아니라 상담 신청 당시의 정보이므로

Customer가 아닌 ActivityLog에 저장하도록 설계를 변경했다.

activityLogService.createReceivedLog(
        customer,
        request.getPreferredTime(),
        request.getContent()
);

공통코드 미출력 원인

초기에는 DB 또는 API 문제로 판단했지만,

확인 결과 zustand persist의 LocalStorage에 저장되어 있던 기존 공통코드가 먼저 사용되고 있었다.

기존 저장된 Store에는 CONSULT_TIME이 없었기 때문에 화면에서도 출력되지 않았다.

 

해결

common-code-storage(LocalStorage) 삭제
        ↓
공통코드 재조회
        ↓
CONSULT_TIME 정상 로드
        ↓
Select 정상 출력

✨ TODAY RESULT

상담 신청 완료 페이지

  • /consult/complete 페이지 구현
  • 상담 신청 성공 시 자동 이동
  • UX 개선 완료

상담 희망 시간

  • CONSULT_TIME 공통코드 연동
  • 공통코드 Select 정상 출력
  • 필수 입력 Validation 적용
  • Spring Validation 적용

ActivityLog 저장

  • 상담 희망 시간(preferred_time) 저장
  • 상담 내용(Content) 저장
  • 상담 접수 이력 자동 생성 확인

기능 테스트

  • 공통코드 정상 조회 확인
  • 상담 희망 시간 Select 정상 출력
  • 프론트 Validation 정상 동작
  • 백엔드 Validation 정상 동작
  • activity_logs.preferred_time 정상 저장 확인
  • 상담 신청 완료 페이지 이동 정상 동작

🔥 NEXT TODO

  • 관리자 고객 관리 화면 상담 희망 시간 표시 여부 검토
  • 상담 이력(Activity Log) 조회 화면 상담 희망 시간 표시
  • Global Exception Handler 적용
  • Validation 응답 메시지 공통 처리
  • 공통 Form 컴포넌트 리팩토링 검토
  • 공통 Select / Radio 컴포넌트 분리 검토
728x90

'SpringBoot' 카테고리의 다른 글

[CRM 개발일지 #6] 상담 신청 기능 구현 (고객 생성, ActivityLog 자동 저장)  (0) 2026.05.12
[CRM 개발일지 #5] 상담 신청 기능 구조 설계  (0) 2026.05.11
[CRM 개발일지 #4] 상담사 고객 관리와 관리자 대시보드 UI 구축  (0) 2026.05.10
[CRM 개발일지 #3] 관리자 고객 관리 API 연동 작업  (0) 2026.05.08
[CRM 개발일지 #2] 공통 코드 상태 관리 구조 개선 + Zustand 적용  (0) 2026.05.07
'SpringBoot' 카테고리의 다른 글
  • [CRM 개발일지 #6] 상담 신청 기능 구현 (고객 생성, ActivityLog 자동 저장)
  • [CRM 개발일지 #5] 상담 신청 기능 구조 설계
  • [CRM 개발일지 #4] 상담사 고객 관리와 관리자 대시보드 UI 구축
  • [CRM 개발일지 #3] 관리자 고객 관리 API 연동 작업
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    실기
    백준
    코딩테스트
    완전탐색
    백엔드개발자
    배열
    solved.ac
    브루트포스
    정처기오답노트
    level1
    구현
    피보나치
    수학
    springboot
    문자열
    정처기
    level0
    시뮬레이션
    정보처리기사 실기 기출문제
    Level2
    정처기실기
    자바
    dp
    프로그래머스
    알고리즘
    정보처리기사
    java
    기출문제
    자료구조
    정렬
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[CRM 개발일지 #7] 상담 신청 기능 구현 (완료 페이지, 공통코드 연동, Validation)
상단으로

티스토리툴바