스프링부트

일정 관리 페이지 만들기

하이자바 2025. 3. 24. 14:58

목표

스프링 부트를 활용하여 CRUD 연습 일정관리 페이지 제작

 

요구사항

1. API 명세 작성

2. ERD 작성

3. 일정 관리에 대한 CRUD (조회, 상세 조회, 등록, 수정, 삭제)

4. 유저 테이블을 통한 수정, 삭제 권한 관리

 

검사

1. 비밀번호와 내용에 대한 입력 수 제한

2. 수정과 삭제에 필요한 비밀번호 일치 여부

3. 조회 되지 않는 ID 값에 대한 예외 처리 (404)

 

과정

1. ERD 작성

- 일정 테이블과 유저 테이블 생성, 두 테이블은 1:N 관계이며 일정 테이블은 유저 테이블의 유저 번호를 외래 키로 가진다.

 

2. schedule에 대한 RestController 작성 

 

3. Controller에서 Service를 호출하여 로직 작성

 

4. Service에서 Repository를 호출하여 SQL 로직 작성, JDBC를 사용하였다.

 

5. 프론트의 요청에 대한 예외 처리, GlobalException 핸들러를 이용하여 @Valid, 비밀번호 일치 검사를 진행하였다.

 

6. 이번 프로그램은 설계가 간단하여 마지막으로 API 명세를 작성하였다.

 

배운 점

1. GlobalExcpetion을 통해 예외 처리를 할 수 있다. 이로 인해 컨트롤러에서의 try-catch를 생략할 수 있기에 보다 컨트롤러를 깔끔하게 작성할 수 있었다.

2. ReponseEntity를 통해 상태 코드를 반환하여 일관되게 통신할 수 있도록 하였다.

3. 요청 경로는 명사 메소드는 동사와 같이 매핑 양식에 대해서 알게 되었다. Ex) GET api/schedules (소문자만 작성할 것, 복수형)

4. PathVariable과 ReqeustParam의 차이는 URL에 ?가 붙으면 리퀘스트파람, 없으면 패스배리어블이라고 단순하게 생각해왔는데 리퀘스트파람은 값이 없어도 동작을 하지만 패스배리어블은 반드시 값이 있어야 동작한다는 것을 알게 되었다.

트러블 슈팅

문제 : 2025 .03.24 ~ 2025.03.24 까지의 일정을 보게 된다면 3월 24일자의 일정이 출력되어야 한다. 하지만 내가 짠 로직은 해당 일정이 나오지 않았다. 

이유는 WHERE schedule_date BETWEEN '2025-03-24' AND '2025-03-24' 다음과 같이 SQL을 작성하면

00:00:00 이상 00:00:00 이하만 되는 로직이 된다. 

 

해결 및 결과 : 

아래와 같이 파라미터로 받은 LocalDate 값에서 00:00:00 ~ 다음날 00:00:00 까지의 값을 이용하여 해당 날짜에 게시글도 조회하게 하였다.

LocalDateTime startDateTime = startDate.atStartOfDay();
LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay();

 

깃허브 링크 : https://github.com/donghee-develop/be-scheduler