저는 영화 예약 서비스를 구현하였습니다. 이 영화 예약 서비스는 자바 스윙을 통해 좌석을 선택해 티켓을 예매하고 구매하는 기능을 최종 목적으로 구현하였습니다.
짧은 프로젝트 기간상 결제 서비스를 구현하지는 못하였지만 추후 시간이 생긴다면 발전시키도록 하겠습니다. 이번 프로젝트를 통해 자신의 역량 파악이 중요하다는 것을 알게되었습니다. 내가 어떤 부분이 자신이 있고 어떤 부부을 빨리 구현할 수 있고, 어떤 부분이 오래 걸리는 지를 잘 알아야 프로젝트를 설계할 때 어떤 부분을 먼저 구현할지 결정하여 프로젝트를 진행하면서 예상치 문제에 미리 대비할 수 있을 것 같습니다.
앞으로는 이러한 경험을 바탕으로 보다 효율적인 프로젝트 관리를 실천하고, 팀원들과의 협업을 통해 프로젝트의 성공 가능성을 높이고자 합니다.
프로젝트를 github에 올리면서 mysql의 비밀번호를 github에 올리는 건 좋지 않겠다 라는 생각이 들어
config.properties
파일에 따로 비밀번호를 관리해주어서 DBConnect를 관리하였습니다.
- users 테이블
- 사용자 정보를 저장합니다.
- 사용자의 ID, 사용자명, 비밀번호, 나이 등의 기본 정보를 관리합니다.
- movie 테이블
- 영화 정보를 저장합니다.
- 영화의 ID, 제목, 가격, 연령 제한, 상영 시간 등의 정보를 관리합니다.
- place 테이블
- 영화 상영 장소(극장) 정보를 저장합니다.
- 장소의 ID, 이름, 주소 정보를 관리합니다.
- screen 테이블
- 영화 상영 일정 정보를 저장합니다.
- 특정 영화가 특정 장소에서 언제부터 언제까지 상영되는지에 대한 정보를 관리합니다.
- reserve 테이블
- 영화 예약 정보를 저장합니다.
- 사용자가 어떤 영화를, 어느 장소에서, 언제, 몇 좌석을 예약했는지 등의 상세 예약 정보를 관리합니다.
- 결제 정보(가격, 카드 번호)와 예약 관리를 위한 추가 정보(예약 시간, 삭제 여부 등)도 포함합니다.
저는 프로젝트를 구현하면서 좌석을 예약하는 부분에서 참조 테이블에 없는 값을 추가해서 발생한 오류를 해결하는데 가장 어려웠습니다. 참조 테이블은 참조 무결성에 따라서 부모키에 해당하는 값만 넣을 수 있는데 이 부분이 참조 테이블의 원리를 이해하지 못하여서 어려웠던 것 같습니다.
java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
(`moviedb`.`reserve`, CONSTRAINT `reserve_ibfk_3` FOREIGN KEY (`place_id`) REFERENCES `place` (`id`))
오류를 해결하는 방법을 계속 찾아보다가 어떤 분의 글에 유효성 검사를 해주면 데이터의 무결성을 보장해주어서 place_id
가 실제로 place
테이블에 존재하는지 확인함으로써, 데이터의 무결성을 유지할 수 있다고 해서 유효성 검사 기능을 추가해주었어요. 이를 통해 에러를 예방할 수 있고, 디버깅 하는데도 용이하다는 장점이 있더라구요.
다음에 이런 미니 프로젝트를 할 수 있는 기회가 생긴다면 기간안에 마무리 할 수 있도록 제대로 된 설계를 하고 싶습니다. 이번 프로젝트는 완성만 시키자 라는 목정성이 강해서 설계를 구현 하면서 생각했던 것 같습니다. 그렇기 때문에 코드가 많아짐에 따라 점점 복잡해지고 나중에 가서는 어디서 어떤 오류가 뜨는지를 잘 구분할 수 없게 된 것 같습니다.
그래서 추후에 이런 미니 프로젝트를 할 수 있는 기간이 생긴다면 내가 어떤 프로젝트를 구현하고 싶고 어떤 부분을 먼저 구현하고 할지 설계를 제대로 해서 구현해보고 싶습니다.