|
1 | | -# React + TypeScript + Vite |
| 1 | +# Tutorial-Sejong |
2 | 2 |
|
3 | | -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. |
| 3 | +<div align="center"> |
| 4 | + <img width="50%" src="https://github.com/user-attachments/assets/b724bb30-bb52-4a03-8f5c-31d546cabfb8"> |
| 5 | + <br> |
| 6 | + Tutorial-Sejong은 실제와 유사한 환경에서 수강 신청 연습할 수 있다면 많은 도움이 될 것 같아 만들게 된 서비스 입니다. |
| 7 | + <br> |
| 8 | + 수강신청이 처음이거나 오랜만 또는 연습이 필요한 세종대 학우들을 위해 최대한 세종대학교 학사시스템 UI와 비슷하게 제작했습니다. |
| 9 | +</div> |
4 | 10 |
|
5 | | -Currently, two official plugins are available: |
| 11 | +## 목차 |
6 | 12 |
|
7 | | -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh |
8 | | -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh |
| 13 | +<b> 1. [개요](#개요)</b> |
| 14 | +<br> |
| 15 | +<b> 2. [주요 기능](#주요-기능)</b> |
| 16 | +<br> |
| 17 | +<b> 3. [팀 소개](#팀-소개)</b> |
| 18 | +<br> |
| 19 | +<b> 4. [기술스택](#기술스택)</b> |
| 20 | +<br> |
| 21 | +<b> 5. [화면](#화면)</b> |
| 22 | +<br> |
| 23 | +<b> 6. [디렉토리 구조](#디렉토리-구조)</b> |
9 | 24 |
|
10 | | -## Expanding the ESLint configuration |
| 25 | +## 개요 |
11 | 26 |
|
12 | | -If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: |
| 27 | +<b>개발 기간:</b> 2024.07~204.09 |
| 28 | +<br> |
| 29 | +<b>배포 주소:</b> https://tutorial-sejong.com/ |
| 30 | +<br> |
| 31 | +<b>프론트 깃허브 주소:</b> https://github.com/tutorial-sejong/cr-frontend |
| 32 | +<br> |
| 33 | +<b>백엔드 깃허브 주소:</b> https://github.com/tutorial-sejong/cr-backend |
13 | 34 |
|
14 | | -- Configure the top-level `parserOptions` property like this: |
| 35 | +## 팀 소개 |
| 36 | + |
| 37 | +<table> |
| 38 | +<thead> |
| 39 | + <tr> |
| 40 | + <th colspan="3">Tutorial-Sejong</th> |
| 41 | + </tr> |
| 42 | +</thead> |
| 43 | +<tbody> |
| 44 | + <tr> |
| 45 | + <td>안정현</br> <a href="https://github.com/Anhye0n">깃허브</a><br/> </td> |
| 46 | + <td>오지현</br> <a href="https://github.com/zhy2on">깃허브</a><br/> </td> |
| 47 | + <td>문지원</br> <a href="https://github.com/jeewonMoon">깃허브</a><br/> </td> |
| 48 | + </tr> |
| 49 | +</tbody> |
| 50 | +</table> |
| 51 | + |
| 52 | +## 주요 기능 |
| 53 | + |
| 54 | +### 💡2024년 2학기 시간표 검색 |
| 55 | + |
| 56 | +- 해당 학기에 맞는 시간표로 업데이트 됩니다. |
| 57 | + |
| 58 | +### 💡관심 과목 담기 |
| 59 | + |
| 60 | +### 💡수강신청 |
| 61 | + |
| 62 | +- 신청 시 10% 확률로 수강 여석이 없을 수 있습니다. |
| 63 | +- 시작 후 35초가 지나면 모든 과목의 수강 여석이 마감됩니다. |
| 64 | + |
| 65 | +## 기술스택 |
| 66 | + |
| 67 | +### 프론트엔드 |
| 68 | + |
| 69 | +<img src="https://img.shields.io/badge/vite-646CFF?style=for-the-badge&logo=vite&logoColor=white"> <img src="https://img.shields.io/badge/react-61DAFB?style=for-the-badge&logo=react&logoColor=black"> <img src="https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white"> <img src="https://img.shields.io/badge/styledcomponents-DB7093?style=for-the-badge&logo=styledcomponents&logoColor=white"> |
| 70 | +<img src="https://img.shields.io/badge/reduxtoolkit-764ABC?style=for-the-badge&logo=redux&logoColor=white"> <img src="https://img.shields.io/badge/githubactions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white"> |
| 71 | + |
| 72 | +### 백엔드 |
| 73 | + |
| 74 | +<img src="https://img.shields.io/badge/java-007396?style=for-the-badge&logo=java&logoColor=white"> |
| 75 | +<img src="https://img.shields.io/badge/spring boot-6DB33F?style=for-the-badge&logo=spring boot&logoColor=white"> |
| 76 | +<img src="https://img.shields.io/badge/spring security-6DB33F?style=for-the-badge&logo=Spring Security&logoColor=white"> <img src="https://img.shields.io/badge/MariaDB-003545?style=for-the-badge&logo=mariadb&logoColor=white" /> |
| 77 | + |
| 78 | +### 협업 툴 |
| 79 | + |
| 80 | +<img src="https://img.shields.io/badge/github-181717?style=for-the-badge&logo=github&logoColor=white"> <img src="https://img.shields.io/badge/notion-000000?style=for-the-badge&logo=Notion&logoColor=white"> <img src="https://img.shields.io/badge/jira-0052CC?style=for-the-badge&logo=jira&logoColor=white"> |
| 81 | + |
| 82 | +## 화면 |
| 83 | + |
| 84 | +<details> |
| 85 | +<summary>화면 접기/펼치기</summary> |
| 86 | +<div markdown="1"> |
| 87 | + |
| 88 | +### 로그인 |
| 89 | + |
| 90 | +<img src="https://github.com/user-attachments/assets/baba38ff-0306-441f-83bd-0bf1e4810b0d"> |
| 91 | +- 회원가입 없이 임의 학번으로 로그인 |
| 92 | +<br> |
| 93 | +- 동일한 학번과 비밀번호로 접속 시 관심과목 등 데이터 유지 |
| 94 | + |
| 95 | +### 시간표 검색 |
| 96 | + |
| 97 | +<img src="https://github.com/user-attachments/assets/20b5eee1-a3a1-436b-8e21-6ef737530e5a"> |
| 98 | + |
| 99 | +### 관심과목 담기 |
| 100 | + |
| 101 | +<img src="https://github.com/user-attachments/assets/9725af7c-c3a2-4489-9ad5-b50efc428e23"> |
| 102 | + |
| 103 | +### 수강신청 |
| 104 | + |
| 105 | +<img src="https://github.com/user-attachments/assets/da3a3709-5bd7-48a4-ab59-4bdcb406d048"> |
| 106 | +- 헤더의 시간에 맞춰 시작 |
| 107 | +<br> |
| 108 | +- 시작 버튼을 눌러야 검색 가능 |
| 109 | +<img src="https://github.com/user-attachments/assets/ff47df6e-ec37-4923-b854-c7f5bacbd341"> |
| 110 | +- 랜덤으로 매크로 방지 이미지 생성 |
| 111 | +<img src="https://github.com/user-attachments/assets/285808f2-102b-491a-8aea-75cfe88171c7"> |
| 112 | +- 시작 버튼을 누르고 35초가 지났거나 10%의 확률로 실패 |
| 113 | +<img src="https://github.com/user-attachments/assets/a36c196a-acc1-47b5-8d8a-7e75d38e60c5"> |
| 114 | +- 확인 버튼 누를 시 수강 신청 실패로 간주, 새로고침 |
| 115 | +</div> |
| 116 | +</details> |
| 117 | +<br> |
| 118 | + |
| 119 | +## 디렉토리 구조 |
15 | 120 |
|
16 | | -```js |
17 | | -export default { |
18 | | - // other rules... |
19 | | - parserOptions: { |
20 | | - ecmaVersion: 'latest', |
21 | | - sourceType: 'module', |
22 | | - project: ['./tsconfig.json', './tsconfig.node.json'], |
23 | | - tsconfigRootDir: __dirname, |
24 | | - }, |
25 | | -} |
26 | 121 | ``` |
| 122 | +cs-frontend |
| 123 | +├─ .eslintrc.cjs : lint 규칙 |
| 124 | +├─ .prettierrc : prettier 설정 |
| 125 | +├─ index.html |
| 126 | +├─ package-lock.json |
| 127 | +├─ package.json |
| 128 | +├─ README.md |
| 129 | +├─ src |
| 130 | +│ ├─ apis |
| 131 | +│ │ ├─ api : api 요청/응답 코드 폴더 |
| 132 | +│ │ │ ├─ auth.ts : 로그인 및 인증 관련 코드 |
| 133 | +│ │ │ └─ course.ts : 강의 및 수강신청 관련 코드 |
| 134 | +│ │ └─ utils : 인스턴스 / 공통 함수 폴더 |
| 135 | +│ ├─ App.tsx |
| 136 | +│ ├─ assets |
| 137 | +│ │ ├─ data |
| 138 | +│ │ │ └─ filter.ts : 필터 옵션 데이터 |
| 139 | +│ │ ├─ img : 아이콘이나 로고 등 필요한 이미지 폴더 |
| 140 | +│ │ └─ types : 자주 쓰이는 타입 분리 폴더 |
| 141 | +│ ├─ components |
| 142 | +│ │ ├─ common : 여러 곳에서 쓰이는 컴포넌트 폴더 |
| 143 | +│ │ │ ├─ FilterButton.tsx : 검색, 조회 등 필터 적용 버튼 |
| 144 | +│ │ │ ├─ FilterInput.tsx |
| 145 | +│ │ │ ├─ Modal |
| 146 | +│ │ │ │ ├─ handlers |
| 147 | +│ │ │ │ │ └─ handler.tsx |
| 148 | +│ │ │ │ ├─ AntiMacroCodeModal.tsx : 매크로 모달 |
| 149 | +│ │ │ │ ├─ EnrollmentInfoModal.tsx : 수강인원 등 강의 정보 모달 |
| 150 | +│ │ │ │ ├─ ErrorModal.tsx |
| 151 | +│ │ │ │ ├─ InfoModal.tsx : 수강신청 모달 |
| 152 | +│ │ │ │ ├─ LoadingModal.tsx |
| 153 | +│ │ │ │ └─ WaitingModal.tsx : 접속 대기 모달 |
| 154 | +│ │ │ ├─ SelectBox.tsx : 필터 드롭다운 |
| 155 | +│ │ │ └─ Table : 강의 목록 테이블 |
| 156 | +│ │ ├─ CourseRegister : 수강신청 탭 |
| 157 | +│ │ ├─ DeleteAccount |
| 158 | +│ │ ├─ Header |
| 159 | +│ │ │ ├─ ... |
| 160 | +│ │ │ └─ TopNav.tsx : 타이틀 |
| 161 | +│ │ ├─ LectureList : 시간표 검색 탭 |
| 162 | +│ │ ├─ LoginForm |
| 163 | +│ │ ├─ Menubar : 사이드바 |
| 164 | +│ │ ├─ ProtectedRoute.tsx : 사용자 인증 여부에 따른 접근 제한 |
| 165 | +│ │ ├─ TabMenu |
| 166 | +│ │ └─ Wishlist : 관심과목 탭 |
| 167 | +│ ├─ custom.d.ts : svg 관련 설정 파일 |
| 168 | +│ ├─ main.tsx |
| 169 | +│ ├─ pages |
| 170 | +│ │ ├─ DeleteAccount.tsx |
| 171 | +│ │ ├─ index |
| 172 | +│ │ │ ├─ Home.tsx |
| 173 | +│ │ │ ├─ Login.tsx |
| 174 | +│ │ │ └─ NotFound.tsx : 에러 페이지 |
| 175 | +│ │ └─ Maintenance.tsx : 리뉴얼 중 페이지 |
| 176 | +│ ├─ store : 리덕스 툴킷 관련 폴더 |
| 177 | +│ │ ├─ hooks |
| 178 | +│ │ │ └─ index.ts |
| 179 | +│ │ ├─ modules |
| 180 | +│ │ │ ├─ ... |
| 181 | +│ │ │ └─ errorSlice.ts : 에러 모달에 띄울 정보 저장 |
| 182 | +│ │ └─ store.ts |
| 183 | +│ ├─ styles : 공통 스타일 |
| 184 | +│ ├─ utils |
| 185 | +│ │ ├─ randomUtils.ts : 랜덤 학번 및 숫자 생성 |
| 186 | +│ │ └─ scrollToTop.ts : 페이지 이동 시 스크롤 초기화 |
| 187 | +│ └─ vite-env.d.ts |
| 188 | +├─ tsconfig.app.json |
| 189 | +├─ tsconfig.json |
| 190 | +├─ tsconfig.node.json |
| 191 | +└─ vite.config.ts |
27 | 192 |
|
28 | | -- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` |
29 | | -- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` |
30 | | -- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list |
| 193 | +``` |
0 commit comments