메가존 클라우드 과제
소셜로그인한 이메일 아이디로 가입자를 받고 회사이름을 입력하게 해서, 회사가 충전하고 얼마나 썼는지 관리하고, 어떤 서비스를 사용하는지, 언제 접근하는지에 대한 업무 로직이 많이 사용되는데 이에 대해 파악해보자.
☑️ Provider System에서 Schema 설계 및 CRUD 구현
☑️ 좌측 메뉴를 통해 client에서 원하는 데이터 값을 볼 수 있도록 UI 구현
Back: NodeJS
, Express
, MongoDB
, Atlas
, Mongoose
Front: VueJS
, Vue-Bootstrap
✔︎ 가입자 리스트 → 이메일, 이름, 사진 정보를 DB에 저장 (Create 메서드로 임의의 데이터 생성)
✔︎ 백엔드 → Update, Delete 구현
✔︎ 소셜 로그인한 유저가 회사 정보 입력하는 부분
✔︎ admin 패스워드 부분에서는 sha256
이라고 checksum해주는 nodejs 모듈 사용해서 해시값으로만 저장하는 방식으로 구현
✔︎ 차감 결과 ➡️ success / fail
✔︎ 사용 서비스 이름 ➡️ 서비스 가격 정책에 정의해둔 Service1 ~ Service5 참조해서 사용
✔︎ Service1 ~ Service5 ➡️ -100 ~ -500으로 정의
✔︎ 회사 아이디, 서비스 이름 모두 다른 테이블에서 참조
✔︎ 소셜 로그인, 콘솔 부분은 상단 탭으로 구현 예정
Representation | Verb | URI |
---|---|---|
가입자 수정 | PUT | /api/users/:userId |
가입자 삭제 | PATCH | /api/users/:userId |
회사 & 담당자 전체 조회 | GET | /api/enterprises/enterpriseInfo |
가입자 전체 조회 | GET | /api/users/info |
회사 충전 및 지출 이력 조회 | GET | /api/enterprises/coinAndCacheInfo |
서비스 가격 정책 조회 | GET | /api/enterprises/serviceInfo |
회사 서비스 이력 조회 | GET | /api/enterprises/userServiceInfo |
가입자 접근 이력 조회 | GET | /api/enterprises/socialAccessRecord |
회사 접근 이력 조회 | GET | /api/enterprises/enterpriseAccessRecord |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
아이디 | id | ObjectID | PK | Not Null | |
이메일 | Varchar(50) | Not Null | |||
이름 | name | Varchar(30) | Not Null | ||
사진 | photo | Varchar(255) | 이미지 URL | ||
가입 경로 | joinPath | Varchar(40) | Not Null | gmail, naver … | |
가입 일시 | joinDate | Datetime | Not Null | default: now() | |
탈퇴 일시 | quitDate | Datetime |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
구분 아이디 | id | ObjectID | PK | Not Null | |
이메일 | Varchar(50) | ||||
담당자 이메일 | adminEmail | Varchar(50) | FK | User 참조 | |
담당자 이름 | adminName | Varchar(30) | |||
담당자 패스워드 | adminPassword | Password | checksum | ||
담당자 연락처 | adminPhoneNumber | Varchar(30) | |||
사업자 번호 | businessNumber | Varchar(50) | |||
콘솔 정보 | consoleInfo | Varchar(255) | Not Null | ||
회사 아이디 | enterpriseId | Varchar(50) | Not Null | ex) samsungSdd | |
회사 이름 | enterpriseName | Varchar(30) | Not Null | ex) 삼성 |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
아이디 | id | ObjectID | PK | Not Null | |
회사 아이디 | enterpriseId | Varchar(50) | Not Null | ||
현재 코인 | coin | Integer | Not Null | ||
현재 캐시 | cache | Integer | Not Null | ||
현재 보너스 | bonus | Integer | Not Null | ||
마지막 갱신 일시 | lastRenewalDate | Datetime | Not Null | ||
캐시 충전 일시 | cacheChargedDate | Datetime | Not Null | ||
충전 캐시 | chargedCache | Integer | Not Null | ||
보너스 충전 일시 | bonusChargedDate | Datetime | Not Null | ||
충전 보너스 | chargedBonus | Integer | Not Null | ||
사용 서비스 아이디 | serviceId | Varchar(10) | FK | Not Null | Service 참조 |
차감 일시 | deductedDate | Datetime | Not Null | ||
차감 결과 | deductedResult | Varchar(15) | Not Null | success (true) / fail (false) |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
아이디 | id | ObjectID | PK | Not Null | |
서비스 이름 | serviceName | Varchar(15) | Not Null | ex) Service1 | |
차감 코인 | deductedCoin | Integer | Not Null | ex) 500 |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
아이디 | id | ObjectID | PK | Not Null | |
회사 아이디 | enterpriseId | Varchar(50) | Not Null | ||
회사 이름 | enterpriseName | Varchar(30) | Not Null | ||
사용 서비스 이름 | serviceName | Varchar(15) | Not Null | Service 참조 | |
월과금 시작일 | monthlyFeeStartDate | Datetime | Not Null | default: now() | |
월과금 종료일 | monthlyFeeEndDate | Datetime | Not Null | 월과금 시작일로부터 1개월 후 |
Column (KR) | Column (EN) | DataType | Key | Null | 비고 |
---|---|---|---|---|---|
아이디 | id | ObjectID | PK | Not Null | |
담당자 이메일 | ObjectID | FK | Not Null | ||
담당자 이름 | name | Not Null | |||
회사 아이디 | enterpriseId | Varchar(50) | Not Null | ||
회사 이름 | enterpriseName | Varchar(30) | Not Null | ||
마지막 로그인 일자 | lastLoginDate | Datetime | Not Null | ||
마지막 로그인 IP | lastLoginIP | Varchar(20) | Not Null | ex) 211.1.3.2 | |
마지막 로그인 위치 | lastLoginGEO | Varchar(20) | Not Null | ex) S.Korea |