학생들의 수강 신청을 위한 플랫폼.
Link : http://seho0218.synology.me:3205/
로그인 링크 : http://seho0218.synology.me:3205/login
- 모든 입력 조회 폼에서 입력해야하는 칸에 아무것도 입력하지 않은 경우 오류 메시지가 발생한다.
- 교사와 관리자는 이메일을 통해 아이디 찾기와 비밀번호 찾기를 할 수 있으며 이메일 변경도 가능하다.
- 기본적으로 선착순으로 처리되며 학생이 1시에 신청을 했을 경우,다른 학생은 1시를 선택할 수 없다.
- 학생 명부에 등록된 학생만 수강 신청과 시간표 변경을 할 수 있다.
- Spring security 와 관리자 계정을 통해 교사 아이디에 승인 절차를 부여할 수 있도록 되어있다.
- 관리자 계정은 최고 권한을 갖기 때문에 회원가입을 통해 계정이 생성되지 않고
어플리케이션 실행시 하나의 계정만 생성되며 생성되어 있을 경우 추가 생성되지는 않는다.
- 공지사항을 작성 및 수정 삭제할 수 있다.
- 교사의 권한과 역할을 포함한다.
- 교사 회원 가입시 승인 절차 없이 바로 스케쥴을 관리할 수 있으면 문제가 발생할 수 있기에
회원가입한 교사에게 회원 가입한 교사의 권한 인가와 회수를 할 수 있다. - 학생의 담임 교사를 변경할 수 있다.
'갑'선생님에서 '을'선생님으로 담임교사를 변경할 때, 시간이 겹칠 경우 오류메시지를 보여준다. - 교사 계정을 삭제할 수 있으며 삭제할시, 시간표도 같이 삭제된다.
- 어플리케이션 실행시 자동으로 1개의 계정만 생성된다.
- 회원 가입한 후, 관리자의 권한 인가를 받은 교사만 역할을 수행 할 수 있다.
- 학생을 등록, 삭제하고 시간표를 변경할 수 있다.
- 학생을 삭제할 경우, 학생이 등록한 시간표가 같이 사라진다.
- 교사별 스케쥴이 따로 있어 '갑'선생님이 월요일 1시에 수업이 있어도 '을'선생님이 월요일 1시에 수업을 할 수 있다.
-
담당 교사가 등록해줬을 경우, 수업을 조회하거나 신청, 변경을 할 수 있다.
-
교사 회원가입을 통해 회원가입을 할 경우, BCrypt를 통해 비밀번호가 암호화 되고 관리자의 인가를 받아서 학생의 수업을 삭제할 수 있다.
-
누구나 관리자 아이디에 접근이 가능하도록 되어있기 때문에 주기적(1시간) 단위로 비밀번호가 README의 로그인 정보에 있는 비밀번호로 갱신되며 실제로 서비스할 경우, 이 기능은 탑재되지 않는다.
-
입력한 이메일과 아이디를 바탕으로 아이디 찾기 및 비밀번호 찾기가 가능하다.
-
아이디는 가입시 입력한 이메일로 gmail을 통해 전송되며 비밀번호도 마찬가지로 가입시 입력한 gmail을 통해 발송된 인증번호를 바탕으로 비밀번호를 재설정할 수 있다.
관리자 정보
- 아이디 : admin
- 비밀번호: root123!@#
- Spring
- JPA
- QueryDSL
- SpringSecurity
- MySQL
- Docker(Synology)
프로젝트 루트/
─main
│ ├─java
│ │ └─com
│ │ └─attendance
│ │ └─scheduler
│ │ ├─admin
│ │ │ ├─api
│ │ │ ├─application
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ └─repository
│ │ ├─common
│ │ │ └─dto
│ │ ├─config
│ │ │ └─Authority
│ │ ├─course
│ │ │ ├─api
│ │ │ ├─application
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ └─repository
│ │ ├─student
│ │ │ ├─api
│ │ │ ├─application
│ │ │ ├─domain
│ │ │ ├─dto
│ │ │ └─repository
│ │ └─teacher
│ │ ├─api
│ │ ├─application
│ │ ├─domain
│ │ ├─dto
│ │ └─repository
│ └─resources
│ ├─static
│ │ ├─css
│ │ └─js
│ └─templates
│ ├─admin
│ ├─cert
│ ├─class
│ └─manage
└─test
└─java
└─com
└─attendance
└─scheduler
├─admin
│ └─application
├─config
├─course
├─student
└─teacher
scheduler: 스케줄러 모듈의 루트 디렉토리다.
이전에는 계층형으로 프로젝트를 진행하였으나 파일 관리와 역할 분담에 어려운 점이 발생하여 도메인 디렉토리로 변경하였다.
-
PS. DDD를 배우면서 적용시켜가는 중이라 디렉토리는 계속해서 바뀌고 있습니다.
-
ui : 컨트롤러를 담당하고 있습니다.
-
application: 서비스 계층을 담당하고 있습니다.
-
domain : 엔티티를 담당하고 있습니다.
-
Repository : 저장소를 담당하고 있습니다.
-
Config: 스케줄러의 설정과 관련된 클래스들을 포함하는 디렉토리입니다.
- 로그인과 보안에 기본 구조에 관련된 정보가 있습니다.
-
admin
- 관리자 로직을 가지고 있는 디렉토리입니다.
-
common:
- 로그인과 관련 로직 그리고 인증과정에서 사용될 로직을 가진 디렉토리입니다.
-
course:
- 수업과 관련된 로직이 있는 디렉토리입니다.
-
student:
- 수업관련 로직이 있는 디렉토리 입니다
-
teacher:
- 교사와 관련된 로직이 있는 디렉토리 입니다.
-
README.md: 프로젝트에 대한 설명과 사용 방법을 기술한 마크다운 파일입니다.
Link
- JWT Token
- 각 기능에 대한 테스트케이스 작성
- 애그리거트 구조 정리
https://seho0218.tistory.com/category/Develop_And_Improve/scheduler
기본적으로 해결하면서 겪은 경험들을 쓰고 날짜와 실제 해결 또는 에러를 경험한 날짜는 상이함.