일단 학원에서 배운 부분(CRUD, 유효성 체크 등)은 기본이라고 생각하여 다 구현하고자 했었다.(클라이언트 입장에서도 다 기본적으로 당연히 있어야 하는 기능들이다.)
그렇게 회원가입, 로그인, 수강후기 게시판을 만들기로 했고,
또한 강좌 조회/신청 서비스가 프로젝트의 핵심이었으므로 강좌에 대한 안내/신청 페이지도 당연히 필요했다.
회원별 강좌를 관리하려면 마이페이지 기능도 당연히 필요했다.
쓰고 보니 기본만 한참 하다 끝난 것 같은...
2️⃣ 어떤 문제가 생겼고, 어떻게 해결하였는가
3️⃣ 개선할 점이 있는가
당시 00님과 요구사항을 정의할 때 정의서에 체계적으로 적기보다 종이에 러프하게 써내려가며 했다.
그래서 디테일한 기능은 대체적으로 서로 맡은 페이지를 만들어가면서 생각해 내어 구현했던 것 같다.
사실 프로젝트 기간이 한정되어 있고 경험이 부족하여 기능을 완성하는 데 소요될 시간을 짐작하기가 어려워 디테일하게 적기 어려운 부분이 있기도 했다.
하지만 만약 실무 프로젝트라면 고객이 원하는 기능이 분명하게 있을 것이다.
그런데 요구사항을 디테일하게 정의하지 않았다면 혹시나 고객이 요구하지 않았던 방향으로 기능을 구현할 수 있고, 시간과 노력이 낭비되면서 확실히 문제가 될 것이다.
나중에 누군가에게 이러이러한 기능이 있다고 프로젝트를 설명할 때도 요구사항 정의서가 있어야 명확하게 설명할 수 있을 것이다.
따라서 개선할 점은 설계 시 요구사항을 정의서에 체계적으로 디테일하게 명시하는 것이다.
✅ 결론부터
위 사진은 팀원 00님과 회의하며 설계한 DB 초안이다.
요구사항을 바탕으로 어떠한 테이블을 만들지 상의하여 6개의 테이블을 구성했다.
테이블명, 컬럼명, 자료형, 길이, 제약조건을 모두 상의하여 통일된 형식을 만들었다.
1️⃣ '왜' 그렇게 했는가
✅ 테이블 및 컬럼 구성
1)강좌
프로젝트 주제가 강좌 조회/신청 및 관리 서비스라 당연히 필요했다.
강좌고유번호 - 동적 CRUD 쿼리에 파라미터로 넣기 가장 간단한 형태는 문자보다 숫자고, 다른 테이블에서 외래키로 활용하기에도 좋을 거라고 판단했다. 튜플은 100개 이상 만들진 않을 거라고 판단하여 길이는 2로 설정했고, 유일성과 최소성을 만족하여 기본키로 설정했다.
강좌명, 기관명, 강좌일정, 강좌시간, 모집인원, 신청인원, 강사명, 강의대상 - 모두 사용자에게 필요한 정보다. 강좌 정보를 어떤 식으로 작성할지 예시를 적어보며 형식을 정했고, 그 형식을 바탕으로 자료형과 길이를 설정했다.
대기정원까지 컬럼에 추가할까 했지만, 대기정원을 반영하려면 신청인원이 다 찬 후에 반영해야 하는데, 테스트 시 튜플 넣고 하는데 시간이 너무 오래 소요될 것 같아 일단 보류하였고 결론적으로 넣지 않았다.
2)회원
프로젝트에서 제일 기본적인 로그인 기능을 구현하려면 당연히 필요한 테이블이었다. 나중에 스프링 시큐리티를 적용하며 며 컬럼이 추가됐다.