01. 회원 데이터 설계
1단계: 우선 어드민의 회원 관리 화면에서 회원 관련 데이터는 무엇이 있는지 나열해보았다.
- 회원정보 조회는 검색과 결과로 구분된다. 검색 시에는 어떤 항목을 기준으로 검색하는지, 결과에는 어떤 데이터가 보여지는지 구분했다.
- 설명: 해당 항목의 셀렉트 박스나 라디오 버튼을 보면 해당 항목에 어떤 데이터가 쌓이는지 짐작할 수 있다.
- 테이블: 각 데이터가 어떤 테이블에서 왔을지 추측했다. 일단 회원 기본정보 테이블이 있을 것이고, 주문금액과 같은 데이터는 주문 관련 테이블에서 왔을 것이다.
- 등록 방법: 카페24 어드민의 경우는 프로모드와 스마트모드를 지원하고 있는데, 두 모드에서 중복되는 데이터가 최소한의 회원 관련 필수 데이터라고 생각했다.
정리한 내용은 다음과 같다.
2단계: 파악한 데이터 특성을 바탕으로 회원 관련 테이블을 구성했다.
회원가입 시나리오를 떠올려보면, 사용자는 이용약관에 동의하고 개인정보를 입력한다. 따라서 기본정보를 저장하는 테이블과 약관 동의여부를 저장하는 테이블이 있을 것이다. 그리고 약관 자체는 별도의 테이블에 저장해야 할 것이다. 또한 사용자 로그(서비스 이용이력)을 저장하는 테이블이 필요하다.
회원 등급은 처음에 회원 정보 테이블에 넣었다가 약관처럼 변경이력 관리를 위해 별도의 테이블로 구분했다.
불필요하게 데이터 공간을 낭비하지 않기 위해 사용자에게 직접 입력받는 데이터를 최소화했다. 가령 쿠팡의 경우는 아이디(이메일), 비밀번호, 이름, 휴대폰번호 4가지 항목만 입력받는다.
+부가적으로 아이디는 기본키로 지정하지 않는 것이 낫다고 한다. 아이디 외의 별도의 회원 코드를 부여하여 유니크한 값을 관리해야 회원 탈퇴 시 해당 아이디로 재가입하는 경우, 개인정보와 로그정보를 구분해서 관리할 수 있다.(는 내용을 다음의 블로그에서 참고했다)
+현재는 가장 기본적인 아이디 회원가입 방식만 고려했지만 간편 가입 방식을 도입한다면 SNS 인증값을 관리하는 테이블이 필요할 것이다. SNS 인증 테이블에는 인증코드, 인증구분(카카오톡, 구글, 네이버 등) 컬럼이, SNS 인증 이력 테이블에는 SNS 인증여부(P/F/Null) 컬럼이 추가될 것이다.
3단계: 테이블간 관계를 설정했다.
앞서 테이블 정의 시 지정한 기본키를 바탕으로 외래키를 지정했다.
회원등급은 회원등급코드로 관리하고 회원등급 변경이력은 서비스로그 테이블에서 아이디로 참조하도록 했다.
마치며
데이터 모델링을 너무 오랜만에 해서 삽질을 많이 했다. 일단 카페24는 저장하는 데이터가 많고 (가령 결혼유무나 자녀유무 같은 요즘은 이커머스에서 수집하지 않는 개인정보들) CRM 연동 데이터들도 있어서 비교하면서 중복 소거하고 나열하는데 시간이 오래 걸렸다. 다음 분석부터는 좀 더 빨라지지 않을까.. 테이블 정의도 무결성이나 식별 관계를 가려내기 위해 다른 사례들을 찾아보고 대입하는 과정에서 어려움이 있었다. 테이블 관계가 완벽하지는 않지만 최소한 회원 관리에 있어 필요한 데이터가 무엇인지 나열하고 구분할 수 있게 되었다.
사용툴: MySQL, PowerPoint
참고자료
+ 정책 설계 방법에 대해 더 자세히 알고 싶다면