πŸ“– μ„Όν…€λŒ€ν•™κ΅ ν•™μ‚¬κ΄€λ¦¬μ‹œμŠ€ν…œ

test

ꡐ직원 Test계정

ꡐ수 Test 계정

학생 Test 계정

  • Test ID : 24000004
  • Test PW : 9416473

ν”„λ‘œμ νŠΈ 상세 μ„€λͺ… λ¬Έμ„œ 링크

λͺ©μ°¨

  1. ν”„λ‘œμ νŠΈ μ†Œκ°œ
  2. νŒ€μ› ꡬ성
  3. 개발 ν™˜κ²½
  4. μ±„νƒν•œ 개발 기술과 브랜치 μ „λž΅
  5. ν”„λ‘œμ νŠΈ ꡬ쑰
  6. μ—­ν•  λΆ„λ‹΄
  7. 개발 κΈ°κ°„ 및 μž‘μ—… 관리
  8. μ‹ κ²½ μ“΄ λΆ€λΆ„
  9. νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯
  10. νŠΈλŸ¬λΈ” μŠˆνŒ…
  11. κ°œμ„  λͺ©ν‘œ
  12. ν”„λ‘œμ νŠΈ ν›„κΈ°


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

πŸ’‘ λŒ€ν•™κ΅ λ‚΄ 학사 및 ν•™μŠ΅ κ΄€λ¦¬μ˜ νŽΈλ¦¬μ„±κ³Ό νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ νŒ€ λ‹¨μœ„λ‘œ 개발된 슀마트 학사/ν•™μŠ΅ 관리 μ‹œμŠ€ν…œ(LMS)을 μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. 이 μ‹œμŠ€ν…œμ„ 톡해 λŒ€ν•™κ΅μ—μ„œ λ°œμƒν•˜λŠ” ν•™κΈ° 별 μ£Όμš” μ΄λ²€νŠΈλ“€μ„ 보닀 쉽고 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

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

❓ μ£Όμš” κΈ°λŠ₯

  • 학생 관리 : ν•™μƒλ“€μ˜ κ°œμΈμ •λ³΄, 성적, λ“±λ‘κΈˆ 등을 κ΄€λ¦¬ν•˜κ³  μ‘°νšŒν•  수 μžˆλŠ” κΈ°λŠ₯
  • ꡐ수 / κ°•μ˜ 관리 : κ°•μ˜ κ³„νšμ„œ μž‘μ„±, 성적 μž…λ ₯ 및 관리 λ“± κ΅μˆ˜λ“€μ„ μœ„ν•œ 관리 κΈ°λŠ₯
  • 곡지사항 및 학사 일정 : ν•™κ΅μ˜ 곡지사항 및 학사 일정 λ“±μœΌλ‘œ ν•™μƒμ΄λ‚˜ κ΅μˆ˜μ—κ²Œ 정보 μ œκ³΅μ„ μœ„ν•œ ν”Œλž«νΌ κΈ°λŠ₯

‼️ κΈ°λŒ€ 효과

  • 학사 관리 ν”„λ‘œμ„ΈμŠ€μ˜ νš¨μœ¨μ„± 및 μ •ν™•μ„± ν–₯상
  • 학생 및 κ΅μ§μ›μ˜ λ§Œμ‘±λ„ 증가
  • λŒ€ν•™ 운영의 μ „λ°˜μ μΈ νš¨μœ¨μ„± ν–₯상

ν”„λ‘œμ νŠΈ 아킀텍쳐

πŸ₯‡BackEnd Data Flow

Untitled


νŒ€μ› ꡬ성

μ΅œμœ λž€[PM] λ°•μ†Œμ€ 이병길 μ •μˆ˜μš© ν™©λ―Όμš°

@choiyuran

@soeun21

@LeeBG

@RightAccept

@hwangminu

1. 개발 ν™˜κ²½

  • Front : HTML, Thymeleaf, css, JavaScript, jQuery
  • Back-end : IntelliJ IDEA, JDK 11
  • 버전 및 μ΄μŠˆκ΄€λ¦¬ : Github, Github Issues, Github Project
  • ν˜‘μ—… 툴 : Discord, Notion, Kakao Talk
  • μ„œλΉ„μŠ€ 배포 ν™˜κ²½ : Aws CodeDeploy, AWS EC2 Ubuntu, AWS S3, Github Action

2. μ±„νƒν•œ 개발 기술과 브랜치 μ „λž΅

Thymeleaf

  • μ„œλ²„ μ‚¬μ΄λ“œ μžλ°” ν…œν”Œλ¦Ώ μ—”μ§„μœΌλ‘œ, 순수 HTML을 μ΄μš©ν•˜μ—¬ λ·°λ₯Ό ꡬ성할 수 있게 ν•΄μ€λ‹ˆλ‹€.
  • μžμ—°μŠ€λŸ¬μš΄ ν…œν”Œλ¦Ώμ„ μœ„ν•œ μš°μˆ˜ν•œ 톡합성과 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ™€μ˜ λ›°μ–΄λ‚œ ν˜Έν™˜μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
  • λΈŒλΌμš°μ €μ—μ„œ 직접 μ—΄ 수 μžˆλŠ” 정적 ν”„λ‘œν† νƒ€μž…μ„ 동적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ‰½κ²Œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Apache POI

  • μžλ°” ν™˜κ²½μ—μ„œ λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ μ˜€ν”ΌμŠ€ 파일 포맷을 읽고 μ“Έ 수 있게 ν•΄μ£ΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.
  • μ—‘μ…€, μ›Œλ“œ λ“± λ‹€μ–‘ν•œ μ˜€ν”ΌμŠ€ 파일 포맷을 μ²˜λ¦¬ν•  수 μžˆμ–΄ 데이터 λ³΄κ³ μ„œλ‚˜ λ¬Έμ„œ 생성 μžλ™ν™”μ— μœ μš©ν•©λ‹ˆλ‹€.
  • ν’λΆ€ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ³΅μž‘ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³ , μ‚¬μš©μž μ •μ˜ ν¬λ§·νŒ…μ΄λ‚˜ μŠ€νƒ€μΌμ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œμ νŠΈμ—μ„œλŠ” 학생 등둝기λŠ₯을 μœ„ν•œ μ—‘μ…€νŒŒμΌμ„ λ‹€λ£¨λŠ”λ° μ‚¬μš©ν•˜μ—¬ μ—‘μ…€ 데이터 μ²˜λ¦¬μ— λ§Žμ€ 도움을 μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

Spring Data JPA

  • μŠ€ν”„λ§ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 데이터 μ ‘κ·Ό 계측을 쉽고 효율적으둜 κ΅¬ν˜„ν•  수 있게 ν•΄μ£ΌλŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€.
  • 리포지토리 계측에 λŒ€ν•œ κ΅¬ν˜„ 없이 μΈν„°νŽ˜μ΄μŠ€λ§ŒμœΌλ‘œ CRUD 연산을 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 객체 지ν–₯적인 데이터 접근을 μ œκ³΅ν•˜λ©°, λ³΅μž‘ν•œ 검색 쿼리도 μ‰½κ²Œ κ΅¬ν˜„ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

QueryDSL

  • νƒ€μž… μ•ˆμ „ν•œ 쿼리λ₯Ό μœ„ν•œ ν”„λ ˆμž„μ›Œν¬λ‘œ, λ³΅μž‘ν•œ 쿼리와 λ‹€μ΄λ‚˜λ―Ή 쿼리λ₯Ό μ½”λ“œ μˆ˜μ€€μ—μ„œ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 컴파일 μ‹œμ μ— 였λ₯˜λ₯Ό λ°œκ²¬ν•  수 μžˆμ–΄ μ•ˆμ •μ„±μ΄ λ†’μœΌλ©°, μ½”λ“œ μžλ™ μ™„μ„± κΈ°λŠ₯을 톡해 개발 생산성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ 데이터 μ €μž₯μ†Œ(JPA, JDO, SQL, NoSQL)에 λŒ€ν•œ μ§€μ›μœΌλ‘œ ν™•μž₯성이 λ›°μ–΄λ‚©λ‹ˆλ‹€.

브랜치 μ „λž΅

  • Git-flow μ „λž΅μ„ 기반으둜 main, develop λΈŒλžœμΉ˜μ™€ feature 보쑰 브랜치λ₯Ό μš΄μš©ν–ˆμŠ΅λ‹ˆλ‹€.
  • main, test, team 브랜치둜 λ‚˜λˆ„μ–΄ κ°œλ°œμ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • main λΈŒλžœμΉ˜λŠ” 배포 λ‹¨κ³„μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” λΈŒλžœμΉ˜μž…λ‹ˆλ‹€. test에 개발이 μ™„λ£Œλœ 뢀뢄듀을 λΆ™μ—¬μ„œ λ°°ν¬μ„œλ²„μ— μ μš©ν•©λ‹ˆλ‹€.
    • test λΈŒλžœμΉ˜λŠ” 개발 λ‹¨κ³„μ—μ„œ git-flow의 master 역할을 ν•˜λŠ” λΈŒλžœμΉ˜μž…λ‹ˆλ‹€.
    • team1,2,3,4,5,6 λΈŒλžœμΉ˜λŠ” κ°œμΈλ³„λ‘œ ν•œκ°œ μ”© λ‚˜λˆˆ 브랜치이며 κΈ°λŠ₯ λ‹¨μœ„λ‘œ 독립적인 개발 ν™˜κ²½μ„ μœ„ν•˜μ—¬ μ‚¬μš©ν•˜κ³  merge ν›„ 각 브랜치λ₯Ό μ‚­μ œν•  κ²ƒμž…λ‹ˆλ‹€.

3. ν”„λ‘œμ νŠΈ ꡬ쑰

β”œβ”€β”€ README.md
β”œβ”€β”€ gradlew
β”œβ”€β”€ .gitignore
β”œβ”€β”€ appspec.yml
β”œβ”€β”€ build.gradle
β”œβ”€β”€ gradlew.bat
β”œβ”€β”€ settings.gradle
β”‚
β”œβ”€β”€ .github
β”‚    └── workflows
β”‚         └── deploy.yml
β”œβ”€β”€ src
β”‚    └── main
β”‚         └── java
β”‚              └── com
β”‚                    └── itbank
β”‚                           └── simpleboard
β”‚                                └──  component
β”‚                                └──  config
β”‚                                └──  controller
β”‚                                └──  dto
β”‚                                └──  entity
β”‚                                └──  handler
β”‚                                └──  interceptor
β”‚                                └──  repository
β”‚                                        └──  manager
β”‚                                        └──  professor
β”‚                                        └──  student
β”‚                                        └──  user
β”‚                                └──  service
β”‚                                └──   initDB.java
β”‚                                └──   SimpleboardApplication.java
β”‚           └── resources
β”‚                   └── static
β”‚                          └──  css
β”‚                          └──  excelForm
β”‚                          └──  img
β”‚                          └──  js
β”‚                          └──  scss
β”‚                          └──  vendor
β”‚                   └── templates
β”‚                            └──  common
β”‚                            └──  layout
β”‚                            └──  manage
β”‚                            └──  professor
β”‚                            └──  student
β”‚ 
β”‚     └── test    

4. μ—­ν•  λΆ„λ‹΄

πŸŠμ΅œμœ λž€

  • UI
    • νŽ˜μ΄μ§€ : 인원/λͺ©λ‘ 쑰회, μˆ˜μ •, κ°•μ˜ 등둝, 상세보기
    • 곡톡 : κ°•μ˜ 상세보기, 곡지사항, 학사일정
  • κΈ°λŠ₯
    • 일뢀 νŽ˜μ΄μ§•, QueryDSL 쑰건 검색, 곡지사항 등둝 및 μˆ˜μ •, κ°•μ˜ 등둝 및 μˆ˜μ •/상세보기, κ°•μ˜μ‹€ μ‚¬μš© μ‹œκ°„ 체크, ꡐ수/학생 쑰회 및 μˆ˜μ •, ν•™κ³Ό 쑰회 및 등둝, 학생 μƒνƒœ λ³€κ²½, μž₯ν•™κΈˆ 쑰회

πŸ‘»λ°•μ†Œμ€

  • UI
    • νŽ˜μ΄μ§€ : 학생 등둝, 학생 등둝 리슀트 확인
    • 곡톡 μ»΄ν¬λ„ŒνŠΈ : 곡톡 ν…Œμ΄λΈ” ν˜•μ‹, 검색 쑰건창
  • κΈ°λŠ₯
    • 파일 μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œ, 학생 정보 등둝 및 μˆ˜μ •, QueryDSL 쑰건 검색

πŸ˜Žμ •μˆ˜μš©

  • UI
    • νŽ˜μ΄μ§€ : κ°•μ˜ 쑰회, κ°•μ˜ 평가 쑰회
    • 곡톡 μ»΄ν¬λ„ŒνŠΈ :
  • κΈ°λŠ₯
    • 일뢀 νŽ˜μ΄μ§•, QueryDSL 쑰건 검색, κ°•μ˜ 쑰회/검색, (ꡐ수)성적 μž…λ ₯, 파일 μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œ, 둜그인/λ‘œκ·Έμ•„μ›ƒ/λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ°, νšŒμ› 정보 μˆ˜μ •

πŸ¬μ΄λ³‘κΈΈ

  • UI
    • νŽ˜μ΄μ§€ : μˆ˜κ°•μ‹ μ²­ νŽ˜μ΄μ§€ , λ“±λ‘νŽ˜μ΄μ§€ μ΄ˆμ•ˆ
    • 곡톡 μ»΄ν¬λ„ŒνŠΈ : νƒ€μž„λ¦¬ν”„ head, header, footer 뢄리
  • κΈ°λŠ₯
    • 일뢀 νŽ˜μ΄μ§•, querydsl 쑰건 검색, μˆ˜κ°•μ‹ μ²­, κ°•μ˜ν‰κ°€, λ“±λ‘κΈˆ λ‚©λΆ€ 및 쑰회 λ“± 학생 κ΄€λ ¨ κΈ°λŠ₯ κ΅¬ν˜„
  • 배포
    • CI/CD GitHub Action을 μ΄μš©ν•œ 배포 μžλ™ν™” μ™„μ„±, AWS EC2 배포 둜직 및 μ‰˜ 슀크립트 μž‘μ„±

5. 개발 κΈ°κ°„ 및 μž‘μ—… 관리

개발 κΈ°κ°„

  • 전체 개발 κΈ°κ°„ : 2024-01-02 ~ 2024-03-13
  • UI κ΅¬ν˜„ : 2024-01-11 ~ 2024-01-26
  • κΈ°λŠ₯ κ΅¬ν˜„ : 2024-02-17 ~ 2024-03-04
  • κΈ°λŠ₯ ν…ŒμŠ€νŠΈ : 2024-03-05 ~ 2024-03-13

μž‘μ—… 관리

  • GitHub Projects와 Notion νšŒμ˜λ‘μ„ μ‚¬μš©ν•˜μ—¬ 진행 상황을 κ³΅μœ ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ£Όκ°„νšŒμ˜λ₯Ό μ§„ν–‰ν•˜λ©° μž‘μ—… μˆœμ„œμ™€ λ°©ν–₯성에 λŒ€ν•œ 고민을 μΉ΄μΉ΄μ˜€ν†‘μ—μ„œ λ‚˜λˆ„κ³  νšŒμ˜λ‘μ— μž‘μ„±ν•˜μ—¬ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

6. μ‹ κ²½ μ“΄ λΆ€λΆ„


7. νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯

곡톡기λŠ₯

[μ΄ˆκΈ°ν™”λ©΄ - 둜그인]

  • λ¨Όμ € μ΄ˆκΈ°ν™”λ©΄μΈ 둜그인 ν™”λ©΄μž…λ‹ˆλ‹€. 기본적으둜 λ‘œκ·ΈμΈμ„ ν•΄μ•Ό 전체 μ‹œμŠ€ν…œμ„ μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 둜그인 아이디λ₯Ό κΈ°μ–΅ν•˜λŠ” 쿠킀방식을 μ μš©ν–ˆκ³ , λΉ„λ°€λ²ˆν˜Έ 찾기둜 μžƒμ–΄λ²„λ¦° λ‚΄ λΉ„λ°€λ²ˆν˜Έλ₯Ό 찾을 수 μžˆλŠ” 링크둜 μ—°κ²°λ©λ‹ˆλ‹€.
  • λ‘œκ·ΈμΈμ— μ„±κ³΅ν•˜λ©΄ μžμ‹ μ˜ μ‹ λΆ„(학생,ꡐ직원,ꡐ수)에 따라 λ‹€λ₯Έ ν™ˆ ν™”λ©΄μœΌλ‘œ μ§„μž…ν•©λ‹ˆλ‹€.
μ΄ˆκΈ°ν™”λ©΄
μ΄ˆκΈ°ν™”λ©΄-둜그인

[곡지사항 / 학사일정]

  • 곡지사항 및 학사일정은 λ‘œκ·ΈμΈμ„ ν•œ λͺ¨λ“  μ‚¬λžŒμ΄ μ—΄λžŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ, 곡지사항과 학사일정 등둝,μˆ˜μ •,μ‚­μ œλŠ” κ΄€λ¦¬μžμ˜ κΆŒν•œμ΄κ³  μ—΄λžŒμ€ 곡톡기λŠ₯μž…λ‹ˆλ‹€.
곡지사항 학사일정
곡지사항 학사일정

ꡐ직원 κΈ°λŠ₯

[ꡐ수/ꡐ직원 등둝]

  • 이메일 μ£Όμ†Œμ™€ λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜λ©΄ μž…λ ₯μ°½μ—μ„œ λ°”λ‘œ μœ νš¨μ„± 검사가 μ§„ν–‰λ˜κ³  ν†΅κ³Όν•˜μ§€ λͺ»ν•œ 경우 각 κ²½κ³  문ꡬ가 μž…λ ₯μ°½ ν•˜λ‹¨μ— ν‘œμ‹œλ©λ‹ˆλ‹€.
  • 이메일 μ£Όμ†Œμ˜ ν˜•μ‹μ΄ μœ νš¨ν•˜μ§€ μ•Šκ±°λ‚˜ 이미 κ°€μž…λœ 이메일일 경우 λ˜λŠ” λΉ„λ°€λ²ˆν˜Έκ°€ 6자 미만일 κ²½μš°μ—λŠ” 각 μž…λ ₯μ°½ ν•˜λ‹¨μ— κ²½κ³  문ꡬ가 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
  • μž‘μ„±μ΄ μ™„λ£Œλœ ν›„, μœ νš¨μ„± 검사가 ν†΅κ³Όλœ 경우 λ‹€μŒ λ²„νŠΌμ΄ ν™œμ„±ν™”λ˜λ©°, λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ ν”„λ‘œν•„ μ„€μ • 화면이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
ꡐ수/ꡐ직원 등둝
ꡐ수 λ“±λ‘ν•˜κΈ°

[학생 등둝]

  • 학생 등둝 κΈ°λŠ₯은 ꡐ수 / ꡐ직원 λ“±λ‘κ³ΌλŠ” λ‹€λ₯΄κ²Œ ν•œ λ²ˆμ— λ§Žμ€ 학생이 ν•œ 학기에 μž…ν•™ν•˜κΈ° λ•Œλ¬Έμ— ν•œλ²ˆμ— λ§Žμ€ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ Excel둜 λ“±λ‘ν•©λ‹ˆλ‹€.
  • 기본적으둜 ExcelForm을 λ‹€μš΄λ°›μ„ 수 있으며 ExcelνŒŒμΌμ— 데이터λ₯Ό μ–΄λ–»κ²Œ κΈ°μž…ν•΄μ•Ό ν•˜λŠ”μ§€
  • μž‘μ„±μ΄ μ™„λ£Œλœ ν›„, μœ νš¨μ„± 검사가 ν†΅κ³Όλœ 경우 λ‹€μŒ λ²„νŠΌμ΄ ν™œμ„±ν™”λ˜λ©°, λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ ν”„λ‘œν•„ μ„€μ • 화면이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
학생 등둝 엑셀폼 λ‹€μš΄λ°›κΈ°
학생등둝폼 λ‹€μš΄λ‘œλ“œ
학생 등둝 (엑셀폼 λ“±λ‘ν•˜κΈ°)
학생등둝

[인원 쑰회 ν•˜κΈ°]

  • κ΄€λ¦¬μžλŠ” 학생, ꡐ수, ꡐ직원을 λͺ¨λ‘ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‘°νšŒν• λ•Œ 학생과 κ΅μˆ˜λŠ” 학과와 μ΄λ¦„μœΌλ‘œ
  • ꡐ직원은 이름과 μ—°λ½μ²˜λ‘œ 검색할 수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.
  • νŽ˜μ΄μ§•μ„ 톡해 ν•œ νŽ˜μ΄μ§€μ— 10개의 κ²°κ³Όλ§Œμ„ 보여쀄 수 있고, ν‡΄μ‚¬μžλ₯Ό ν¬ν•¨ν•œ 검색, 학생은 였늘 λ“±λ‘λœ μ‹ μž… 학생을 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
인원 μ‘°νšŒν•˜κΈ° (λŒ€ν‘œλ‘œ 학생 쑰회)
ν•™μƒμ‘°νšŒ

[ν•™κ³Ό μ‘°νšŒν•˜κΈ°]

  • λ‹¨κ³ΌλŒ€ν•™μ„ μ„ νƒν•˜λ©΄ ν•΄λ‹Ή λ‹¨κ³ΌλŒ€ν•™μ— μ†ν•˜λŠ” ν•™κ³Όλ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•™κ³Όλͺ…μœΌλ‘œλ„ 검색이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
ν•™κ³Ό μ‘°νšŒν•˜κΈ°
ν•™κ³Όμ‘°νšŒ

[κ°•μ˜ 쑰회]

  • 전체 κ°•μ˜λ₯Ό μ‘°νšŒν•  수 있으며, ν•™κ³Ό, κ°•μ˜ νƒ€μž…, κΈ°κ°„, ν•™κΈ°, ν•™λ…„λ“± μ—¬λŸ¬ 쑰건에 λ”°λ₯Έ 검색이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • νκ°•λœ κ°•μ˜λ„ λ³Ό 수 있으며 ν•œ νŽ˜μ΄μ§€μ— 10건의 데이터λ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°•μ˜μƒμ„Έλ³΄κΈ°λ₯Ό 톡해 κ°•μ˜μ˜ 상세 내역을 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°•μ˜ 쑰회
κ°•μ˜μ‘°νšŒ

[κ°•μ˜ 평가 λ‚΄μš© 쑰회]

  • μˆ˜κ°•ν•œ 학생듀이 이 κ°•μ˜μ— λŒ€ν•œ 평가λ₯Ό λ‚¨κΈ°λŠ” 데 μ–΄λ–€ ν‰κ°€λ‚΄μš©μ„ λ‚¨κ²ΌλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ μˆ˜μ™€ 주관식 ν‰κ°€μ˜ λ‚΄μš©μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • A,B,C,D,E 둜 Aκ°€ 맀우 κ·Έλ ‡λ‹€, Eκ°€ 맀우 μ•„λ‹ˆλ‹€ μž…λ‹ˆλ‹€.
κ°•μ˜ 평가 확인
ꡐ직원-κ°•μ˜ν‰κ°€ 보기

[κ°•μ˜ 등둝]

  • ꡐ직원은 κ°•μ˜ 등둝을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°•μ˜ 등둝을 ν•  λ•Œ κΈ°μ‘΄ κ°•μ˜μ˜ κ°•μ˜μ‹€κ³Ό κ°•μ˜μ‹œκ°„μ˜ 쀑볡을 λ§‰λŠ” 둜직이 μ μš©λ˜μ–΄μžˆμ–΄ λ§Œμ•½ μ€‘λ³΅μ΄λœλ‹€λ©΄ λ“±λ‘μ‹€νŒ¨κ°€ λ©λ‹ˆλ‹€.
  • κ°•μ˜μ‹€κ³Ό κ°•μ˜μ‹œκ°„μ΄ κ²ΉμΉ˜μ§€ μ•Šμ„ 경우 κ°•μ˜ 등둝에 성곡 ν•˜κ²Œ λ©λ‹ˆλ‹€.
κ°•μ˜λ“±λ‘ + μ‹€νŒ¨
κ°•μ˜λ“±λ‘μ‹€νŒ¨+κ°•μ˜λ“±λ‘μ„±κ³΅

[κ°•μ˜ μˆ˜μ •]

  • κ°•μ˜ μˆ˜μ •μ˜ κ²½μš°μ—λ„ λ§ˆμ°¬κ°€μ§€λ‘œ 쀑볡여뢀λ₯Ό μ²΄ν¬ν•©λ‹ˆλ‹€.
  • 기쑴의 κ°•μ˜μ™€ 쀑볡이 λœλ‹€λ©΄ μˆ˜μ • μ‹€νŒ¨λ‘œ 뜨게 λ©λ‹ˆλ‹€.
κ°•μ˜ μˆ˜μ •
κ°•μ˜μˆ˜μ •

[학생 λ“±λ‘κΈˆ λ‚©λΆ€ μ—¬λΆ€ 쑰회]

  • ꡐ직원은 ν•΄λ‹Ή 학생이 λ“±λ‘κΈˆμ„ λ‚©λΆ€ ν–ˆλŠ”μ§€ μ•„λ‹Œμ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ“±λ‘κΈˆμ„ 내지 μ•Šμ€ ν•™μƒμ—κ²ŒλŠ” λ―Έλ‚©μ΄λΌλŠ” 문ꡬ가 λ‚˜μ˜€κ³  λ“±λ‘κΈˆμ„ λ‚©λΆ€ν•œ 학생은 λ‚©λΆ€μ™„λ£ŒλΌλŠ” 문ꡬ가 뜨게 λ©λ‹ˆλ‹€.
λ“±λ‘κΈˆ λ‚©λΆ€ μ—¬λΆ€ 쑰회
λ“±λ‘κΈˆ λ‚©λΆ€ μ—¬λΆ€ 쑰회

[μž₯ν•™κΈˆ 리슀트 및 λ“±λ‘ν•˜κΈ°]

  • μž₯ν•™κΈˆμ€ λ‚΄λΆ€μž₯ν•™κΈˆ, μ™ΈλΆ€μž₯ν•™κΈˆμœΌλ‘œ λΆ„λ₯˜λ˜κ³  이λ₯Ό ꡐ직원은 이λ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž₯ν•™κΈˆμ˜ κΈˆμ•‘μ΄ 99999999라면 이것은 1ν•™κΈ° μ „μ•‘μž₯ν•™κΈˆμ΄λΌλŠ” λœ»μž…λ‹ˆλ‹€.
μž₯ν•™κΈˆ 리슀트 및 λ“±λ‘ν•˜κΈ°
μž₯ν•™κΈˆ

[λ‚΄ 정보보기]

  • λ‚΄ 정보확인이전에 λΉ„λ°€λ²ˆν˜Έλ₯Ό ν™•μΈν•˜λŠ” 절차λ₯Ό κ±°μΉ©λ‹ˆλ‹€.
  • λΉ„λ°€λ²ˆν˜Έκ°€ ν™•μΈλ˜λ©΄ μˆ˜μ •ν•  수 μžˆλŠ” λ‚΄ μ •λ³΄λ‚΄μš©μ΄ 보이고 μˆ˜μ •ν•  뢀뢄듀을 μˆ˜μ •ν•˜κ³  이메일 μΈμ¦μ„ν•΄μ„œ μˆ˜μ •μ„ λ§ˆλ¬΄λ¦¬ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.
  • λΉ„λ°€λ²ˆν˜Έλ₯Ό μˆ˜μ •ν•  λ•Œμ—λŠ” 기쑴의 λΉ„λ°€λ²ˆν˜Έμ™€ saltκ°’μœΌλ‘œ λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜λŠ”μ§€ κ²€μ‚¬ν•˜κ³  μƒˆλ‘œμš΄ λΉ„λ°€λ²ˆν˜Έλ‘œ μˆ˜μ •ν•©λ‹ˆλ‹€.
  • 이 λ•Œ, saltμ—­μ‹œ μƒˆλ‘œμš΄ salt둜 κ°±μ‹ μ΄λ˜λ©° λΉ„λ°€λ²ˆν˜ΈλŠ” μƒˆλ‘œμš΄ saltκ°’κ³Ό μƒˆλ‘œμš΄ λΉ„λ°€λ²ˆν˜Έ κ°’μœΌλ‘œ μ•”ν˜Έν™”λ˜μ–΄ DB에 μ €μž₯λ˜λŠ” ν˜•μ‹μž…λ‹ˆλ‹€.
λ‚΄ 정보보기+ λ‚΄ μ •λ³΄μˆ˜μ • + λΉ„λ°€λ²ˆν˜Έ λ³€κ²½
λ‚΄ 정보보기 + μˆ˜μ •ν•˜κΈ°

학생 κΈ°λŠ₯

[μˆ˜κ°• μ‹ μ²­ κΈ°λŠ₯]

  • ꡐ수,κ³Όλͺ©,ν•™λ…„μœΌλ‘œ μ›ν•˜λŠ” μˆ˜κ°•ν•­λͺ©μ„ 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 학생은 μžμ‹ μ΄ μ›ν•˜λŠ” μ‹œκ°„λŒ€μ™€ μ›ν•˜λŠ” 학과에 λŒ€ν•œ κ°•μ˜λ₯Ό μˆ˜κ°•μ‹ μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μˆ˜κ°•μ‹ μ²­μ— μ„±κ³΅ν•˜λ©΄ 곧 μˆ˜κ°•κ°•μ˜λ‘œ ν™•μ •λ©λ‹ˆλ‹€.
  • μˆ˜κ°•μ‹ μ²­ μš”μΌκ³Ό μ‹œκ°„μ΄ 겹치면 μˆ˜κ°•μ‹ μ²­μ— μ‹€νŒ¨ν•˜κ²Œ λ©λ‹ˆλ‹€. 그리고 μˆ˜κ°• μ΅œλŒ€ 인원을 μ΄ˆκ³Όν•˜κ²Œ 되면 μˆ˜κ°•μ‹ μ²­μ΄ λΆˆκ°€ν•©λ‹ˆλ‹€.
μˆ˜κ°•μ‹ μ²­
μˆ˜κ°•μ‹ μ²­

[성적 확인]

  • ν•™κΈ°κ°€ λλ‚˜κ³  κ΅μˆ˜κ°€ 성적을 μž…λ ₯ν•˜λ©΄ λ‚΄ κ°•μ˜λ“€μ˜ 성적을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‚΄ κ°•μ˜ 성적듀은 ν•™κΈ°λ§ˆλ‹€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 학기별이 μ•„λ‹Œ 전체 성적을 μ‘°νšŒν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
성적 확인
성적확인

[κ°•μ˜ν‰κ°€ν•˜κΈ°]

  • λ‚΄κ°€ μˆ˜κ°•ν•˜κ³  μžˆλŠ” κ°•μ˜κ°€ 마치면 ꡐ직원에 μ˜ν•΄ κ°•μ˜ν‰κ°€ 기간이 μ„€μ •λ©λ‹ˆλ‹€.
  • κ°•μ˜ν‰κ°€κΈ°κ°„ 내에 학생은 κ°•μ˜ 평가λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°•μ˜ν‰κ°€λŠ” A,B,C,D,E 둜 선택할 수 있으며 Aκ°€ 맀우 긍정, Eκ°€ 맀우 λΆ€μ •μž…λ‹ˆλ‹€.
  • 주관식 μ˜κ²¬μ„ 남길 수 있으며 κ°•μ˜ 평가가 μ™„λ£Œλœ κ°•μ˜λŠ” λͺ©λ‘μ— λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
κ°•μ˜ 평가 ν•˜κΈ°
κ°•μ˜ 평가 ν•˜κΈ°

[λ“±λ‘κΈˆ λ‚©λΆ€ 확인 및 λ‚©λΆ€ν•˜κΈ°]

  • λ‚΄κ°€ μ†ν•œ ν•™κ³Όμ˜ λ“±λ‘κΈˆκ³Ό λ‚΄κ°€ 받은 μž₯ν•™κΈˆμ„ ν•©μ‚°ν•΄μ„œ λ‚΄κ°€ μ΄λ²ˆν•™κΈ°μ— λ‚΄μ•Όν•  λ“±λ‘κΈˆμ„ 확인할 수 있고
  • λ“±λ‘κΈˆμ„ λ‚©λΆ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ“±λ‘κΈˆ λ‚©λΆ€λŠ” μ‹€μ œλ‘œ λ‚©λΆ€ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 더미 κ³„μ’Œλ²ˆν˜Έμ™€ λ‚©λΆ€ν–ˆλ‹€λŠ” alertλ§Œμ„ λ‚¨κΉλ‹ˆλ‹€.
  • μ‚¬μ§„μ˜ ν•΄λ‹Ή 학생은 μ „μ•‘ μž₯ν•™κΈˆμ„ λ°›μ•˜κΈ° λ•Œλ¬Έμ— μ΅œμ’… λ‚©λΆ€κΈˆμ•‘μ΄ 0원인 λͺ¨μŠ΅μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ“±λ‘κΈˆ λ‚©λΆ€
λ“±λ‘κΈˆλ‚©λΆ€ν•˜κΈ°+리슀트

[νœ΄ν•™ μ‹ μ²­ 및 볡학 μ‹ μ²­]

  • 학생은 νœ΄ν•™μ‹ μ²­ 및 볡학 신청을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 학생은 νœ΄ν•™μ‹ μ²­ 및 볡학 신청을 ν•˜κ³  ꡐ직원이 이λ₯Ό μŠΉμΈν•΄μ•Ό λ³΅ν•™μƒνƒœ, νœ΄ν•™μƒνƒœλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.
  • νœ΄ν•™μ€‘μΈ ν•™μƒλ§Œ 볡학신청을 ν•  수 있고 μž¬ν•™μ€‘μΈ ν•™μƒλ§Œμ΄ νœ΄ν•™μ‹ μ²­μ„ ν•  수 있으며
  • μ‹ μ²­ ν›„ κΈ°ν•œ μ„€μ •μ΄λ‚˜ λ‹€λ₯Έ μ‹€μˆ˜κ°€ μžˆλ‹€λ©΄ 신청을 μ·¨μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νœ΄ν•™ 및 볡학 신청을 ν•  λ•Œμ—λŠ” κΈ°κ°„ 섀정을 잘 μ„€μ • ν•΄μ•Ό ν•©λ‹ˆλ‹€. νœ΄ν•™ μ‹œμž‘μΌμ΄ νœ΄ν•™ μ˜ˆμƒ μ’…λ£ŒμΌλ³΄λ‹€ 뒀에 μžˆλ‹€λ©΄ λΆˆκ°€λŠ₯ν•˜λ„λ‘ λ§‰μ•˜μŠ΅λ‹ˆλ‹€.
νœ΄ν•™ μ‹ μ²­ 볡학 μ‹ μ²­
νœ΄ν•™μ‹ μ²­ 볡학신청

ꡐ수 κΈ°λŠ₯

[학생 성적 μž…λ ₯ 및 μˆ˜μ •]

  • κ΅μˆ˜λŠ” ν•™μƒμ—κ²Œ 성적을 λΆ€μ—¬ν•  κΆŒν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μžμ‹ μ˜ κ°•μ˜λ₯Ό λ“£λŠ” ν•™μƒμ˜ 성적을 λΆ€μ—¬ν•  수 있고 또 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±μ κΈ°μž…μ€ λ‚˜μ˜ κ°•μ˜ νŽ˜μ΄μ§€μ—μ„œ 성적 μž…λ ₯을 μ„ νƒν•˜μ—¬ λͺ¨λ‹¬μ°½μ—μ„œ μˆ˜ν–‰λ©λ‹ˆλ‹€.
μ„±μ μž…λ ₯ 성적 μˆ˜μ •
μ„±μ μž…λ ₯ μ„±μ μˆ˜μ •

[κ°•μ˜ κ³„νšμ„œ 등둝]

  • κ΅μˆ˜λŠ” μžμ‹ μ˜ κ°•μ˜μ— λŒ€ν•΄ κ°•μ˜ κ³„νšμ„œλ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°•μ˜ κ³„νšμ„œλ₯Ό 등둝을해야 κ°•μ˜ μƒμ„Έλ³΄κΈ°μ—μ„œ 학생듀이 μˆ˜μ—…μ„ νŒŒμ•…ν•˜κ³  μˆ˜κ°•μ‹ μ²­μ„ ν•  수 μžˆλ„λ‘ 정보λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°•μ˜ κ³„νšμ„œ 등둝
κ°•μ˜κ³„νšμ„œ 등둝

8. νŠΈλŸ¬λΈ” μŠˆνŒ…

  • FrontEnd

    πŸƒ ThymeLeaf 문제 ν•΄κ²° 사둀

    문제 상황 ν•΄κ²° 방법
    Header에 이미지λ₯Ό λ„μš°λŠ” κ³Όμ •μ—μ„œ ThymeLeaf μ˜ˆμ™Έ λ°œμƒ StudentDto에 null 값을 κ°€μ§€λŠ” img ν•„λ“œ μΆ”κ°€
    ν•™κ³Ό λͺ©λ‘μ— νŽ˜μ΄μ§• 적용 ν›„, 검색 κ²°κ³Όκ°€ μ—†λ‹€λŠ” 문ꡬλ₯Ό λ„μ›Œμ£ΌλŠ” λΆ€λΆ„μ—μ„œ νƒ€μž„λ¦¬ν”„ μ˜ˆμ™Έ λ°œμƒ th:if 쑰건을 λ¦¬μŠ€νŠΈκ°€ nullμ΄κ±°λ‚˜ isEmpty() λΉ„μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜λ„λ‘ μˆ˜μ •
    th:if 쑰건으둜 null 체크λ₯Ό 진행할 λ•Œ, 검색 κ²°κ³Όκ°€ 없을 경우 null μ˜ˆμ™Έκ°€ λœ¨λŠ” 문제 list = Page.empty() 둜 빈 νŽ˜μ΄μ§€λ₯Ό λ‹΄μ•„μ„œ λ°˜ν™˜ν•΄μ£ΌλŠ” λ°©λ²•μœΌλ‘œ ν•΄κ²°

    πŸ“€ Redirection 문제 ν•΄κ²° 사둀

    문제 상황 ν•΄κ²° 방법
    λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° κ΄€λ ¨ ajaxλ₯Ό μ‹€ν–‰ν•˜λ©΄ 둜그인 νŽ˜μ΄μ§€κ°€ μƒˆλ‘œκ³ μΉ¨ 됨 MvcConfig에 μ‹€ν–‰ν•˜λ €λŠ” ajax μ£Όμ†Œλ₯Ό ν™”μ΄νŠΈλ¦¬μŠ€νŠΈλ‘œ 등둝

    πŸ” Search 문제 ν•΄κ²° 사둀

    문제 상황 ν•΄κ²° 방법
    νŽ˜μ΄μ§€κ°€ λ„˜μ–΄κ°”μ„ λ•Œ 체크 λ°•μŠ€λ₯Ό ν¬ν•¨ν•œ 검색을 λ‹€μ‹œ μ‹œλ„ν•˜λ©΄ 검색어가 μ΄ˆκΈ°ν™” λ˜λŠ” 문제 λͺ©λ‘μœΌλ‘œ λ²„νŠΌμ„ 클릭할 μ‹œμ—λ§Œ 검색 쑰건이 μ΄ˆκΈ°ν™” 되게 μ„€μ •
    λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ 이동 ν›„ ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ λ‘œλ”©ν•΄λ„ κ²€μƒ‰ν–ˆλ˜ 검색어가 inputκ³Ό select에 κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆλŠ” λ¬Έμ œλ°œμƒ @GetMapping을 μ‚¬μš©ν•œ 검색 λ°©μ‹μœΌλ‘œ μˆ˜μ •ν•˜μ—¬ controllerμ—μ„œ λ„˜μ–΄μ˜¨ 검색어 νŒŒλΌλ―Έν„° 값이 μ‘΄μž¬ν•˜λ©΄ value둜 λ‹€μ‹œ λ„˜κΈ°λ„λ‘ μˆ˜μ •
  • BackEnd

    βš™ Entity 문제 ν•΄κ²° 사둀

    문제 상황 ν•΄κ²° 방법
    User μ—”ν‹°ν‹°μ˜ userid와 μ£Όλ―Όλ²ˆν˜Έμ— Unique μ œμ•½ 쑰건이 걸리지 μ•ŠλŠ” 문제 @Column(length=xx)을 μΆ”κ°€ν•˜μ—¬ 크기 μ œν•œμ„ μΆ”κ°€
    Professor와 Manager μ—”ν‹°ν‹°μ˜ 퇴사 μ—¬λΆ€κ°€ μ „λΆ€ 1둜 λ“€μ–΄κ°€ μžˆλŠ” 문제 퇴사 μ—¬λΆ€ ν•„λ“œμ— @Enumerated(EnumType.STRING) μž‘μ„±
    곡지사항을 μž‘μ„±ν•  λ•Œ, κ³΅μ§€μ‚¬ν•­μ˜ λ‚΄μš©μ΄ 길어지면 μ˜ˆμ™Έκ°€ λ°œμƒ content ν•„λ“œμ— @Lob을 μ‚¬μš©ν•˜μ—¬ μžλ£Œν˜•μ— 맞게 BLOB λ˜λŠ” CLOB으둜 λ³€κ²½

    βŒ› Running Time 문제 ν•΄κ²° 사둀

    문제 상황 ν•΄κ²° 방법
    lectureList의 λ‘œλ”© μ‹œκ°„μ΄ λ„ˆλ¬΄ 였래 κ±Έλ¦¬λŠ” 문제 LectureListλ₯Ό λ°›μ•„μ˜€κ³ , ν•΄λ‹Ή List에 μ‘΄μž¬ν•˜λŠ” Major듀을 λ°›μ•„μ˜€λŠ” λ°©μ‹μœΌλ‘œ μˆ˜μ •
    ID와 Passwordλ₯Ό μž…λ ₯ν•˜μ§€ μ•Šκ³  둜그인 μ‹œλ„ μ‹œ NullPointerException λ°œμƒ String.isEmpty()λ₯Ό μ‚¬μš©ν•˜μ—¬ ID와 Passwordκ°€ λΉ„μ–΄μžˆμ§€ μ•Šμ„ λ•Œλ§Œ κΈ°μ‘΄ 둜그인 λ©”μ„œλ“œλ₯Ό μ‹€ν–‰

    Convert 문제 ν•΄κ²° 사둀

    문제 상황 μ„€λͺ…
    AcademicalCalendar Entityλ₯Ό DTO둜 λ³€ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ, λ‚ μ§œμ— null이 λ“€μ–΄κ°€λŠ” 문제 원인: Entityμ—λŠ” Date νƒ€μž…, DTOμ—λŠ” LocalDate νƒ€μž…μ΄λΌ λ³€ν™˜ κ³Όμ •μ—μ„œ null이 λ“€μ–΄κ°”λ˜
    ν•΄κ²°: Entity의 νƒ€μž…μ„ LocalDateνƒ€μž…μœΌλ‘œ μˆ˜μ •
    DBμ—μ„œ κ°€μ Έμ˜¨ μ‹œμž‘μΌ, μ’…λ£ŒμΌμ„ View νŽ˜μ΄μ§€λ‘œ 전달 μ‹œ μ˜ˆμ™Έ λ°œμƒ 원인: SimpleDateFormat을 μ‚¬μš©ν•˜μ—¬ μ‹œμž‘μΌκ³Ό μ’…λ£ŒμΌμ„ String νƒ€μž…μœΌλ‘œ λ³€ν™˜ ν›„ μ „λ‹¬ν•˜λŠ”λ°, λ³€ν™˜ κ³Όμ •μ—μ„œ null 체크λ₯Ό μ§„ν–‰ν•˜μ§€ μ•Šμ•„ μ˜ˆμ™Έκ°€ λ°œμƒν•œ 것
    ν•΄κ²°: Parsing λŒ€μƒμ— 값이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” Null 체크 ꡬ문 μž‘μ„±
    Sessionμ—μ„œ userλ₯Ό λ°›μ•„μ˜¨ ν›„, ManagerLoginDto둜 λ‹€μš΄μΊμŠ€νŒ…μ„ ν•˜κΈ° μœ„ν•΄ UserDTO에 μžˆλŠ” role에 μ ‘κ·Όν•˜λŠ” κ³Όμ •μ—μ„œ μ˜ˆμ™Έ λ°œμƒ 원인: userλΌλŠ” μ΄λ¦„μœΌλ‘œ ManagerLoginDto, ProfessorDto, StudentDtoκ°€ λ“€μ–΄κ°€ 있고, ν•΄λ‹Ή DTO 내뢀에 UserDTOκ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— μ΄μ€‘μœΌλ‘œ λ‹€μš΄μΊμŠ€ νŒ… λ˜μ–΄μ•Ό ν•˜λŠ” 것이 원인
    ν•΄κ²°: userλ₯Ό Object둜 λ°›μ•„μ˜¨ ν›„, 쑰건문을 μ‚¬μš©ν•˜μ—¬ 각 DTO둜 λ‹€μš΄μΊμŠ€νŒ…μ΄ λ˜λŠ”μ§€ 확인 ν›„ λ‹€μš΄μΊμŠ€νŒ…μ„ 진행
    Object user = session.getAttribute("user");
    if (user instanceof ManagerLoginDto) {
        ManagerLoginDto manager = (ManagerLoginDto) user;
    }

    Insert

    문제 상황 μ„€λͺ…
    Fetch API 방식을 μ΄μš©ν•΄μ„œ ꡐ수, ꡐ직원 등둝 μ‹œ μ„œλ²„μ— 데이터 μ €μž₯은 λ˜μ§€λ§Œ, ν΄λΌμ΄μ–ΈνŠΈ 츑으둜 응닡이 가지 μ•ŠμŒ: Completed 500 INTERNAL_SERVER_ERROR 원인: CORS 이슈, μ„œλ²„ 응닡 처리, λ„€νŠΈμ›Œν¬ 문제, μš”μ²­ 헀더 μ„€μ •, μš”μ²­ λ³Έλ¬Έ 데이터, μ„œλ²„ μΈ‘ λ‘œκΉ… λ“± λ‹€μ–‘ν•œ 원인 쀑 λͺ…ν™•ν•œ 이유λ₯Ό 찾지 λͺ»ν•¨
    ν•΄κ²°: jQuery의 $.ajax() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λΉ„λ™κΈ°μ μœΌλ‘œ μ„œλ²„μ— μš”μ²­μ„ 보낸 ν›„ μ„œλ²„ 응닡에 λŒ€ν•œ 처리λ₯Ό success와 error 콜백 ν•¨μˆ˜λ‘œ 처리. μ„œλ²„ 응닡이 JSON ν˜•μ‹μΈ 경우 ν•΄λ‹Ή 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³ , 좔가적인 λ‘œμ§μ„ μˆ˜ν–‰
    성적을 μž…λ ₯ν•˜κ³  μ œμΆœν•˜λ©΄ μ„œλ²„μ—μ„œ NullPointerException λ°œμƒ 원인: μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ enrollment_idxλ₯Ό μ „λ‹¬ν•˜μ§€ λͺ»ν•œ μƒνƒœμ—μ„œ, map.get("enrollment_idx");을 톡해 λ°›μœΌλ €κ³  ν–ˆκΈ° λ•Œλ¬Έ
    ν•΄κ²°: enrollment_idxλ₯Ό λ°›μ•„μ˜€μ§€ λͺ»ν•œ 원인이 Listλ₯Ό λ°›μ•„μ˜€λŠ” 과정에 μžˆλ‹€κ³  νŒλ‹¨ν•˜μ—¬ ProfessorRepositoryCustomImpl을 ν™•μΈν•˜μ˜€κ³ , enrollment_idxλ₯Ό λ°›μ•„μ˜€λŠ” ꡬ문이 μ‚­μ œλœ 것을 λ°œκ²¬ν•˜μ—¬ λ‹€μ‹œ μž‘μ„±

    Modify

    문제 상황 μ„€λͺ…
    κ°•μ˜ μˆ˜μ •μ„ μ§„ν–‰ν•˜λŠ” 쀑 form으둜 데이터λ₯Ό λ„˜κΈ°λ©΄ null이 듀어감 원인: μš”μΌ, μ‹œμž‘ μ‹œκ°„κ³Ό 끝 μ‹œκ°„μ„ String λ°°μ—΄λ‘œ λ°›μ•˜κΈ° λ•Œλ¬Έμ—, 데이터가 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 배열도 μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— null이 λ“€μ–΄κ°„ 것
    ν•΄κ²°: μž…λ ₯ 받은 Stringλ°°μ—΄μ˜ 길이만큼 λ°˜λ³΅ν•˜μ—¬ null이 μ•„λ‹Œ κ°’λ§Œ μƒˆλ‘œ μƒμ„±ν•œ StringBuilder에 λ‹΄μ•„μ„œ DB 데이터λ₯Ό μˆ˜μ •
    이미 μž…λ ₯된 성적을 μˆ˜μ •ν•  λ•Œ updateκ°€ μ•„λ‹Œ insert λ˜λŠ” 문제 Serviceμ—μ„œ Grade μ—”ν‹°ν‹°λ₯Ό μƒˆλ‘œ μƒμ„±ν•˜κ³  save λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έ

    QueryDSL

    문제 상황 μ„€λͺ…
    κ°•μ˜ 평가 쀑볡 QueryDSL의 innerJoinμ—μ„œ 쑰인문의 였λ₯˜λ‘œ 문제 λ°œμƒ
    QueryDSL을 μ‚¬μš©ν•˜μ—¬ ProfessorDTOλ₯Ό λ°›μ•„μ˜€λŠ” κ³Όμ •μ—μ„œ major 이름을 college μ΄λ¦„μœΌλ‘œ λ°›μ•„μ˜€λŠ” 문제 ProfessorDTOμ—λŠ” MajorDTOκ°€ μ‘΄μž¬ν•˜κ³ , MajorDTOμ—λŠ” nameκ³Ό college_nameμ΄λΌλŠ” ν•„λ“œκ°€ μ‘΄μž¬ν•œλ‹€. ProfessorDTO λ‚΄λΆ€μ—μ„œ MajorDTOλ₯Ό 생성할 λ•Œ Entityμ—μ„œ 같은 ν•„λ“œλͺ…을 μ‚¬μš©ν•˜λŠ” name이 λ¬Έμ œκ°€ λ˜μ–΄ major.name이 μ•„λ‹Œ major.college.name이 λ“€μ–΄κ°„ 것이 μ›μΈμœΌλ‘œ μΆ”μΈ‘
    성적 쑰회λ₯Ό μœ„ν•΄ GradeLectureDtoλ₯Ό κ°€μ Έμ˜€λ©΄μ„œ InvalidPathException: Invalid path: 'grade.score' λ°œμƒ ν•΄λ‹Ή λ©”μ„œλ“œμ˜ from을 QLecture.lecture둜 μž‘μ„±ν•˜μ˜€λŠ”λ°, Lecture μ—”ν‹°ν‹°μ—λŠ” grade λΌλŠ” ν•„λ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ³ , Grade 엔티티와 μ—°κ²°ν•  쑰인문을 μž‘μ„±ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έ
    κ°•μ˜λͺ©λ‘ λΆˆλŸ¬μ˜€λŠ” κ³Όμ •μ—μ„œ eq(null) is not allowed. Use isNull() instead; λΌλŠ” μ—λŸ¬ λ©”μ‹œμ§€ 좜λ ₯ where 쑰건을 μž‘μ„±ν•˜κΈ° μœ„ν•΄ eq λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ, 검색 쑰건 λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ null체크λ₯Ό μ§„ν–‰ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•œ 문제
    @PageableDefault (sort=”idx”) μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ μš©λ˜μ§€ μ•ŠμŒ QueryDSL을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” QueryDSL이 μ–΄λ…Έν…Œμ΄μ…˜ 보닀 μš°μ„ μ‹œ λ˜μ–΄μ„œ @PageableDefault (sort=”idx”) μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ μš©λ˜μ§€ μ•ŠμŒ
    둜그인 μ‹œ β€œν•™λ²ˆ κΈ°μ–΅ν•˜κΈ°β€μ— 체크가 λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ μ˜ˆμ™Έ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 문제 β€œν•™λ²ˆ κΈ°μ–΅ν•˜κΈ°β€μ˜ 값을 @RequestParam으둜 κ°€μ Έμ˜¬ λ•Œ, Requiredκ°€ κΈ°λ³Έκ°’ true둜 μ„€μ •λ˜μ–΄ μžˆμ—ˆκΈ° λ•Œλ¬Έ
     BooleanExpression studentIdxCondition = condition.getStudentIdx() != null ?
                    enrollment.student.idx.eq(condition.getStudentIdx()) : null;
    
     BooleanExpression semesterCondition = condition.getSemester() != null ?
                    enrollment.lecture.semester.eq(condition.getSemester()) : null;

    πŸͺ μΏ ν‚€

    문제 상황 둜그인 μ‹œ β€œν•™λ²ˆ κΈ°μ–΅ν•˜κΈ°β€μ— 체크가 λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ μ˜ˆμ™Έ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 문제
    원인 β€œν•™λ²ˆ κΈ°μ–΅ν•˜κΈ°β€μ˜ 값을 @RequestParam으둜 κ°€μ Έμ˜¬ λ•Œ, Requiredκ°€ κΈ°λ³Έκ°’ ture둜 μ„€μ •λ˜μ–΄ μžˆμ—ˆκΈ° λ•Œλ¬Έ
    ν•΄κ²° @RequestParam의 Requiredλ₯Ό false둜 μ„€μ •ν•˜κ³ , 값이 μ—†μœΌλ©΄ 쑰건문에 λ“€μ–΄κ°ˆ λ•Œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— defaultValueλ₯Ό β€œfalseβ€λ‘œ μ„€μ •

    βŒ› AWS

    문제 상황 μΈμŠ€ν„΄μŠ€ 경보 및 μƒνƒœμ²΄ν¬ μ—λŸ¬λ¬Έμ œ
    원인 원인은 λͺ¨λ₯΄κ² μœΌλ‚˜ μƒνƒœμ²΄ν¬ κ³Όμ •μ—μ„œ μ—λŸ¬κ°€ 생기고 이 μ—λŸ¬λ‘œ 인해 접속이 λΆˆκ°€λŠ₯ν•΄μ§€λŠ” λ¬Έμ œκ°€ μƒκ²ΌμŒ
    ν•΄κ²° μΈμŠ€ν„΄μŠ€ 쀑지 ν›„ λ‹€μ‹œ μ‹œμž‘ 이 κ³Όμ •μ—μ„œ 퍼블릭 IPμ£Όμ†Œκ°€ λ°”λ€ŒλŠ” 단점이 μžˆμœΌλ‚˜ ν•΄κ²°ν–ˆμŒ IPμ£Όμ†Œμ— λ§žμΆ°μ„œ 도메인 IPμ£Όμ†Œ λ³€κ²½ 및 ν¬νŠΈν¬μ›Œλ”©μ„ λ‹€μ‹œ ν•΄μ€ŒμœΌλ‘œμ¨ 볡ꡬ μ™„λ£Œ

9. κ°œμ„  λͺ©ν‘œ

  • 정적뢄석 - μ€‘λ³΅λœ μ½”λ“œκ°€ 많고, μ½”λ“œ 슀멜(Code Smell)κ³Ό λΆˆν•„μš”ν•œ 반볡으둜 λ³΅μž‘λ„κ°€ λ†’μ•„ 효율이 떨어진닀. 이λ₯Ό κ°œμ„ ν•΄ λΆ€ν•˜λ₯Ό 쀄여야할 ν•„μš”κ°€ μžˆλ‹€.
  • κΈ°λŠ₯적으둜 λΆ€μ‘±ν•œ 뢀뢄듀이 λ§Žλ‹€. 쀑볡 ν•΄κ²° λ™μ‹œμ„± 문제 ν•΄κ²° λ“±
  • μ±„νŒ…κΈ°λŠ₯μ΄λ‚˜ μ•Œλ¦ΌκΈ°λŠ₯을 μ›Ήμ†ŒμΌ“μ„ μ‚¬μš©ν•΄μ„œ κ΅¬ν˜„ν•˜κ³  μ‹Άλ‹€.
  • λΆ€ν•˜ν…ŒμŠ€νŠΈ λΆ€μ‘±μœΌλ‘œ λ§Žμ€ λΆ€ν•˜ λ°œμƒμ‹œ 이λ₯Ό ν•΄κ²°ν•  ν•„μš”κ°€ μžˆλ‹€.

10. ν”„λ‘œμ νŠΈ ν›„κΈ°

🍊 μ΅œμœ λž€ 

학사관리 μ‹œμŠ€ν…œ ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ 것을 배우고 κ²½ν—˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈμ—μ„œ μŠ€ν”„λ§λΆ€νŠΈ, JPA, 그리고 QueryDSL 같은 κΈ°μˆ μ„ μ“°λ©΄μ„œ κ°œλ°œμ„ μ§„ν–‰ν–ˆλŠ”λ° 이런 κΈ°μˆ λ“€ 덕뢄에 데이터λ₯Ό 효율적으둜 닀루고 λ³΅μž‘ν•œ 쿼리도 μ‰½κ²Œ μž‘μ„±ν•  수 μžˆμ—ˆλ˜κ²Œ 큰 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이번 ν”„λ‘œμ νŠΈλ₯Ό 톡해 κΈ°μˆ μ μœΌλ‘œλ„ 많이 μ„±μž₯ν–ˆκ³ , νŒ€μ›Œν¬μ™€ ν”„λ‘œμ νŠΈ 관리 λŠ₯λ ₯도 ν•¨κ»˜ 더 λ°œμ „ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ„œλ‘œμ˜ 기술과 지식을 κ³΅μœ ν•˜κ³ , ν•¨κ»˜ 문제λ₯Ό ν•΄κ²°ν•΄ λ‚˜κ°€λŠ” κ³Όμ •μ—μ„œ λ§Žμ€ 것을 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ™„λ²½ν•˜κ²Œ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•œ 뢀뢄듀도 μžˆμ–΄μ„œ 아쉬움이 남기도 ν•˜μ§€λ§Œ ν•¨κ»˜ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆλ˜ νŒ€μ›λ“€ λͺ¨λ‘ κ³ μƒν•˜μ…¨μŠ΅λ‹ˆλ‹€!!


πŸ‘» λ°•μ†Œμ€ 

μˆ˜λ£Œμ΄ν›„ μƒˆλ‘­κ²Œ νŒ€ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° λ§Žμ€ 것듀을 배우고 κ²½ν—˜ν•  수 μžˆμ—ˆλ˜ μ‹œκ°„μ„ 보낸것 κ°™μŠ΅λ‹ˆλ‹€. μŠ€ν„°λ””λ₯Ό 톡해 배운 SpringDataJPA와 QueryDSL을 μ‚¬μš©ν•΄λ³΄κΈ° μœ„ν•΄ μ‹œμž‘ν•œ ν”„λ‘œμ νŠΈμ˜€μ–΄μ„œ μ‰½κ²Œ μƒκ°ν–ˆμ§€λ§Œ Entity 섀계후 ν”„λ‘œμ νŠΈκ°€ 점점 μ§„ν–‰λ˜λ©° μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ λ§Žμ€ 뢀뢄듀이 μžˆμ–΄μ„œ μˆ˜μ •μ— 어렀움을 κ²ͺ기도 ν–ˆμŠ΅λ‹ˆλ‹€. 원인을 μ•Œ 수 μ—†λŠ” 였λ₯˜λ‘œ λ§Žμ€ μ‹œκ°„μ„ ν—€λ§€μ—ˆλ˜ 적도 μžˆμ—ˆμ§€λ§Œ νŒ€μ›λ“€μ΄ μžˆμ—ˆκΈ° λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈλ₯Ό 마무리 ν•  수 μžˆμ—ˆλ˜κ²ƒ κ°™μŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λ©΄μ„œ μ²΄κ³„μ μœΌλ‘œ 섀계/기둝 ν•˜μ§€ λͺ»ν–ˆλ˜ 뢀뢄듀이 λ”μš± μ•„μ‰½κ²Œ λ‹€κ°€μ™”μ§€λ§Œ κ·Έ λ˜ν•œ 더 완성도 μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 과정이라고 μƒκ°λ©λ‹ˆλ‹€. 개인적으둜 λΆ€μ‘±ν–ˆλ˜ 뢀뢄듀이 λ§Žμ•˜λŠ”λ° 많이 도와주고 μ•Œλ €μ€€ νŒ€μ›λ“€μ—κ²Œ κ°μ‚¬ν•˜λ‹¨ 말을 μ „ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λͺ¨λ‘ κ°μ‚¬ν•©λ‹ˆλ‹€.


😎 μ΄λ³‘κΈΈ 

νŒ€ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 정말 λ§Žμ€ 것을 λ°°μ› μŠ΅λ‹ˆλ‹€. κ΅­λΉ„ 취업과정을 톡해 배운 지식과 μ΅œκ·Όμ— μƒˆλ‘­κ²Œ 배운 SpringDataJPA와 QueryDSL을 μ‚¬μš©ν•΄μ„œ μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€κ²Œ λ˜μ—ˆλŠ”λ° μ²˜μŒμ—λŠ” 정말 κ°„λ‹¨ν•˜κ²Œ 끝낼 수 μžˆμ„ 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆμ§€λ§Œ 생각보닀 ν•™μ‚¬κ΄€λ¦¬μ‹œμŠ€ν…œμ—λŠ” λ§Žμ€ λ””ν…ŒμΌλ“€μ΄ λ“€μ–΄κ°€μžˆκ΅¬λ‚˜λΌλŠ” 생각을 ν•˜κ²Œ λ˜μ—ˆκ³  νŠΉνžˆλ‚˜ μ‹œκ°„κ΄€λ ¨λœ μ²˜λ¦¬λŠ” 처음 QueryDSL둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ”λ° λ§Žμ€ λ‚œκ΄€λ“€μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ‚œκ΄€λ“€μ„ 극볡해 λ‚˜κ°€λ©΄μ„œ λ§Žμ€ λ³΄λžŒμ„ 느꼈고 λ‹€μŒμ—λŠ” μ’€ 더 λŠ₯μˆ™ν•΄ μ Έμ„œ 완성도 μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄μ„œ ν˜„μ—…μ—μ„œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€. 우리 νŒ€μ›λ“€ λ‹€λ“€ κ³ μƒλ§ŽμœΌμ…¨μŠ΅λ‹ˆλ‹€. λ‹€λ“€ 쒋은 곳으둜 취업에 μ„±κ³΅ν•˜μ…¨μœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.


🐬 μ •μˆ˜μš© 

νŒ€μ›λ“€κ³Ό μ„œλ‘œ μ˜κ²¬μ„ λ‚˜λˆ„κ³ , λͺ¨λ₯΄λŠ” 것이 있으면 μ„œλ‘œ κ°€λ₯΄μ³μ£Όλ©° μž‘μ—…ν•˜λŠ” 과정이 λ„ˆλ¬΄ μ¦κ±°μ› μŠ΅λ‹ˆλ‹€. μ œλŒ€λ‘œ μ‚¬μš©ν•΄λ³΄μ§€ λͺ»ν–ˆλ˜ Git을 톡합 ν˜‘μ—… λŠ₯λ ₯을 μŒ“μ„ 수 μžˆμ—ˆκ³ , 직접 μ‚¬μš©ν•΄λ³΄μ§€ λͺ»ν–ˆλ˜ SprignDataJPA와 QueryDSL을 μ‹€μ œλ‘œ μ‚¬μš©ν•˜λ©° λ§Žμ€ 것을 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Entity 섀계λ₯Ό μ™„λ£Œν–ˆλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ, μž‘μ—… κ³Όμ •μ—μ„œ ν•„λ“œκ°€ μΆ”κ°€λ˜λŠ” κ³Όμ •κ³Ό 더미 데이터λ₯Ό λ„£λŠ” κ³Όμ •μ—μ„œ DB의 κ°œλ…μ  섀계와 논리적 μ„€κ³„μ˜ μ€‘μš”μ„±μ„ λ‹€μ‹œ ν•œ 번 깨달을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μž‘μ—…ν•  λ‹Ήμ‹œμ—λŠ” "μ΄λ§Œν•˜λ©΄ μ™„λ²½ν•˜μ§€!" 라고 μƒκ°ν–ˆλ˜ 결과물이 ν”„λ‘œμ νŠΈ 마무리λ₯Ό ν•˜λŠ” κ³Όμ •μ—μ„œ λΆ€μ‘±ν•œ 뢀뢄듀이 λˆˆμ— λ“€μ–΄μ˜€λŠ” 것이 μ•„μ‰½μŠ΅λ‹ˆλ‹€. 이번 ν”„λ‘œμ νŠΈλ₯Ό 기반으둜 λ‹€μŒ ν”„λ‘œμ νŠΈμ™€ ν˜„μ—…μ—μ„œλŠ” 쑰금 더 완성도 μžˆλŠ” 결과물을 μ™„μ„±ν•  수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. λ§‰λ‚΄λ‘œμ¨ ν˜•, λˆ„λ‚˜λ“€μ—κ²Œ 쒋은 λͺ¨μŠ΅μ„ 보이렀고 ν–ˆλŠ”λ° 잘 λλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 우리 νŒ€μ› λͺ¨λ‘ 쒋은 곳에 μ·¨μ§ν•˜κ³ , μ•žμœΌλ‘œλ„ 자주 λ§Œλ‚  수 μžˆμ—ˆμœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€. λ‹€λ“€ ν™”μ΄νŒ…!!