JPA + JSP 기반 출결 관리 미니 프로젝트
![]() 홍윤기 |
![]() 홍혜원 |
![]() 황병길 |
이 프로젝트는 학생들의 출석 정보를 효율적으로 관리하기 위한 JSP 기반의 웹 애플리케이션이다. 학생들의 출석 정보를 효율적으로 관리하기 위한 JSP 기반의 웹 애플리케이션이다. Oracle 데이터베이스와 연동하여 출석 데이터를 저장 및 조회하고, 관리자가 출석현황을 직관적으로 확인하고 조작할 수 있도록 UI와 기능을 제공한다.
- 출결 관리
- 학생 출석 등록
- 학생별 출석 여부(출석, 퇴근)
- 현재 날짜 기준으로 자동 처리
- 출석 그래프 조회
- 일자별/학생별 출석시간을 그래프로 출력
- 출석왕 조회
- 일자별 가장 출근 시간이 빠른 학생 조회
- JPA + Oracle DB 기반 Entity 관리
- JSP, Servlet 기반 MVC 구조
- Oracle 시퀀스 및 트리거를 통한 자동 ID 관리
mini-project/
├── pom.xml # Maven 프로젝트 설정 파일
├── src/
│ └── main/
│ ├── java/
│ │ ├── controller/ # 컨트롤러 서블릿 클래스들
│ │ │ ├── Attendance.java
│ │ │ ├── BestDriver.java
│ │ │ ├── CheckInController.java
│ │ │ ├── CheckOutController.java
│ │ │ ├── LogoutController.java
│ │ │ └── UserController.java
│ │ ├── model/ # DB 연동 관련 클래스
│ │ │ ├── entity/
│ │ │ │ ├── StudentAttendance.java # 출석 Entity (JPA)
│ │ │ │ └── MemberDAO.java # DAO 클래스 (직접 DB 접근)
│ │ └── util/
│ │ └── DBUtil.java # JDBC 연결 도우미 클래스
│ └── webapp/
│ ├── index.html # 루트 접속 시 첫 페이지
│ ├── resources/ # 정적 리소스 파일
│ ├── WebContent/ # 웹 리소스 보조 디렉토리
│ └── WEB-INF/
│ └── views/ # JSP 및 HTML View 페이지들
│ ├── 404.html
│ ├── 500.html
│ ├── attendance.jsp
│ ├── best.jsp
│ ├── dateSelect.jsp
│ ├── fail.jsp
│ ├── loginfail.jsp
│ └── usercheckin.jsp
└── target/ # Maven 빌드 결과물 저장 폴더
1️⃣ IdentifierGenerationException: ids for this class must be manually assigned before calling save()
-
원인:
@Id만 설정하고@GeneratedValue를 설정하지 않아 Oracle에서 트리거로 PK를 채우는데 Hibernate가 자동 생성 전략을 지원하지 않아 발생 -
해결:
- 엔티티에
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "...")+@SequenceGenerator추가 - Oracle 트리거/시퀀스를 사용하여 ID 자동 주입하도록 설정
- 엔티티에
- 원인: Oracle Dialect에서
GenerationType.IDENTITY사용 시 지원하지 않아 발생 - 해결:
GenerationType.SEQUENCE+@SequenceGenerator로 변경
-
원인:
- 출근 시
StudentAttendance엔티티를 insert하지 못해 null 반환 - JSP에서
request.getAttribute("checkintime")가 null 로 내려옴
- 출근 시
-
해결:
EntityManagerpersist 로 insert 수행- 출근/퇴근 시
request.setAttribute와session.setAttribute구분하여 관리 - JSP에서
requestScope.getAttribute()또는request.getAttribute()로 가져오도록 통일
-
원인: Hibernate가 ID를 null로 판단해 insert 전에 id가 null이 아님을 보장해야 함
-
해결:
- Oracle 트리거로 ID가 주입되도록 DB 측 설정 확인
- Hibernate Dialect 확인 및
hibernate.id.new_generator_mappings=false로 설정
-
DateTimeFormatter.ofPattern("HH:mm")사용하여01:01형식으로 간결하게 표시 -
UI 개선:
flex,align-items: center로 시간 라벨과 값이 두 줄로 분리되지 않도록 수정time-box스타일 개선하여 가독성 및 시인성 향상


