오늘 지난 1주일 동안 과제를 하면서 배웠던 내용을 토대로 주특기 시험을 봤다.
시험 난이도는 이번주 과제를 마쳤더라면 누구나 할 수 있을정도로 쉬웠지만, 하면서 예기치않은 오류를 봐서 당황 ㅎㅎ
이번 글 마지막에 처음 봤던 오류 메시지 + 시도했던 방법들도 같이 정리해보려 한다.
+ 같이 오류를 해결해주신 모든 분들 ( 은솔님, 소영님, 미경님, 윤재님, ...) 감사합니다 !!!
+ 그리고 코드 전체 주석을 달고 하나씩 풀어보면서 해결해 보라고 팁을 주신 지성님도 감사합니다 !!!
시험 과제
작성한 코드
제출해야하는 과제는 조회기능인 GET이지만, 테스트를 위해 POST부분 까지 같이 작성했다.
1. Controller
2. DTO
RequestDto
ResponseDto
3. Service
POST
GET
4. Entity
5. Repository
h2 - console
구현해야 하는 대로 잘 작성이 되는 것을 볼 수 있다.
트러블 슈팅 1 - 인텔리제이 run 실행 버튼이 활성화 되지 않았던 문제
1. 발생한 문제 ( 아래는 콘솔창에 떴던 에러 메세지이다.)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController' defined in file [/Users/chaleejin/Desktop/hanghaetest/out/production/classes/com/sparta/hanghaetest/controller/MemberController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberService' defined in file [/Users/chaleejin/Desktop/hanghaetest/out/production/classes/com/sparta/hanghaetest/service/MemberService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository' defined in com.sparta.hanghaetest.repository.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc(); Reason: Failed to create query for method public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc()! No property 'modifiedAt' found for type 'Member'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc()! No property 'modifiedAt' found for type 'Member'
너무 길어서 앞부분만 보고 자세히 보지 않았는데, 꼼꼼히 봤더라면 해결되었을 문제였다.
아래는 위의 에러 내용이다. 빨간색 부분으로 에러가 발생했던 주요 이유를 표시해보았다.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController' defined in file [/Users/chaleejin/Desktop/hanghaetest/out/production/classes/com/sparta/hanghaetest/controller/MemberController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberService' defined in file [/Users/chaleejin/Desktop/hanghaetest/out/production/classes/com/sparta/hanghaetest/service/MemberService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository' defined in com.sparta.hanghaetest.repository.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc(); Reason: Failed to create query for method public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc()! No property 'modifiedAt' found for type 'Member'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.sparta.hanghaetest.repository.MemberRepository.findAllByOrderByModifiedAtDesc()! No property 'modifiedAt' found for type 'Member'
2. 시도한 방법
2-1. Preferences - Build - Build and run using 설정 Gradle 에서 IntelliJ IDEA로 바꿔주기
2-2. 해당 파일이 들어있는 디렉토리(파일)에서 물리적으로 out폴더를 삭제하고, 인텔리제이에서 Build - Rebuild 해주기
2-3. 인텔리제이 파일 - Invaildate Cashes - 모든 사항 체크 후 - 캐쉬삭제 해주기
2-4 인텔리제이에서 파일을 열 때, build.gradle 파일로 열어주기.
2-5 Application 파일을 다른 디렉토리로 이동했다가 다시 원위치 시켜보기
위 방법 모두 통하지 않았다. 왜냐, 근본 적인 문제가 아니었기 때문 ^^
나는 단지 실행버튼이 활성화 되지 않는 것에만 집중해서 구글링을 했고, 다른 분들도 그 부분으로 도와주셨는데, 에러 메세지의 맨 끝 부분에서 확인할 수 있듯이 사실은 상속에 관한 문제였다.
3. 해결한 방법
알고보니 Entity Member 클래스에서 Timestamped 클래스 상속을 해주지 않아서 발생했던 문제였다......
바부 ...... ㅎㅎㅎㅎ 도움을 주신 모든 분들에게 다시 한번 감사의 말씀을 전합니다 ㅎㅎㅎ !!
트러블 슈팅 2 - Web server failed to start. Port 8080 was already in use.!
1. 발생한 문제
2. 해결 방법 (구글링 짱 !)
- 인텔리제이 콘솔창에 아래 코드 입력 후 엔터
lsof -n -i -P | grep 8080
- 그럼 현재 켜져있는 포트의 pid 넘버가 나온다
- 다음 코드를 입력해서 포트 프로세스를 종료시켜 준다.
kill -9 1111(이건 임의의 번호입니다)
참고 : https://deeplify.dev/back-end/spring/port-is-already-in-use
'Coding > Spring' 카테고리의 다른 글
[09] 스프링 MVC 이해 (0) | 2022.12.04 |
---|---|
[08] 웹 동작방식 (0) | 2022.12.04 |
[06] 항해99 주특기 입문 1주차 (1-5) - 팀과제 (키워드 정리) (2) | 2022.11.30 |
[05] 항해99 주특기 입문 1주차 (1-4) - Delete 수정하기 (0) | 2022.11.30 |
[04] 항해99 주특기 입문 1주차 (1-3) - 코드 흐름 읽어보기 (0) | 2022.11.30 |