Skip to content

Latest commit

Β 

History

442 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“š EduManager

"흩어진 κ°•μ˜μ™€ μŠ€ν„°λ””, ν•œ κ³³μ—μ„œ κ΄€λ¦¬ν•˜λ‹€"

κ°•μ‚¬λŠ” κ°•μ˜λ₯Ό μ—΄μ–΄ 일정/곡지/과제λ₯Ό κ΄€λ¦¬ν•˜κ³ , 학생은 κ°•μ˜λ₯Ό μ‹ μ²­ν•˜κ³  μŠ€ν„°λ”” 그룹을 λ§Œλ“€μ–΄ ν•¨κ»˜ κ³΅λΆ€ν•˜λŠ” ꡐ윑 관리 μ›Ή ν”Œλž«νΌμž…λ‹ˆλ‹€.

  • μ„œλΉ„μŠ€λͺ…: EduManager
  • 개발 κΈ°κ°„: 2024.10 ~ 2024.12
  • 개발 인원: 4λͺ… (λ™λ•μ—¬μžλŒ€ν•™κ΅ λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ‘œκ·Έλž˜λ° ꡐ과 νŒ€ ν”„λ‘œμ νŠΈ)
  • 핡심 νŠΉμ§•: ν”„λ ˆμž„μ›Œν¬ 없이 Servlet/JSP + 순수 JDBC둜 직접 κ΅¬ν˜„ν•œ κ³„μΈ΅ν˜• MVC

썸넀일

λͺ©μ°¨

ν”„λ‘œμ νŠΈ κ°œμš”

πŸ“– ν”„λ‘œμ νŠΈ μ†Œκ°œ

EduManagerλŠ” κ°•μ˜μ™€ μŠ€ν„°λ””λ₯Ό ν•œ κ³³μ—μ„œ μš΄μ˜ν•˜λŠ” ꡐ윑 관리 μ›Ή μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ‘œκ·Έλž˜λ° ꡐ과 ν”„λ‘œμ νŠΈμΈ 만큼, μŠ€ν”„λ§/λ§ˆμ΄λ°”ν‹°μŠ€ 같은 ν”„λ ˆμž„μ›Œν¬μ— κΈ°λŒ€μ§€ μ•Šκ³  κ΄€κ³„ν˜• DB 섀계와 순수 JDBC둜 μ›Ή λ°±μ—”λ“œμ˜ λ™μž‘ 원리λ₯Ό λ°‘λ°”λ‹₯λΆ€ν„° κ΅¬ν˜„ν•œ 것이 ν•΅μ‹¬μž…λ‹ˆλ‹€.

🎯 핡심 νŠΉμ§•

  • πŸ‘©β€πŸ« 강사: κ°•μ˜ κ°œμ„€, μ •κΈ° μˆ˜μ—… 일정/곡지/과제 등둝, μˆ˜κ°•μƒ 관리
  • πŸ‘©β€πŸŽ“ 학생: κ°•μ˜ 검색과 μˆ˜κ°• μ‹ μ²­, 찜/리뷰, μŠ€ν„°λ”” κ·Έλ£Ή κ°œμ„€κ³Ό νŒ€μ› λͺ¨μ§‘
  • πŸ—“οΈ 톡합 μΊ˜λ¦°λ”: μˆ˜μ—…/μŠ€ν„°λ””/과제/곡지 일정을 ν•œ ν™”λ©΄μ—μ„œ 확인
  • πŸ—„οΈ 순수 JDBC: ORM 없이 PreparedStatement, νŠΈλžœμž­μ…˜, 컀λ„₯μ…˜ 풀을 직접 λ‹€λ£Έ

μ„œλΉ„μŠ€ 기획 λ°°κ²½

κ°•μ˜μ™€ μŠ€ν„°λ””λ₯Ό μš΄μ˜ν•  λ•Œ ν•„μš”ν•œ μ •λ³΄λŠ” 보톡 μΉ΄μΉ΄μ˜€ν†‘ 곡지, μ—‘μ…€ μˆ˜κ°•μƒ λͺ…단, ꡬ두 μ „λ‹¬μ²˜λŸΌ μ—¬λŸ¬ 곳에 흩어져 μžˆμŠ΅λ‹ˆλ‹€. κ°•μ‚¬λŠ” 일정/곡지/과제/μˆ˜κ°•μƒμ„ λ”°λ‘œλ”°λ‘œ 관리해야 ν•˜κ³ , 학생은 μ§€κΈˆ μ–΄λ–€ κ°•μ˜μ™€ μŠ€ν„°λ””κ°€ μ—΄λ € μžˆλŠ”μ§€ ν•œλˆˆμ— νŒŒμ•…ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

  • 🧩 λΆ„μ‚°λœ ꡐ윑 ν™œλ™μ„ ν•˜λ‚˜μ˜ νλ¦„μœΌλ‘œ: κ°•μ˜ λͺ¨μ§‘ β†’ μˆ˜κ°• μ‹ μ²­ β†’ 일정/곡지/과제 관리 β†’ μŠ€ν„°λ”” λͺ¨μž„을 ν•œ ν”Œλž«νΌμ—μ„œ 처리
  • πŸ™‹ μ—­ν•  기반 ν™”λ©΄: 강사와 학생이 각자 역할에 λ§žλŠ” ν™”λ©΄μ—μ„œ ν•„μš”ν•œ μž‘μ—…λ§Œ λΉ λ₯΄κ²Œ
  • πŸ› οΈ λ°‘λ°”λ‹₯λΆ€ν„° κ΅¬ν˜„: ν”„λ ˆμž„μ›Œν¬ λŒ€μ‹  κ΄€κ³„ν˜• DB 섀계와 순수 JDBC둜 λ°±μ—”λ“œ λ™μž‘ 원리에 집쀑

μ£Όμš” ν™”λ©΄ 및 κΈ°λŠ₯ μ†Œκ°œ

강사 κ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈν•΄ μΊ‘μ²˜ν•œ μ‹€μ œ μ„œλΉ„μŠ€ ν™”λ©΄μž…λ‹ˆλ‹€. (넀이비 톀 λ””μžμΈ μ‹œμŠ€ν…œ)

πŸ” νšŒμ› / 인증

둜그인 νšŒμ›κ°€μž… (μ—­ν•  선택) λ‚΄ 정보
둜그인 νšŒμ›κ°€μž… μ—­ν•  선택 λ‚΄ 정보
  • 학생 / 강사 μ—­ν•  기반 νšŒμ›κ°€μž…(단계별 μž…λ ₯)κ³Ό 둜그인/λ‘œκ·Έμ•„μ›ƒ
  • μ„Έμ…˜ 기반 인증 및 κΆŒν•œλ³„ μ ‘κ·Ό μ œμ–΄ (예: κ°•μ˜ κ°œμ„€μ€ κ°•μ‚¬λ§Œ)
  • ν”„λ‘œν•„ 사진 μ—…λ‘œλ“œ (Oracle BLOB에 μ €μž₯ν•˜κ³  /image둜 슀트리밍 μ„œλΉ™)
  • 아이디 쀑볡 확인(AJAX 인라인 검사), λ‚΄ 정보 μˆ˜μ •, νšŒμ› νƒˆν‡΄(μ†Œν”„νŠΈ μ‚­μ œ, κ°œμΈμ •λ³΄ 읡λͺ…ν™”)

πŸ“š κ°•μ˜

κ°•μ˜ / μŠ€ν„°λ”” μ‹ μ²­ λͺ©λ‘ κ°•μ˜ 상세 κ°•μ˜ κ°œμ„€ (강사)
μ‹ μ²­ λͺ©λ‘ κ°•μ˜ 상세 κ°•μ˜ κ°œμ„€
  • 강사: κ°•μ˜ κ°œμ„€/μˆ˜μ •, μ •κΈ°/단기 μˆ˜μ—… 일정, μ‹œν—˜, 곡지, 과제 등둝, λŒ€ν‘œ 사진 μ—…λ‘œλ“œ
  • 학생: κ°•μ˜ λͺ©λ‘/상세 쑰회, μˆ˜κ°• μ‹ μ²­, 찜(μ’‹μ•„μš”), 리뷰 μž‘μ„±
  • 일정 좩돌 검사 λ“± κ°•μ˜ μš΄μ˜μ— ν•„μš”ν•œ 검증 포함

πŸ‘₯ μŠ€ν„°λ”” κ·Έλ£Ή

μŠ€ν„°λ”” κ°œμ„€ μŠ€ν„°λ”” 상세 / κ°€μž…
μŠ€ν„°λ”” κ°œμ„€ μŠ€ν„°λ”” 상세
  • μŠ€ν„°λ”” κ°œμ„€/μˆ˜μ •, λͺ¨μ§‘ 인원과 μ •κΈ° λͺ¨μž„ μš”μΌ μ„€μ •
  • κ°€μž… μ‹ μ²­ β†’ λ¦¬λ”μ˜ 수락/거절 흐름
  • μŠ€ν„°λ”” 일정/곡지/과제, μ²¨λΆ€νŒŒμΌ, 과제 제좜, 찜, 리뷰 κΈ°λŠ₯ 제곡

πŸ—“οΈ 메인 μΊ˜λ¦°λ” / λ§ˆμ΄νŽ˜μ΄μ§€

톡합 일정 μΊ˜λ¦°λ” λ§ˆμ΄νŽ˜μ΄μ§€
일정 μΊ˜λ¦°λ” λ§ˆμ΄νŽ˜μ΄μ§€
  • 톡합 일정 μΊ˜λ¦°λ”: μˆ˜μ—…/일정/μ‹œν—˜/과제λ₯Ό λ‚ μ§œλ³„λ‘œ ν™•μΈν•˜κ³  ν•­λͺ© 클릭 μ‹œ 상세 νŽ˜μ΄μ§€λ‘œ 이동
  • λ§ˆμ΄νŽ˜μ΄μ§€: λ‚΄ 정보 / λ‚΄ κ°•μ˜ / λ‚΄ μŠ€ν„°λ”” / 찜 λͺ©λ‘

πŸ“’ 곡지 / 과제 관리 (강사)

곡지 등둝 과제 등둝 κ°•μ˜ μˆ˜μ •
곡지 등둝 과제 등둝 κ°•μ˜ μˆ˜μ •
  • 곡지/과제/일정 등둝 μ‹œ 상세 λ‚΄μš©, 이미지, μ²¨λΆ€νŒŒμΌ μ—…λ‘œλ“œ
  • κ³Όμ œλŠ” μ‹œμž‘μΌ/μ‹œμž‘μ‹œκ°„, 마감일/λ§ˆκ°μ‹œκ°„μ„ κ΄€λ¦¬ν•˜κ³  ν•­λͺ©λ³„ μˆ˜μ •/μ‚­μ œ 지원

πŸ“₯ κ³Όμ œν•¨ / 제좜 (학생)

κ³Όμ œν•¨ / 마감 관리 과제 제좜 마감 μ‹œ 제좜 차단
κ³Όμ œν•¨ 과제 제좜 마감 μ‹œ 제좜 차단
  • 과제 제좜(μ„€λͺ… + 파일 μ—…λ‘œλ“œ), κ³Όμ œν•¨μ— D-3 / κΈ°ν•œλ§ˆκ° μžλ™ ν‘œμ‹œ
  • 마감 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ 제좜 차단 (μ„œλ²„ 검증 + UIμ—μ„œ 제좜 폼 μˆ¨κΉ€)
  • 제좜물 μ ‘κ·Ό μ œμ–΄: κ°•μ‚¬λŠ” 전체 제좜물 μ—΄λžŒ/λ‹€μš΄λ‘œλ“œ, 학생은 본인 제좜물만

ν”„λ‘œμ νŠΈ 핡심 기술

🧩 ν”„λ ˆμž„μ›Œν¬ μ—†λŠ” MVC - ν”„λŸ°νŠΈ 컨트둀러 직접 κ΅¬ν˜„

  • λͺ¨λ“  μš”μ²­μ„ DispatcherServlet(Front Controller) ν•œ 곳으둜 λ°›κ³ , RequestMapping이 URL을 Controller둜 λΆ„κΈ°ν•©λ‹ˆλ‹€.
  • 각 ControllerλŠ” 곡톡 μΈν„°νŽ˜μ΄μŠ€(execute)λ₯Ό κ΅¬ν˜„ν•΄ forward(JSP) λ˜λŠ” redirect 경둜λ₯Ό λ°˜ν™˜ν•˜κ³ , λ””μŠ€νŒ¨μ²˜κ°€ 이동을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • 맀핑이 μ—†λŠ” μš”μ²­μ€ 404둜 μ²˜λ¦¬ν•΄, λΌμš°νŒ… μ±…μž„μ„ ν•œ 곳에 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€.

πŸ—„οΈ 컀λ„₯μ…˜ ν’€ 기반 DB μ ‘κ·Ό (DBCP2)

  • λ§€ μš”μ²­λ§ˆλ‹€ 컀λ„₯μ…˜μ„ μƒˆλ‘œ λ§Œλ“€μ§€ μ•Šκ³  Apache Commons DBCP2 컀λ„₯μ…˜ ν’€μ—μ„œ 빌렀 μ“°κ³  λ°˜λ‚©ν•©λ‹ˆλ‹€.
  • ConnectionManager(ν’€ 래퍼) β†’ JDBCUtil(쿼리 μ‹€ν–‰/νŠΈλžœμž­μ…˜) β†’ DAO둜 μ΄μ–΄μ§€λŠ” 데이터 μ ‘κ·Ό 계측을 직접 μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.
  • (νŠΈλŸ¬λΈ”μŠˆνŒ…) μš”μ²­λ§ˆλ‹€ 곡유되던 JDBCUtil μƒνƒœλ₯Ό ThreadLocal둜 격리해, λ™μ‹œ 접속 μ‹œ 쿼리가 λ’€μ„žμ΄λ˜ λ™μ‹œμ„± 버그λ₯Ό μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ”’ λ³΄μ•ˆ / 데이터 무결성

  • λΉ„λ°€λ²ˆν˜Έ PBKDF2 ν•΄μ‹±: PBKDF2WithHmacSHA256(μž„μ˜ μ†”νŠΈ + 12만 회 반볡)으둜 μ €μž₯ν•˜κ³ , μ™ΈλΆ€ 라이브러리 없이 JDK만으둜 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ 평문 계정은 둜그인 μ‹œ μžλ™ ν˜Έν™˜(λ ˆκ±°μ‹œ 폴백) ν›„ 점진 μ „ν™˜λ©λ‹ˆλ‹€.
  • νšŒμ› νƒˆν‡΄ μ†Œν”„νŠΈ μ‚­μ œ + 읡λͺ…ν™”: 물리 μ‚­μ œ μ‹œ 강사/μŠ€ν„°λ”” 리더λ₯Ό μ§€μš°λ©΄ νƒ€μΈμ˜ μˆ˜κ°•/제좜 이λ ₯κΉŒμ§€ 연쇄 μ‚­μ œλ˜κ±°λ‚˜ κ³ μ•„κ°€ λ˜λŠ” λ¬Έμ œκ°€ μžˆμ–΄, status='WITHDRAWN' ν‘œμ‹œ + κ°œμΈμ •λ³΄ 읡λͺ…ν™”λ‘œ λ°”κΏ” μ™Έλž˜ν‚€ 무결성과 이λ ₯을 λ³΄μ‘΄ν•©λ‹ˆλ‹€.
  • κΆŒν•œ 기반 μ ‘κ·Ό μ œμ–΄(νšŒμ› λͺ…λΆ€/타인 μ •λ³΄λŠ” κ΄€λ¦¬μž/본인만, κ°•μ˜/ν•­λͺ© μˆ˜μ •/μ‚­μ œλŠ” μ†Œμœ  강사/μŠ€ν„°λ”” λ¦¬λ”λ§Œ), μ €μž₯ν˜• XSS λ°©μ–΄(<c:out> μ΄μŠ€μΌ€μ΄ν”„), 자격증λͺ… 뢄리(context.properties 비좔적).

πŸ–ΌοΈ 이미지 BLOB μ €μž₯ / 슀트리밍 μ„œλΉ™

  • ν”„λ‘œν•„/κ°•μ˜/μŠ€ν„°λ”” 이미지λ₯Ό 파일 μ‹œμŠ€ν…œμ΄ μ•„λ‹Œ Oracle BLOB 으둜 DB에 μ €μž₯ν•©λ‹ˆλ‹€.
  • 별도 IMAGE ν…Œμ΄λΈ”μ— (OWNER_TYPE, OWNER_ID) ν‚€λ‘œ λ³΄κ΄€ν•˜κ³ , ViewImageControllerκ°€ /image?type=&id=둜 슀트리밍 μ„œλΉ™ν•©λ‹ˆλ‹€(둜그인 게이트 + 이미지 MIME ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ + nosniff).

πŸ“Ž ν•­λͺ© μ²¨λΆ€νŒŒμΌ / 과제 제좜 관리

  • 곡지/과제/일정/μ‹œν—˜ ν•­λͺ©μ— μ²¨λΆ€νŒŒμΌμ„ μ—°κ²°ν•˜λ„λ‘ ITEMATTACHMENT ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•˜κ³ , ν™•μž₯자 ν—ˆμš© λͺ©λ‘κ³Ό 파일 수/μš©λŸ‰ μ œν•œμ„ ν†΅κ³Όν•œ λ’€ BLOB으둜 μ €μž₯ν•©λ‹ˆλ‹€.
  • 과제 μ œμΆœλ¬Όμ€ ASSIGNMENTSUBMISSION에 μ €μž₯ν•˜λ©°, 같은 학생이 λ‹€μ‹œ μ œμΆœν•˜λ©΄ μ΅œμ‹  제좜둜 κ΅μ²΄ν•˜κ³ , λ‹€μš΄λ‘œλ“œλŠ” μˆ˜κ°•μƒ/강사, μŠ€ν„°λ”” 멀버/리더 κΆŒν•œμ„ ν™•μΈν•œ λ’€ ν—ˆμš©ν•©λ‹ˆλ‹€.

πŸ’¬ μ‹€νŒ¨ UX - PRG + μ„Έμ…˜ Flash λ©”μ‹œμ§€

  • μž‘μ—… μ‹€νŒ¨ μ‹œ requestκ°€ μ•„λ‹Œ μ„Έμ…˜μ— λ©”μ‹œμ§€λ₯Ό λ‹΄κ³  redirectν•˜λŠ” PRG(Post-Redirect-Get) νŒ¨ν„΄μ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.
  • 곡톡 λ„€λΉ„κ²Œμ΄μ…˜μ΄ μ„Έμ…˜μ˜ flashErrorλ₯Ό 읽어 ν•œ 번만 ν‘œμ‹œν•œ λ’€ μ¦‰μ‹œ μ œκ±°ν•΄, μƒˆλ‘œκ³ μΉ¨ μž¬μ „μ†‘ 문제 없이 μ‹€νŒ¨ μ‚¬μœ λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

🚧 μ•ˆμ „ν•œ μ—λŸ¬ 처리 - μ»€μŠ€ν…€ 404 / 500

  • μ—†λŠ” μ£Όμ†Œ/μ„œλ²„ 였λ₯˜λ₯Ό ν†°μΊ£ κΈ°λ³Έ ν™”λ©΄ λŒ€μ‹  넀이비 ν…Œλ§ˆ μ»€μŠ€ν…€ μ—λŸ¬ νŽ˜μ΄μ§€λ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€.
  • μ˜ˆμ™Έ μŠ€νƒνŠΈλ ˆμ΄μŠ€(λ‚΄λΆ€ 클래슀/ν”„λ ˆμž„μ›Œν¬ 정보)κ°€ μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ μ°¨λ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

ν”„λŸ°νŠΈ 컨트둀러 νŒ¨ν„΄ 기반의 κ³„μΈ΅ν˜• MVC κ΅¬μ‘°μž…λ‹ˆλ‹€.

User Browser
  └─ Filter (Encoding/Resource)
      └─ DispatcherServlet  (Front Controller)
          └─ RequestMapping  (URL β†’ Controller λ§€ν•‘)
              └─ Controller   (μš”μ²­ 처리, forward / redirect κ²°μ •)
                  └─ Manager  (Service/λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 싱글톀)
                      └─ DAO β†’ JDBCUtil β†’ ConnectionManager (DBCP2 Pool)
                          └─ Oracle DB
          └─ View : JSP + JSTL   (forward μ‹œ λ Œλ”λ§)

μš”μ²­ 처리 흐름

  1. λͺ¨λ“  μš”μ²­μ€ Filter(인코딩/정적 λ¦¬μ†ŒμŠ€)λ₯Ό 거쳐 DispatcherServlet으둜 μ§„μž…
  2. RequestMapping이 URL에 λ§žλŠ” Controllerλ₯Ό 찾음 (μ—†μœΌλ©΄ 404)
  3. Controller β†’ Manager β†’ DAO β†’ 컀λ„₯μ…˜ ν’€ 순으둜 DB μž‘μ—… μˆ˜ν–‰
  4. 결과에 따라 JSP forward λ˜λŠ” redirect λ°˜ν™˜
  5. μ‹€νŒ¨ μ‹œ μ„Έμ…˜ flashError + PRG둜 μ‚¬μš©μžμ—κ²Œ 1νšŒμ„± μ•Œλ¦Ό

ERD

핡심 μ—”ν‹°ν‹° 관계 (κ°„λž΅ν™”)

erDiagram
    MEMBER ||--o| STUDENT : "이닀"
    MEMBER ||--o| TEACHER : "이닀"
    TEACHER ||--o{ LECTURE : "κ°œμ„€"
    MEMBER  ||--o{ STUDYGROUP : "리더"
    STUDENT ||--o{ LECTURE_ENROLLMENT : "μˆ˜κ°•μ‹ μ²­"
    LECTURE ||--o{ LECTURE_ENROLLMENT : "μˆ˜κ°•μƒ"
    LECTURE ||--o{ LECTURE_LIKE : "찜"
    LECTURE ||--o{ LECTURE_REVIEW : "리뷰"
    LECTURE ||--o{ SCHEDULE : "정기일정"
    LECTURE ||--o{ NOTICE : "곡지"
    LECTURE ||--o{ ASSIGNMENT : "과제"
    LECTURE ||--o{ ITEM_ATTACHMENT : "ν•­λͺ©μ²¨λΆ€"
    STUDYGROUP ||--o{ STUDYGROUP_APPLICATION : "κ°€μž…μ‹ μ²­"
    STUDYGROUP ||--o{ STUDYGROUP_REVIEW : "리뷰"
    STUDYGROUP ||--o{ SCHEDULE : "λͺ¨μž„일정"
    STUDYGROUP ||--o{ ITEM_ATTACHMENT : "ν•­λͺ©μ²¨λΆ€"
    ASSIGNMENT ||--o{ ASSIGNMENT_SUBMISSION : "제좜"
Loading

ν”„λ‘œν•„/κ°•μ˜/μŠ€ν„°λ”” μ΄λ―Έμ§€λŠ” 별도 IMAGE ν…Œμ΄λΈ”μ— (OWNER_TYPE, OWNER_ID) ν‚€ + IMG_DATA BLOB으둜 μ €μž₯ν•©λ‹ˆλ‹€. 곡지/과제/일정/μ‹œν—˜ μ²¨λΆ€νŒŒμΌμ€ ITEMATTACHMENT, 과제 μ œμΆœλ¬Όμ€ ASSIGNMENTSUBMISSION에 BLOB으둜 μ €μž₯ν•©λ‹ˆλ‹€.

DB 적용 및 μ‹€ν–‰

μ‹ κ·œ κΈ°λŠ₯을 λ°˜μ˜ν•˜λ €λ©΄ κΈ°μ‘΄ κΈ°λ³Έ μŠ€ν‚€λ§ˆμ— μ•„λž˜ SQL을 μˆœμ„œλŒ€λ‘œ μ μš©ν•©λ‹ˆλ‹€.

@db/IMAGE.sql
@db/ALTER_LECTURE_NAME_LENGTH.sql
@db/ALTER_ASSIGNMENT_TIME_COLUMNS.sql
@db/ALTER_SCHEDULE_DESCRIPTION.sql
@db/CREATE_ITEM_ATTACHMENT.sql
@db/CREATE_ASSIGNMENT_SUBMISSION.sql
@db/WIDEN_PWD_FOR_HASH.sql
@db/SOFT_DELETE_MEMBER.sql
@db/MEMBER_DELETE_CASCADE.sql
  • WIDEN_PWD_FOR_HASH.sql - λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹œ(PBKDF2) μ €μž₯을 μœ„ν•œ pwd 컬럼 ν™•λŒ€ (미적용 μ‹œ μ‹ κ·œ νšŒμ›κ°€μž… μ‹€νŒ¨)
  • SOFT_DELETE_MEMBER.sql - νšŒμ› νƒˆν‡΄λ₯Ό μ†Œν”„νŠΈ μ‚­μ œ + 읡λͺ…ν™”λ‘œ μ „ν™˜ν•˜κΈ° μœ„ν•œ MEMBER.status 컬럼 μΆ”κ°€ (미적용 μ‹œ 둜그인/νšŒμ›λͺ©λ‘/νƒˆν‡΄ 쿼리가 ORA-00904둜 μ‹€νŒ¨)
  • MEMBER_DELETE_CASCADE.sql - (선택) κ³Όκ±° ν•˜λ“œ μ‚­μ œμš© 연쇄정리 트리거. μ†Œν”„νŠΈ μ‚­μ œ λ„μž…μœΌλ‘œ 더 이상 λ°œν™”ν•˜μ§€ μ•ŠμœΌλ©°, κ΄€λ¦¬μžκ°€ SQL둜 직접 ν•˜λ“œ μ‚­μ œν•  λ•Œλ₯Ό λŒ€λΉ„ν•œ μ•ˆμ „λ§μž…λ‹ˆλ‹€.

DB 접속 μ •λ³΄λŠ” src/main/resources/context.properties.example을 볡사해 context.properties둜 μž‘μ„±ν•©λ‹ˆλ‹€. λΉŒλ“œμ™€ λ°°ν¬λŠ” Maven, Tomcat 9둜 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

mvn -q -DskipTests package   # target/EduManager.war 생성 ν›„ Tomcat 9에 배포

μ‹œμ—° μ‹œλ‚˜λ¦¬μ˜€

  1. 강사 둜그인 β†’ κ°•μ˜ κ°œμ„€(λŒ€ν‘œ 이미지 μ—…λ‘œλ“œ) β†’ μ •κΈ° μˆ˜μ—… 일정/곡지/과제 등둝
  2. 학생 둜그인 β†’ κ°•μ˜/μŠ€ν„°λ”” μ‹ μ²­ λͺ©λ‘μ—μ„œ μˆ˜κ°• μ‹ μ²­ β†’ 과제 μƒμ„Έμ—μ„œ 파일/μ„€λͺ… 제좜
  3. 메인 μΊ˜λ¦°λ”μ—μ„œ ν•­λͺ© 클릭 β†’ 상세 νŽ˜μ΄μ§€ 이동, 마감 μ§€λ‚œ κ³Όμ œλŠ” 제좜 차단 확인
  4. κΆŒν•œ μ—†λŠ” μ‚¬μš©μžμ˜ μˆ˜μ • νŽ˜μ΄μ§€ μ ‘κ·Όκ³Ό 파일 λ‹€μš΄λ‘œλ“œ 차단 확인

디렉토리 ꡬ쑰

πŸ“¦ EduManager
β”œβ”€β”€ πŸ“‚ db/                         # DB μŠ€ν‚€λ§ˆ / DDL (IMAGE, 첨뢀, 제좜, μ†Œν”„νŠΈμ‚­μ œ λ“±)
β”œβ”€β”€ πŸ“„ pom.xml                     # Maven μ˜μ‘΄μ„± / λΉŒλ“œ μ„€μ •
└── πŸ“‚ src/main
    β”œβ”€β”€ πŸ“‚ java
    β”‚   β”œβ”€β”€ πŸ“‚ controller          # ν”„λŸ°νŠΈ 컨트둀러 + 도메인별 Controller
    β”‚   β”‚   β”œβ”€β”€ πŸ“„ DispatcherServlet.java   # μ§„μž…μ  (Front Controller)
    β”‚   β”‚   β”œβ”€β”€ πŸ“„ RequestMapping.java       # URL β†’ Controller λ§€ν•‘
    β”‚   β”‚   └── πŸ“‚ lecture / study / member / mypage / main
    β”‚   β”œβ”€β”€ πŸ“‚ filter              # EncodingFilter, ResourceFilter
    β”‚   └── πŸ“‚ model
    β”‚       β”œβ”€β”€ πŸ“‚ domain          # 도메인 객체 (lecture / study / member / calendar)
    β”‚       β”œβ”€β”€ πŸ“‚ service         # Manager λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (lecture / study / member)
    β”‚       └── πŸ“‚ dao             # DAO + JDBCUtil + ConnectionManager (lecture / study / member)
    └── πŸ“‚ webapp
        β”œβ”€β”€ πŸ“‚ css / js / images   # 정적 λ¦¬μ†ŒμŠ€ (넀이비 λ””μžμΈ μ‹œμŠ€ν…œ)
        └── πŸ“‚ WEB-INF
            β”œβ”€β”€ πŸ“„ web.xml         # μ„œλΈ”λ¦Ώ / ν•„ν„° / μ—λŸ¬ νŽ˜μ΄μ§€ λ§€ν•‘
            β”œβ”€β”€ πŸ“„ error.jsp       # μ»€μŠ€ν…€ 404 / 500 νŽ˜μ΄μ§€
            └── πŸ“‚ navigation / lecture / study / member / mypage / main / registration / item

μ„Έ 계측(controller / dao / domain / service) λͺ¨λ‘ lecture / study / member λ„λ©”μΈμœΌλ‘œ μΌκ΄€λ˜κ²Œ λΆ„λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

νŒ€μ› μ†Œκ°œ


μ†λ‹€ν˜„

@sondahyun

김희선

@heessunny

쑰은ν–₯

@JoEunHyang

zzinggny

@zzinggny

FAQ

  • Q. μŠ€ν”„λ§μ„ μ“°μ§€ μ•Šμ€ μ΄μœ λŠ”?
    • A. λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ‘œκ·Έλž˜λ° ꡐ과 ν”„λ‘œμ νŠΈλ‘œ, ν”„λ ˆμž„μ›Œν¬κ°€ κ°μΆ°μ£ΌλŠ” μš”μ²­ λΆ„κΈ°/νŠΈλžœμž­μ…˜/컀λ„₯μ…˜ 관리λ₯Ό 직접 κ΅¬ν˜„ν•˜λ©° λ™μž‘ 원리λ₯Ό μ΅νžˆλŠ” 데 λͺ©μ μ„ λ’€μŠ΅λ‹ˆλ‹€.
  • Q. 이미지와 μ²¨λΆ€νŒŒμΌμ€ 어디에 μ €μž₯λ˜λ‚˜μš”?
    • A. 파일 μ‹œμŠ€ν…œμ΄ μ•„λ‹ˆλΌ Oracle BLOB에 μ €μž₯ν•˜κ³  /image둜 슀트리밍 μ„œλΉ™ν•©λ‹ˆλ‹€. (ν”„λ‘œν•„/κ°•μ˜/μŠ€ν„°λ”” 이미지, ν•­λͺ© μ²¨λΆ€νŒŒμΌ, 과제 제좜물)
  • Q. νšŒμ› νƒˆν‡΄ν•˜λ©΄ 데이터가 μ‚¬λΌμ§€λ‚˜μš”?
    • A. μ†Œν”„νŠΈ μ‚­μ œλΌ 행은 λ³΄μ‘΄ν•˜κ³  κ°œμΈμ •λ³΄λ§Œ 읡λͺ…ν™”ν•©λ‹ˆλ‹€. μˆ˜κ°•/제좜/ν›„κΈ° λ“± 이λ ₯κ³Ό μ™Έλž˜ν‚€ 무결성은 μœ μ§€λ˜λ©°, μž‘μ„±μžλŠ” "(νƒˆν‡΄νšŒμ›)"으둜 ν‘œκΈ°λ©λ‹ˆλ‹€.
  • Q. λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λ €λ©΄?
    • A. db/의 SQL을 μˆœμ„œλŒ€λ‘œ μ μš©ν•˜κ³  context.propertiesλ₯Ό μž‘μ„±ν•œ λ’€ mvn package둜 λΉŒλ“œν•΄ Tomcat 9에 λ°°ν¬ν•©λ‹ˆλ‹€.

기술 μŠ€νƒ

Language / View

Web / DB

Build / Etc.


Created by Team EduManager πŸ“š

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages