[CRM 개발일지 #3] 관리자 고객 관리 API 연동 작업

2026. 5. 8. 23:17·SpringBoot
728x90

🚀 TODAY WORK

백엔드

  • Customer 엔티티 생성 및 JPA 연관관계 설정
  • CustomerRepository 생성
  • CustomerService 구현
  • CustomerResponseDto 분리
  • 관리자 고객 목록 조회 API 구현
  • 담당 상담사(User) 연관관계 연결 (@ManyToOne)
  • 공통 응답(ApiResponse) 구조 연동

프론트엔드

  • /admin/customers 고객 관리 페이지 생성
  • 고객 목록 API 연동
  • 고객 테이블 UI 구현
  • 공통 코드(getCodeName) 연동
  • zustand 기반 공통 코드 preload 구조 적용
  • hydrated 상태 처리 구조 이해 및 적용
  • 관리자 레이아웃 사이드 메뉴 구성
  • 관리자 페이지 내부 라우팅 연결
    • /admin
    • /admin/users
    • /admin/customers

🚨 TODAY ISSUE

1. TypeScript(useState<Customer\[\]>) 오류 발생

초기에는 page.jsx 파일에서 TypeScript 문법을 사용하면서 오류가 발생했다.

const [customers, setCustomers] = useState<Customer[]>([]);

원인은 JSX 파일에서는 제네릭 타입 문법을 사용할 수 없기 때문이었다.

page.jsx → page.tsx

2. camelCase / snake\_case 불일치 문제

백엔드 DTO는 camelCase로 내려가는데,
프론트에서는 snake_case로 접근하고 있어서 데이터가 출력되지 않았다.

 

문제 코드

customer.customer_id
customer.interest_course

해결 코드

customer.customerId
customer.interestCourse

JPA + Jackson 환경에서는 camelCase 기준으로 통일하는 것이 중요하다는 점을 다시 확인했다.


3. 공통 코드 초기 렌더링 문제

zustand persist 복원 전에는 codes = {} 상태라
초기 렌더 시 undefined가 출력될 수 있었다.

원인

persist.rehydrate() 이전 상태

해결

if (!hydrated) {
  return <div>공통코드 로딩중...</div>;
}

구조를 추가해 안정적으로 공통 코드가 로드된 이후 렌더링하도록 수정했다.


🧠 핵심 포인트

Customer ↔ User 연관관계 설정

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

CRM 구조에서 고객과 상담사 관계는 핵심 도메인이므로
초기부터 연관관계를 잡아두는 방향으로 설계했다.


DTO 분리 이유: Entity를 직접 반환하지 않고 DTO를 사용하는 이유를 다시 정리했다.

  • 비밀번호 등 민감 정보 노출 방지
  • 필요한 데이터만 반환
  • 프론트 구조 명확화

공통 코드 전역 관리 구조

CodeInitializer
↓
zustand persist
↓
codes preload
↓
getCodeName()

실무 ERP / CRM 스타일의 공통 코드 관리 구조를 적용했다.


📌 오늘 구현 완료 화면

  • 관리자 대시보드
  • 사용자 관리
  • 고객 관리
  • 관리자 사이드 메뉴

🔥 NEXT TODO

  • 상담사 대시보드 (/consultant/dashboard) 화면 생성
  • 상담사 고객 목록 (/consultant/customers) 화면 생성
  • 상담사 고객 목록 API 연결
  • 상담사 고객 테이블 출력
  • 상담사 권한 접근 구조 확인
  • 상담사 layout/sidebar 구조 검토

💬 한 줄 회고

오늘은 CRM 관리자 구조가 본격적으로 실무형 형태를 갖추기 시작한 날이었다.
특히 공통 코드 관리와 JPA 연관관계 설계 흐름을 실제 프로젝트에 적용해본 것이 큰 수확이었다.

728x90

'SpringBoot' 카테고리의 다른 글

[CRM 개발일지 #5] 상담 신청 기능 구조 설계  (0) 2026.05.11
[CRM 개발일지 #4] 상담사 고객 관리와 관리자 대시보드 UI 구축  (0) 2026.05.10
[CRM 개발일지 #2] 공통 코드 상태 관리 구조 개선 + Zustand 적용  (0) 2026.05.07
[CRM 개발일지 #1] 관리자 사용자 API 연결 및 응답 구조 개선  (0) 2026.05.06
84  (3) 2025.07.07
'SpringBoot' 카테고리의 다른 글
  • [CRM 개발일지 #5] 상담 신청 기능 구조 설계
  • [CRM 개발일지 #4] 상담사 고객 관리와 관리자 대시보드 UI 구축
  • [CRM 개발일지 #2] 공통 코드 상태 관리 구조 개선 + Zustand 적용
  • [CRM 개발일지 #1] 관리자 사용자 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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[CRM 개발일지 #3] 관리자 고객 관리 API 연동 작업
상단으로

티스토리툴바