postman에서 발생한 오류다.
아래는 Intellij에서 읽은 내용이다.
2023-06-13T09:44:52.333+09:00 WARN 23816 --- [nio-8080-exec-7]
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved
[org.springframework.web.bind.MissingServletRequestParameterException:
Required request parameter 'name' for method parameter type String is not present]
오류 내용을 읽어보면, name이라는 값의 파라미터 값이 요청되는데, 그 값이 나타나지 않았다는 의미인 것 같았다.
이는 @RequestParam 뒤에 (required = false)를 붙여서 해결이 가능하다.
원래는 required 값이 true가 default지만 false로 변경하면 클라이언트에서 전달받은 값에 해당 값이 포함되지 않아도 즉, 위와 같은 문제가 발생해도 오류는 발생하지 않는다.
@PathVariable에도 존재한다. 다만 입력하지 않은 값은 null로 초기화가 가능하다.
처음 배우는 내용들이라 아직 익숙하지 않지만,
값을 꼭 입력받지 않아도 되는 필드들을 입력받는 경우 사용해 볼 수 있을 것 같다.
mysql문을 작성하고 실행중이었는데, 오류가 발생했다.
본능적으로 직감이 왔다 .. birth 필드가 default 값이 없다는 의미다.
강의를 진행해주시는 선생님께서는 오류가 없었는데 나는 왜 .. 오류가 났을까 ?
저 필드는 값이 null 도 가능해서 즉, 필수로 입력하지 않아도 되는 필드였는데 ,,
라고 생각해보니 그렇다면 내가 not null로 설정을 했나 ..? 싶었다.
그렇다면 나는 not null로 설정된 필드 조건을 바꿔야 한다.
null이 가능하도록 해야한다 ..
어떻게 바꿀지 sql 명령어를 찾아보다가 더 좋은 방법을 발견했다.
Database를 열고, 해당 테이블의 필드를 찾아서 마우스 우클릭을 하면
위와 같은 창이 뜬다. 여기서 Modify Column을 누른다.
그러면 위와 같은 창이 뜨는데, 저기서 Not Null 부분의 체크를 해제하고 ok를 눌러주기만 하면 된다 !
이렇게 간편하게 해결되다니..
트러블메이커가 따로없다.
강의를 보면서 화면의 내용을 따라치다 보니까 정신을 못차렸던 것 같다.
sql 명령어로도 필드 속성을 수정해 줄 수 있었겠지만, intellij에서도 컬럼 수정 기능을 제공하니 앞으로 수정할 일이 있으면 편하게 사용 가능할 것 같다 !
테이블에서 필드의 내용중 하나를 삭제 했을 때, 해당 필드를 FK로 갖고 있는 다른 테이블에서도 내용이 자동으로 함께 삭제될 수 있도록 조건을 설정해주는 것이 문제였다.
뭔가 .. 생각하기로는 단순하게
COLUMN의 속성을 수정하면 되지 않을까 ..?
ALTER MODIFY COLUMN을 이용하면 가능하지 않을까? 생각했었다.
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 컬럼조건 CASCADE;
이렇게 작성했더니 빨간줄이 들어왔다 ..
생각해보니 조건에 DROP이 있어서 DROP을 추가해야하나? 싶었다.
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 컬럼조건 DROP CASCADE;
이것도 오류가 발생했다.
단순하게 생각해서 계속 이런 비슷한 코드들을 비슷하게 수정해보다가 뭔가 잘못됐나 싶어서 검색을 하기로 했다.
필드의 속성을 수정하는 것이 아니었다 ...
출처: https://stackoverflow.com/questions/1571581/how-to-add-on-delete-cascade-in-alter-table-statement
이미 존재하는 제약조건에 ON DELETE CASCADE 속성을 추가해줄 수는 없다고 한다.
따라서 해당 제약 조건 자체를 먼저 DROP 해준 후, MODIFY CONSTRAINT 를 통해서 다시 제약조건을 추가해주는 것이었다 ..
코드를 바로 수정해보자
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명
FOREIGN KEY(키 이름)
REFERENCES 참조할테이블 참조할키이름
ON DELETE CASCADE;
의 순서로 작성되어야 한다.
Modify를 사용해서 간단하게 제약 조건을 수정해줄 수 있을 거라고 생각했는데,
그렇게 불가능하다는 것을 알게 되었다.
on delete cascade 혹은 on update cascade를 추가해주고 싶다면 제약 조건명 자체를 지워준 다음에, 다시 제약 조건을 추가해주어야 한다.