spring / fullcalendar 중복 데이터 / db 쿼리 수정하기
프로젝트 막바지...
오늘은 몇시간 내내 삽질만 하다가 겨우 원인을 찾게된 기록을 남겨볼 예정.
확실히 프로젝트 하는 중에 db 수정은 불가피하고 그에 따른 코드 수정도 불가피 하다는 걸 많이 느꼈다.
기한이 얼마 남지 않아, 기능을 더 구현하는 것 보다 이미 구현해 놓은 기능을 완벽하게 하기로 마음 먹었다.

풀 캘린더로 연동해 놓은 근태 관리 페이지...
휴가 신청과 동시에 db에 저장되고, 다시 캘린더에 해당 내용이 정상적으로 출력 돼야 한다.
(예를 들어 26일에 반차(0.5) 신청을 하면 연두색과 이름 + 직책이 표시 / 진한 초록색은 연차)

하지만 연차든 반차든 신청을 하면 하나의 데이터만 출력돼야 하지만 두개의 데이터가 출력 되었다.
처음엔 insert 구문을 두 개로 설정했나? 하고 살펴보고, fetch로 json으로 넘길 때 두 번 넘겼나? 등등 온갖 삽질을 해댔다.

이건 최초에 근태 관리 페이지를 보여주는 select 구문인데 결론적으로 이 쿼리가 문제였다.
휴가 신청은 dayOff 테이블 , schedule 테이블이 사용 되었는데 이것이 miss!!
처음엔 단순히 일단 연관 있는 항목들을 보여주고, json에서 필요한 것만 꺼내서 보여주면 된다는 생각이었다....

엔터티 구조를 살펴보면 연관 있는 게 employeeNo 밖에 없는 상태고, 휴가 관련해서 두 테이블을 모두 사용하니
select 구문에서 뻥튀기(곱) 된 것이었다.
두 엔터티를 식별하는 유일한 식별키가 있다면 위와 같은 쿼리를 사용해도 되지만, employeeNo 밖에 없으므로 원하는 데이터만 뽑기는 불가능 했을 것이다.
사실 일정 엔터티와 휴가 엔터티를 모두 사용하고 싶었지만, 과감하게 schedule 엔터티는 사용하지 않았다.

삽질을 너무 해대니 데이터가 잘 넘어오는지 확인도 제대로 못한 것 같다. (역시 안 될 땐 바람을 쐬고 오자)
daOff 엔터티는 draft_no가 pk , employee_no가 fk로 복합 식별자이고, dayOff 엔터티에 값을 추가(휴가 신청) 하려면 draft_no의 값이 있어야 가능하다.
아직 전자 결재쪽 개발이 덜 되어 일단 더미 데이터를 12개 생성해놓고, select 구문으로 +1씩 증가하도록 설계했다.
(employeeNo 도 로그인 기능이 완료되면 연동 예정)

< 수정된 select >

과감히 schedule 엔터티를 버리고, employeeNo가 기준이 아닌,
새롭게 추가될 휴가일정(dayoff) 를 기준으로 join.

정상적으로 출력이 된다...
다음에 db 설계를 하게 된다면 일정과 휴가와 같은 엔터티를 구분짓는 유일한 식별자를 공부하고, 넣어보면 좋겠다.
별 거 아닌 거 같지만, 확실히 코드가 길어지고 복잡해지니 에러(?)아닌 에러 찾기가 힘들었다.
무튼 고생했고 추후에는 동적 쿼리로 디밸롭 해보자~