Project/Personal Project

일정 관리 프로그램 (트러블 슈팅)

Anews 2024. 10. 4. 13:54
설계(API 명세서)
더보기

1. 배경

처음으로 api 명세서를 작성해 보았다.
json에 익숙하지 않아 요구사항에 제시된 예시를 보면서도
이해가 가지 않아서 당황하였다.

 

2. 결말

구글링으로 api명세 관련해서 많은 자료가 있어
다른 사람이 작성한 내용을 토대로
요구사항에 맞게 진행하려면 어떤 기능이 필요한지 먼저 정리하고
Method 방식은 예시와 같게
값을 넣어 생성하는 경우에는 POST
값을 조회하는 경우 GET
값을 수정하는 경우 PUT
값을 삭제하는 경우 DELETE로 작성하고
필요 값을 json형태로 작성하였다.

 

 

< API 명세서 >


개발
더보기
배경
요구사항 중 수정 및 삭제의 경우 해당 일정의 비밀번호를 확인하여 일치할 경우만 수정 및 삭제하기 위해
기존에 비밀번호와 관계없이 수정 및 삭제하던 코드에 매개변수로 "String password" 전달

 

발단
매개 변수로 password를 보내던 중 service오류 발생
scheduleRepository.delete(deleteschedule, password);​
해당 부분에서 매개 변수로 받아온 password를 repository로 보내려고 delete에 담는 순간
'delete(com.sparta.nbcpersnolprojectschedule.entity.Schedule)' in 'com.sparta.nbcpersnolprojectschedule.repository.ScheduleRepository' cannot be applied to '(com.sparta.nbcpersnolprojectschedule.entity.Schedule, java.lang.String)'​​

 

이와 같은 오류 발생
전개
해당 오류를 먼저 확인해 본 결과

이 오류는 delete(Schedule) 메서드가 Schedule 엔티티 하나만 인자로 받도록 정의되어 있는데 현재 메서드를 호출할 때 두 개의 인자(Schedule 객체와 String)를 전달하고 있기 때문에 발생한 것임을 확인
절정
두 개의 인자를 보낼 수 있는 방법은 구글링을 통해 확인하였지만 더 간단한 방법이 없을까 고민하던 중에
수정, 삭제는 id 값을 보내서 해당 고유번호가 데이터베이스에 존재하는지 여부를 확인하고 수정 및 삭제를 진행하기에
그때 가지고 온 값의 비밀번호와 컨트롤러에서 서비스로 매개변수로 보낸 password값을 서비스에서
비교하는 방법을 생각 이후 이러한 코드가 있는지 확인
결말
if (!updatedSchedule.getPassword().equals(password)) {
    throw new IllegalArgumentException("비밀번호 틀림");
}

위와 같은 코드로 정상적으로 작동하는 것을 확인
해당 코드에 대한 해석으로는

1. updatedSchedule.getPassword():

   - scheduleRepository.findScheduleById(scheduleId)를 통해
     데이터베이스에서 조회한 일정 엔티티(
Schedule) 객체의 비밀번호를 가져온다.

   - 즉, 데이터베이스에 저장된 해당 일정의 비밀번호를 의미한다.

2.. equals(password):

   - 사용자가 입력한 비밀번호(password)와 데이터베이스에 저장된 일정의 비밀번호
     (updatedSchedule.getPassword())를 비교합니다.

   - equals() 메서드는 문자열의 값을 비교하는 메서드입니다.
      두 문자열이 같다면 true를 반환하고, 다르다면 false를 반환합니다.

3. 비밀번호가 일치하지 않는 경우:

   - 비밀번호가 다를 경우, 아래 코드가 실행됩니다.

스프링을 배우고 처음 해보는 일정관리 프로그램
값이 어떻게 이동해서 jdbc를 통해 query를 db에 보내서 등록, 조회, 수정, 삭제하는지는
감을 잡았지만 세부적인 코드들이 어떻게 작동하는지에 대한 이해가 아직 부족하고
완벽하게 아무 참고자료도 없이 코드를 작성하는 것을 아니라
막힐 때만 참고자료를 활용할 수 있도록 또한 mvc 패턴과
3 Layer Architecture에 대한 조금 더 나은 이해를 위해
복습하고 다시 한번 프로젝트를 처음부터 시작해 볼 필요성을 느꼈다