(1) error : Internal Server Error
첫 번째 문제는 Internal Server Error이다.
오류는 딱히 놀랍지는 않았다 .. 각오했으니까 ㅠ
근데 오류가 왜 났는지, 빨리 고쳐야 하니까 오류 내용을 찾아봤다.
(2) error: Method Not Allowed
Spring 부트로 CRUD를 만들어야 해서, 전부 기능을 만들어 본 후,
postman으로 put을 테스트 중에 발생한 오류이다.
C, R은 비교적 수월하게 만들 수 있지만, U, D는 원래 만들기가 조금 어렵기 때문에.. 오류가 발생할 거라고 생각은 했었다. 어떻게 해결할 수 있을까 ..?
(1) error : Internal Server Error
해당 오류 내용을 찾아보니, 500 에러로 api 호출 방법이 잘못되었기 때문에 발생하는 에러라고 한다. 그렇다면 내가 postman에 api를 작성했을 때, 뭔가 잘못 작성했기 때문이 아닐까 ..?
출처: https://developers.naver.com/forum/posts/16758
(2) error: Method Not Allowed
이 오류는 허용하지 않는 메소드로 정의하고 있고,
요청 줄에 지정하는 메소드가 요청 URI로 식별하는 리소스에 허용되지 않는 상황이라고 한다.
메소드 매칭이 되지 않은 것이 문제라고 해서, 작성한 부분의 오류를 찾아보았다.
출처: https://cocoon1787.tistory.com/824
(1) error : Internal Server Error
코드에서는 문제가 없다고 생각해서 Postman에서 작성한 주소를 다시 확인해보았다.
나는 링크 뒤에 {id} 값을 붙여 불러오도록 했는데, 다시 살펴보니 id값을 3으로 주고 있었다.
데이터에 id 값이 1부터 쭉 .. 순차적으로 들어가 있었다면 당연히 발생하지 않았을 오류지만,
테스트를 해본다고 id값이 3인 엔티티를 지워버렸었다 ..
존재하지 않는 3번을 불러오라고 하니.. 당연히 값을 줄 수 있을리가 없다 ..
id값을 데이터베이스에 존재하는 값으로 바꿔서 호출해보니 잘 작동되었다 !
(2) error: Method Not Allowed
코드를 쭉 읽어봤는데, 메소드를 잘못 매칭하지는 않았다.
그렇다면 Postman에서 실행했을 때 잘못 호출했던 것 같은데,,, 하고 다시 살펴봤다.
나는 수정을 테스트 하고 싶었기 때문에 PUT을 메소드로 설정하고 실행했어야 하는데,
냅다 POST로 두고 실행하고 있었다 ..
PUT과 POST에 각각 매핑한 URI가 달랐고, 애초에 수정인데 POST로 놓고 실행했기 때문에 메소드가 잘못 매칭되었다는 오류가 발생한 것이었다.
PUT으로 놓고 다시 실행해보니 잘 작동되는 모습을 볼 수 있었다 !
직접 코드를 작성해 보고 Postman으로 실행해 본 것이 처음이라서
발생한 오류를 어떻게 해결하면 좋을지 생각해봤는데, 검색해보니 금방 해결할 수 있는 오류였다.
사실 오류라기보다 내가 Postman에서 실행하면서 살짝씩 실수하여 발생한 문제이다.
실행할 때, 메소드와 URI가 매핑한대로 제대로 입력되었는지 잘 확인하고 실행해야겠다 !
실행하고 Console 창을 살펴보니, 아름다운 초록색 INFO 단어들 속에
홀로 빛나는 노란색 WARN 단어를 발견했다.
Therefore, database queries may be performed during view rendering.
Explicitly configure spring.jpa.open-in-view to disable this warning
뒤쪽에 이런 글이 더 적혀있었다.
실행에서는 문제가 없었고, 강의에서 배운 내용을 따라할 때도 같이 보였던 내용인데, 어떤 내용인지 궁금해서 검색해보았다.
같은 오류를 발견하신 분이 계셨다 !!
이 내용은, spring.jpa.open-in-view가 기본적으로 활성화되어 있다는 내용이다.
뷰 렌더링 중에 데이터 쿼리가 실행될 수 있고, 이 경고를 비활성화 하고 싶다면 명시적으로 spring.jpa.open-in-view를 구성해야 한다는 것이다.
출처: https://velog.io/@nhw0926/%EC%9D%B8%ED%85%94%EB%A6%AC%EC%A0%9C%EC%9D%B4-springboot-%EC%98%A4%EB%A5%98%EB%AA%A8%EC%9D%8C
이를 해결하고 싶다면, application.properties 파일에 들어가 아래의 내용을 작성하면 된다.
spring.jpa.open-in-view=false
코드를 추가하면 해결이 가능하다고 한다 !
실행에서는 문제가 없었지만, 콘솔창에서 홀로 경고를 주고있어서 궁금해서 검색해보았다.
spring.jpa.open-in-view가 기본적으로 true 값으로 설정되어 있고, 경고를 비활성화 하고 싶을 때는 application.properties 파일에 들어가 이를 false로 설정해주면 된다 !
내 쪽에서 발생했던 오류는 아니고, 다른 분에게서 발생했던 오류였다.
Error creating bean with name '이름' defined in file
...
Unsatisfied dependency expressed through constructor parameter 0
bean을 생성할 때 오류가 발생했다는 것 같은데 ..
함께 해결해보고자 코드를 쭉 같이 봤었는데, 도저히 어디서 발생했는지 이해가 안되었다.
파일 구성이나 패키지 위치나 등등 .. 다 똑같았는데 .. 왜그러지 ..?
여러가지 방법을 시도해 보았다.
1) @Service 혹은 @Component 등의 어노테이션 추가하기
이미 어노테이션을 적절하게 달아놓았었다 ..!
2) xml 파일에서의 오류
xml 파일은 건드리는 부분이 없었기 때문에 해당하지 않았던 사항이었다..
3) 인터페이스에 가서 메소드 명 확인하기
인터페이스에서 만든 메소드 명이 꽤 길기 때문에 혹시 메소드명에서 빠뜨린 부분이나 오타낸 부분이 있는지 살펴봤지만 문제는 없었다.
4) File - Settings - Gradle 확인하기
File → Settings → Gradle 에 들어가서
Build and run using과 Run tests using을 Intellij IDEA로 변경한다.
그래도 오류는 계속 발생했었다 ..
출처: https://liante0904.tistory.com/113
출처: https://velog.io/@wonizizi99/%EC%97%90%EB%9F%AC%EB%85%B8%ED%8A%B8-Unsatisfied-dependency-expressed-through-constructor-parameter-0-%EC%97%90%EB%9F%AC
출처: https://milenote.tistory.com/174
Jpa 에서 언더바를 예약어로 사용하기 때문에 언더바를 필드명에 사용하면 안되는데..
그걸 모르고 사용해서 발생했던 오류였다.
(언더바)가 예약어로 사용된다는 점을 알지 못했다 ..
예약어로 사용되는 것들은 필드에 사용할 수 없기 때문에 오류가 발생했던 것이었다.
앞으로 (언더바) 는 Jpa에서 필드명에 사용하지 말아야겠다 ..
영속성 컨텍스트와 트랜잭션 부분을 공부하던 중,
트랜잭션은 데이터의 무결성과 정합성을 유지하기 위한 개념이라고 한다는 것을 공부했다.
그런데 .. 데이터 무결성은 .. 이전에 들어본 용어라 기억이 나는데,
정합성 ..? 이 뭔지 감이 전혀 잡히지 않아서 내용을 찾아보게 되었다.
- 데이터 무결성(Integrity): 데이터의 값이 정확한 상태
- 데이터 정합성(Consistency): 어떤 데이터들의 값이 서로 일치
-출처: https://spidyweb.tistory.com/164
이게 .. 무슨 소리일까 ..?
중복되는 데이터를 많이 사용하는 경우에는 데이터의 정합성을 맞추기 어렵다.
즉, 중복되는 데이터들의 값을 일치시키는 것이 어렵다.
또한, 비정규형을 사용해서 이상현상이 발생하게 된다면 정합성이 깨진다.
(중복되는 데이터 값이 일치되지 않게 된다)
무결성은 데이터가 정확하고 완전해야 한다는 것을 의미한다면,
정합성은 데이터가 서로 모순 없이 일관되게 일치해야 하는 것을 의미한다고 한다.
이런 성격으로 인해, 정합성은 만족해도 무결성은 만족하지 못하는 경우도 있다고 한다.
무결성의 정의가 더 광범위하고, 무결성을 지키는 것이 데이터 모델링의 목표라고 할 수 있다.