2025.03.19(수)
Spring 플러스 주차 개인 과제 트러블슈팅
도전
Lv 3-12. AWS 활용
로컬에서 ./gradlew clean build을 했으나 아래와 같은 문제가 발생했다.
Error creating bean with name 'jwtAuthenticationFilter' defined in file [/Users/mac/Desktop/spring-plus/spring-plus/build/classes/java/main/org/example/expert/config/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'org.example.expert.config.JwtUtil' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.example.expert.config.JwtUtil' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
mac@macs-MacBook-Pro spring-plus % ./gradlew clean build
> Task :test
ExpertApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1806
Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421
Caused by: org.hibernate.exception.GenericJDBCException at StandardSQLExceptionConverter.java:63
Caused by: java.sql.SQLException at SQLError.java:130
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
> Task :test FAILED
TodoControllerTest > todo_단건_조회에_성공한다() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException at DefaultListableBeanFactory.java:1880
TodoControllerTest > todo_단건_조회_시_todo가_존재하지_않아_예외가_발생한다() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
3 tests completed, 3 failed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/mac/Desktop/spring-plus/spring-plus/build/reports/tests/test/index.html
* Try:
> Run with --scan to get full insights.
BUILD FAILED in 7s
8 actionable tasks: 8 executed
테스트 코드에서 문제가 발생했다.
❌ 환경설정문제
처음에는 아래와 같은 설정 문제인 줄 알았으나 직접적인 원인은 아니었다.
- build.gradle
- application.properties
전에 문제 발생 시에는 jwt.secret.key 등
환경변수 설정만 잘해주면 다시 실행이 잘 되었어서
시도했으나 실패했다.
✅ @MockBean 설정하기
TodoControllerTest 파일에 JWTUtil을 설정해주었다.
@MockBean
private JwtUtil jwtUtil;
이전에는 따로 설정 없이도 잘 되었으나
Spring Security 도입 후, JWT 인증이 추가되었기 때문에 문제가 발생한 것으로 보인다.
💢 수정 후 추가 오류 발생
mac@macs-MacBook-Pro spring-plus % ./gradlew clean build
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2025-03-19T17:01:44.191+09:00 INFO 13409 --- [expert] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2025-03-19T17:01:44.196+09:00 INFO 13409 --- [expert] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
> Task :test
TodoControllerTest > todo_단건_조회에_성공한다() FAILED
java.lang.AssertionError at TodoControllerTest.java:60
TodoControllerTest > todo_단건_조회_시_todo가_존재하지_않아_예외가_발생한다() FAILED
java.lang.AssertionError at TodoControllerTest.java:76
2025-03-19T17:01:44.229+09:00 INFO 13409 --- [expert] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
> Task :test FAILED
3 tests completed, 2 failed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/mac/Desktop/spring-plus/spring-plus/build/reports/tests/test/index.html
* Try:
> Run with --scan to get full insights.
BUILD FAILED in 27s
9 actionable tasks: 9 executed
HTTP 상태 코드가 예상했던 200(OK)이 아닌 401(Unauthorized)로 반환되었기 때문에 테스트가 실패했다.
✅ SecurityMockMvcRequestPostProcessors.user 생성
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
...
mockMvc.perform(get("/todos/{todoId}", todoId)
.with(SecurityMockMvcRequestPostProcessors.user("user")))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(todoId))
.andExpect(jsonPath("$.title").value(title));
security Mock user 객체를 만들어주니 아래와 같이 해결이 되었다.
mac@macs-MacBook-Pro spring-plus % ./gradlew clean build
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2025-03-19T17:19:35.777+09:00 INFO 13713 --- [expert] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2025-03-19T17:19:35.782+09:00 INFO 13713 --- [expert] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2025-03-19T17:19:35.807+09:00 INFO 13713 --- [expert] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
BUILD SUCCESSFUL in 28s
9 actionable tasks: 9 executed
파일 전송 문제
scp -i /Users/mac/Downloads/spring-plus-server-key-pair.pem build/libs/expert-0.0.1-SNAPSHOT.jar ec2-user@52.79.139.63:/home/ec2-user/
위의 형식으로 로컬에 있는 snapshot.jar 파일을 aws PC에 전송하고자 했다.
그러나 작동하지 않았다.
✅ 절대경로, 상대경로
결론은 상대경로가 아닌 절대경로로 해야 한다는 것이었다.
scp -i ~/Downloads/spring-plus-server-key-pair.pem ~/Desktop/spring-plus/spring-plus/build/libs/expert-0.0.1-SNAPSHOT.jar ubuntu@52.79.139.63:/home/ubuntu
또한 aws pc의 위치도 pwd를 통해 제대로 설정해주어야 한다.
'CODING > 스파르타 내일배움캠프 TIL' 카테고리의 다른 글
56_Spring 플러스 주차 개인 과제 트러블슈팅_25.3.20(목) (0) | 2025.03.20 |
---|---|
54_Spring 플러스 주차 개인 과제 트러블슈팅_25.3.14(금) (0) | 2025.03.15 |
Spring 플러스 주차 개인 과제 트러블슈팅 TIL 모음 (0) | 2025.03.11 |
53_푸드 파이트 대회_Spring 플러스 주차 개인 과제 트러블슈팅_25.3.11(화) (0) | 2025.03.11 |
52_가장 가까운 같은 글자_25.3.10(월) (0) | 2025.03.10 |