[미소] 클론코딩 프로젝트 1) 데이터베이스와 API 설계

2023. 8. 9. 17:11초기 과업/BackEnd

작성자알 수 없는 사용자

728x90
반응형

안녕하세요. 기깔나는 사람들에서 백엔드를 맡고 있는 황시아입니다.

이번에 크루로 합류하게 되면서 미소라는 사이트의 이사 및 입주청소 서비스의 클론코딩 프로젝트를 진행하게 되어 프로젝트 초기 구성부터 개발까지의 전 단계를 기록해보려 합니다.

오늘은 첫 단계로 초기 데이터베이스와 API 설계를 작성하겠습니다.

아직 경험이 많지 않아 최선의 설계는 아니라는 점을 미리 말씀드립니다.

 

 

1. API 설계

 

제가 구현해야 하는 서비스는 크게 이용자 서비스와 관리자 서비스로 나뉘어져 있습니다.

API URL 설계시 각 기능의 [대분류 > 소분류 > 상세기능] 과 같은 트리 형태로 구성했습니다.

구현해야 하는 서비스들의 API 설계를 정리해보면 다음과 같습니다.

 

- URL 접두어

/api

 

- 이용자 서비스 URL

1. 인증/인가 : /auth/member

2. 견적서 서비스 : /service/estimate

3. 계약서 서비스 : /service/contract

4. 광고용 서비스 : /service/ad

5. 협력 업체 등록 : /vendor/join

6. 협력 업체 계약 : /vendor/contract

7. 이용자 및 업체 메시지 기능 : /message/customer

 

- 관리자 서비스 URL

1. 인증/인가 : /auth/manager

2. 이용자 및 회원정보 관리 : /manage/member

3. 견적서 관리 : /manage/estimate

4. 계약서 관리 : /manage/contract

5. 일정 관리 : /manage/schedule

6. 협력 업체 일정 관리 : /manage/schedule/vendor

7. 협력 업체 업무 관리 : /manage/work/vendor

8. 협력 업체, 업체 메시지 기능 : /message/vendor

 

 

2. 데이터베이스 설계

 

 

ERD 다이어그램입니다.

ERD CLOUD 무료버전으로 만들었더니 공간이 부족해서 세로 버전이 최선이네요..ㅎㅎ

관계형 데이터베이스로 PK와 FK를 이용해 각 테이블들의 관계를 설정했습니다.

 

데이터베이스를 설계하면서 고민했던 부분은 회원과 비회원 정보를 어떻게 관리 할 것이냐 였는데,

구글링 해 보니까 두 정보를 한 테이블에서 관리하면 비회원 정보를 삽입할 때 불필요한 NULL이 많이 들어가게 되어 쓰레기 정보가 넘쳐나게 된다며 테이블 분리를 추천하는 글이 많아 저도 분리해 보았습니다.

대신 견적서와 계약서의 회원 FK는 회원 테이블과 비회원 테이블의 PK를 각각 저장하도록 컬럼을 추가하되, NULL을 허용하는 것으로 설계했습니다.

그리고 비회원의 일련번호를 생성해서 비회원이 회원으로 가입하게 되면 이 일련번호를 회원 테이블로 그대로 가져가는 방법도 추천하는 글이 있어 일련번호 컬럼을 추가했습니다.

그러면 비회원에서 회원이 되어도 비회원 시절의 이용내역도 그대로 조회할 수 있을거 같습니다.

 

이렇게 많은 테이블을 설계하고 관계를 정의하는 작업은 처음이라 부족한 점이 많을 것입니다. 앞으로 프로젝트를 진행해 가면서 계속 수정될 예정입니다.

 

 

오늘은 여기까지 작성하고 내일부터는 프로젝트 구성에 들어가도록 하겠습니다.

 

728x90
반응형