[CRM 개발일지 #5] 상담 신청 기능 구조 설계

2026. 5. 11. 15:08·SpringBoot
728x90

🚀 TODAY WORK

백엔드

  • 상담 신청 기능 구조 설계
  • ActivityLog 엔티티 생성
  • ActivityLog Repository 생성
  • ActivityLog Service 생성
  • 고객 중복 조회 기능 설계
  • 연락처 + 생년월일 기준 고객 조회 메서드 추가
  • 상담 신청 Request DTO 설계
  • 상담 신청 API 구조 설계
  • 상담 신청 Controller 패키지 구조 검토

🚨 TODAY ISSUE

고객 중복 생성 방지 기준 정의

  • 상담 신청은 비회원도 가능하기 때문에 동일 고객이 여러 번 신청할 수 있다.
  • 고객 중복 생성 방지를 위해 어떤 값을 기준으로 고객을 식별할지 검토했다.

 

기존 고려안

문제점 : 동명이인 존재 가능

이름 + 연락처

최종 결정

해당 기준으로 기존 고객 여부를 판단하도록 설계했다.

연락처 + 생년월일

ActivityLog 역할 분리

  • 처음에는 CustomerService 내부에서 상담 기록 저장까지 처리하려고 했다.

기존 구조

  • 문제점 : 고객 관리와 상담 기록 관리 책임이 혼합됨
CustomerService
 ├ 고객 생성
 └ 상담 기록 생성

변경 구조

  • 상담 기록 생성 로직을 별도 Service로 분리하여 역할을 명확히 했다.
CustomerService
 └ 고객 생성/조회

ActivityLogService
 └ 상담 기록 생성

상담 신청 API 패키지 구조 검토

현재 API 구조

api
 ├ admin
 ├ auth
 ├ common
 ├ consultant
 └ user

상담 신청 : 별도 패키지 생성으로 결정

관리자 전용 ❌
상담사 전용 ❌
사용자 전용 ❌

예정 구조

api
 ├ admin
 ├ auth
 ├ consultant
 ├ user
 └ consult

✨ TODAY RESULT

ActivityLog 엔티티 구현

  • 상담 기록 테이블 매핑 완료
@Entity
@Table(name = "activity_logs")
public class ActivityLog {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long activityId;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "customer_id")
    private Customer customer;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "counselor_id")
    private User counselor;
}

고객 중복 조회 기능 추가 (CustomerRepository)

Optional<Customer> findByPhoneAndBirthDate(
        String phone,
        LocalDate birthDate
);

상담 신청 DTO 설계

public class ConsultApplyRequest {

    private String name;

    private LocalDate birthDate;

    private String phone;

    private String email;

    private String interestCourse;

    private String leadSource;

    private String content;
}

상담 신청 처리 흐름 설계

상담 신청

↓

연락처 + 생년월일 조회

↓

기존 고객 여부 확인

↓

신규 고객 생성 또는 기존 고객 재사용

↓

ACTIVITY_LOG 생성

↓

응답 반환

🔥 NEXT TODO

  • ConsultController 생성
  • POST /api/consult/apply API 구현
  • CustomerService 상담 신청 로직 구현
  • ActivityLog 자동 생성 연동
  • Postman API 테스트
  • 상담 신청 프론트 페이지(/consult/apply) 구현
  • 상담 신청 API 연동
  • 입력값 유효성 검증 추가
  • 상담 신청 완료 메시지 처리
728x90

'SpringBoot' 카테고리의 다른 글

[CRM 개발일지 #7] 상담 신청 기능 구현 (완료 페이지, 공통코드 연동, Validation)  (0) 2026.05.13
[CRM 개발일지 #6] 상담 신청 기능 구현 (고객 생성, ActivityLog 자동 저장)  (0) 2026.05.12
[CRM 개발일지 #4] 상담사 고객 관리와 관리자 대시보드 UI 구축  (0) 2026.05.10
[CRM 개발일지 #3] 관리자 고객 관리 API 연동 작업  (0) 2026.05.08
[CRM 개발일지 #2] 공통 코드 상태 관리 구조 개선 + Zustand 적용  (0) 2026.05.07
'SpringBoot' 카테고리의 다른 글
  • [CRM 개발일지 #7] 상담 신청 기능 구현 (완료 페이지, 공통코드 연동, Validation)
  • [CRM 개발일지 #6] 상담 신청 기능 구현 (고객 생성, ActivityLog 자동 저장)
  • [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
    알고리즘
    Level2
    springboot
    배열
    코딩테스트
    정처기실기
    java
    정보처리기사 실기 기출문제
    브루트포스
    자료구조
    완전탐색
    구현
    백준
    백엔드개발자
    정보처리기사
    자바
    dp
    정렬
    level0
    수학
    문자열
    실기
    프로그래머스
    정처기
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[CRM 개발일지 #5] 상담 신청 기능 구조 설계
상단으로

티스토리툴바