[일정 관리 앱] 일정 생성, 조회 API 테스트

2024. 10. 8. 20:04내일배움캠프/Schedule Management

 '일정 생성' 과 '일정 조회(단건)', '일정 목록 조회' 에 대한 구현을 진행하고 진행한 API 테스트를 남겨본다. 무작정 남기는 것은 아니고 이후 신경써야 할 부분을 기록할 필요를 느껴 작성하게 되었다. 이번에 작성한 코드는 여기서 확인이 가능하다.

 

1. 일정 생성

일정 생성 - 정상 요청

 

일정을 정상 요청하게 될 경우 생성된 Entity 의 정보를 'ResponseSchedule(DTO)' 에 담아 반환한다. 하지만 예외를 해결하려 작성한 '예외 처리' 과정에서 오히려 문제가 생겼다.

일정 생성 - 비정상 요청

 

요청 값에 대한 '유효성' 검증의 경우 'validation' 을 사용했는데, 어째서 인지 'title' 필드에 대한 예외가 응답에 표기되지 않았다. 아래는 '일정 생성' 에 대한 요청 파라미터를 담는 'AddSchedule(DTO)' 로 각 필드에 'validation' 의 어노테이션을 사용해 유효성에 대한 조건을 추가해 준 상태이다.

AddSchedule (DTO) 클래스

 

처음에는 어떤 문자를 작성해야 한다는 내용이 요구사항에 없어 '정규식' 은 제외하고 단순하게 'null', '빈 값("")', '공백 값(" ")' 을 방지하자는 생각으로 위와 같이 어노테이션을 지정했다. 하지만 문제는 '공백' 또한 길이를 갖기에 지정한 길이에 허용되는 길이를 가진 '공백 문자열' 이 요청 파라미터로 전달될 경우 스무스(?) 하게 검증을 통과하는 것이다.

 

위의 문제 해결을 위해 2가지 방법을 떠올렸다. 첫 번째는 '빈 값', '공백 값' 까지 허용하지 않는 '@NotBlank' 를 사용하는 것, 두 번째는 정규식을 통해 사용가능 한 문자를 제한하는 것. 하지만 위에서 말한 것 처럼 현재 요구사항에는 '어떤 문자를 사용해야 한다' 라는 내용이 없기에 '첫 번째' 방법으로 문제를 해결해 보았다.

일정 생성 - 비정상 요청(2)

 

앞서 말한 부분은 해결되었지만 각 필드에 지정된 어노테이션 마다 예외가 발생했다보니 같은 필드에 하나 이상의 예외 메시지가 반환되었다(하지만 위와 같은 상황이 나쁜 것인지는 확신이 없다). 이 부분은 아마 '정규식' 을 검증 조건에 추가한다면 해결될 것으로 보인다. 이후 '작성자(유저)' 에 대한 요구사항이 존재하기에 해당 요구사항을 반영할 때 위의 내용을 염두해 반영하는 것으로 마무리 지었다.

 

 

2. 일정 조회(단건)

일정 조회 - 정상 요청

 

DB 에 존재하는 '일정' 을 조회할 경우 위와 같이 조회한 '일정' 에 대한 정보를 반환해 준다. 하지만 존재하지 않는 '일정' 에 대한 조회를 요청 할 경우 아래와 같이 예외 메시지를 반환해 준다.

일정 조회 - 비정상 요청

 

애초에 사용자가 존재하지 않는 데이터에 대한 조회를 요청 한 것이기에 위와 같이 예외 코드와 메시지를 반환하고 HttpStatus 를 '404 Not Found' 로 응답하도록 했다.

 

 

3. 일정 목록 조회

일정 목록 조회

 

일정 목록 조회의 경우 '작성자명, 일정 제목' 을 검색 조건으로 사용할 수 있도록 구현했다. 두 조건이 없는 경우, 둘 중 한 조건만 있는 경우, 두 조건 모두 있는 경우를 고려해 모두 '일정 목록' 을 조회할 수 있도록 했으며, 이러한 동작을 위해 조회된 '일정 목록' 이 없는 경우 '일정 조회(단건)' 처럼 예외를 발생시키지 않고 아래와 같이 빈 컬랙션을 반환해 조회된 일정 목록이 없다는 것을 알 수 있게 하였다.

일정 목록 조회 - 조회된 일정 목록이 없는 경우

 

 

4. 정리

 어찌보면 구현한 것 부실해 보일 수도 있으나 아직 반영해야 할 요구사항도 많아 여기에 모든 시간을 쏟기에는 무리가 있기 때문에 포스팅을 통해 이후 구현에 염두해야 할 것을 기록해 두는 방법을 사용하게 되었다. 이번 포스팅으로 기록할 것은 아래와 같다.

  • 'AddSchedule' DTO 의 검증 시 현재 검증 어노테이션만으로는 원하는 결과를 얻지 못한다. '@Pattern' 을 사용해 '정규식' 을 추가해 볼 필요가 있다.