diff --git a/build.gradle b/build.gradle index 4af5357d..3a4f81c3 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' - developmentOnly 'org.springframework.boot:spring-boot-devtools' +// developmentOnly 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/logs/app.log b/logs/app.log new file mode 100644 index 00000000..47f308ff --- /dev/null +++ b/logs/app.log @@ -0,0 +1,3074 @@ +2025-07-21 23:25:35.298 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-21 23:25:35.372 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 31572 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:25:35.373 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:25:35.462 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-21 23:25:35.462 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-21 23:25:39.275 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:25:39.277 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:25:39.541 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:25:39.663 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 376 ms. Found 21 JPA repository interfaces. +2025-07-21 23:25:39.682 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:25:39.684 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:25:39.727 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.728 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.729 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.729 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.729 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.729 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.730 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.730 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.730 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.730 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.730 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.731 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.731 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.731 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.731 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.731 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.732 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.733 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.733 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.733 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.733 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:25:39.771 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 76 ms. Found 1 Redis repository interface. +2025-07-21 23:25:41.015 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:25:41.032 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:25:41.034 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:25:41.034 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:25:41.116 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:25:41.116 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 5652 ms +2025-07-21 23:25:41.611 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-21 23:25:42.033 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@178e7200 +2025-07-21 23:25:42.036 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-21 23:25:42.125 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:25:42.544 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:25:42.586 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.029s) +2025-07-21 23:25:42.586 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:25:42.605 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:25:42.610 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:25:42.763 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:25:42.866 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-21 23:25:42.925 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:25:43.321 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:25:43.398 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:25:43.413 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:25:45.051 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:25:45.983 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:25:46.585 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-21 23:25:48.394 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:25:49.050 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:25:50.163 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:25:50.377 WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed +2025-07-21 23:25:50.395 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:25:50.640 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-21 23:25:50.667 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-21 23:25:50.670 INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-07-21 23:25:50.686 INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-07-21 23:25:50.711 ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:515) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1451) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:606) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1221) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1187) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1122) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) + at life.mosu.mosuserver.MosuServerApplication.main(MosuServerApplication.java:35) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.RuntimeException: Could not postProcess org.springframework.security.config.annotation.web.builders.WebSecurity@58a0c33c of type class org.springframework.security.config.annotation.web.builders.WebSecurity + at org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor.postProcess(AutowireBeanFactoryObjectPostProcessor.java:71) + at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.setFilterChainProxySecurityConfigurer(WebSecurityConfiguration.java:145) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:854) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:146) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:509) + ... 22 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcHandlerMappingIntrospectorRequestTransformer': Cannot resolve reference to bean 'mvcHandlerMappingIntrospector' while setting constructor argument + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:135) + at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:691) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:206) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1387) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1224) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:227) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1597) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1555) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:563) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$1.getIfUnique(DefaultListableBeanFactory.java:489) + at org.springframework.security.config.annotation.web.builders.WebSecurity.setApplicationContext(WebSecurity.java:428) + at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:110) + at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:85) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:429) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1810) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:419) + at org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor.initializeBeanIfNeeded(AutowireBeanFactoryObjectPostProcessor.java:98) + at org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor.postProcess(AutowireBeanFactoryObjectPostProcessor.java:67) + ... 28 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcHandlerMappingIntrospector' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Ambiguous mapping. Cannot map 'examController' method +life.mosu.mosuserver.presentation.exam.ExamController#getByArea(String) +to {GET [/exams]}: There is already 'examController' bean method +life.mosu.mosuserver.presentation.exam.ExamController#getExams() mapped. + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1818) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:365) + ... 51 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Ambiguous mapping. Cannot map 'examController' method +life.mosu.mosuserver.presentation.exam.ExamController#getByArea(String) +to {GET [/exams]}: There is already 'examController' bean method +life.mosu.mosuserver.presentation.exam.ExamController#getExams() mapped. + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1818) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:747) + at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1426) + at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:372) + at org.springframework.web.servlet.handler.HandlerMappingIntrospector.initHandlerMappings(HandlerMappingIntrospector.java:135) + at org.springframework.web.servlet.handler.HandlerMappingIntrospector.afterPropertiesSet(HandlerMappingIntrospector.java:123) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1865) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1814) + ... 58 common frames omitted +Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'examController' method +life.mosu.mosuserver.presentation.exam.ExamController#getByArea(String) +to {GET [/exams]}: There is already 'examController' bean method +life.mosu.mosuserver.presentation.exam.ExamController#getExams() mapped. + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.validateMethodMapping(AbstractHandlerMethodMapping.java:676) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(AbstractHandlerMethodMapping.java:637) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:331) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:507) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:84) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$2(AbstractHandlerMethodMapping.java:298) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:986) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:296) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:265) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:224) + at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:212) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:237) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1865) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1814) + ... 71 common frames omitted +2025-07-21 23:29:40.407 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-21 23:29:40.465 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:29:40.465 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:29:40.526 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-21 23:29:40.527 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-21 23:29:42.464 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:29:42.465 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:29:42.663 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:29:42.752 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 278 ms. Found 21 JPA repository interfaces. +2025-07-21 23:29:42.771 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:29:42.772 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:29:42.815 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.817 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.817 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.817 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.818 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.819 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.819 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.819 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.819 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.819 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.820 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.820 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.820 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.820 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:29:42.854 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 72 ms. Found 1 Redis repository interface. +2025-07-21 23:29:44.055 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:29:44.078 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:29:44.081 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:29:44.081 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:29:44.214 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:29:44.214 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3687 ms +2025-07-21 23:29:44.796 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-21 23:29:45.198 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@b7b88fb +2025-07-21 23:29:45.200 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-21 23:29:45.254 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:29:45.639 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:29:45.673 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.023s) +2025-07-21 23:29:45.673 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:29:45.694 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:29:45.700 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:29:45.850 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:29:45.941 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-21 23:29:45.987 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:29:46.384 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:29:46.469 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:29:46.489 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:29:47.964 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:29:48.424 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:29:48.962 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-21 23:29:50.800 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:29:51.507 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:29:52.706 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:29:53.245 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:29:53.412 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:29:53.412 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:29:53.413 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:29:53.413 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:29:53.413 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:29:54.362 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:29:54.577 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:29:54.589 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:29:54.601 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 14.869 seconds (process running for 15.95) +2025-07-21 23:29:55.058 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-21 23:29:55.058 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-21 23:29:55.060 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-07-21 23:38:01.597 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [java.lang.NullPointerException: Cannot invoke "life.mosu.mosuserver.domain.exam.AddressJpaVO.getZipcode()" because "address" is null] +2025-07-21 23:39:15.859 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 1 deletion, 0 modifications) +2025-07-21 23:39:15.867 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-21 23:39:15.868 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:15.877 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-21 23:39:15.878 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:15.934 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:16.501 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-21 23:39:16.540 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-21 23:39:16.674 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:39:16.675 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:39:18.190 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:18.190 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:39:18.270 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:39:18.380 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 186 ms. Found 21 JPA repository interfaces. +2025-07-21 23:39:18.384 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:18.385 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:39:18.449 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.450 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.451 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.452 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.452 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.452 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.453 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.453 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.454 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.454 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.454 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.454 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.454 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.455 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.455 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.455 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.456 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.456 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.456 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.457 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.457 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:18.503 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 115 ms. Found 1 Redis repository interface. +2025-07-21 23:39:19.146 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:39:19.150 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:19.150 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:39:19.150 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:39:19.256 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:39:19.256 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2577 ms +2025-07-21 23:39:19.718 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-07-21 23:39:19.775 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7b36b44f +2025-07-21 23:39:19.775 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-07-21 23:39:19.785 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:39:19.804 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:39:19.821 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.014s) +2025-07-21 23:39:19.822 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:39:19.841 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:39:19.842 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:39:19.984 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:39:19.995 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:39:20.034 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:39:20.039 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:39:20.039 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:39:20.822 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:39:21.321 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:21.980 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:39:22.363 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:39:23.519 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:39:24.155 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:39:24.422 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:24.422 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:24.422 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:24.422 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:24.422 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:25.618 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:39:25.723 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:25.729 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:39:25.737 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 9.124 seconds (process running for 587.085) +2025-07-21 23:39:25.798 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-21 23:39:27.300 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (1 addition, 0 deletions, 0 modifications) +2025-07-21 23:39:27.302 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-21 23:39:27.303 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:27.314 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-21 23:39:27.314 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:27.324 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:27.553 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-07-21 23:39:27.571 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-07-21 23:39:27.682 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:39:27.682 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:39:28.389 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:28.389 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:39:28.438 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:39:28.499 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 108 ms. Found 21 JPA repository interfaces. +2025-07-21 23:39:28.502 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:28.502 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.530 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.531 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.532 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:28.556 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 53 ms. Found 1 Redis repository interface. +2025-07-21 23:39:28.803 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:39:28.804 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:28.804 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:39:28.804 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:39:28.845 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:39:28.845 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1159 ms +2025-07-21 23:39:29.002 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-07-21 23:39:29.025 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@56f7fb34 +2025-07-21 23:39:29.025 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-07-21 23:39:29.031 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:39:29.041 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:39:29.051 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.008s) +2025-07-21 23:39:29.051 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:39:29.062 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:39:29.063 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:39:29.134 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:39:29.141 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:39:29.158 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:39:29.162 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:39:29.162 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-3)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:39:29.505 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:39:29.955 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:30.285 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:39:30.427 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:39:31.081 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:39:31.391 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:39:31.496 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:31.496 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:31.496 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:31.497 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:31.497 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:39:32.314 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:39:32.387 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:32.392 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:39:32.400 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 4.766 seconds (process running for 593.748) +2025-07-21 23:39:32.451 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-21 23:39:45.689 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 1 deletion, 0 modifications) +2025-07-21 23:39:45.691 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-21 23:39:45.692 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:45.704 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-21 23:39:45.705 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:45.718 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:46.200 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-07-21 23:39:46.231 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-07-21 23:39:46.400 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:39:46.401 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:39:47.596 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:47.596 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:39:47.707 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:39:47.854 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 256 ms. Found 21 JPA repository interfaces. +2025-07-21 23:39:47.859 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:47.860 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:39:47.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.929 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.929 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.930 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.930 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.930 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.930 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.930 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.931 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.931 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.931 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.931 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.932 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.932 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.932 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.932 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.933 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.933 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.933 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.934 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:47.934 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:48.001 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 140 ms. Found 1 Redis repository interface. +2025-07-21 23:39:48.506 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:39:48.507 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:48.507 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:39:48.507 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:39:48.573 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:39:48.574 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2167 ms +2025-07-21 23:39:48.878 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-07-21 23:39:48.898 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2957c02f +2025-07-21 23:39:48.899 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed. +2025-07-21 23:39:48.904 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:39:48.914 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:39:48.922 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.006s) +2025-07-21 23:39:48.922 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:39:48.934 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:39:48.935 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:39:49.074 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:39:49.085 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:39:49.110 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:39:49.115 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:39:49.115 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-4)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:39:49.636 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:39:50.097 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:50.306 WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mosuServerApplication': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'life.mosu.mosuserver.domain.user.UserJpaRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} +2025-07-21 23:39:50.306 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:50.498 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated... +2025-07-21 23:39:50.517 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed. +2025-07-21 23:39:50.518 INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-07-21 23:39:50.528 INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-07-21 23:39:50.584 ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Parameter 0 of constructor in life.mosu.mosuserver.MosuServerApplication required a bean of type 'life.mosu.mosuserver.domain.user.UserJpaRepository' that could not be found. + + +Action: + +Consider defining a bean of type 'life.mosu.mosuserver.domain.user.UserJpaRepository' in your configuration. + +2025-07-21 23:39:52.580 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:39:52.580 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:39:53.986 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:53.986 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:39:54.084 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:39:54.187 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 200 ms. Found 21 JPA repository interfaces. +2025-07-21 23:39:54.191 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:39:54.191 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:39:54.254 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.254 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.254 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.255 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.255 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.255 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.255 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.255 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.256 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:39:54.336 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 143 ms. Found 1 Redis repository interface. +2025-07-21 23:39:54.764 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:39:54.765 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:39:54.766 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:39:54.766 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:39:54.845 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:39:54.845 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2261 ms +2025-07-21 23:39:55.128 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting... +2025-07-21 23:39:55.157 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-5 - Added connection com.mysql.cj.jdbc.ConnectionImpl@32d55320 +2025-07-21 23:39:55.157 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Start completed. +2025-07-21 23:39:55.166 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:39:55.181 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:39:55.191 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.007s) +2025-07-21 23:39:55.191 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:39:55.204 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:39:55.205 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:39:55.427 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:39:55.438 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:39:55.504 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:39:55.510 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:39:55.510 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-5)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:39:56.290 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:39:57.126 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:39:57.778 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:39:58.056 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:39:59.222 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:39:59.819 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:40:00.048 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:00.048 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:00.048 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:00.048 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:00.049 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:01.014 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:40:01.109 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:01.115 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:40:01.122 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 8.614 seconds (process running for 622.47) +2025-07-21 23:40:01.185 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-21 23:40:02.857 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (1 addition, 0 deletions, 0 modifications) +2025-07-21 23:40:02.860 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-21 23:40:02.862 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:02.877 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-21 23:40:02.878 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:02.888 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:40:03.110 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Shutdown initiated... +2025-07-21 23:40:03.130 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Shutdown completed. +2025-07-21 23:40:03.346 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32324 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:40:03.346 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:40:04.820 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:40:04.820 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:40:04.925 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:40:05.096 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 273 ms. Found 21 JPA repository interfaces. +2025-07-21 23:40:05.108 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:40:05.108 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:40:05.186 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.187 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.188 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.188 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.188 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.188 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.189 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.189 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.189 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.189 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.189 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.190 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.190 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.190 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.190 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.191 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.191 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.192 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.193 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.193 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.193 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:05.279 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 167 ms. Found 1 Redis repository interface. +2025-07-21 23:40:05.890 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:40:05.891 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:05.891 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:40:05.891 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:40:06.008 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:40:06.008 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2655 ms +2025-07-21 23:40:06.306 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting... +2025-07-21 23:40:06.328 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-6 - Added connection com.mysql.cj.jdbc.ConnectionImpl@50181e83 +2025-07-21 23:40:06.328 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Start completed. +2025-07-21 23:40:06.338 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:40:06.350 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:40:06.362 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.009s) +2025-07-21 23:40:06.362 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:40:06.377 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:40:06.378 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:40:06.512 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:40:06.518 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:40:06.540 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:40:06.544 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:40:06.545 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-6)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:40:07.095 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:40:07.754 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:40:08.454 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:40:08.745 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:40:09.788 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:40:10.403 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:40:10.585 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:10.585 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:10.585 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:10.585 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:10.585 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:40:11.639 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:40:11.711 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:11.718 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:40:11.730 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 8.466 seconds (process running for 633.079) +2025-07-21 23:40:11.786 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-21 23:40:44.447 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-21 23:40:44.464 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-21 23:40:44.481 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:40:44.964 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Shutdown initiated... +2025-07-21 23:40:45.006 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Shutdown completed. +2025-07-21 23:40:54.605 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-21 23:40:54.676 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 24832 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-21 23:40:54.677 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-21 23:40:54.754 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-21 23:40:54.754 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-21 23:40:56.612 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:40:56.614 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-21 23:40:56.853 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-21 23:40:56.964 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 339 ms. Found 21 JPA repository interfaces. +2025-07-21 23:40:56.978 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-21 23:40:56.979 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-21 23:40:57.022 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.023 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-21 23:40:57.054 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 65 ms. Found 1 Redis repository interface. +2025-07-21 23:40:58.159 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-21 23:40:58.179 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-21 23:40:58.181 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-21 23:40:58.181 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-21 23:40:58.262 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-21 23:40:58.262 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3507 ms +2025-07-21 23:40:58.704 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-21 23:40:59.084 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@19a89b07 +2025-07-21 23:40:59.087 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-21 23:40:59.150 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-21 23:40:59.591 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-21 23:40:59.620 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.019s) +2025-07-21 23:40:59.620 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-21 23:40:59.640 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-21 23:40:59.645 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-21 23:40:59.798 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-21 23:40:59.891 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-21 23:40:59.937 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-21 23:41:00.279 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-21 23:41:00.347 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-21 23:41:00.363 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-21 23:41:02.164 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-21 23:41:02.625 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-21 23:41:03.212 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-21 23:41:05.450 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-21 23:41:06.304 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-21 23:41:08.035 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-21 23:41:08.830 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-21 23:41:09.050 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:41:09.050 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:41:09.050 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:41:09.050 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:41:09.050 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-21 23:41:09.844 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-21 23:41:10.048 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-21 23:41:10.063 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-21 23:41:10.075 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 16.192 seconds (process running for 17.405) +2025-07-21 23:41:10.543 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-21 23:41:10.544 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-21 23:41:10.547 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-07-22 00:17:31.293 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 19 class path changes (0 additions, 19 deletions, 0 modifications) +2025-07-22 00:17:31.310 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:17:31.313 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:17:31.324 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:17:31.325 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 00:17:31.409 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:17:32.031 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 00:17:32.061 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 00:17:32.287 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 24832 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:17:32.288 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:17:32.339 ERROR o.s.boot.SpringApplication - Application run failed +java.lang.NoClassDefFoundError: life/mosu/mosuserver/domain/exam/ExamJpaRepository + at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) + at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549) + at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2727) + at org.springframework.boot.BeanDefinitionLoader.hasNoConstructors(BeanDefinitionLoader.java:293) + at org.springframework.boot.BeanDefinitionLoader.isEligible(BeanDefinitionLoader.java:285) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:160) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:136) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:129) + at org.springframework.boot.SpringApplication.load(SpringApplication.java:697) + at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:414) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) + at life.mosu.mosuserver.MosuServerApplication.main(MosuServerApplication.java:36) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: life.mosu.mosuserver.domain.exam.ExamJpaRepository + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) + ... 17 common frames omitted +2025-07-22 00:17:38.064 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 24832 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:17:38.065 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:17:39.600 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:17:39.600 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 00:17:39.701 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 00:17:39.832 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 229 ms. Found 21 JPA repository interfaces. +2025-07-22 00:17:39.838 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:17:39.838 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 00:17:39.885 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.886 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.886 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.886 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:17:39.945 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 105 ms. Found 1 Redis repository interface. +2025-07-22 00:17:40.459 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 00:17:40.461 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:17:40.461 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 00:17:40.461 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 00:17:40.554 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 00:17:40.554 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2480 ms +2025-07-22 00:17:40.860 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-07-22 00:17:40.895 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@709e3215 +2025-07-22 00:17:40.895 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-07-22 00:17:40.938 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 00:17:40.962 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 00:17:40.976 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.011s) +2025-07-22 00:17:40.976 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 00:17:40.987 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 00:17:40.989 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 00:17:41.132 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 00:17:41.143 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 00:17:41.173 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 00:17:41.179 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 00:17:41.180 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 00:17:41.891 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 00:17:42.465 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:17:43.078 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 00:17:43.385 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 00:17:44.465 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 00:17:44.983 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 00:17:45.159 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:17:45.159 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:17:45.159 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:17:45.159 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:17:45.159 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:17:46.115 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 00:17:46.277 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 00:17:46.286 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 00:17:46.297 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 8.318 seconds (process running for 2213.615) +2025-07-22 00:17:46.369 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 00:17:52.277 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:17:52.288 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:17:52.297 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:17:52.508 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-07-22 00:17:52.525 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-07-22 00:18:22.951 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 00:18:23.011 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:18:23.011 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:18:23.076 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 00:18:23.076 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 00:18:24.972 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:18:24.975 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 00:18:25.201 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 00:18:25.302 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 315 ms. Found 21 JPA repository interfaces. +2025-07-22 00:18:25.319 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:18:25.320 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 00:18:25.360 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.362 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.362 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.363 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.363 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.363 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.363 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.363 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.364 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.364 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.364 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.364 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.364 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.365 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.365 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.365 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.365 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.366 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.366 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.366 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.366 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:18:25.398 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 69 ms. Found 1 Redis repository interface. +2025-07-22 00:18:26.516 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 00:18:26.534 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:18:26.536 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 00:18:26.536 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 00:18:26.622 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 00:18:26.623 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3546 ms +2025-07-22 00:18:27.083 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 00:18:27.474 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@40093bbc +2025-07-22 00:18:27.477 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 00:18:27.527 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 00:18:27.929 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 00:18:27.961 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.021s) +2025-07-22 00:18:27.961 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 00:18:27.981 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 00:18:27.986 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 00:18:28.132 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 00:18:28.233 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 00:18:28.282 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 00:18:28.641 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 00:18:28.721 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 00:18:28.735 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 00:18:30.551 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 00:18:30.991 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:18:31.632 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 00:18:33.610 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 00:18:34.401 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 00:18:35.660 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 00:18:36.412 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 00:18:36.676 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:18:36.677 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:18:36.678 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:18:36.678 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:18:36.678 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:18:37.764 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 00:18:38.166 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 00:18:38.183 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 00:18:38.200 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 15.982 seconds (process running for 17.144) +2025-07-22 00:18:39.042 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-22 00:18:39.043 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-22 00:18:39.046 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-07-22 00:41:06.453 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 14 class path changes (0 additions, 14 deletions, 0 modifications) +2025-07-22 00:41:06.486 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:41:06.529 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:41:06.576 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:41:06.579 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 00:41:06.834 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:41:09.131 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 00:41:09.192 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 00:41:09.528 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:41:09.530 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:41:09.599 ERROR o.s.boot.SpringApplication - Application run failed +java.lang.NoClassDefFoundError: life/mosu/mosuserver/domain/exam/ExamJpaRepository + at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) + at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549) + at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2727) + at org.springframework.boot.BeanDefinitionLoader.hasNoConstructors(BeanDefinitionLoader.java:293) + at org.springframework.boot.BeanDefinitionLoader.isEligible(BeanDefinitionLoader.java:285) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:160) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:136) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:129) + at org.springframework.boot.SpringApplication.load(SpringApplication.java:697) + at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:414) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) + at life.mosu.mosuserver.MosuServerApplication.main(MosuServerApplication.java:36) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: life.mosu.mosuserver.domain.exam.ExamJpaRepository + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) + ... 17 common frames omitted +2025-07-22 00:41:14.785 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:41:14.786 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:41:16.326 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:41:16.326 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 00:41:16.438 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 00:41:16.595 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 267 ms. Found 21 JPA repository interfaces. +2025-07-22 00:41:16.606 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:41:16.606 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 00:41:16.693 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.694 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.694 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.694 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.694 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.695 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.695 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.695 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.695 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.696 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.696 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.696 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.696 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.696 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.697 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.698 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:41:16.779 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 171 ms. Found 1 Redis repository interface. +2025-07-22 00:41:17.368 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 00:41:17.370 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:41:17.370 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 00:41:17.370 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 00:41:17.459 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 00:41:17.459 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2659 ms +2025-07-22 00:41:17.835 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-07-22 00:41:17.924 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@284868e5 +2025-07-22 00:41:17.925 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-07-22 00:41:17.971 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 00:41:18.016 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 00:41:18.038 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.016s) +2025-07-22 00:41:18.038 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 00:41:18.068 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 00:41:18.072 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 00:41:18.204 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 00:41:18.210 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 00:41:18.235 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 00:41:18.240 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 00:41:18.241 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 00:41:18.831 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 00:41:19.396 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:41:19.998 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 00:41:20.330 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 00:41:21.330 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 00:41:22.086 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 00:41:22.266 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:41:22.266 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:41:22.266 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:41:22.266 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:41:22.266 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:41:23.141 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 00:41:23.242 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 00:41:23.249 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 00:41:23.256 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 8.546 seconds (process running for 1382.197) +2025-07-22 00:41:23.318 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 00:42:32.300 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 14 class path changes (0 additions, 14 deletions, 0 modifications) +2025-07-22 00:42:32.304 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:42:32.304 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:42:32.315 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:42:32.315 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 00:42:32.331 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:42:32.743 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-07-22 00:42:32.854 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-07-22 00:42:33.027 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:42:33.028 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:42:34.272 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:42:34.272 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 00:42:34.353 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 00:42:34.490 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 215 ms. Found 21 JPA repository interfaces. +2025-07-22 00:42:34.495 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:42:34.496 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 00:42:34.553 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.553 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.555 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:42:34.604 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 106 ms. Found 1 Redis repository interface. +2025-07-22 00:42:35.028 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 00:42:35.028 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:42:35.028 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 00:42:35.029 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 00:42:35.105 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 00:42:35.105 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2070 ms +2025-07-22 00:42:35.407 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-07-22 00:42:35.447 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@671249c +2025-07-22 00:42:35.448 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-07-22 00:42:35.459 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 00:42:35.471 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 00:42:35.482 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.009s) +2025-07-22 00:42:35.482 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 00:42:35.494 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 00:42:35.495 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 00:42:35.615 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 00:42:35.623 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 00:42:35.648 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 00:42:35.653 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 00:42:35.653 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-3)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 00:42:36.269 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 00:42:36.821 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:42:37.418 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 00:42:37.717 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 00:42:38.684 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 00:42:39.047 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 00:42:39.176 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:42:39.176 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:42:39.177 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:42:39.177 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:42:39.177 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:42:39.857 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 00:42:39.931 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 00:42:39.937 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 00:42:39.949 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 7.0 seconds (process running for 1458.89) +2025-07-22 00:42:40.011 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 00:53:49.872 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 15 class path changes (0 additions, 15 deletions, 0 modifications) +2025-07-22 00:53:49.875 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:53:49.876 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:53:49.888 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:53:49.888 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 00:53:49.900 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:53:50.317 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-07-22 00:53:50.351 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-07-22 00:53:50.603 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:53:50.604 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:53:50.612 ERROR o.s.boot.SpringApplication - Application run failed +java.lang.NoClassDefFoundError: life/mosu/mosuserver/domain/exam/ExamJpaRepository + at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) + at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549) + at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2727) + at org.springframework.boot.BeanDefinitionLoader.hasNoConstructors(BeanDefinitionLoader.java:293) + at org.springframework.boot.BeanDefinitionLoader.isEligible(BeanDefinitionLoader.java:285) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:160) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:136) + at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:129) + at org.springframework.boot.SpringApplication.load(SpringApplication.java:697) + at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:414) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) + at life.mosu.mosuserver.MosuServerApplication.main(MosuServerApplication.java:36) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: life.mosu.mosuserver.domain.exam.ExamJpaRepository + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) + ... 17 common frames omitted +2025-07-22 00:53:53.486 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 32140 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 00:53:53.486 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 00:53:55.376 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:53:55.377 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 00:53:55.473 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 00:53:55.570 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 190 ms. Found 21 JPA repository interfaces. +2025-07-22 00:53:55.577 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 00:53:55.577 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 00:53:55.627 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.627 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.628 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.629 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.629 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.629 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.629 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.lunch.LunchJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.629 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.630 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.630 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.630 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.631 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.631 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.631 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 00:53:55.668 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 89 ms. Found 1 Redis repository interface. +2025-07-22 00:53:56.107 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 00:53:56.108 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 00:53:56.108 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 00:53:56.108 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 00:53:56.214 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 00:53:56.214 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2709 ms +2025-07-22 00:53:56.547 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-07-22 00:53:56.599 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@459c2bbb +2025-07-22 00:53:56.599 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed. +2025-07-22 00:53:56.617 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 00:53:56.637 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 00:53:56.652 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.011s) +2025-07-22 00:53:56.652 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 00:53:56.666 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 00:53:56.667 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 00:53:56.753 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 00:53:56.759 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 00:53:56.781 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 00:53:56.785 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 00:53:56.786 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-4)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 00:53:57.498 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 00:53:58.322 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:53:59.145 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 00:53:59.425 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 00:54:00.417 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 00:54:00.866 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 00:54:01.120 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:54:01.120 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:54:01.120 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:54:01.120 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:54:01.120 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 00:54:02.446 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 00:54:02.585 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 00:54:02.594 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 00:54:02.603 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 9.684 seconds (process running for 2141.542) +2025-07-22 00:54:02.696 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 00:54:03.445 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 00:54:03.453 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 00:54:03.461 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 00:54:03.788 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated... +2025-07-22 00:54:03.812 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed. +2025-07-22 06:22:56.703 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 06:22:56.777 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 14648 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:22:56.778 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:22:56.855 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 06:22:56.855 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 06:22:59.336 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:22:59.339 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:22:59.637 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:22:59.754 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 403 ms. Found 20 JPA repository interfaces. +2025-07-22 06:22:59.779 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:22:59.782 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:22:59.839 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.841 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.841 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.842 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.843 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.844 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.844 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.844 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.844 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.845 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.846 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.846 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.846 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.846 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:22:59.896 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 96 ms. Found 1 Redis repository interface. +2025-07-22 06:23:01.581 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:23:01.611 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:23:01.613 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:23:01.614 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:23:01.730 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:23:01.730 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 4875 ms +2025-07-22 06:23:02.374 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 06:23:02.940 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@55a787b7 +2025-07-22 06:23:02.945 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 06:23:03.091 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:23:03.682 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:23:03.733 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.036s) +2025-07-22 06:23:03.733 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:23:03.765 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:23:03.771 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:23:03.996 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:23:04.118 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 06:23:04.169 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:23:04.694 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:23:04.794 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:23:04.812 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:23:06.851 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:23:07.847 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:23:08.627 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 06:23:10.345 WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationService' defined in file [C:\Users\조민주\mosu-server\build\classes\java\main\life\mosu\mosuserver\application\application\ApplicationService.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'examApplicationService' defined in file [C:\Users\조민주\mosu-server\build\classes\java\main\life\mosu\mosuserver\application\examapplication\ExamApplicationService.class]: Unsatisfied dependency expressed through constructor parameter 6: Error creating bean with name 'paymentRepository' defined in life.mosu.mosuserver.domain.payment.PaymentRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); Reason: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' +2025-07-22 06:23:10.345 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:23:10.702 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 06:23:10.739 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 06:23:10.742 INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-07-22 06:23:10.764 INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-07-22 06:23:10.810 ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationService' defined in file [C:\Users\조민주\mosu-server\build\classes\java\main\life\mosu\mosuserver\application\application\ApplicationService.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'examApplicationService' defined in file [C:\Users\조민주\mosu-server\build\classes\java\main\life\mosu\mosuserver\application\examapplication\ExamApplicationService.class]: Unsatisfied dependency expressed through constructor parameter 6: Error creating bean with name 'paymentRepository' defined in life.mosu.mosuserver.domain.payment.PaymentRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); Reason: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1387) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1224) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1221) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1187) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1122) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) + at life.mosu.mosuserver.MosuServerApplication.main(MosuServerApplication.java:33) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'examApplicationService' defined in file [C:\Users\조민주\mosu-server\build\classes\java\main\life\mosu\mosuserver\application\examapplication\ExamApplicationService.class]: Unsatisfied dependency expressed through constructor parameter 6: Error creating bean with name 'paymentRepository' defined in life.mosu.mosuserver.domain.payment.PaymentRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); Reason: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1387) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1224) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1681) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1627) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 24 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paymentRepository' defined in life.mosu.mosuserver.domain.payment.PaymentRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); Reason: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1818) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1681) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1627) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 37 common frames omitted +Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); Reason: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.data.repository.query.QueryCreationException.create(QueryCreationException.java:101) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:120) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:104) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:92) + at java.base/java.util.Optional.map(Optional.java:260) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.(QueryExecutorMethodInterceptor.java:92) + at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:431) + at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$4(RepositoryFactoryBeanSupport.java:350) + at org.springframework.data.util.Lazy.getNullable(Lazy.java:135) + at org.springframework.data.util.Lazy.get(Lazy.java:113) + at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:356) + at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1865) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1814) + ... 47 common frames omitted +Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract life.mosu.mosuserver.domain.payment.PaymentJpaEntity life.mosu.mosuserver.domain.payment.PaymentRepository.findByExamApplicationId(java.lang.Long); No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:107) + at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:128) + at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:260) + at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:99) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:116) + ... 59 common frames omitted +Caused by: org.springframework.data.mapping.PropertyReferenceException: No property 'examApplicationId' found for type 'PaymentJpaEntity' + at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:94) + at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:455) + at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:431) + at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:384) + at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) + at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:366) + at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:344) + at org.springframework.data.repository.query.parser.Part.(Part.java:81) + at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:259) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:260) + at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:389) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:390) + at org.springframework.data.repository.query.parser.PartTree.(PartTree.java:103) + at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:101) + ... 63 common frames omitted +2025-07-22 06:27:12.584 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 06:27:12.656 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 34056 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:27:12.657 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:27:12.741 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 06:27:12.741 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 06:27:15.572 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:27:15.576 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:27:15.927 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:27:16.065 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 472 ms. Found 20 JPA repository interfaces. +2025-07-22 06:27:16.090 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:27:16.091 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:27:16.148 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.150 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.151 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.151 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.151 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.151 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.152 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.152 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.152 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.152 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.152 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.153 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.153 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.154 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.154 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.154 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.156 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.156 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.156 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.156 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:27:16.191 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 85 ms. Found 1 Redis repository interface. +2025-07-22 06:27:18.148 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:27:18.174 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:27:18.176 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:27:18.177 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:27:18.275 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:27:18.275 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 5533 ms +2025-07-22 06:27:19.256 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 06:27:19.755 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@49705c9d +2025-07-22 06:27:19.758 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 06:27:19.857 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:27:20.436 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:27:20.483 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.031s) +2025-07-22 06:27:20.483 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:27:20.513 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:27:20.520 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:27:20.772 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:27:20.866 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 06:27:20.973 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:27:21.645 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:27:21.817 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:27:21.856 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:27:24.058 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:27:24.979 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:27:25.749 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 06:27:28.626 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:27:29.905 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:27:31.725 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:27:32.536 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:27:32.826 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:27:32.827 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:27:32.827 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:27:32.827 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:27:32.827 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:27:34.085 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:27:34.569 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:27:34.606 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:27:34.631 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 22.843 seconds (process running for 24.713) +2025-07-22 06:27:35.142 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-22 06:27:35.142 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-22 06:27:35.146 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 4 ms +2025-07-22 06:31:44.722 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'areaName' for method parameter type String is not present] +2025-07-22 06:33:33.195 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 3 deletions, 0 modifications) +2025-07-22 06:33:33.204 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:33:33.206 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:33.223 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:33:33.224 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:33.295 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:33:34.306 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 06:33:34.366 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 06:33:34.666 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 34056 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:33:34.666 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:33:38.420 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:33:38.422 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:33:38.876 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:33:39.321 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 888 ms. Found 20 JPA repository interfaces. +2025-07-22 06:33:39.338 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:33:39.340 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:33:39.546 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.548 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.548 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.548 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.550 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.552 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.552 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.552 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.552 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.552 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.554 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.556 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.560 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.561 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.561 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.561 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.563 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.567 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:33:39.727 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 378 ms. Found 1 Redis repository interface. +2025-07-22 06:33:41.486 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:33:41.488 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:41.488 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:33:41.490 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:33:41.676 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:33:41.676 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 6990 ms +2025-07-22 06:33:42.586 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-07-22 06:33:42.713 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@8ac0cfd +2025-07-22 06:33:42.715 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-07-22 06:33:42.759 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:33:42.808 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:33:42.850 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.033s) +2025-07-22 06:33:42.850 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:33:42.888 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:33:42.892 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:33:43.209 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:33:43.231 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:33:43.331 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:33:43.343 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:33:43.345 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:33:44.805 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:33:45.816 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:33:47.321 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:33:48.117 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:33:50.928 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:33:52.290 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:33:52.929 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:33:52.929 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:33:52.929 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:33:52.929 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:33:52.929 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:33:55.462 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:33:55.739 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:55.758 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:33:55.790 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 21.33 seconds (process running for 405.873) +2025-07-22 06:33:55.987 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 06:33:58.033 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (3 additions, 0 deletions, 0 modifications) +2025-07-22 06:33:58.053 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:33:58.054 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:58.086 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:33:58.086 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 06:33:58.109 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:33:58.478 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-07-22 06:33:58.517 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-07-22 06:33:58.979 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 34056 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:33:58.979 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:34:02.236 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:34:02.236 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:34:02.479 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:34:02.765 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 522 ms. Found 20 JPA repository interfaces. +2025-07-22 06:34:02.774 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:34:02.775 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:34:02.921 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.921 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.921 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.925 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.926 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.926 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.926 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.926 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.928 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.931 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.932 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.933 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:02.933 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:03.041 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 263 ms. Found 1 Redis repository interface. +2025-07-22 06:34:04.116 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:34:04.116 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:34:04.123 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:34:04.123 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:34:04.337 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:34:04.346 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 5359 ms +2025-07-22 06:34:05.142 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-07-22 06:34:05.190 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3d1ef69f +2025-07-22 06:34:05.190 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-07-22 06:34:05.208 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:34:05.236 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:34:05.259 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.019s) +2025-07-22 06:34:05.260 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:34:05.285 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:34:05.289 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:34:05.554 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:34:05.573 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:34:05.611 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:34:05.617 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:34:05.618 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-3)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:34:06.873 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:34:07.698 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:34:09.347 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:34:10.224 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:34:12.790 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:34:13.981 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:34:14.477 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:34:14.477 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:34:14.477 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:34:14.477 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:34:14.479 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:34:16.709 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:34:16.990 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:34:17.009 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:34:17.034 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 18.261 seconds (process running for 427.123) +2025-07-22 06:34:17.193 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 06:34:26.878 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:34:26.906 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:34:27.235 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:34:27.547 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-07-22 06:34:27.589 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-07-22 06:34:33.100 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 06:34:33.161 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 15872 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:34:33.162 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:34:33.234 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 06:34:33.235 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 06:34:36.435 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:34:36.439 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:34:36.765 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:34:36.895 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 439 ms. Found 20 JPA repository interfaces. +2025-07-22 06:34:36.919 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:34:36.921 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:34:36.991 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.993 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.993 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.995 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.995 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.995 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.995 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.996 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.996 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.996 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.996 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.997 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.997 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.997 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.997 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.998 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.998 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.999 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.999 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:36.999 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:34:37.068 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 133 ms. Found 1 Redis repository interface. +2025-07-22 06:34:38.810 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:34:38.832 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:34:38.835 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:34:38.835 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:34:38.935 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:34:38.936 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 5700 ms +2025-07-22 06:34:39.977 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 06:34:40.461 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1c9dc105 +2025-07-22 06:34:40.465 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 06:34:40.602 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:34:42.253 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:34:42.378 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.076s) +2025-07-22 06:34:42.378 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:34:42.437 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:34:42.449 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:34:43.000 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:34:43.256 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 06:34:43.421 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:34:44.865 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:34:45.124 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:34:45.188 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:34:50.194 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:34:50.971 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:34:52.337 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 06:34:56.488 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:34:57.596 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:34:59.263 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:35:00.479 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:35:00.775 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:35:00.776 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:35:00.776 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:35:00.776 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:35:00.776 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:35:01.863 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:35:02.175 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:35:02.191 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:35:02.206 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 29.756 seconds (process running for 31.06) +2025-07-22 06:35:02.750 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-22 06:35:02.750 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-22 06:35:02.753 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-07-22 06:37:28.270 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [java.lang.NullPointerException: Cannot invoke "life.mosu.mosuserver.domain.payment.PaymentJpaEntity.getPaymentKey()" because "payment" is null] +2025-07-22 06:44:03.985 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:44:04.008 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:44:04.263 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:44:04.921 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 06:44:04.985 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 06:44:14.582 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 06:44:14.641 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 16988 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:44:14.642 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:44:14.711 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 06:44:14.711 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 06:44:17.419 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:44:17.422 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:44:17.803 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:44:17.945 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 509 ms. Found 20 JPA repository interfaces. +2025-07-22 06:44:17.965 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:44:17.966 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:44:18.022 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.024 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.024 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.024 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.024 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.025 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.026 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.027 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.027 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.027 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.028 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:44:18.082 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 103 ms. Found 1 Redis repository interface. +2025-07-22 06:44:19.822 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:44:19.842 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:44:19.845 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:44:19.845 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:44:20.012 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:44:20.013 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 5300 ms +2025-07-22 06:44:20.720 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 06:44:21.325 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2e74cdc7 +2025-07-22 06:44:21.329 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 06:44:21.438 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:44:22.071 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:44:22.114 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.027s) +2025-07-22 06:44:22.114 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:44:22.143 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:44:22.149 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:44:22.364 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:44:22.462 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 06:44:22.526 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:44:23.054 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:44:23.166 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:44:23.188 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:44:25.546 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:44:26.324 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:44:27.066 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 06:44:29.830 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:44:31.155 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:44:32.916 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:44:33.800 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:44:34.008 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:44:34.008 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:44:34.008 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:44:34.009 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:44:34.009 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:44:35.234 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:44:35.690 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:44:35.714 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:44:35.733 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 21.957 seconds (process running for 24.789) +2025-07-22 06:44:36.268 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-22 06:44:36.268 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-22 06:44:36.271 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-07-22 06:54:07.828 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 2 class path changes (0 additions, 2 deletions, 0 modifications) +2025-07-22 06:54:07.896 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:54:07.899 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:07.997 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:54:07.998 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:08.132 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:54:08.783 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 06:54:08.857 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 06:54:09.142 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 16988 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:54:09.142 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:54:10.706 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:54:10.706 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:54:10.801 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:54:10.913 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 205 ms. Found 20 JPA repository interfaces. +2025-07-22 06:54:10.920 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:54:10.921 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:54:10.975 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.976 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.976 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.976 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.977 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.978 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.978 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:10.979 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:11.019 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 95 ms. Found 1 Redis repository interface. +2025-07-22 06:54:11.484 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:54:11.486 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:11.487 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:54:11.487 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:54:11.592 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:54:11.592 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2441 ms +2025-07-22 06:54:12.096 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-07-22 06:54:12.182 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@cb3d54c +2025-07-22 06:54:12.183 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-07-22 06:54:12.229 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:54:12.258 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:54:12.280 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.017s) +2025-07-22 06:54:12.280 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:54:12.299 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:54:12.302 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:54:12.434 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:54:12.443 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:54:12.471 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:54:12.476 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:54:12.477 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:54:13.163 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:54:13.717 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:54:14.352 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:54:14.812 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:54:16.019 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:54:16.606 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:54:16.806 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:16.806 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:16.806 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:16.806 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:16.806 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:17.769 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:54:17.864 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:17.871 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:54:17.879 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 8.847 seconds (process running for 606.935) +2025-07-22 06:54:17.968 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 06:54:19.496 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 2 class path changes (2 additions, 0 deletions, 0 modifications) +2025-07-22 06:54:19.498 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 06:54:19.498 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:19.513 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 06:54:19.513 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:19.523 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:54:19.838 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-07-22 06:54:19.865 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-07-22 06:54:20.078 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 16988 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 06:54:20.078 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 06:54:21.199 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:54:21.199 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 06:54:21.274 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 06:54:21.360 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 159 ms. Found 20 JPA repository interfaces. +2025-07-22 06:54:21.364 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 06:54:21.365 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 06:54:21.403 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.403 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.403 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.403 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.404 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.405 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.405 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.405 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.405 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.405 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 06:54:21.444 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 77 ms. Found 1 Redis repository interface. +2025-07-22 06:54:21.802 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 06:54:21.803 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:21.803 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 06:54:21.803 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 06:54:21.851 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 06:54:21.852 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1757 ms +2025-07-22 06:54:22.118 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-07-22 06:54:22.161 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1e4f627b +2025-07-22 06:54:22.161 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-07-22 06:54:22.184 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 06:54:22.207 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 06:54:22.226 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.015s) +2025-07-22 06:54:22.226 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 06:54:22.248 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 06:54:22.250 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 06:54:22.384 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 06:54:22.416 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 06:54:22.508 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 06:54:22.512 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 06:54:22.513 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-3)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 06:54:22.920 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 06:54:23.474 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 06:54:23.946 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 06:54:24.113 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 06:54:24.882 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 06:54:25.474 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 06:54:25.630 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:25.630 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:25.630 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:25.630 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:25.630 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 06:54:26.366 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 06:54:26.426 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 06:54:26.431 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 06:54:26.441 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 6.493 seconds (process running for 615.497) +2025-07-22 06:54:26.491 INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-07-22 07:03:59.032 INFO o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 2 class path changes (0 additions, 2 deletions, 0 modifications) +2025-07-22 07:03:59.039 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 07:03:59.041 INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-8080"] +2025-07-22 07:03:59.049 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 07:03:59.049 INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8080"] +2025-07-22 07:03:59.063 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 07:03:59.668 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-07-22 07:03:59.730 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-07-22 07:03:59.966 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 16988 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 07:03:59.966 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 07:04:01.329 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 07:04:01.330 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 07:04:01.461 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 07:04:01.652 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 319 ms. Found 20 JPA repository interfaces. +2025-07-22 07:04:01.665 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 07:04:01.665 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 07:04:01.886 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.887 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.888 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.889 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:04:01.974 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 303 ms. Found 1 Redis repository interface. +2025-07-22 07:04:03.167 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 07:04:03.169 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 07:04:03.169 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 07:04:03.170 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 07:04:03.288 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 07:04:03.288 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3314 ms +2025-07-22 07:04:03.589 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-07-22 07:04:03.646 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1731711c +2025-07-22 07:04:03.646 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed. +2025-07-22 07:04:03.668 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 07:04:03.698 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 07:04:03.730 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.020s) +2025-07-22 07:04:03.730 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 07:04:03.748 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 07:04:03.752 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 07:04:03.925 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 07:04:03.937 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 07:04:03.990 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 07:04:03.998 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 07:04:03.999 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-4)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 07:04:05.549 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 07:04:07.059 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 07:04:07.527 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 07:04:07.771 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 07:04:08.630 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 07:04:09.049 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 07:04:09.188 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:04:09.188 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:04:09.188 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:04:09.188 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:04:09.188 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:04:09.887 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 07:04:09.949 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 07:04:09.955 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 10.087 seconds (process running for 1199.011) +2025-07-22 07:04:09.956 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 07:04:09.967 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 07:04:09.976 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 07:04:10.188 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated... +2025-07-22 07:04:10.206 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed. +2025-07-22 07:13:04.185 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 07:13:04.241 INFO l.m.mosuserver.MosuServerApplication - Starting MosuServerApplication using Java 21.0.7 with PID 6932 (C:\Users\조민주\mosu-server\build\classes\java\main started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 07:13:04.242 INFO l.m.mosuserver.MosuServerApplication - No active profile set, falling back to 1 default profile: "default" +2025-07-22 07:13:04.307 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-07-22 07:13:04.307 INFO o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-07-22 07:13:06.190 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 07:13:06.193 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-07-22 07:13:06.408 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.auth.security.RefreshTokenKeyValueRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository +2025-07-22 07:13:06.505 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 302 ms. Found 20 JPA repository interfaces. +2025-07-22 07:13:06.521 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-07-22 07:13:06.526 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-07-22 07:13:06.570 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.572 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.572 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventAttachmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.572 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.event.EventJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.exam.ExamJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.faq.FaqJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.573 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiryAnswer.InquiryAnswerJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.574 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.574 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.inquiry.InquiryJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.574 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeAttachmentJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.574 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.notice.NoticeJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.574 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.payment.PaymentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.575 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.profile.ProfileJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.575 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.refund.RefundJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.575 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.domain.user.UserJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.575 INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface life.mosu.mosuserver.infra.storage.domain.FileMoveFailLogRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-07-22 07:13:06.613 INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 74 ms. Found 1 Redis repository interface. +2025-07-22 07:13:07.934 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) +2025-07-22 07:13:07.948 INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] +2025-07-22 07:13:07.950 INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-07-22 07:13:07.951 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.40] +2025-07-22 07:13:08.035 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext +2025-07-22 07:13:08.036 INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3728 ms +2025-07-22 07:13:08.512 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-07-22 07:13:08.939 INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@35f66cba +2025-07-22 07:13:08.942 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-07-22 07:13:09.024 INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost:20001/sa (MySQL 8.4) +2025-07-22 07:13:09.502 WARN o.f.c.i.database.base.Database - Flyway upgrade recommended: MySQL 8.4 is newer than this version of Flyway and support has not been tested. The latest supported version of MySQL is 8.1. +2025-07-22 07:13:09.543 INFO o.f.core.internal.command.DbValidate - Successfully validated 0 migrations (execution time 00:00.028s) +2025-07-22 07:13:09.543 WARN o.f.core.internal.command.DbValidate - No migrations found. Are your locations set up correctly? +2025-07-22 07:13:09.575 INFO o.f.core.internal.command.DbMigrate - Current version of schema `sa`: << Empty Schema >> +2025-07-22 07:13:09.581 INFO o.f.core.internal.command.DbMigrate - Schema `sa` is up to date. No migration necessary. +2025-07-22 07:13:09.828 INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-07-22 07:13:09.945 INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.13.Final +2025-07-22 07:13:10.013 INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-07-22 07:13:10.463 INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-07-22 07:13:10.579 WARN org.hibernate.orm.deprecation - HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-07-22 07:13:10.612 INFO o.hibernate.orm.connections.pooling - HHH10001005: Database info: + Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] + Database driver: undefined/unknown + Database version: 8.4.4 + Autocommit mode: undefined/unknown + Isolation level: undefined/unknown + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2025-07-22 07:13:12.373 INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-07-22 07:13:12.913 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 07:13:13.514 INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-07-22 07:13:15.716 INFO l.m.m.infra.property.S3Properties - S3 Properties Loaded. Expiration Time: 30 +2025-07-22 07:13:16.652 INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-07-22 07:13:18.116 INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name principalDetailsService +2025-07-22 07:13:18.810 INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 17 endpoints beneath base path '/actuator' +2025-07-22 07:13:19.002 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/favicon.ico'], Ant [pattern='/favicon.ico']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:13:19.003 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/error'], Ant [pattern='/error']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:13:19.003 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/v3/api-docs/**'], Ant [pattern='/v3/api-docs/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:13:19.003 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui/**'], Ant [pattern='/swagger-ui/**']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:13:19.003 WARN o.s.s.c.a.web.builders.WebSecurity - You are asking Spring Security to ignore Deferred [Mvc [pattern='/swagger-ui.html'], Ant [pattern='/swagger-ui.html']]. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2025-07-22 07:13:20.018 INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:20001/sa' +2025-07-22 07:13:20.354 INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] +2025-07-22 07:13:20.373 INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/api/v1' +2025-07-22 07:13:20.385 INFO l.m.mosuserver.MosuServerApplication - Started MosuServerApplication in 16.794 seconds (process running for 17.881) +2025-07-22 07:13:20.925 INFO o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-07-22 07:13:20.926 INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-07-22 07:13:20.929 INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-07-22 07:13:56.772 ERROR l.m.m.g.e.CustomRuntimeException - CustomRuntimeException 발생: status=404 NOT_FOUND, message=시험 정보를 찾을 수 없습니다. +life.mosu.mosuserver.global.exception.CustomRuntimeException: 시험 정보를 찾을 수 없습니다. + at life.mosu.mosuserver.application.application.ApplicationService.validateExamIdsAndLunchSelection(ApplicationService.java:157) + at life.mosu.mosuserver.application.application.ApplicationService.apply(ApplicationService.java:65) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) + at life.mosu.mosuserver.application.application.ApplicationService$$SpringCGLIB$$0.apply() + at life.mosu.mosuserver.presentation.application.ApplicationController.apply(ApplicationController.java:35) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) + at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) + at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) + at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) + at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) + at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at life.mosu.mosuserver.presentation.oauth.AccessTokenFilter.doFilterInternal(AccessTokenFilter.java:46) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at life.mosu.mosuserver.presentation.oauth.TokenExceptionFilter.doFilterInternal(TokenExceptionFilter.java:24) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter.doFilterInternal(OAuth2AuthorizationRequestRedirectFilter.java:198) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) + at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) + at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:243) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) + at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) + at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:238) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-07-22 07:13:56.787 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [life.mosu.mosuserver.global.exception.CustomRuntimeException: 시험 정보를 찾을 수 없습니다.] +2025-07-22 07:14:22.473 ERROR l.m.m.g.e.CustomRuntimeException - CustomRuntimeException 발생: status=400 BAD_REQUEST, message=점심이 등록되지 않은 시험에 점심 신청을 할 수 없습니다. +life.mosu.mosuserver.global.exception.CustomRuntimeException: 점심이 등록되지 않은 시험에 점심 신청을 할 수 없습니다. + at life.mosu.mosuserver.application.application.ApplicationService.validateExamIdsAndLunchSelection(ApplicationService.java:169) + at life.mosu.mosuserver.application.application.ApplicationService.apply(ApplicationService.java:65) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) + at life.mosu.mosuserver.application.application.ApplicationService$$SpringCGLIB$$0.apply() + at life.mosu.mosuserver.presentation.application.ApplicationController.apply(ApplicationController.java:35) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) + at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) + at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) + at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) + at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) + at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at life.mosu.mosuserver.presentation.oauth.AccessTokenFilter.doFilterInternal(AccessTokenFilter.java:46) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at life.mosu.mosuserver.presentation.oauth.TokenExceptionFilter.doFilterInternal(TokenExceptionFilter.java:24) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter.doFilterInternal(OAuth2AuthorizationRequestRedirectFilter.java:198) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) + at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) + at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) + at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) + at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) + at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:243) + at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) + at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) + at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:238) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-07-22 07:14:22.479 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [life.mosu.mosuserver.global.exception.CustomRuntimeException: 점심이 등록되지 않은 시험에 점심 신청을 할 수 없습니다.] +2025-07-22 07:16:08.111 INFO o.s.b.w.e.tomcat.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-07-22 07:16:08.122 INFO o.s.b.w.e.tomcat.GracefulShutdown - Graceful shutdown complete +2025-07-22 07:16:08.164 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-07-22 07:16:08.767 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-07-22 07:16:08.795 INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-07-22 21:20:03.765 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 21:20:03.816 INFO l.m.m.MosuServerApplicationTests - Starting MosuServerApplicationTests using Java 21.0.7 with PID 26684 (started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 21:20:03.817 INFO l.m.m.MosuServerApplicationTests - No active profile set, falling back to 1 default profile: "default" +2025-07-22 21:20:06.110 WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration +2025-07-22 21:20:06.184 INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-07-22 21:20:06.285 ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:627) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:850) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:847) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:817) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:418) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:290) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1462) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$12(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$7(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$6(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$1(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: java.lang.IllegalStateException: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) + at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:99) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:247) + at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:427) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:308) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:281) + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:617) + ... 110 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'SPRING_PORT' in value "${SPRING_PORT}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:423) + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:128) + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:118) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:114) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:255) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:226) + at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:246) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:81) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:67) + at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:568) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.getPortProperty(ManagementPortType.java:64) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.get(ManagementPortType.java:58) + at org.springframework.boot.actuate.autoconfigure.web.server.OnManagementPortCondition.getMatchOutcome(OnManagementPortCondition.java:49) + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) + ... 116 common frames omitted +2025-07-22 21:20:06.316 WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [life.mosu.mosuserver.MosuServerApplicationTests@24068086] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@520c3dcb testClass = life.mosu.mosuserver.MosuServerApplicationTests, locations = [], classes = [life.mosu.mosuserver.MosuServerApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizer@0, org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@6ca372ef, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@2596d7f4, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@3d1f558a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2f7efd0b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3119cf6f, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@7d70638, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@48eb001a, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@93c602b2], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$12(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$7(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$6(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$1(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:627) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:850) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:847) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:817) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:418) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:290) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1462) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + ... 87 common frames omitted +Caused by: java.lang.IllegalStateException: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) + at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:99) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:247) + at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:427) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:308) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:281) + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:617) + ... 110 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'SPRING_PORT' in value "${SPRING_PORT}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:423) + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:128) + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:118) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:114) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:255) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:226) + at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:246) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:81) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:67) + at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:568) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.getPortProperty(ManagementPortType.java:64) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.get(ManagementPortType.java:58) + at org.springframework.boot.actuate.autoconfigure.web.server.OnManagementPortCondition.getMatchOutcome(OnManagementPortCondition.java:49) + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) + ... 116 common frames omitted +2025-07-22 21:20:06.526 INFO l.m.m.i.payment.TossPaymentClient - [TOSS_CONFIRM] success: ConfirmTossPaymentResponse(paymentKey=tviva20250702231345mODA4, orderId=IDMAoki7azYp8SzQ06LMt12323235, status=DONE, approvedAt=2025-07-02T23:14:33+09:00, totalAmount=1000, balanceAmount=1000, suppliedAmount=1000, vat=1000, taxFreeAmount=1000, method=간편결제) +2025-07-22 21:34:19.303 INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final +2025-07-22 21:34:19.356 INFO l.m.m.MosuServerApplicationTests - Starting MosuServerApplicationTests using Java 21.0.7 with PID 34696 (started by 조민주 in C:\Users\조민주\mosu-server) +2025-07-22 21:34:19.357 INFO l.m.m.MosuServerApplicationTests - No active profile set, falling back to 1 default profile: "default" +2025-07-22 21:34:20.456 WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration +2025-07-22 21:34:20.489 INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-07-22 21:34:20.521 ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:627) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:850) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:847) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:817) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:418) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:290) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1462) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$12(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$7(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$6(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$1(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: java.lang.IllegalStateException: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) + at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:99) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:247) + at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:427) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:308) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:281) + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:617) + ... 110 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'SPRING_PORT' in value "${SPRING_PORT}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:423) + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:128) + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:118) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:114) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:255) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:226) + at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:246) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:81) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:67) + at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:568) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.getPortProperty(ManagementPortType.java:64) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.get(ManagementPortType.java:58) + at org.springframework.boot.actuate.autoconfigure.web.server.OnManagementPortCondition.getMatchOutcome(OnManagementPortCondition.java:49) + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) + ... 116 common frames omitted +2025-07-22 21:34:20.530 WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [life.mosu.mosuserver.MosuServerApplicationTests@1c815814] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7286827b testClass = life.mosu.mosuserver.MosuServerApplicationTests, locations = [], classes = [life.mosu.mosuserver.MosuServerApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizer@0, org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@6ca372ef, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@2596d7f4, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@3d1f558a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2f7efd0b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3119cf6f, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@7d70638, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@48eb001a, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@93c602b2], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:200) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:139) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$12(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$7(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$6(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$1(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [life.mosu.mosuserver.MosuServerApplication]: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:627) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:850) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:847) + at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:817) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:418) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:290) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1462) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + ... 87 common frames omitted +Caused by: java.lang.IllegalStateException: Error processing condition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration$SpringDocWebMvcActuatorDifferentConfiguration + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) + at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:99) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:247) + at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:427) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:308) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:281) + at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:617) + ... 110 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'SPRING_PORT' in value "${SPRING_PORT}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:423) + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:128) + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:118) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:114) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:255) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:226) + at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:246) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:81) + at org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertyResolver.getProperty(ConfigurationPropertySourcesPropertyResolver.java:67) + at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:568) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.getPortProperty(ManagementPortType.java:64) + at org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType.get(ManagementPortType.java:58) + at org.springframework.boot.actuate.autoconfigure.web.server.OnManagementPortCondition.getMatchOutcome(OnManagementPortCondition.java:49) + at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) + ... 116 common frames omitted +2025-07-22 21:34:20.621 INFO l.m.m.i.payment.TossPaymentClient - [TOSS_CONFIRM] success: ConfirmTossPaymentResponse(paymentKey=tviva20250702231345mODA4, orderId=IDMAoki7azYp8SzQ06LMt12323235, status=DONE, approvedAt=2025-07-02T23:14:33+09:00, totalAmount=1000, balanceAmount=1000, suppliedAmount=1000, vat=1000, taxFreeAmount=1000, method=간편결제) diff --git a/pinpoint-agent/profiles/.gitignore b/pinpoint-agent/profiles/.gitignore deleted file mode 100644 index 89cfb236..00000000 --- a/pinpoint-agent/profiles/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# for custom profile -private/ -custom/ \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/MosuServerApplication.java b/src/main/java/life/mosu/mosuserver/MosuServerApplication.java index 175ca265..d2ee6e2c 100644 --- a/src/main/java/life/mosu/mosuserver/MosuServerApplication.java +++ b/src/main/java/life/mosu/mosuserver/MosuServerApplication.java @@ -6,14 +6,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -@RequiredArgsConstructor -public class MosuServerApplication implements CommandLineRunner { +public class MosuServerApplication { public static void main(String[] args) { SpringApplication.run(MosuServerApplication.class, args); } - - @Override - public void run(String... args) throws Exception { - } } diff --git a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java index 7779fe23..f5230298 100644 --- a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java +++ b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java @@ -1,7 +1,10 @@ package life.mosu.mosuserver.application.application; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import life.mosu.mosuserver.application.examapplication.ExamApplicationService; import life.mosu.mosuserver.application.examapplication.dto.RegisterExamApplicationEvent; @@ -9,19 +12,24 @@ import life.mosu.mosuserver.domain.application.ApplicationJpaRepository; import life.mosu.mosuserver.domain.application.ExamTicketImageJpaEntity; import life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; +import life.mosu.mosuserver.domain.application.Subject; import life.mosu.mosuserver.domain.exam.ExamJpaEntity; import life.mosu.mosuserver.domain.exam.ExamJpaRepository; import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; import life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaEntity; import life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; +import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; +import life.mosu.mosuserver.domain.payment.PaymentJpaRepository; import life.mosu.mosuserver.global.exception.CustomRuntimeException; import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.global.util.FileRequest; +import life.mosu.mosuserver.infra.respository.ExamApplicationBulkRepository; import life.mosu.mosuserver.presentation.application.dto.ApplicationRequest; import life.mosu.mosuserver.presentation.application.dto.ApplicationResponse; +import life.mosu.mosuserver.presentation.application.dto.CreateApplicationResponse; import life.mosu.mosuserver.presentation.application.dto.ExamApplicationRequest; -import life.mosu.mosuserver.presentation.application.dto.ExamWithSubjects; +import life.mosu.mosuserver.presentation.application.dto.ExamApplicationResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -39,18 +47,34 @@ public class ApplicationService { private final ExamSubjectJpaRepository examSubjectJpaRepository; private final ExamApplicationJpaRepository examApplicationJpaRepository; private final ExamJpaRepository examJpaRepository; + private final ExamApplicationBulkRepository examApplicationBulkRepository; + private final PaymentJpaRepository paymentJpaRepository; + @Transactional - public ApplicationResponse apply(Long userId, ApplicationRequest request) { + public CreateApplicationResponse apply(Long userId, ApplicationRequest request) { - // 중복 신청 검증 - List examIds = request.examApplication().stream() + List examApplicationRequests = request.examApplication(); + Set subjects = request.validatedSubjects(); + + List examIds = examApplicationRequests.stream() .map(ExamApplicationRequest::examId) .toList(); - // examId 가 동일 하냐? - //다른 exam 인데 시간이 같나? - //exam_id lunch_id 쌍으로 포함된 exam_application 이 존재하냐 + // 중복 신청 검증 + Set examIdSet = new HashSet<>(examIds); + if (examIds.size() != examIdSet.size()) { + throw new RuntimeException("같은 시험을 신청할 수 없습니다."); + } + + // 신청을 1개 이상 신청했는지 검증 + if (examIds.isEmpty()) { + throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND); + } + + //해당 시험이 진짜 있는 일정인지, lunch 가 없는 시험인데 lunch 를 신청했는지 + validateExamIdsAndLunchSelection(examApplicationRequests); + boolean isDuplicate = applicationJpaRepository.existsByUserIdAndExamIds(userId, examIds); if (isDuplicate) { throw new CustomRuntimeException(ErrorCode.APPLICATION_SCHOOL_DUPLICATED); @@ -63,19 +87,12 @@ public ApplicationResponse apply(Long userId, ApplicationRequest request) { List examApplicationEntities = examApplicationService.register( RegisterExamApplicationEvent.of(request.examApplication(), applicationId) ); - examApplicationJpaRepository.saveAll(examApplicationEntities); - List allExamSubjects = examApplicationEntities.stream() - .flatMap(examApplication -> { - Long examApplicationId = examApplication.getId(); - return request.validatedSubjects().stream() - .map(subject -> ExamSubjectJpaEntity.create(examApplicationId, - subject)); - }) - .toList(); - - examSubjectJpaRepository.saveAll(allExamSubjects); + // 시험 신청 목록과 과목 multi-insert + examApplicationBulkRepository.saveAllExamApplicationsWithSubjects(examApplicationEntities, + subjects); + // 수험표 저장 FileRequest fileReq = request.admissionTicket(); if (fileReq.fileName() != null && fileReq.s3Key() != null) { ExamTicketImageJpaEntity examTicketImage = fileReq @@ -83,62 +100,150 @@ public ApplicationResponse apply(Long userId, ApplicationRequest request) { examTicketImageJpaRepository.save(examTicketImage); } - return ApplicationResponse.of(applicationId); + return CreateApplicationResponse.of(applicationId); } - // 전체 신청 내역 조회 + // TODO: 테스트 필요 @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public List getApplications(Long userId) { - List applications = applicationJpaRepository.findAllByUserId(userId); + List applications = getUserApplications(userId); + + List examApplications = getExamApplications(applications); + + Map examMap = getExamMap(examApplications); + + Map> subjectMap = getSubjectMap(examApplications); + + Map> examResponsesGroupedByApplicationId = + groupExamResponsesByApplication(examApplications, examMap, subjectMap); + + return applications.stream() + .map(app -> ApplicationResponse.of( + app.getId(), + examResponsesGroupedByApplicationId.getOrDefault(app.getId(), List.of()) + )) + .toList(); + } + + private void validateExamIdsAndLunchSelection(List requests) { + + List examIds = requests.stream() + .map(ExamApplicationRequest::examId).toList(); + + List existingExams = examJpaRepository.findAllById(examIds); + if (existingExams.size() != examIds.size()) { + throw new CustomRuntimeException(ErrorCode.EXAM_NOT_FOUND); + } + + Set examsWithoutLunch = existingExams.stream() + .filter(exam -> exam.getLunchName() == null) + .map(ExamJpaEntity::getId) + .collect(Collectors.toSet()); + + boolean invalidLunchSelection = requests.stream() + .anyMatch(req -> examsWithoutLunch.contains(req.examId()) && req.isLunchChecked()); + + if (invalidLunchSelection) { + throw new CustomRuntimeException(ErrorCode.LUNCH_SELECTION_INVALID); + } + } + + private List getUserApplications(Long userId) { + List applications = applicationJpaRepository.findAllByUserId(userId); if (applications.isEmpty()) { throw new CustomRuntimeException(ErrorCode.APPLICATION_LIST_NOT_FOUND); } + return applications; + } - return applications.stream() - .map(application -> { - // 해당 신청의 시험 신청들 조회 - List examApplications = - examApplicationJpaRepository.findByApplicationId(application.getId()); - - if (examApplications.isEmpty()) { - throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND); - } - // ExamWithSubjects 리스트 생성 - List exams = examApplications.stream() - .map(examApplication -> { - // 시험 정보 조회 - ExamJpaEntity exam = examJpaRepository.findById( - examApplication.getExamId()) - .orElseThrow(() -> new CustomRuntimeException( - ErrorCode.EXAM_NOT_FOUND)); - - // 과목 정보 조회 - List examSubjects = - examSubjectJpaRepository.findByExamApplicationId( - examApplication.getId()); - Set subjects = examSubjects.stream() - .map(examSubject -> examSubject.getSubject() - .getSubjectName()) - .collect(Collectors.toSet()); - - // ExamWithSubjects 생성 - return new ExamWithSubjects( - examApplication.getId(), - exam.getArea().getAreaName(), - exam.getExamDate(), - exam.getSchoolName(), - null, - examApplication.getExamNumber() != null - ? examApplication.getExamNumber() : "", - subjects - ); - }) - .toList(); - - return ApplicationResponse.of(application.getId(), exams); - }) + private List getExamApplications( + List applications) { + List applicationIds = applications.stream() + .map(ApplicationJpaEntity::getId) + .toList(); + + List examApplications = + examApplicationJpaRepository.findByApplicationIdIn(applicationIds); + + if (examApplications.isEmpty()) { + throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND); + } + return examApplications; + } + + private Map getExamMap(List examApplications) { + List examIds = examApplications.stream() + .map(ExamApplicationJpaEntity::getExamId) + .distinct() .toList(); + + return examJpaRepository.findByIdIn(examIds).stream() + .collect(Collectors.toMap(ExamJpaEntity::getId, Function.identity())); + } + + private Map getPaymentMap( + List examApplications) { + List examApplicationIds = examApplications.stream() + .map(ExamApplicationJpaEntity::getId) + .toList(); + + return paymentJpaRepository.findByExamApplicationIdIn(examApplicationIds).stream() + .collect(Collectors.toMap(PaymentJpaEntity::getExamApplicationId, + Function.identity())); + } + + private Map> getSubjectMap( + List examApplications) { + List examApplicationIds = examApplications.stream() + .map(ExamApplicationJpaEntity::getId) + .toList(); + + return examSubjectJpaRepository.findByExamApplicationIdIn(examApplicationIds).stream() + .collect(Collectors.groupingBy(ExamSubjectJpaEntity::getExamApplicationId)); + } + + private Map> groupExamResponsesByApplication( + List examApplications, + Map examMap, + Map> subjectMap + ) { + Map paymentMap = getPaymentMap(examApplications); + + return examApplications.stream() + .map(examApplication -> { + Long examApplicationId = examApplication.getId(); + ExamJpaEntity exam = examMap.get(examApplication.getExamId()); + + Set subjects = subjectMap.getOrDefault(examApplicationId, List.of()) + .stream() + .map(es -> es.getSubject().getSubjectName()) + .collect(Collectors.toSet()); + + PaymentJpaEntity payment = paymentMap.get(examApplicationId); + String paymentStatus = + (payment != null) ? payment.getPaymentStatus().name() : null; + Integer totalAmount = (payment != null && payment.getPaymentAmount() != null) + ? payment.getPaymentAmount().getTotalAmount() + : 0; + + ExamApplicationResponse response = ExamApplicationResponse.of( + examApplicationId, + examApplication.getCreatedAt(), + paymentStatus, + totalAmount, + exam.getSchoolName(), + exam.getExamDate(), + subjects, + examApplication.getIsLunchChecked() ? exam.getLunchName() : "신청 안 함" + ); + + return Map.entry(examApplication.getApplicationId(), response); + }) + .collect(Collectors.groupingBy( + Map.Entry::getKey, + Collectors.mapping(Map.Entry::getValue, Collectors.toList()) + )); } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/application/exam/ExamQuotaCacheManager.java b/src/main/java/life/mosu/mosuserver/application/exam/ExamQuotaCacheManager.java index 7358d80c..89a6a3fe 100644 --- a/src/main/java/life/mosu/mosuserver/application/exam/ExamQuotaCacheManager.java +++ b/src/main/java/life/mosu/mosuserver/application/exam/ExamQuotaCacheManager.java @@ -48,8 +48,7 @@ public void addSchoolCurrentApplicationCount(String schoolName, Long currentCoun String key = REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + schoolName; redisTemplate.opsForValue().set(key, currentCount); } - - + public Long getSchoolApplicationCounts(String schoolName) { return redisTemplate.opsForValue() .get(REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + schoolName); diff --git a/src/main/java/life/mosu/mosuserver/application/exam/ExamService.java b/src/main/java/life/mosu/mosuserver/application/exam/ExamService.java index 975d5bbc..57ee203c 100644 --- a/src/main/java/life/mosu/mosuserver/application/exam/ExamService.java +++ b/src/main/java/life/mosu/mosuserver/application/exam/ExamService.java @@ -36,7 +36,15 @@ public List getByArea(String areaName) { return ExamResponse.fromList(foundExams); } - public List getDistinctAreas() { - return examJpaRepository.findDistinctAreas(); + public List getDistinctAreas() { + return examJpaRepository.findDistinctAreas().stream() + .map(Area::getAreaName) + .toList(); } + + public List getExams() { + List exams = examJpaRepository.findAll(); + return ExamResponse.fromList(exams); + } + } diff --git a/src/main/java/life/mosu/mosuserver/application/examapplication/ExamApplicationService.java b/src/main/java/life/mosu/mosuserver/application/examapplication/ExamApplicationService.java index 97b6ed99..d6b7a848 100644 --- a/src/main/java/life/mosu/mosuserver/application/examapplication/ExamApplicationService.java +++ b/src/main/java/life/mosu/mosuserver/application/examapplication/ExamApplicationService.java @@ -4,24 +4,26 @@ import java.util.Set; import java.util.stream.Collectors; import life.mosu.mosuserver.application.examapplication.dto.RegisterExamApplicationEvent; -import life.mosu.mosuserver.domain.application.ExamTicketImageJpaEntity; -import life.mosu.mosuserver.domain.application.ExamTicketImageJpaRepository; -import life.mosu.mosuserver.domain.exam.ExamJpaEntity; -import life.mosu.mosuserver.domain.exam.ExamJpaRepository; +import life.mosu.mosuserver.domain.application.ApplicationJpaRepository; +import life.mosu.mosuserver.domain.application.Subject; +import life.mosu.mosuserver.domain.discount.FixedQuantityDiscountCalculator; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationInfoProjection; import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; -import life.mosu.mosuserver.domain.examapplication.ExamNumberGenerationService; import life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaEntity; import life.mosu.mosuserver.domain.examapplication.ExamSubjectJpaRepository; -import life.mosu.mosuserver.domain.profile.ProfileJpaEntity; -import life.mosu.mosuserver.domain.profile.ProfileJpaRepository; +import life.mosu.mosuserver.domain.examapplication.ExamTicketInfoProjection; +import life.mosu.mosuserver.domain.examapplication.service.ExamNumberGenerationService; import life.mosu.mosuserver.global.exception.CustomRuntimeException; import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.infra.storage.application.S3Service; import life.mosu.mosuserver.presentation.admin.dto.ExamTicketResponse; +import life.mosu.mosuserver.presentation.common.AddressResponse; +import life.mosu.mosuserver.presentation.examapplication.dto.ExamApplicationInfoResponse; import life.mosu.mosuserver.presentation.examapplication.dto.UpdateSubjectRequest; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Service @@ -29,18 +31,18 @@ public class ExamApplicationService { private final ExamApplicationJpaRepository examApplicationJpaRepository; + private final ApplicationJpaRepository applicationJpaRepository; private final ExamSubjectJpaRepository examSubjectJpaRepository; private final ExamNumberGenerationService examNumberGenerationService; - private final ExamTicketImageJpaRepository examTicketImageJpaRepository; - private final ProfileJpaRepository profileJpaRepository; - private final ExamJpaRepository examJpaRepository; private final S3Service s3Service; - + private final FixedQuantityDiscountCalculator calculator; + + @Transactional public List register(RegisterExamApplicationEvent event) { List examApplicationEntities = event.toEntity(); examNumberGenerationService.grantTo(examApplicationEntities); - return examApplicationJpaRepository.saveAll(examApplicationEntities); + return examApplicationEntities; } @Transactional @@ -50,33 +52,80 @@ public void updateSubjects(Long examApplicationId, UpdateSubjectRequest request) examSubjectJpaRepository.saveAll(examSubjects); } - @Transactional - public ExamTicketResponse getExamTicket(Long userId, Long examApplicationId) { + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void deleteExamApplication(Long examApplicationId) { ExamApplicationJpaEntity examApplication = examApplicationJpaRepository.findById( examApplicationId) .orElseThrow( () -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND)); + Long applicationId = examApplication.getApplicationId(); + + examApplicationJpaRepository.deleteById(examApplicationId); + + if (!examApplicationJpaRepository.existsByApplicationId(applicationId)) { + applicationJpaRepository.deleteById(applicationId); + } + + examSubjectJpaRepository.deleteByExamApplicationId(examApplicationId); + + } + + + @Transactional + public ExamTicketResponse getExamTicket(Long examApplicationId) { + ExamTicketInfoProjection examTicketInfo = examApplicationJpaRepository.findExamTicketInfoProjectionById( + examApplicationId) + .orElseThrow( + () -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND)); List examSubjects = examSubjectJpaRepository.findByExamApplicationId( examApplicationId); + List subjects = examSubjects.stream() + .map(ExamSubjectJpaEntity::getSubject) + .map(Subject::getSubjectName) + .toList(); + + String examTicketImgUrl = s3Service.getPreSignedUrl(examTicketInfo.s3Key()); + return ExamTicketResponse.of(examTicketImgUrl, examTicketInfo.userName(), + examTicketInfo.birth(), + examTicketInfo.examNumber(), subjects, examTicketInfo.schoolName()); + + } + + //TODO: 테스트 필요 + public ExamApplicationInfoResponse getApplication(Long examApplicationId) { + + ExamApplicationInfoProjection examApplicationInfo = examApplicationJpaRepository + .findExamApplicationInfoById(examApplicationId) + .orElseThrow( + () -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND)); + + List examSubjects = + examSubjectJpaRepository.findByExamApplicationId(examApplicationId); + Set subjects = examSubjects.stream() - .map(es -> es.getSubject().getSubjectName()) + .map(examSubject -> examSubject.getSubject() + .getSubjectName()) .collect(Collectors.toSet()); - Long applicationId = examApplication.getApplicationId(); - ExamTicketImageJpaEntity examTicketImage = examTicketImageJpaRepository.findByApplicationId( - applicationId); - ; - ProfileJpaEntity profile = profileJpaRepository.findById(userId) - .orElseThrow(() -> new CustomRuntimeException(ErrorCode.PROFILE_NOT_FOUND)); - - ExamJpaEntity exam = examJpaRepository.findById(examApplication.getExamId()) - .orElseThrow(() -> new CustomRuntimeException(ErrorCode.EXAM_NOT_FOUND)); + Integer discountAmount = calculator.getAppliedDiscountAmount( + examApplicationInfo.paymentAmount().getTotalAmount()); - String examTicketImgUrl = s3Service.getPreSignedUrl(examTicketImage.getS3Key()); + Integer paymentAmount = + examApplicationInfo.paymentAmount().getTotalAmount() + discountAmount; - return ExamTicketResponse.of(examTicketImgUrl, profile.getUserName(), profile.getBirth(), - examApplication.getExamNumber(), subjects, exam.getSchoolName()); + return ExamApplicationInfoResponse.of( + examApplicationInfo.examApplicationId(), + examApplicationInfo.paymentKey(), + examApplicationInfo.examDate(), + examApplicationInfo.schoolName(), + AddressResponse.from(examApplicationInfo.address()), + subjects, + examApplicationInfo.isLunchChecked() ? examApplicationInfo.lunchName() : "신청 안 함", + paymentAmount, + discountAmount, + examApplicationInfo.paymentMethod().getName() + ); } } diff --git a/src/main/java/life/mosu/mosuserver/application/examapplication/dto/RegisterExamApplicationEvent.java b/src/main/java/life/mosu/mosuserver/application/examapplication/dto/RegisterExamApplicationEvent.java index e76a449e..593f8dd6 100644 --- a/src/main/java/life/mosu/mosuserver/application/examapplication/dto/RegisterExamApplicationEvent.java +++ b/src/main/java/life/mosu/mosuserver/application/examapplication/dto/RegisterExamApplicationEvent.java @@ -31,7 +31,7 @@ public List toEntity() { public record TargetExam( Long examId, - boolean isLunchChecked + Boolean isLunchChecked ) { } diff --git a/src/main/java/life/mosu/mosuserver/application/payment/OrderIdGenerator.java b/src/main/java/life/mosu/mosuserver/application/payment/OrderIdGenerator.java deleted file mode 100644 index d5b1d1f4..00000000 --- a/src/main/java/life/mosu/mosuserver/application/payment/OrderIdGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package life.mosu.mosuserver.application.payment; - -import java.util.UUID; -import org.springframework.stereotype.Component; - -@Component -public class OrderIdGenerator { - - public String generate() { - return UUID.randomUUID().toString(); - } -} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java deleted file mode 100644 index 6b9c4198..00000000 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package life.mosu.mosuserver.application.payment; - -import java.util.List; -import life.mosu.mosuserver.domain.payment.PaymentStatus; - -public record PaymentEvent( - List applicationSchoolIds, - String orderId, - PaymentStatus status, - Integer totalAmount -) { - - public static PaymentEvent ofSuccess(List applicationIds, String orderId, - Integer totalAmount) { - return new PaymentEvent(applicationIds, orderId, PaymentStatus.DONE, totalAmount); - } - - public static PaymentEvent ofCancelled(List applicationIds, String orderId, - Integer totalAmount) { - return new PaymentEvent(applicationIds, orderId, PaymentStatus.CANCELLED_DONE, totalAmount); - } - - public static PaymentEvent ofFailed(List applicationIds, String orderId, - Integer totalAmount) { - return new PaymentEvent(applicationIds, orderId, PaymentStatus.ABORTED, totalAmount); - } - - @Override - public String toString() { - return "PaymentEvent{" + - "orderId='" + orderId + '\'' + - ", status=" + status + - '}'; - } -} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventListener.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventListener.java deleted file mode 100644 index 9d614b1d..00000000 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package life.mosu.mosuserver.application.payment; - -import life.mosu.mosuserver.domain.payment.PaymentRepository; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Backoff; -import org.springframework.retry.annotation.Recover; -import org.springframework.retry.annotation.Retryable; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.event.TransactionPhase; -import org.springframework.transaction.event.TransactionalEventListener; - -@Transactional(propagation = Propagation.NOT_SUPPORTED) -@Component -@Slf4j -@RequiredArgsConstructor -public class PaymentEventListener { - - private final PaymentRepository paymentRepository; - private final PaymentFailureHandler paymentFailureHandler; - - @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT) - public void beforeCommitHandler(PaymentEvent event) { - log.debug("[BEFORE_COMMIT] 커밋 직전 처리: orderId={}", event.orderId()); - // 예: 캐시 업데이트, 커밋 직전 검증 - } - - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - public void afterCommitHandler(PaymentEvent event) { - log.info("[AFTER_COMMIT] 커밋 성공 후 처리: orderId={}", event.orderId()); - // 예: 외부 API 호출, 메시지 큐 발행, 알림 전송 - } - - @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK) - @Retryable( - retryFor = Exception.class, - maxAttempts = 3, - backoff = @Backoff(delay = 2000, multiplier = 2) - ) - public void afterRollbackHandler(PaymentEvent event) { - log.warn("[AFTER_ROLLBACK] 롤백 후 처리 시작: orderId={}", event.orderId()); - paymentFailureHandler.handlePaymentFailure(event); - log.info("[AFTER_ROLLBACK] 롤백 후 처리 완료: orderId={}", event.orderId()); - } - - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMPLETION) - public void afterCompletionHandler(PaymentEvent event) { - log.debug("[AFTER_COMPLETION] 커밋/롤백 후 무조건 처리: orderId={}", event.orderId()); - // 리소스 정리, 상태 초기화 등 - } - - @Recover - public void recoverAfterRollbackHandler(Exception ex, PaymentEvent event) { - log.error("[RECOVER] 롤백 후 처리 재시도 실패: orderId={}, error={}", event.orderId(), - ex.getMessage(), ex); - } - -} - diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventTxService.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventTxService.java new file mode 100644 index 00000000..33398ee8 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEventTxService.java @@ -0,0 +1,35 @@ +package life.mosu.mosuserver.application.payment; + +import java.util.List; +import life.mosu.mosuserver.application.payment.tx.PaymentContext; +import life.mosu.mosuserver.application.payment.tx.PaymentTxEventFactory; +import life.mosu.mosuserver.global.tx.TxEvent; +import life.mosu.mosuserver.global.tx.TxEventPublisher; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@RequiredArgsConstructor +public class PaymentEventTxService { + + private final TxEventPublisher txEventPublisher; + private final PaymentTxEventFactory eventFactory; + + @Transactional + public void publishSuccessEvent(List examApplicationIds, String orderId, int amount) { + TxEvent event = eventFactory.create( + PaymentContext.ofSuccess(examApplicationIds, orderId, amount)); + txEventPublisher.publish(event); + } + + @Transactional + public void publishFailureEvent(List examApplicationIds, String orderId, int amount) { + TxEvent event = eventFactory.create( + PaymentContext.ofFailure(examApplicationIds, orderId, amount)); + txEventPublisher.publish(event); + } +} + diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java deleted file mode 100644 index 6f74251c..00000000 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package life.mosu.mosuserver.application.payment; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; -import life.mosu.mosuserver.domain.payment.PaymentRepository; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@RequiredArgsConstructor -@Component -public class PaymentFailureHandler { - - private final PaymentRepository paymentRepository; - - public void handlePaymentFailure(PaymentEvent event) { - List existingPayments = paymentRepository.findByOrderId(event.orderId()); - Set existingAppIds = existingPayments.stream() - .map(PaymentJpaEntity::getApplicationId) - .collect(Collectors.toSet()); - - List missingAppSchoolIds = event.applicationSchoolIds().stream() - .filter(appSchoolId -> !existingAppIds.contains(appSchoolId)) - .toList(); - - // 상태 변경 - existingPayments.forEach(payment -> payment.changeStatus(event.status())); - - // 실패 신규 엔티티 생성 ( 배치 후속 처리 필요 ) - List newPayments = missingAppSchoolIds.stream() - .map(appSchoolId -> PaymentJpaEntity.ofFailure( - appSchoolId, - event.orderId(), - event.status(), - event.totalAmount())) - .toList(); - - paymentRepository.saveAll(existingPayments); - paymentRepository.saveAll(newPayments); - } -} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java index b7cd0419..72984901 100644 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java +++ b/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java @@ -1,25 +1,24 @@ package life.mosu.mosuserver.application.payment; -import static life.mosu.mosuserver.domain.discount.DiscountPolicy.FIXED_QUANTITY; - import java.util.List; -import life.mosu.mosuserver.domain.discount.DiscountPolicy; +import life.mosu.mosuserver.application.payment.processor.TossPaymentProcessor; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaRepository; import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; -import life.mosu.mosuserver.domain.payment.PaymentRepository; -import life.mosu.mosuserver.infra.payment.TossPaymentClient; +import life.mosu.mosuserver.domain.payment.PaymentJpaRepository; +import life.mosu.mosuserver.domain.payment.service.PaymentAmountCalculator; +import life.mosu.mosuserver.domain.payment.service.PaymentMapper; +import life.mosu.mosuserver.domain.payment.service.PaymentOrderIdGenerator; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.infra.payment.dto.ConfirmTossPaymentResponse; -import life.mosu.mosuserver.presentation.payment.dto.CancelPaymentRequest; import life.mosu.mosuserver.presentation.payment.dto.PaymentPrepareResponse; import life.mosu.mosuserver.presentation.payment.dto.PaymentRequest; import life.mosu.mosuserver.presentation.payment.dto.PreparePaymentRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.retry.annotation.Recover; -import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.HttpStatusCodeException; /** * 영속화 처리 이미 들어올 때 할인 정책을 포함해야함 @@ -29,135 +28,63 @@ @RequiredArgsConstructor public class PaymentService { - // private final ApplicationSchoolJpaRepository applicationSchoolJpaRepository; - private final TossPaymentClient tossPayment; - private final OrderIdGenerator orderIdGenerator; - private final PaymentRepository paymentRepository; - private final ApplicationEventPublisher publisher; + private final TossPaymentProcessor tossProcessor; + private final PaymentAmountCalculator amountCalculator; + private final PaymentMapper paymentMapper; + private final PaymentJpaRepository paymentJpaRepository; + private final ExamApplicationJpaRepository examApplicationJpaRepository; + private final PaymentOrderIdGenerator orderIdGenerator; - public PaymentPrepareResponse prepare(PreparePaymentRequest request) { - /** - * 인원 수 redis에 동기화 -> 인원수가 넘어가면, application 까지 rollback - */ - String uuid = orderIdGenerator.generate(); -// int applicationCount = request.getSize(); -// int totalAmount = DiscountPolicy.calculate(FIXED_QUANTITY, applicationCount); + private final PaymentEventTxService eventTxService; - return PaymentPrepareResponse.of(uuid, 0); + public PaymentPrepareResponse prepare(PreparePaymentRequest request) { + List applications = getValidApplications(request.applicationId()); + String orderId = orderIdGenerator.generate(); + int totalAmount = amountCalculator.calculateTotal(applications); + return PaymentPrepareResponse.of(orderId, totalAmount); } @Transactional - @Retryable(retryFor = {HttpStatusCodeException.class}) public void confirm(PaymentRequest request) { + List applications = getValidApplications(request.applicationId()); String orderId = request.orderId(); - List applicationSchoolIds = request.applicationSchoolIds(); - Integer amount = request.amount(); - try { - checkApplicationsExist(applicationSchoolIds); - verifyAmount(request.applicantSize(), request.amount()); - checkDuplicatePayment(orderId); - ConfirmTossPaymentResponse response = confirmPaymentWithToss(request); - List paymentEntities = mapToPaymentEntities(request, response); - verifyPaymentSuccess(paymentEntities); - savePayments(paymentEntities); - publisher.publishEvent(PaymentEvent.ofSuccess(applicationSchoolIds, orderId, amount)); - } catch (Exception ex) { - log.error("error : {}", ex.getMessage()); - publisher.publishEvent(PaymentEvent.ofFailed(applicationSchoolIds, orderId, amount)); - throw ex; - } - } - - @Recover - public void recoverConfirm() { - - } - - @Transactional - public void cancel(String paymentId, CancelPaymentRequest request) { - //환불이 가능한가? - tossPayment.cancelPayment(paymentId, request); - // 환불 정책 - // 영속화 해지할 필요 X - // 영속화 된 거에서 환불 상태로 변경 - } - - - private void checkApplicationsExist(List applicationIds) { -// boolean existsAll = applicationSchoolJpaRepository.existsAllByIds(applicationIds, -// applicationIds.size()); - boolean existsAll = true; - if (!existsAll) { - log.warn("Application IDs not found: {}", applicationIds); - throw new RuntimeException("존재하지 않는 신청입니다."); - } - } + int lunchAmount = amountCalculator.calculateLunchAmount(applications); + List examApplicationIds = applications.stream() + .map(ExamApplicationJpaEntity::getId) + .toList(); - private void verifyAmount(int applicationCount, int requestedAmount) { - int expectedAmount = DiscountPolicy.calculate(FIXED_QUANTITY, applicationCount); - if (requestedAmount != expectedAmount) { - log.warn("Payment amount mismatch: requested={}, expected={}", requestedAmount, - expectedAmount); - throw new RuntimeException("결제 금액이 올바르지 않습니다."); - } - } + try { + amountCalculator.verifyAmount(applications.size(), request.amount() + lunchAmount); + validateNoDuplicateOrderId(orderId); - private void checkDuplicatePayment(String orderId) { - if (paymentRepository.existsByOrderId(orderId)) { - log.warn("Duplicate payment orderId: {}", orderId); - throw new RuntimeException("이미 존재하는 결제 건 입니다."); - } - } + ConfirmTossPaymentResponse tossResponse = tossProcessor.execute(request); - private ConfirmTossPaymentResponse confirmPaymentWithToss(PaymentRequest request) { - try { - ConfirmTossPaymentResponse response = tossPayment.confirmPayment(request.toPayload()); + List payments = paymentMapper.toEntities( + examApplicationIds, + tossResponse + ); + paymentJpaRepository.saveAll(payments); - log.info("Toss payment confirmed successfully: orderId={}", request.orderId()); - return response; -// return new ConfirmTossPaymentResponse( -// "tviva20250702231345mODA4", // paymentKey -// "IDMAoki7azYp8SzQ06LMt12323235", // orderId -// "DONE", // status -// "2025-07-02T23:14:33+09:00", // approvedAt -// 1_000, // totalAmount -// 1_000, // balanceAmount -// 1_000, // suppliedAmount -// 1_000, // vat -// 1_000, // taxFreeAmount -// "간편결제" // method -// ); + eventTxService.publishSuccessEvent(examApplicationIds, orderId, request.amount()); } catch (Exception ex) { - log.error("Toss payment confirmation failed for orderId={}", request.orderId(), ex); - throw ex; // @Retryable 에 의해 재시도 됨 + log.error("결제 승인 실패: {}", ex.getMessage(), ex); + eventTxService.publishFailureEvent(examApplicationIds, orderId, request.amount()); + throw ex; // 롤백 유도 } } - private List mapToPaymentEntities(PaymentRequest request, - ConfirmTossPaymentResponse response) { - return request.applicationSchoolIds().stream() - .map(response::toEntity) - .toList(); - } - - private void verifyPaymentSuccess(List paymentEntities) { - List failedIds = paymentEntities.stream() - .filter(p -> !p.getPaymentStatus().isPaySuccess()) - .map(PaymentJpaEntity::getId) - .toList(); - if (!failedIds.isEmpty()) { - log.error("Payment failed for application IDs: {}", failedIds); - throw new RuntimeException("결제가 실패한 신청서가 있습니다: " + failedIds); + private List getValidApplications(Long applicationId) { + List applications = examApplicationJpaRepository.findByApplicationId( + applicationId); + if (applications.isEmpty()) { + throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND); } + return applications; } - private void savePayments(List paymentEntities) { - try { - paymentRepository.saveAll(paymentEntities); - log.info("Payment records saved for {} payments", paymentEntities.size()); - } catch (Exception ex) { - log.error("Failed to save payment records", ex); - throw ex; // 트랜잭션 롤백 유도 + private void validateNoDuplicateOrderId(String orderId) { + if (paymentJpaRepository.existsByOrderId(orderId)) { + throw new CustomRuntimeException(ErrorCode.PAYMENT_ALREADY_EXISTS); } } } diff --git a/src/main/java/life/mosu/mosuserver/application/payment/processor/PaymentProcessor.java b/src/main/java/life/mosu/mosuserver/application/payment/processor/PaymentProcessor.java new file mode 100644 index 00000000..bfb8e1cb --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/processor/PaymentProcessor.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.application.payment.processor; + +public interface PaymentProcessor { + + RES execute(REQ request); +} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/processor/TossPaymentProcessor.java b/src/main/java/life/mosu/mosuserver/application/payment/processor/TossPaymentProcessor.java new file mode 100644 index 00000000..c69752d8 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/processor/TossPaymentProcessor.java @@ -0,0 +1,23 @@ +package life.mosu.mosuserver.application.payment.processor; + +import life.mosu.mosuserver.infra.payment.TossPaymentClient; +import life.mosu.mosuserver.infra.payment.dto.ConfirmTossPaymentResponse; +import life.mosu.mosuserver.presentation.payment.dto.PaymentRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class TossPaymentProcessor implements + PaymentProcessor { + + private final TossPaymentClient tossPayment; + + public ConfirmTossPaymentResponse execute(PaymentRequest request) { + try { + return tossPayment.confirmPayment(request.toPayload()); + } catch (Exception ex) { + throw new RuntimeException("Toss 결제 실패", ex); + } + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentContext.java b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentContext.java new file mode 100644 index 00000000..d0852342 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentContext.java @@ -0,0 +1,39 @@ +package life.mosu.mosuserver.application.payment.tx; + +import java.util.List; +import life.mosu.mosuserver.domain.payment.PaymentStatus; + +public record PaymentContext( + List examSchoolIds, + String orderId, + Boolean isSuccess, + PaymentStatus status, + Integer totalAmount +) { + + public static PaymentContext ofSuccess( + List examSchoolIds, + String orderId, + Integer totalAmount) { + return new PaymentContext( + examSchoolIds, + orderId, + true, + PaymentStatus.DONE, + totalAmount + ); + } + + public static PaymentContext ofFailure( + List examSchoolIds, + String orderId, + Integer totalAmount) { + return new PaymentContext( + examSchoolIds, + orderId, + false, + PaymentStatus.ABORTED, + totalAmount + ); + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEvent.java b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEvent.java new file mode 100644 index 00000000..31b42c6c --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEvent.java @@ -0,0 +1,12 @@ +package life.mosu.mosuserver.application.payment.tx; + + +import life.mosu.mosuserver.global.tx.TxEvent; + + +public class PaymentTxEvent extends TxEvent { + + public PaymentTxEvent(boolean success, PaymentContext context) { + super(success, context); + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventFactory.java b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventFactory.java new file mode 100644 index 00000000..5301d8c6 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventFactory.java @@ -0,0 +1,14 @@ +package life.mosu.mosuserver.application.payment.tx; + +import life.mosu.mosuserver.global.tx.TxEvent; +import life.mosu.mosuserver.global.tx.TxEventFactory; +import org.springframework.stereotype.Component; + +@Component +public class PaymentTxEventFactory implements TxEventFactory { + + @Override + public TxEvent create(PaymentContext context) { + return new PaymentTxEvent(context.isSuccess(), context); + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventListener.java b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventListener.java new file mode 100644 index 00000000..3b9e0568 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxEventListener.java @@ -0,0 +1,29 @@ +package life.mosu.mosuserver.application.payment.tx; + +import life.mosu.mosuserver.global.tx.TxFailureHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Transactional(propagation = Propagation.NOT_SUPPORTED) +@Component +@Slf4j +@RequiredArgsConstructor +public class PaymentTxEventListener { + + private final TxFailureHandler paymentFailureHandler; + + @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK) + public void afterRollbackHandler(PaymentTxEvent event) { + PaymentContext ctx = event.getContext(); + log.warn("[AFTER_ROLLBACK] 롤백 후 처리 시작: orderId={}", ctx.orderId()); + paymentFailureHandler.handle(event); + log.info("[AFTER_ROLLBACK] 롤백 후 처리 완료: orderId={}", ctx.orderId()); + } + +} + diff --git a/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxFailureHandler.java b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxFailureHandler.java new file mode 100644 index 00000000..8c0f1adb --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/payment/tx/PaymentTxFailureHandler.java @@ -0,0 +1,51 @@ +package life.mosu.mosuserver.application.payment.tx; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; +import life.mosu.mosuserver.domain.payment.PaymentJpaRepository; +import life.mosu.mosuserver.global.tx.TxFailureHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@RequiredArgsConstructor +@Component +public class PaymentTxFailureHandler implements + TxFailureHandler { + + private final PaymentJpaRepository paymentJpaRepository; + + @Override + public void handle(PaymentTxEvent event) { + + PaymentContext ctx = event.getContext(); + List existingPayments = paymentJpaRepository + .findByOrderId(ctx.orderId()); + + Set existingAppIds = existingPayments.stream() + .map(PaymentJpaEntity::getExamApplicationId) + .collect(Collectors.toSet()); + + List missingExamSchoolIds = ctx.examSchoolIds().stream() + .filter(examSchoolId -> !existingAppIds.contains(examSchoolId)) + .toList(); + + existingPayments.forEach(payment -> payment.changeStatus(ctx.status())); + + // 실패 신규 엔티티 생성 ( 배치 후속 처리 필요 ) + List newPayments = missingExamSchoolIds.stream() + .map(examSchoolId -> PaymentJpaEntity.ofFailure( + examSchoolId, + ctx.orderId(), + ctx.status(), + ctx.totalAmount()) + ) + .toList(); + + paymentJpaRepository.saveAll(existingPayments); + paymentJpaRepository.saveAll(newPayments); + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/RefundEventTxService.java b/src/main/java/life/mosu/mosuserver/application/refund/RefundEventTxService.java new file mode 100644 index 00000000..438ec2a7 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/RefundEventTxService.java @@ -0,0 +1,43 @@ +package life.mosu.mosuserver.application.refund; + + +import life.mosu.mosuserver.application.refund.tx.RefundContext; +import life.mosu.mosuserver.application.refund.tx.RefundTxEventFactory; +import life.mosu.mosuserver.global.tx.TxEvent; +import life.mosu.mosuserver.global.tx.TxEventPublisher; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@RequiredArgsConstructor +public class RefundEventTxService { + + private final TxEventPublisher txEventPublisher; + private final RefundTxEventFactory eventFactory; + + @Transactional + public void publishSuccessEvent( + Long paymentId, + String orderId, + Integer totalAmount + ) { + TxEvent event = eventFactory.create( + RefundContext.ofSuccess(paymentId, orderId, totalAmount)); + txEventPublisher.publish(event); + } + + @Transactional + public void publishFailureEvent( + Long paymentId, + String orderId, + Integer totalAmount + ) { + TxEvent event = eventFactory.create( + RefundContext.ofFailure(paymentId, orderId, totalAmount)); + txEventPublisher.publish(event); + } +} + diff --git a/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java new file mode 100644 index 00000000..47d461ff --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java @@ -0,0 +1,20 @@ +package life.mosu.mosuserver.application.refund; + +import life.mosu.mosuserver.domain.refund.RefundJpaRepository; +import life.mosu.mosuserver.presentation.refund.dto.RefundRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class RefundService { + + private final RefundJpaRepository refundJpaRepository; + private final RefundEventTxService refundEventTxService; + + @Transactional + public void doProcess(String paymentKey, RefundRequest request) { + + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/processor/RefundProcessor.java b/src/main/java/life/mosu/mosuserver/application/refund/processor/RefundProcessor.java new file mode 100644 index 00000000..73093d71 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/processor/RefundProcessor.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.application.refund.processor; + +public interface RefundProcessor { + + RES execute(REQ request); +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/processor/TossRefundProcessor.java b/src/main/java/life/mosu/mosuserver/application/refund/processor/TossRefundProcessor.java new file mode 100644 index 00000000..d117e9aa --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/processor/TossRefundProcessor.java @@ -0,0 +1,25 @@ +package life.mosu.mosuserver.application.refund.processor; + +import life.mosu.mosuserver.infra.payment.TossPaymentClient; +import life.mosu.mosuserver.infra.payment.dto.CancelTossPaymentResponse; +import life.mosu.mosuserver.presentation.refund.dto.RefundRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class TossRefundProcessor implements + RefundProcessor { + + private final TossPaymentClient tossPayment; + + @Override + public CancelTossPaymentResponse execute(RefundRequest request) { + try { +// return tossPayment.cancelPayment(request.paymentKey(), request.toPayload()); + return null; + } catch (Exception ex) { + throw new RuntimeException("Toss 결제 실패", ex); + } + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundContext.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundContext.java new file mode 100644 index 00000000..731353fa --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundContext.java @@ -0,0 +1,39 @@ +package life.mosu.mosuserver.application.refund.tx; + +import life.mosu.mosuserver.domain.refund.RefundStatus; + +public record RefundContext( + Long paymentId, + String orderId, + Boolean isSuccess, + RefundStatus status, + Integer totalAmount +) { + + public static RefundContext ofSuccess( + Long paymentId, + String orderId, + Integer totalAmount + ) { + return new RefundContext( + paymentId, + orderId, + true, + RefundStatus.DONE, + totalAmount); + } + + public static RefundContext ofFailure( + Long paymentId, + String orderId, + Integer totalAmount + ) { + return new RefundContext( + paymentId, + orderId, + false, + RefundStatus.ABORTED, + totalAmount + ); + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEvent.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEvent.java new file mode 100644 index 00000000..16f6e3ea --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEvent.java @@ -0,0 +1,10 @@ +package life.mosu.mosuserver.application.refund.tx; + +import life.mosu.mosuserver.global.tx.TxEvent; + +public class RefundTxEvent extends TxEvent { + + public RefundTxEvent(boolean success, RefundContext context) { + super(success, context); + } +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventFactory.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventFactory.java new file mode 100644 index 00000000..16e2d0ee --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventFactory.java @@ -0,0 +1,15 @@ +package life.mosu.mosuserver.application.refund.tx; + + +import life.mosu.mosuserver.global.tx.TxEvent; +import life.mosu.mosuserver.global.tx.TxEventFactory; +import org.springframework.stereotype.Component; + +@Component +public class RefundTxEventFactory implements TxEventFactory { + + @Override + public TxEvent create(RefundContext context) { + return new RefundTxEvent(context.isSuccess(), context); + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java new file mode 100644 index 00000000..9129e8b3 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java @@ -0,0 +1,25 @@ +package life.mosu.mosuserver.application.refund.tx; + +import life.mosu.mosuserver.global.tx.TxFailureHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Component +@RequiredArgsConstructor +@Slf4j +public class RefundTxEventListener { + + private final TxFailureHandler refundFailureHandler; + + @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK) + public void afterRollbackHandler(RefundTxEvent event) { + RefundContext ctx = event.getContext(); + log.warn("[AFTER_ROLLBACK] 롤백 후 처리 시작: orderId={}", ctx.orderId()); + refundFailureHandler.handle(event); + log.info("[AFTER_ROLLBACK] 롤백 후 처리 완료: orderId={}", ctx.orderId()); + } + +} diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxFailureHandler.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxFailureHandler.java new file mode 100644 index 00000000..e69cc609 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxFailureHandler.java @@ -0,0 +1,14 @@ +package life.mosu.mosuserver.application.refund.tx; + +import life.mosu.mosuserver.global.tx.TxFailureHandler; +import org.springframework.stereotype.Component; + +@Component +public class RefundTxFailureHandler implements + TxFailureHandler { + + @Override + public void handle(RefundTxEvent event) { + + } +} diff --git a/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java b/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java index b66a7642..8adbf8b5 100644 --- a/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java +++ b/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java @@ -101,7 +101,7 @@ public List searchAllSchoolLunches() { .from(examApplication) .rightJoin(exam).on(examApplication.examId.eq(exam.id)) .rightJoin(application).on(application.id.eq(examApplication.applicationId)) - .rightJoin(payment).on(application.id.eq(payment.applicationId)) + .rightJoin(payment).on(examApplication.id.eq(payment.examApplicationId)) .where( examApplication.isLunchChecked.isTrue(), payment.paymentStatus.eq(PaymentStatus.DONE) @@ -142,7 +142,7 @@ private JPAQuery baseQuery() { .from(examApplication) .leftJoin(exam).on(examApplication.examId.eq(exam.id)) .leftJoin(application).on(examApplication.applicationId.eq(application.id)) - .leftJoin(payment).on(payment.applicationId.eq(application.id)) + .leftJoin(payment).on(payment.examApplicationId.eq(examApplication.id)) .leftJoin(user).on(application.userId.eq(user.id)) .leftJoin(profile).on(profile.userId.eq(user.id)) .leftJoin(examTicketImage) @@ -175,9 +175,9 @@ private Set findSubjectsByExamApplicationId(Long examApplicationId) { } private ApplicationListResponse mapToResponse(Tuple tuple, Set subjects) { - Set subjectNames = subjects.stream() + List subjectNames = subjects.stream() .map(Subject::getSubjectName) - .collect(Collectors.toSet()); + .toList(); String s3Key = tuple.get(examTicketImage.s3Key); String url = getAdmissionTicketImageUrl(s3Key); diff --git a/src/main/java/life/mosu/mosuserver/domain/application/ExamTicketImageJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/application/ExamTicketImageJpaRepository.java index 1d0c05ab..f5fd8ac6 100644 --- a/src/main/java/life/mosu/mosuserver/domain/application/ExamTicketImageJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/application/ExamTicketImageJpaRepository.java @@ -1,9 +1,10 @@ package life.mosu.mosuserver.domain.application; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface ExamTicketImageJpaRepository extends JpaRepository { - ExamTicketImageJpaEntity findByApplicationId(Long applicationId); + Optional findByApplicationId(Long applicationId); } diff --git a/src/main/java/life/mosu/mosuserver/domain/discount/FixedQuantityDiscountCalculator.java b/src/main/java/life/mosu/mosuserver/domain/discount/FixedQuantityDiscountCalculator.java index fb920157..0c797acd 100644 --- a/src/main/java/life/mosu/mosuserver/domain/discount/FixedQuantityDiscountCalculator.java +++ b/src/main/java/life/mosu/mosuserver/domain/discount/FixedQuantityDiscountCalculator.java @@ -1,7 +1,9 @@ package life.mosu.mosuserver.domain.discount; import java.util.Map; +import org.springframework.stereotype.Component; +@Component public class FixedQuantityDiscountCalculator implements DiscountCalculator { // 회차별 고정 할인 가격 (총 결제 금액 기준) @@ -18,4 +20,17 @@ public int calculateDiscount(int quantity) { } return FIXED_TOTAL_PRICE.get(quantity); } + + public int getAppliedDiscountAmount(int totalAmount) { + return FIXED_TOTAL_PRICE.entrySet() + .stream() + .filter(entry -> entry.getValue() == totalAmount) + .findFirst() + .map(entry -> { + int quantity = entry.getKey(); + int originalTotal = quantity * 49_000; + return originalTotal - totalAmount; + }) + .orElseThrow(() -> new IllegalArgumentException("해당 결제 금액에 대한 할인 정책이 없습니다.")); + } } diff --git a/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaEntity.java index 5f68b407..b35663f9 100644 --- a/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaEntity.java @@ -52,14 +52,22 @@ public class ExamJpaEntity { private Integer lunchPrice; @Builder - public ExamJpaEntity(String schoolName, AddressJpaVO address, Area area, Integer capacity, - LocalDateTime deadlineTime, LocalDate examDate, String lunchName, Integer lunchPrice) { + public ExamJpaEntity( + String schoolName, + AddressJpaVO address, + Area area, + LocalDate examDate, + Integer capacity, + LocalDateTime deadlineTime, + String lunchName, + Integer lunchPrice + ) { this.schoolName = schoolName; this.address = address; this.area = area; + this.examDate = examDate; this.capacity = capacity; this.deadlineTime = deadlineTime; - this.examDate = examDate; this.lunchName = lunchName; this.lunchPrice = lunchPrice; } diff --git a/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaRepository.java index 5577bd2f..84fbfdbf 100644 --- a/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/exam/ExamJpaRepository.java @@ -44,4 +44,5 @@ public interface ExamJpaRepository extends JpaRepository { """) List countApplicationsGroupedBySchoolName(); + List findByIdIn(List examIds); } diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationInfoProjection.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationInfoProjection.java new file mode 100644 index 00000000..c3f354c7 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationInfoProjection.java @@ -0,0 +1,20 @@ +package life.mosu.mosuserver.domain.examapplication; + +import java.time.LocalDate; +import life.mosu.mosuserver.domain.exam.AddressJpaVO; +import life.mosu.mosuserver.domain.payment.PaymentAmountVO; +import life.mosu.mosuserver.domain.payment.PaymentMethod; + +public record ExamApplicationInfoProjection( + Long examApplicationId, + String paymentKey, + LocalDate examDate, + String schoolName, + AddressJpaVO address, + Boolean isLunchChecked, + String lunchName, + PaymentAmountVO paymentAmount, + PaymentMethod paymentMethod +) { + +} diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaEntity.java index 0ffd5cbd..2067cf35 100644 --- a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaEntity.java @@ -6,16 +6,19 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import life.mosu.mosuserver.domain.base.BaseTimeEntity; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; @Getter @Entity @Table(name = "exam_application") +@Slf4j @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ExamApplicationJpaEntity { +public class ExamApplicationJpaEntity extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -28,22 +31,26 @@ public class ExamApplicationJpaEntity { private Long examId; @Column(name = "lunch_checked") - private boolean isLunchChecked; + private Boolean isLunchChecked; @Column(name = "exam_number") private String examNumber; + @Column(name = "deleted") + private Boolean isDeleted = false; + @Builder - public ExamApplicationJpaEntity(Long applicationId, Long examId, boolean isLunchChecked, - String examNumber) { + public ExamApplicationJpaEntity(Long applicationId, Long examId, + Boolean isLunchChecked) { this.applicationId = applicationId; this.examId = examId; this.isLunchChecked = isLunchChecked; - this.examNumber = examNumber; } - public static ExamApplicationJpaEntity create(Long applicationId, Long examId, - boolean isLunchChecked) { + public static ExamApplicationJpaEntity create( + Long applicationId, + Long examId, + Boolean isLunchChecked) { return ExamApplicationJpaEntity.builder() .applicationId(applicationId) .examId(examId) @@ -54,4 +61,4 @@ public static ExamApplicationJpaEntity create(Long applicationId, Long examId, public void grantExamNumber(String examNumber) { this.examNumber = examNumber; } -} +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaRepository.java index b3b6707e..757ded7d 100644 --- a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamApplicationJpaRepository.java @@ -1,11 +1,55 @@ package life.mosu.mosuserver.domain.examapplication; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; public interface ExamApplicationJpaRepository extends JpaRepository { List findByApplicationId(Long applicationId); + + @Query(""" + SELECT new life.mosu.mosuserver.domain.examapplication.ExamApplicationInfoProjection( + ea.id, + p.paymentKey, + e.examDate, + e.schoolName, + e.address, + ea.isLunchChecked, + e.lunchName, + p.paymentAmount, + p.paymentMethod + ) + FROM ExamApplicationJpaEntity ea + JOIN ExamJpaEntity e on ea.examId = e.id + JOIN PaymentJpaEntity p on p.examApplicationId = ea.id + WHERE ea.id = :examApplicationId + """) + Optional findExamApplicationInfoById(Long examApplicationId); + + + @Query(""" + SELECT new life.mosu.mosuserver.domain.examapplication.ExamTicketInfoProjection( + et.s3Key, + u.name, + u.birth, + ea.examNumber, + e.schoolName + ) + FROM ExamApplicationJpaEntity ea + LEFT JOIN ExamJpaEntity e on ea.examId = e.id + LEFT JOIN ApplicationJpaEntity a on a.id = ea.applicationId + LEFT JOIN ExamTicketImageJpaEntity et on et.applicationId = a.id + LEFT JOIN UserJpaEntity u on a.userId = u.id + WHERE ea.id = :examApplicationId + """) + Optional findExamTicketInfoProjectionById( + Long examApplicationId); + + boolean existsByApplicationId(Long applicationId); + + List findByApplicationIdIn(List applicationIds); } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamNumberGenerationService.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamNumberGenerationService.java deleted file mode 100644 index cf19bc18..00000000 --- a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamNumberGenerationService.java +++ /dev/null @@ -1,20 +0,0 @@ -package life.mosu.mosuserver.domain.examapplication; - -import java.util.List; -import java.util.UUID; -import org.springframework.stereotype.Component; - -@Component -public class ExamNumberGenerationService { - - public void grantTo(List examApplicationEntities) { - examApplicationEntities.forEach(examApplicationEntity -> { - String examNumber = generateExamNumber(); - examApplicationEntity.grantExamNumber(examNumber); - }); - } - - private String generateExamNumber() { - return UUID.randomUUID().toString(); - } -} diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamSubjectJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamSubjectJpaRepository.java index 001a788e..cd953daf 100644 --- a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamSubjectJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamSubjectJpaRepository.java @@ -8,4 +8,6 @@ public interface ExamSubjectJpaRepository extends JpaRepository findByExamApplicationId(Long examApplicationId); void deleteByExamApplicationId(Long examApplicationId); + + List findByExamApplicationIdIn(List examApplicationIds); } diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamTicketInfoProjection.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamTicketInfoProjection.java new file mode 100644 index 00000000..fce6500d --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/ExamTicketInfoProjection.java @@ -0,0 +1,13 @@ +package life.mosu.mosuserver.domain.examapplication; + +import java.time.LocalDate; + +public record ExamTicketInfoProjection( + String s3Key, + String userName, + LocalDate birth, + String examNumber, + String schoolName +) { + +} diff --git a/src/main/java/life/mosu/mosuserver/domain/examapplication/service/ExamNumberGenerationService.java b/src/main/java/life/mosu/mosuserver/domain/examapplication/service/ExamNumberGenerationService.java new file mode 100644 index 00000000..59a1f37f --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/examapplication/service/ExamNumberGenerationService.java @@ -0,0 +1,22 @@ +package life.mosu.mosuserver.domain.examapplication.service; + +import java.util.List; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; +import life.mosu.mosuserver.global.NumberGenerator; +import org.springframework.stereotype.Component; + +@Component +public class ExamNumberGenerationService implements NumberGenerator { + + public void grantTo(List examApplicationEntities) { + examApplicationEntities.forEach(examApplicationEntity -> { + String examNumber = generate(); + examApplicationEntity.grantExamNumber(examNumber); + }); + } + + @Override + public String generate() { + return ""; + } +} diff --git a/src/main/java/life/mosu/mosuserver/domain/lunch/LunchJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/lunch/LunchJpaRepository.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java index 16ea29e5..0e7ace3b 100644 --- a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java @@ -26,8 +26,8 @@ public class PaymentJpaEntity extends BaseTimeEntity { @Column(name = "payment_id") private Long id; - @Column(name = "application_id") - private Long applicationId; + @Column(name = "exam_application_id") + private Long examApplicationId; @Column(name = "payment_key") private String paymentKey; @@ -48,14 +48,14 @@ public class PaymentJpaEntity extends BaseTimeEntity { @Builder(access = AccessLevel.PRIVATE) private PaymentJpaEntity( - Long applicationId, + Long examApplicationId, String paymentKey, String orderId, PaymentAmountVO paymentAmount, PaymentStatus paymentStatus, PaymentMethod paymentMethod ) { - this.applicationId = applicationId; + this.examApplicationId = examApplicationId; this.paymentKey = paymentKey; this.orderId = orderId; this.paymentAmount = paymentAmount; @@ -64,7 +64,7 @@ private PaymentJpaEntity( } public static PaymentJpaEntity of( - Long applicationId, + Long examApplicationId, String paymentKey, String orderId, PaymentStatus paymentStatus, @@ -72,7 +72,7 @@ public static PaymentJpaEntity of( PaymentMethod paymentMethod ) { return PaymentJpaEntity.builder() - .applicationId(applicationId) + .examApplicationId(examApplicationId) .paymentKey(paymentKey) .orderId(orderId) .paymentStatus(paymentStatus) @@ -82,14 +82,14 @@ public static PaymentJpaEntity of( } public static PaymentJpaEntity ofFailure( - Long applicationId, + Long examApplicationId, String orderId, PaymentStatus paymentStatus, Integer totalAmount ) { PaymentAmountVO paymentAmount = PaymentAmountVO.ofFailure(totalAmount); return PaymentJpaEntity.builder() - .applicationId(applicationId) + .examApplicationId(examApplicationId) .orderId(orderId) .paymentStatus(paymentStatus) .paymentAmount(paymentAmount) diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentRepository.java b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaRepository.java similarity index 54% rename from src/main/java/life/mosu/mosuserver/domain/payment/PaymentRepository.java rename to src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaRepository.java index 084863c2..9646d6fb 100644 --- a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaRepository.java @@ -3,10 +3,14 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; -public interface PaymentRepository extends JpaRepository { +public interface PaymentJpaRepository extends JpaRepository { // TODO:인덱스 처리 필요(풀스캔 위험) boolean existsByOrderId(String orderId); List findByOrderId(String orderId); + + PaymentJpaEntity findByExamApplicationId(Long examApplicationId); + + List findByExamApplicationIdIn(List examApplicationIds); } diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentAmountCalculator.java b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentAmountCalculator.java new file mode 100644 index 00000000..a0351866 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentAmountCalculator.java @@ -0,0 +1,30 @@ +package life.mosu.mosuserver.domain.payment.service; + +import java.util.List; +import life.mosu.mosuserver.domain.discount.DiscountPolicy; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; +import org.springframework.stereotype.Component; + +@Component +public class PaymentAmountCalculator { + + private final static int LUNCH_AMOUNT = 9_000; + + public int calculateTotal(List applications) { + return calculateLunchAmount(applications) + + DiscountPolicy.calculate(DiscountPolicy.FIXED_QUANTITY, applications.size()); + } + + public int calculateLunchAmount(List applications) { + return (int) applications.stream().filter(ExamApplicationJpaEntity::getIsLunchChecked) + .count() + * LUNCH_AMOUNT; + } + + public void verifyAmount(int applicationCount, int requestedAmount) { + int expected = DiscountPolicy.calculate(DiscountPolicy.FIXED_QUANTITY, applicationCount); + if (requestedAmount != expected) { + throw new RuntimeException("결제 금액이 올바르지 않습니다."); + } + } +} diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentMapper.java b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentMapper.java new file mode 100644 index 00000000..4e097966 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentMapper.java @@ -0,0 +1,15 @@ +package life.mosu.mosuserver.domain.payment.service; + +import java.util.List; +import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; +import life.mosu.mosuserver.infra.payment.dto.ConfirmTossPaymentResponse; +import org.springframework.stereotype.Component; + +@Component +public class PaymentMapper { + + public List toEntities(List examApplicationIds, + ConfirmTossPaymentResponse response) { + return examApplicationIds.stream().map(response::toEntity).toList(); + } +} diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentOrderIdGenerator.java b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentOrderIdGenerator.java new file mode 100644 index 00000000..80dd0dcd --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/payment/service/PaymentOrderIdGenerator.java @@ -0,0 +1,14 @@ +package life.mosu.mosuserver.domain.payment.service; + +import java.util.UUID; +import life.mosu.mosuserver.global.NumberGenerator; +import org.springframework.stereotype.Component; + +@Component +public class PaymentOrderIdGenerator implements NumberGenerator { + + @Override + public String generate() { + return UUID.randomUUID().toString(); + } +} diff --git a/src/main/java/life/mosu/mosuserver/domain/refund/RefundStatus.java b/src/main/java/life/mosu/mosuserver/domain/refund/RefundStatus.java new file mode 100644 index 00000000..c4752a05 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/refund/RefundStatus.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.domain.refund; + +public enum RefundStatus { + ABORTED, + DONE +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/NumberGenerator.java b/src/main/java/life/mosu/mosuserver/global/NumberGenerator.java new file mode 100644 index 00000000..6043c8ad --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/NumberGenerator.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.global; + +public interface NumberGenerator { + + String generate(); +} diff --git a/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java b/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java index 2d0f37c6..0a662273 100644 --- a/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java +++ b/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java @@ -39,7 +39,8 @@ public class SecurityConfig { "http://localhost:8080", "https://mosuedu.com", "http://api.mosuedu.com", - "https://api.mosuedu.com" + "https://api.mosuedu.com", + "https://www.mosuedu.com" ); private final OAuthUserService userService; private final OAuth2LoginSuccessHandler loginSuccessHandler; diff --git a/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java b/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java index de2ba092..df3da4ce 100644 --- a/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java +++ b/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java @@ -24,8 +24,12 @@ public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS") .allowedHeaders("*") - .allowedOrigins("http://localhost:3000", "http://localhost:8080", - "http://api.mosuedu.com", "https://api.mosuedu.com") + .allowedOrigins( + "http://localhost:3000", + "http://localhost:8080", + "http://api.mosuedu.com", + "https://api.mosuedu.com", + "https://www.mosuedu.com") .allowCredentials(true) .maxAge(3600); } diff --git a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java index b2989c14..b8896a0d 100644 --- a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java +++ b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java @@ -35,6 +35,8 @@ public enum ErrorCode { WRONG_LUNCH_TYPE(HttpStatus.BAD_REQUEST, "잘못된 도시락명 입니다."), WRONG_AREA_TYPE(HttpStatus.BAD_REQUEST, "잘못된 지역명 입니다."), + // 수험표 관련 에러 + // 신청 학교 관련 에러 EXAM_APPLICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "신청한 학교 정보를 찾을 수 없습니다."), APPLICATION_SCHOOL_LIST_NOT_FOUND(HttpStatus.NOT_FOUND, "신청한 학교 목록을 찾을 수 없습니다."), @@ -100,9 +102,12 @@ public enum ErrorCode { //lunch 관련 LUNCH_NOT_FOUND(HttpStatus.NOT_FOUND, "점심 정보를 찾을 수 없습니다."), - LUNCH_PRICE_UPDATE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "가격 수정에 실패하였습니다."); - + LUNCH_PRICE_UPDATE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "가격 수정에 실패하였습니다."), + LUNCH_SELECTION_INVALID(HttpStatus.BAD_REQUEST, "점심이 등록되지 않은 시험에 점심 신청을 할 수 없습니다."), + //payment 관련 + PAYMENT_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 존재하는 결제 건 입니다."), + PAYMENT_FAILED(HttpStatus.CONFLICT, "결제에 실패하였습니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java index 13889c0f..b7c1b516 100644 --- a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java +++ b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java @@ -31,8 +31,8 @@ import life.mosu.mosuserver.domain.notice.NoticeJpaRepository; import life.mosu.mosuserver.domain.payment.PaymentAmountVO; import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; +import life.mosu.mosuserver.domain.payment.PaymentJpaRepository; import life.mosu.mosuserver.domain.payment.PaymentMethod; -import life.mosu.mosuserver.domain.payment.PaymentRepository; import life.mosu.mosuserver.domain.payment.PaymentStatus; import life.mosu.mosuserver.domain.profile.Education; import life.mosu.mosuserver.domain.profile.Gender; @@ -62,7 +62,7 @@ public class DatabaseInitializer { private final ApplicationJpaRepository applicationRepository; private final ExamApplicationJpaRepository examApplicationRepository; private final ExamSubjectJpaRepository examSubjectRepository; - private final PaymentRepository paymentRepository; + private final PaymentJpaRepository paymentRepository; private final NoticeJpaRepository noticeRepository; private final InquiryJpaRepository inquiryRepository; private final InquiryAnswerJpaRepository inquiryAnswerRepository; @@ -219,8 +219,8 @@ private void initializeApplicationsAndPayments(List users, ExamApplicationJpaEntity.builder() .applicationId(application.getId()) .examId(exam.getId()) - .examNumber(String.format("MOSU-%d-%d", application.getId(), - exam.getId())) +// .examNumber(String.format("MOSU-%d-%d", application.getId(), +// exam.getId())) .isLunchChecked( ((j % 2 == 0) ? true : false) ) diff --git a/src/main/java/life/mosu/mosuserver/global/tx/DefaultTxEventPublisher.java b/src/main/java/life/mosu/mosuserver/global/tx/DefaultTxEventPublisher.java new file mode 100644 index 00000000..808d4fb5 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/tx/DefaultTxEventPublisher.java @@ -0,0 +1,18 @@ +package life.mosu.mosuserver.global.tx; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DefaultTxEventPublisher implements TxEventPublisher { + + private final ApplicationEventPublisher publisher; + + @Override + public ApplicationEventPublisher publisher() { + return publisher; + } + +} diff --git a/src/main/java/life/mosu/mosuserver/global/tx/TxEvent.java b/src/main/java/life/mosu/mosuserver/global/tx/TxEvent.java new file mode 100644 index 00000000..f5a73e87 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/tx/TxEvent.java @@ -0,0 +1,20 @@ +package life.mosu.mosuserver.global.tx; + +public abstract class TxEvent { + + private final boolean success; + private final T context; + + protected TxEvent(boolean success, T context) { + this.success = success; + this.context = context; + } + + public boolean isSuccess() { + return success; + } + + public T getContext() { + return context; + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/tx/TxEventFactory.java b/src/main/java/life/mosu/mosuserver/global/tx/TxEventFactory.java new file mode 100644 index 00000000..77bc9545 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/tx/TxEventFactory.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.global.tx; + +public interface TxEventFactory { + + TxEvent create(T context); +} diff --git a/src/main/java/life/mosu/mosuserver/global/tx/TxEventPublisher.java b/src/main/java/life/mosu/mosuserver/global/tx/TxEventPublisher.java new file mode 100644 index 00000000..ee4088d8 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/tx/TxEventPublisher.java @@ -0,0 +1,12 @@ +package life.mosu.mosuserver.global.tx; + +import org.springframework.context.ApplicationEventPublisher; + +public interface TxEventPublisher { + + ApplicationEventPublisher publisher(); + + default void publish(T event) { + publisher().publishEvent(event); + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/tx/TxFailureHandler.java b/src/main/java/life/mosu/mosuserver/global/tx/TxFailureHandler.java new file mode 100644 index 00000000..1c3b0d99 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/tx/TxFailureHandler.java @@ -0,0 +1,6 @@ +package life.mosu.mosuserver.global.tx; + +public interface TxFailureHandler { + + void handle(E event); +} diff --git a/src/main/java/life/mosu/mosuserver/infra/payment/dto/ConfirmTossPaymentResponse.java b/src/main/java/life/mosu/mosuserver/infra/payment/dto/ConfirmTossPaymentResponse.java index 93883486..97fdde2e 100644 --- a/src/main/java/life/mosu/mosuserver/infra/payment/dto/ConfirmTossPaymentResponse.java +++ b/src/main/java/life/mosu/mosuserver/infra/payment/dto/ConfirmTossPaymentResponse.java @@ -27,9 +27,9 @@ public class ConfirmTossPaymentResponse { private Integer taxFreeAmount; private String method; - public PaymentJpaEntity toEntity(Long applicationId) { + public PaymentJpaEntity toEntity(Long examApplicationId) { return PaymentJpaEntity.of( - applicationId, + examApplicationId, paymentKey, orderId, toPaymentStatus(), diff --git a/src/main/java/life/mosu/mosuserver/infra/property/S3Properties.java b/src/main/java/life/mosu/mosuserver/infra/property/S3Properties.java index 40e5826c..4b24fd0d 100644 --- a/src/main/java/life/mosu/mosuserver/infra/property/S3Properties.java +++ b/src/main/java/life/mosu/mosuserver/infra/property/S3Properties.java @@ -12,10 +12,12 @@ @Slf4j public class S3Properties { - private int presignedUrlExpirationMinutes; + private String bucketName; + private int preSignedUrlExpirationMinutes; @PostConstruct public void init() { - log.info("S3 Properties Loaded. Expiration Time: {}", presignedUrlExpirationMinutes); + log.info("S3 Properties Loaded. buckName: {}", bucketName); + log.info("S3 Properties Loaded. Expiration Time: {}", preSignedUrlExpirationMinutes); } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/infra/respository/BulkRepository.java b/src/main/java/life/mosu/mosuserver/infra/respository/BulkRepository.java deleted file mode 100644 index e389cfe5..00000000 --- a/src/main/java/life/mosu/mosuserver/infra/respository/BulkRepository.java +++ /dev/null @@ -1,91 +0,0 @@ -//package life.mosu.mosuserver.infra.respository; -// -//import java.sql.PreparedStatement; -//import java.sql.ResultSet; -//import java.sql.SQLException; -//import java.sql.Statement; -//import java.sql.Timestamp; -//import java.time.LocalDateTime; -//import java.util.ArrayList; -//import java.util.List; -//import life.mosu.mosuserver.domain.application.Subject; -//import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; -//import life.mosu.mosuserver.global.exception.CustomRuntimeException; -//import life.mosu.mosuserver.global.exception.ErrorCode; -//import lombok.RequiredArgsConstructor; -//import org.springframework.dao.DataAccessException; -//import org.springframework.jdbc.core.ConnectionCallback; -//import org.springframework.jdbc.core.JdbcTemplate; -//import org.springframework.stereotype.Repository; -//import org.springframework.transaction.annotation.Transactional; -// -//@Repository -//@RequiredArgsConstructor -//public class ExamApplicationBulkRepository { -// -// private static final String SQL_INSERT_EXAM_APPLICATION = """ -// INSERT INTO exam_application -// (created_at, updated_at, application_id, user_id, -// examId, examination_number) -// VALUES (?,?,?,?,?,?) -// """; -// private static final String SQL_INSERT_SUBJECT = """ -// INSERT INTO exam_subject (exam_application_id, subjects) VALUES (?, ?) -// """; -// private final JdbcTemplate jdbcTemplate; -// -// -// @Transactional -// public List saveAllExamApplicationsWithSubjects( -// List entities) { -// -// List generatedIds = jdbcTemplate.execute((ConnectionCallback>) con -> { -// try (PreparedStatement ps = con.prepareStatement( -// SQL_INSERT_EXAM_APPLICATION, Statement.RETURN_GENERATED_KEYS)) { -// for (ExamApplicationJpaEntity e : entities) { -// ps.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now())); -// ps.setTimestamp(2, Timestamp.valueOf(LocalDateTime.now())); -// ps.setLong(3, e.getApplicationId()); -// ps.setLong(4, e.getUserId()); -// ps.setLong(5, e.examId()); -// ps.setString(6, e.getExaminationNumber()); -// ps.addBatch(); -// } -// -// ps.executeBatch(); -// -// List ids = new ArrayList<>(); -// try (ResultSet rs = ps.getGeneratedKeys()) { -// while (rs.next()) { -// ids.add(rs.getLong(1)); -// } -// } -// return ids; -// -// } catch (SQLException e) { -// throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_MULTI_INSERT_ERROR); -// } -// }); -// -// List subjectParams = new ArrayList<>(); -// -// for (int i = 0; i < entities.size(); i++) { -// Long applicationSchoolId = generatedIds.get(i); -// -// for (Subject subj : entities.get(i).getSubjects()) { -// subjectParams.add(new Object[]{applicationSchoolId, String.valueOf(subj)}); -// } -// } -// -// try { -// if (!subjectParams.isEmpty()) { -// jdbcTemplate.batchUpdate(SQL_INSERT_SUBJECT, subjectParams); -// } -// } catch (DataAccessException e) { -// throw new CustomRuntimeException(ErrorCode.EXAM_SUBJECT_MULTI_INSERT_ERROR); -// } -// -// return generatedIds; -// } -// -//} diff --git a/src/main/java/life/mosu/mosuserver/infra/respository/ExamApplicationBulkRepository.java b/src/main/java/life/mosu/mosuserver/infra/respository/ExamApplicationBulkRepository.java new file mode 100644 index 00000000..53136cb6 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/infra/respository/ExamApplicationBulkRepository.java @@ -0,0 +1,96 @@ +package life.mosu.mosuserver.infra.respository; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import life.mosu.mosuserver.domain.application.Subject; +import life.mosu.mosuserver.domain.examapplication.ExamApplicationJpaEntity; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.ConnectionCallback; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Repository +@RequiredArgsConstructor +public class ExamApplicationBulkRepository { + + private static final String SQL_INSERT_EXAM_APPLICATION = """ + INSERT INTO exam_application + (created_at, updated_at, application_id, + exam_id, lunch_checked, exam_number) + VALUES (?, ?, ?, ?, ?, ?) + """; + private static final String SQL_INSERT_EXAM_SUBJECT = """ + INSERT INTO exam_subject (exam_application_id, subject) VALUES (?, ?) + """; + private final JdbcTemplate jdbcTemplate; + + + @Transactional + public List saveAllExamApplicationsWithSubjects( + List entities, Set subjects) { + + List generatedIds = jdbcTemplate.execute((ConnectionCallback>) con -> { + try (PreparedStatement ps = con.prepareStatement( + SQL_INSERT_EXAM_APPLICATION, Statement.RETURN_GENERATED_KEYS)) { + for (ExamApplicationJpaEntity e : entities) { + ps.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now())); + ps.setTimestamp(2, Timestamp.valueOf(LocalDateTime.now())); + ps.setLong(3, e.getApplicationId()); + ps.setLong(4, e.getExamId()); + ps.setBoolean(5, e.getIsLunchChecked()); + ps.setString(6, e.getExamNumber()); + ps.addBatch(); + } + + ps.executeBatch(); + + List ids = new ArrayList<>(); + try (ResultSet rs = ps.getGeneratedKeys()) { + while (rs.next()) { + ids.add(rs.getLong(1)); + } + } + return ids; + + } catch (SQLException e) { + log.info("SQL Exception : {}", e); + throw new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_MULTI_INSERT_ERROR); + + } + }); + + List subjectParams = new ArrayList<>(); + + for (int i = 0; i < entities.size(); i++) { + Long examApplicationId = generatedIds.get(i); + + for (Subject subj : subjects) { + subjectParams.add(new Object[]{examApplicationId, String.valueOf(subj)}); + } + } + + try { + if (!subjectParams.isEmpty()) { + jdbcTemplate.batchUpdate(SQL_INSERT_EXAM_SUBJECT, subjectParams); + } + } catch (DataAccessException e) { + throw new CustomRuntimeException(ErrorCode.EXAM_SUBJECT_MULTI_INSERT_ERROR); + } + + return generatedIds; + } + +} diff --git a/src/main/java/life/mosu/mosuserver/infra/storage/application/S3Service.java b/src/main/java/life/mosu/mosuserver/infra/storage/application/S3Service.java index 415d7962..17ab2703 100644 --- a/src/main/java/life/mosu/mosuserver/infra/storage/application/S3Service.java +++ b/src/main/java/life/mosu/mosuserver/infra/storage/application/S3Service.java @@ -12,7 +12,6 @@ import life.mosu.mosuserver.infra.storage.presentation.dto.FileUploadResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import software.amazon.awssdk.core.sync.RequestBody; @@ -36,13 +35,6 @@ public class S3Service { private final S3Presigner s3Presigner; private final S3Properties s3Properties; - @Value("${aws.s3.bucket-name}") - private String bucketName; - - @Value("${aws.s3.presigned-url-expiration-minutes}") - private int preSignedUrlExpirationMinutes; - - public FileUploadResponse uploadFile(MultipartFile file, Folder folder) { String sanitizedName = sanitizeFileName(file.getOriginalFilename()); String s3Key = folder.getPath() + "/" + UUID.randomUUID() + "_" + sanitizedName; @@ -50,7 +42,7 @@ public FileUploadResponse uploadFile(MultipartFile file, Folder folder) { try { s3Client.putObject( PutObjectRequest.builder() - .bucket(bucketName) + .bucket(s3Properties.getBucketName()) .key(s3Key) .tagging("status=temp") .contentType(file.getContentType()) @@ -65,11 +57,11 @@ public FileUploadResponse uploadFile(MultipartFile file, Folder folder) { return FileUploadResponse.of(file.getOriginalFilename(), s3Key); } - + public void deleteFile(File file) { try { s3Client.deleteObject(DeleteObjectRequest.builder() - .bucket(bucketName) + .bucket(s3Properties.getBucketName()) .key(file.getS3Key()) .build()); } catch (S3Exception e) { @@ -79,7 +71,7 @@ public void deleteFile(File file) { public void updateFileTagToActive(String key) { PutObjectTaggingRequest tagReq = PutObjectTaggingRequest.builder() - .bucket(bucketName) + .bucket(s3Properties.getBucketName()) .key(key) .tagging(Tagging.builder() .tagSet(List.of(Tag.builder().key("status").value("active").build())) @@ -96,16 +88,16 @@ public String getUrl(File file) { } public String getPublicUrl(String s3Key) { - return String.format("https://%s.s3.amazonaws.com/%s", bucketName, s3Key); + return String.format("https://%s.s3.amazonaws.com/%s", s3Properties.getBucketName(), s3Key); } public String getPreSignedUrl(String s3Key) { GetObjectRequest getObjectRequest = GetObjectRequest.builder() - .bucket(bucketName) + .bucket(s3Properties.getBucketName()) .key(s3Key) .build(); Duration expirationDuration = Duration.ofMinutes( - s3Properties.getPresignedUrlExpirationMinutes() + s3Properties.getPreSignedUrlExpirationMinutes() ); GetObjectPresignRequest preSignRequest = GetObjectPresignRequest.builder() .getObjectRequest(getObjectRequest) diff --git a/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ApplicationListResponse.java b/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ApplicationListResponse.java index ffb9bb0a..79b75f13 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ApplicationListResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ApplicationListResponse.java @@ -3,7 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Set; +import java.util.List; import life.mosu.mosuserver.domain.payment.PaymentMethod; import life.mosu.mosuserver.domain.payment.PaymentStatus; @@ -44,7 +44,7 @@ public record ApplicationListResponse( Boolean lunch, @Schema(description = "응시 과목 목록", example = "[\"생활과 윤리\", \"정치와 법\"]") - Set subjects, + List subjects, @Schema(description = "시험 학교 이름", example = "서울고등학교") String examSchoolName, diff --git a/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ExamTicketResponse.java b/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ExamTicketResponse.java index 4c78e977..cc2f4e18 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ExamTicketResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/admin/dto/ExamTicketResponse.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; -import java.util.Set; +import java.util.List; public record ExamTicketResponse( @Schema(description = "수험표 이미지 URL", example = "https://s3.amazonaws.com/bucket/admission/2025-00001.jpg") @@ -18,7 +18,7 @@ public record ExamTicketResponse( String examNumber, @Schema(description = "응시 과목 목록", example = "[\"생명과학\", \"지구과학\"]") - Set subjects, + List subjects, @Schema(description = "응시 학교명", example = "대치중학교") String schoolName @@ -29,7 +29,7 @@ public static ExamTicketResponse of( String userName, LocalDate birth, String examNumber, - Set subjects, + List subjects, String schoolName ) { return new ExamTicketResponse( @@ -41,4 +41,21 @@ public static ExamTicketResponse of( schoolName ); } + + public static ExamTicketResponse ofWithoutExamTicket( + String userName, + LocalDate birth, + String examNumber, + List subjects, + String schoolName) { + + return new ExamTicketResponse( + null, + userName, + birth, + examNumber, + subjects, + schoolName + ); + } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationController.java b/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationController.java index b4ff4fed..218e82af 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationController.java @@ -1,11 +1,13 @@ package life.mosu.mosuserver.presentation.application; import jakarta.validation.Valid; +import java.net.URI; import java.util.List; import life.mosu.mosuserver.application.application.ApplicationService; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.application.dto.ApplicationRequest; import life.mosu.mosuserver.presentation.application.dto.ApplicationResponse; +import life.mosu.mosuserver.presentation.application.dto.CreateApplicationResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -16,26 +18,35 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.util.UriComponentsBuilder; @Slf4j @RestController -@RequestMapping("/application") +@RequestMapping("/applications") @RequiredArgsConstructor public class ApplicationController implements ApplicationControllerDocs { private final ApplicationService applicationService; - //신청 @PostMapping // @PreAuthorize("isAuthenticated() and hasRole('USER')") - public ResponseEntity> apply( + public ResponseEntity> apply( @RequestParam Long userId, - @Valid @RequestBody ApplicationRequest request - ) { - ApplicationResponse response = applicationService.apply(userId, request); - return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "신청 성공", response)); + @Valid @RequestBody ApplicationRequest request, + UriComponentsBuilder uriComponentsBuilder) { + CreateApplicationResponse response = applicationService.apply(userId, request); + + URI location = uriComponentsBuilder + .path("/applications") + .queryParam("userId", response.applicationId()) + .build() + .toUri(); + + return ResponseEntity.created(location) + .body(ApiResponseWrapper.success(HttpStatus.OK, "신청 성공", response)); } + // TODO: 테스트 필요 //전체 신청 내역 조회 @GetMapping public ResponseEntity>> getApplications( diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationControllerDocs.java b/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationControllerDocs.java index 6ccae120..81ba9b3f 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationControllerDocs.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/ApplicationControllerDocs.java @@ -13,9 +13,11 @@ import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.application.dto.ApplicationRequest; import life.mosu.mosuserver.presentation.application.dto.ApplicationResponse; +import life.mosu.mosuserver.presentation.application.dto.CreateApplicationResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.util.UriComponentsBuilder; @Tag(name = "Application API", description = "신청 관련 API 명세") public interface ApplicationControllerDocs { @@ -24,12 +26,13 @@ public interface ApplicationControllerDocs { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "신청 성공") }) - ResponseEntity> apply( + ResponseEntity> apply( @Parameter(name = "userId", description = "사용자 ID", in = ParameterIn.QUERY) @RequestParam Long userId, @Parameter(description = "신청 요청 정보", required = true) - @Valid @RequestBody ApplicationRequest request + @Valid @RequestBody ApplicationRequest request, + UriComponentsBuilder uriComponentsBuilder ); @Operation(summary = "전체 신청 내역 조회", description = "사용자의 전체 신청 내역을 조회합니다.") diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationRequest.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationRequest.java index 9bc10d11..c2342896 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationRequest.java @@ -25,9 +25,7 @@ public record ApplicationRequest( @Schema(description = "시험 신청 Id 목록", required = true) @NotNull List examApplication, - /** - * ExamApplication = exam_id, lunch_id 를 포함하고 있음 - */ + @Schema(description = "약관 동의 정보", required = true) @NotNull AgreementRequest agreement, diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationResponse.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationResponse.java index 0d24fd97..9575eff4 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ApplicationResponse.java @@ -8,16 +8,12 @@ public record ApplicationResponse( @Schema(description = "신청 ID", example = "1") Long applicationId, - + @Schema(description = "시험 목록") - List exams + List exams ) { - public static ApplicationResponse of(Long applicationId) { - return new ApplicationResponse(applicationId, null); - } - - public static ApplicationResponse of(Long applicationId, List exams) { + public static ApplicationResponse of(Long applicationId, List exams) { return new ApplicationResponse(applicationId, exams); } } diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/CreateApplicationResponse.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/CreateApplicationResponse.java new file mode 100644 index 00000000..45ea7c73 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/CreateApplicationResponse.java @@ -0,0 +1,13 @@ +package life.mosu.mosuserver.presentation.application.dto; + +public record CreateApplicationResponse( + Long applicationId +) { + + public static CreateApplicationResponse of( + Long applicationId) { + return new CreateApplicationResponse( + applicationId); + } + +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationRequest.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationRequest.java index 2518e23a..25910415 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationRequest.java @@ -4,7 +4,7 @@ public record ExamApplicationRequest( Long examId, - boolean isLunchChecked + Boolean isLunchChecked ) { public TargetExam toTargetExam() { diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationResponse.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationResponse.java new file mode 100644 index 00000000..aa612c2c --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamApplicationResponse.java @@ -0,0 +1,38 @@ +package life.mosu.mosuserver.presentation.application.dto; + +import java.time.LocalDate; +import java.util.Set; + +public record ExamApplicationResponse( + Long examApplicationId, + String createdAt, + String paymentStatus, + Integer totalAmount, + String schoolName, + LocalDate examDate, + Set subjects, + String lunchName +) { + + public static ExamApplicationResponse of( + Long examApplicationId, + String createdAt, + String paymentStatus, + Integer totalAmount, + String schoolName, + LocalDate examDate, + Set subjects, + String lunchName + ) { + return new ExamApplicationResponse( + examApplicationId, + createdAt, + paymentStatus, + totalAmount, + schoolName, + examDate, + subjects, + lunchName + ); + } +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamWithSubjects.java b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamWithSubjects.java index 3d301512..f490c10d 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamWithSubjects.java +++ b/src/main/java/life/mosu/mosuserver/presentation/application/dto/ExamWithSubjects.java @@ -1,30 +1,31 @@ -package life.mosu.mosuserver.presentation.application.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; -import java.util.Set; - -@Schema(description = "시험 정보와 과목 정보") -public record ExamWithSubjects( - @Schema(description = "시험 신청 ID", example = "1") - Long examId, - - @Schema(description = "지역", example = "대치") - String area, - - @Schema(description = "시험 날짜", example = "2025-08-10") - LocalDate examDate, - - @Schema(description = "학교명", example = "대치중학교") - String schoolName, - - @Schema(description = "점심 메뉴", example = "신청 안 함") - String lunch, - - @Schema(description = "수험 번호", example = "20250001") - String examinationNumber, - - @Schema(description = "응시 과목 목록", example = "[\"생활과 윤리\", \"정치와 법\"]") - Set subjects -) { -} +//package life.mosu.mosuserver.presentation.application.dto; +// +//import io.swagger.v3.oas.annotations.media.Schema; +//import java.time.LocalDate; +//import java.util.Set; +// +//@Schema(description = "시험 정보와 과목 정보") +//public record ExamWithSubjects( +// @Schema(description = "시험 신청 ID", example = "1") +// Long examId, +// +// @Schema(description = "지역", example = "대치") +// String area, +// +// @Schema(description = "시험 날짜", example = "2025-08-10") +// LocalDate examDate, +// +// @Schema(description = "학교명", example = "대치중학교") +// String schoolName, +// +// @Schema(description = "점심 메뉴", example = "신청 안 함") +// String lunch, +// +// @Schema(description = "수험 번호", example = "20250001") +// String examNumber, +// +// @Schema(description = "응시 과목 목록", example = "[\"생활과 윤리\", \"정치와 법\"]") +// Set subjects +//) { +// +//} diff --git a/src/main/java/life/mosu/mosuserver/presentation/exam/ExamController.java b/src/main/java/life/mosu/mosuserver/presentation/exam/ExamController.java index 5aac2ca0..043473c9 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/exam/ExamController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/exam/ExamController.java @@ -2,7 +2,6 @@ import java.util.List; import life.mosu.mosuserver.application.exam.ExamService; -import life.mosu.mosuserver.domain.exam.Area; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.exam.dto.ExamRequest; import life.mosu.mosuserver.presentation.exam.dto.ExamResponse; @@ -33,6 +32,13 @@ public ResponseEntity> register( } + @GetMapping("/all") + public ResponseEntity>> getExams() { + List response = examService.getExams(); + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "전체 시험 정보 조회 성공", response)); + } + @GetMapping public ResponseEntity>> getByArea( @RequestParam String areaName @@ -43,8 +49,8 @@ public ResponseEntity>> getByArea( } @GetMapping("/areas") - public ResponseEntity>> getDistinctAreas() { - List response = examService.getDistinctAreas(); + public ResponseEntity>> getDistinctAreas() { + List response = examService.getDistinctAreas(); return ResponseEntity.ok( ApiResponseWrapper.success(HttpStatus.OK, "시험 지역 조회 성공", response)); } diff --git a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamRequest.java b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamRequest.java index 5d62295d..d908d33e 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamRequest.java @@ -13,7 +13,7 @@ public record ExamRequest( LocalDate examDate, Integer capacity, LocalDateTime deadlineTime, - ExamLunchRequest lunch + LunchRequest lunch ) { public ExamJpaEntity toEntity() { diff --git a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamResponse.java b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamResponse.java index 1a9b59bd..8d4efae6 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/ExamResponse.java @@ -3,15 +3,15 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; -import life.mosu.mosuserver.domain.exam.Area; import life.mosu.mosuserver.domain.exam.ExamJpaEntity; import life.mosu.mosuserver.presentation.common.AddressResponse; +import life.mosu.mosuserver.presentation.lunch.dto.LunchResponse; public record ExamResponse( Long id, String schoolName, AddressResponse address, - Area area, + String area, Integer capacity, LocalDateTime deadlineTime, LocalDate examDate, @@ -20,15 +20,16 @@ public record ExamResponse( public static ExamResponse from(ExamJpaEntity exam) { AddressResponse address = AddressResponse.from(exam.getAddress()); + LunchResponse lunch = LunchResponse.of(exam.getLunchName(), exam.getLunchPrice()); return new ExamResponse( exam.getId(), exam.getSchoolName(), address, - exam.getArea(), + exam.getArea().getAreaName(), exam.getCapacity(), exam.getDeadlineTime(), exam.getExamDate(), - LunchResponse.of(exam.getLunchName(), exam.getLunchPrice()) + lunch ); } diff --git a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchInfo.java b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchInfo.java new file mode 100644 index 00000000..13da3bc2 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchInfo.java @@ -0,0 +1,12 @@ +package life.mosu.mosuserver.presentation.exam.dto; + +public record LunchInfo( + String name, + Integer price +) { + + public static LunchInfo of(String name, Integer price) { + return new LunchInfo(name, price); + } + +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchRequest.java b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchRequest.java new file mode 100644 index 00000000..b43c96ec --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/exam/dto/LunchRequest.java @@ -0,0 +1,8 @@ +package life.mosu.mosuserver.presentation.exam.dto; + +public record LunchRequest( + String name, + Integer price +) { + +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/examapplication/ExamApplicationController.java b/src/main/java/life/mosu/mosuserver/presentation/examapplication/ExamApplicationController.java index 08553545..0eaab615 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/examapplication/ExamApplicationController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/examapplication/ExamApplicationController.java @@ -3,10 +3,12 @@ import life.mosu.mosuserver.application.examapplication.ExamApplicationService; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.admin.dto.ExamTicketResponse; +import life.mosu.mosuserver.presentation.examapplication.dto.ExamApplicationInfoResponse; import life.mosu.mosuserver.presentation.examapplication.dto.UpdateSubjectRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; @@ -22,6 +24,26 @@ public class ExamApplicationController { private final ExamApplicationService examApplicationService; + //TODO: 테스트 필요 + @GetMapping("{examApplicationId}") + public ResponseEntity> getApplication( + @PathVariable("examApplicationId") Long examApplicationId + ) { + ExamApplicationInfoResponse response = examApplicationService.getApplication( + examApplicationId); + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "신청 정보 조회를 완료하였습니다.", response)); + } + + @DeleteMapping("{examApplicationId}") + public ResponseEntity> deleteExamApplication( + @PathVariable("examApplicationId") Long examApplicationId + ) { + examApplicationService.deleteExamApplication(examApplicationId); + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "신청 정보 정상적으로 삭제되었습니다.")); + } + @PutMapping("{examApplicationId}/subjects") public ResponseEntity> updateSubjects( @PathVariable("examApplicationId") Long examApplicationId, @@ -36,8 +58,7 @@ public ResponseEntity> getExamTicket( @RequestParam Long userId, @PathVariable("examApplicationId") Long examApplicationId ) { - ExamTicketResponse response = examApplicationService.getExamTicket(userId, - examApplicationId); + ExamTicketResponse response = examApplicationService.getExamTicket(examApplicationId); return ResponseEntity.ok( ApiResponseWrapper.success(HttpStatus.OK, "수험표 발급을 완료했습니다.", response)); } diff --git a/src/main/java/life/mosu/mosuserver/presentation/examapplication/dto/ExamApplicationInfoResponse.java b/src/main/java/life/mosu/mosuserver/presentation/examapplication/dto/ExamApplicationInfoResponse.java new file mode 100644 index 00000000..6600cac1 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/examapplication/dto/ExamApplicationInfoResponse.java @@ -0,0 +1,45 @@ +package life.mosu.mosuserver.presentation.examapplication.dto; + +import java.time.LocalDate; +import java.util.Set; +import life.mosu.mosuserver.presentation.common.AddressResponse; + +public record ExamApplicationInfoResponse( + Long examApplicationId, + String paymentKey, + LocalDate examDate, + String schoolName, + AddressResponse address, + Set subjects, + String lunchName, + Integer paymentAmount, + Integer discountAmount, + String paymentMethod +) { + + public static ExamApplicationInfoResponse of( + Long examApplicationId, + String paymentKey, + LocalDate examDate, + String schoolName, + AddressResponse address, + Set subjects, + String lunchName, + Integer paymentAmount, + Integer discountAmount, + String paymentMethod + ) { + return new ExamApplicationInfoResponse( + examApplicationId, + paymentKey, + examDate, + schoolName, + address, + subjects, + lunchName, + paymentAmount, + discountAmount, + paymentMethod + ); + } +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/lunch/dto/LunchResponse.java b/src/main/java/life/mosu/mosuserver/presentation/lunch/dto/LunchResponse.java new file mode 100644 index 00000000..a07c2f96 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/lunch/dto/LunchResponse.java @@ -0,0 +1,11 @@ +package life.mosu.mosuserver.presentation.lunch.dto; + +public record LunchResponse( + String name, + Integer price +) { + + public static LunchResponse of(String name, Integer price) { + return new LunchResponse(name, price); + } +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/payment/PaymentWidgetController.java b/src/main/java/life/mosu/mosuserver/presentation/payment/PaymentWidgetController.java index 5fb50b48..4bfb20cc 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/payment/PaymentWidgetController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/payment/PaymentWidgetController.java @@ -48,7 +48,7 @@ public ApiResponseWrapper cancel( @PathVariable String paymentId, @RequestBody CancelPaymentRequest request ) { - paymentService.cancel(paymentId, request); +// paymentService.cancel(paymentId, request); return ApiResponseWrapper.success(HttpStatus.OK, "결제 취소 성공"); } } diff --git a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java index 08c744f5..e9ef0d68 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java @@ -1,11 +1,10 @@ package life.mosu.mosuserver.presentation.payment.dto; import jakarta.validation.constraints.NotNull; -import java.util.List; import life.mosu.mosuserver.infra.payment.dto.TossPaymentPayload; public record PaymentRequest( - @NotNull List applicationSchoolIds, + @NotNull Long applicationId, @NotNull String paymentKey, @NotNull String orderId, @NotNull Integer amount @@ -14,8 +13,4 @@ public record PaymentRequest( public TossPaymentPayload toPayload() { return new TossPaymentPayload(paymentKey, orderId, amount); } - - public int applicantSize() { - return applicationSchoolIds.size(); - } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java b/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java new file mode 100644 index 00000000..975763e0 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/refund/RefundController.java @@ -0,0 +1,30 @@ +package life.mosu.mosuserver.presentation.refund; + +import life.mosu.mosuserver.application.refund.RefundService; +import life.mosu.mosuserver.global.util.ApiResponseWrapper; +import life.mosu.mosuserver.presentation.refund.dto.RefundRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/refunds") +@RequiredArgsConstructor + +public class RefundController { + + private final RefundService refundService; + + @PostMapping("/{paymentKey}") + ResponseEntity> process( + @PathVariable("paymentKey") String paymentKey, + @RequestBody RefundRequest request) { + refundService.doProcess(paymentKey, request); + return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "결제 취소 성공")); + } +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundRequest.java b/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundRequest.java new file mode 100644 index 00000000..d46d893e --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/refund/dto/RefundRequest.java @@ -0,0 +1,9 @@ +package life.mosu.mosuserver.presentation.refund.dto; + +public record RefundRequest( + Long examId, + String refundReason, + Boolean isRefundAgreed +) { + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 840f38c9..7fc30058 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -62,7 +62,7 @@ aws: region: ${AWS_REGION} access-key: ${AWS_ACCESS_KEY} secret-key: ${AWS_SECRET_KEY} - presigned-url-expiration-minutes: ${S3_PRESIGNED_URL_EXPIRATION_MINUTES} + pre-signed-url-expiration-minutes: ${S3_PRESIGNED_URL_EXPIRATION_MINUTES} logging: file: diff --git a/src/test/java/life/mosu/mosuserver/discount/FixedQuantityDiscountCalculatorTest.java b/src/test/java/life/mosu/mosuserver/discount/FixedQuantityDiscountCalculatorTest.java index b448b94f..c1e8aaf5 100644 --- a/src/test/java/life/mosu/mosuserver/discount/FixedQuantityDiscountCalculatorTest.java +++ b/src/test/java/life/mosu/mosuserver/discount/FixedQuantityDiscountCalculatorTest.java @@ -16,6 +16,11 @@ void setUp() { calculator = new FixedQuantityDiscountCalculator(); } + @Test + void 할인률_역산() { + assertEquals(18_000, calculator.getAppliedDiscountAmount(129_000)); + } + @Test void 지원되는_회차에_대한_총_결제금액_계산() { assertEquals(49_000, calculator.calculateDiscount(1));