도메인
•
서브도메인 12개
◦
교과서 6개
◦
선생님 / 학생
로그인 연동
•
Mutation 신규 생성
◦
UID (AuthCode)
◦
유저 타입(AuthType)
▪
STUDENT
▪
TEACHER
◦
출판사
▪
지학사
▪
교학사
◦
학년(교재)
▪
중등수학 1 ( 교학사 )
•
3000 세트 (그룹)
▪
중등영어 1 ( 지학사 )
▪
공통영어 1 ( 지학사 )
▪
공통영어 2 ( 지학사 )
▪
공통수학 1 ( 지학사 )
▪
공통수학 2 ( 지학사 )
계정 생성
•
미리 생성하는 데이터들
◦
유저
◦
그룹
◦
CCC
•
과목당 3천 세트 생성
•
맵핑
◦
UID: 미리 생성된 유저 아이디
◦
맵핑 유무 판단
▪
존재 → 맞는 토큰 반환
▪
존재 X → 맵핑 & 맞는 토큰 반환
◦
동시성 대응
•
추가 요구사항
◦
학생/선생님이 동일한 그룹안에 들어갈 수 있게 진행
•
케이스
1.
학생으로 최초 로그인
2.
선생님으로 최초 로그인
3.
학생 → 선생님으로 로그인
4.
선생님 → 학생으로 로그인
5.
학생으로 재 로그인 ( 로그아웃 후 다시 접속 )
6.
선생님으로 재 로그인 ( 로그아웃 후 다시 접속 )
동시성 대응
유저 선점이 동시에 일어날 수 있음
•
대응 옵션
◦
DB 비관적락 (SELECT FOR UPDATE)
▪
mysql skip lock
◦
DB 네임드락
◦
Redis 분산락
◦
Redis 큐
▪
선점가능한 유저 목록 미리 큐 적재 & POP
◦
Redis
◦
기타
▪
맵핑 테이블 제약조건 추가 (userId 유니크 키)
•
3월 추후 대응 (피크 대용량 트래픽 대응)
◦
큐를 앞에 두고 요청을 직렬화
◦
워커를 통해 요청을 순차적으로 처리
◦
FE에서는 요청 완료 시 SSE로 FE에 응답 전달
논의 사항
맵핑 테이블 설계
•
colulmns
◦
external_user_id (uid)
▪
auth_code
◦
user_id
◦
user_type
▪
student / teacher
◦
groupId
◦
교과서Id
▪
교학사 중등수학1
•
Constraint
◦
external_user_id & user_type
◦
user_id
미리 생성해놓은 유저 탐색 방식
사용자의 학생/선생님 계정이 동일한 그룹안에 들어갈 수 있게 진행
•
Teacher 1, Student1를 탐색할 수 있는 방식?
•
Group
◦
Teacher 1
◦
Student 1
◦
Student 2 (더미 계정)
◦
Student 3 (더미 계정)
◦
Student 4 (더미 계정)
◦
Student 5 (더미 계정)