diff --git a/moamoa/.gitignore b/moamoa/.gitignore index 551fe0a..08dd79e 100644 --- a/moamoa/.gitignore +++ b/moamoa/.gitignore @@ -46,4 +46,7 @@ application-secret.properties ### 환경변수 파일 ### **/application-secret.properties -*.zip \ No newline at end of file +*.zip + +### logs ### +logs/ \ No newline at end of file diff --git a/moamoa/build.gradle b/moamoa/build.gradle index 746b15c..11b9b95 100644 --- a/moamoa/build.gradle +++ b/moamoa/build.gradle @@ -41,7 +41,6 @@ dependencies { runtimeOnly 'com.mysql:mysql-connector-j' implementation 'com.theokanning.openai-gpt3-java:service:0.18.2' - implementation 'com.amazonaws:aws-java-sdk-s3:1.12.112' // AWS S3 SDK 의존성 추가 } diff --git a/moamoa/logs/app.log b/moamoa/logs/app.log deleted file mode 100644 index 91adf3e..0000000 --- a/moamoa/logs/app.log +++ /dev/null @@ -1,351 +0,0 @@ -2025-05-28T00:18:30.661+09:00 INFO 76289 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Starting MoamoaApplication using Java 21.0.5 with PID 76289 (/Users/juhan/Desktop/project/BeArchive/moamoa/build/classes/java/main started by juhan in /Users/juhan/Desktop/project/BeArchive/moamoa) -2025-05-28T00:18:30.663+09:00 INFO 76289 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : No active profile set, falling back to 1 default profile: "default" -2025-05-28T00:18:31.162+09:00 INFO 76289 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-05-28T00:18:31.206+09:00 INFO 76289 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 39 ms. Found 6 JPA repository interfaces. -2025-05-28T00:18:31.566+09:00 INFO 76289 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2025-05-28T00:18:31.576+09:00 INFO 76289 --- [moamoa] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2025-05-28T00:18:31.576+09:00 INFO 76289 --- [moamoa] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.40] -2025-05-28T00:18:31.597+09:00 INFO 76289 --- [moamoa] [main] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring embedded WebApplicationContext -2025-05-28T00:18:31.597+09:00 INFO 76289 --- [moamoa] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 913 ms -2025-05-28T00:18:31.674+09:00 INFO 76289 --- [moamoa] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2025-05-28T00:18:31.704+09:00 INFO 76289 --- [moamoa] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.13.Final -2025-05-28T00:18:31.721+09:00 INFO 76289 --- [moamoa] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2025-05-28T00:18:31.864+09:00 INFO 76289 --- [moamoa] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2025-05-28T00:18:31.878+09:00 INFO 76289 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2025-05-28T00:18:32.116+09:00 INFO 76289 --- [moamoa] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@44a14de0 -2025-05-28T00:18:32.117+09:00 INFO 76289 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2025-05-28T00:18:32.166+09:00 WARN 76289 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000025: MySQL8Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-05-28T00:18:32.167+09:00 WARN 76289 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead -2025-05-28T00:18:32.174+09:00 INFO 76289 --- [moamoa] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: - Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] - Database driver: undefined/unknown - Database version: 8.0 - Autocommit mode: undefined/unknown - Isolation level: undefined/unknown - Minimum pool size: undefined/unknown - Maximum pool size: undefined/unknown -2025-05-28T00:18:32.672+09:00 INFO 76289 --- [moamoa] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-05-28T00:18:32.785+09:00 INFO 76289 --- [moamoa] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-05-28T00:18:33.228+09:00 WARN 76289 --- [moamoa] [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-05-28T00:18:33.267+09:00 DEBUG 76289 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerMapping : 21 mappings in 'requestMappingHandlerMapping' -2025-05-28T00:18:33.310+09:00 DEBUG 76289 --- [moamoa] [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Patterns [/webjars/**, /**] in 'resourceHandlerMapping' -2025-05-28T00:18:33.324+09:00 DEBUG 76289 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerAdapter : ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice -2025-05-28T00:18:33.354+09:00 DEBUG 76289 --- [moamoa] [main] .m.m.a.ExceptionHandlerExceptionResolver : ControllerAdvice beans: 1 @ExceptionHandler, 1 ResponseBodyAdvice -2025-05-28T00:18:33.451+09:00 INFO 76289 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/moamoa' -2025-05-28T00:18:33.457+09:00 INFO 76289 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Started MoamoaApplication in 3.032 seconds (process running for 3.629) -2025-05-28T00:18:34.068+09:00 INFO 76289 --- [moamoa] [http-nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-05-28T00:18:34.069+09:00 INFO 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2025-05-28T00:18:34.069+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver -2025-05-28T00:18:34.069+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected AcceptHeaderLocaleResolver -2025-05-28T00:18:34.069+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected FixedThemeResolver -2025-05-28T00:18:34.070+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@24c94e95 -2025-05-28T00:18:34.070+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.support.SessionFlashMapManager@2c5e2a44 -2025-05-28T00:18:34.070+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data -2025-05-28T00:18:34.071+09:00 INFO 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2025-05-28T00:18:34.076+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/moamoa/user/1/folder", parameters={} -2025-05-28T00:18:34.081+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.folder.web.controller.FolderController#getAllByFolder(Long) -2025-05-28T00:18:34.438+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:18:34.440+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=FolderSummaryRes[userId=1, folderSummeryList=[FolderSummary[fol (truncated)...] -2025-05-28T00:18:34.483+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:18:48.699+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : POST "/moamoa/folder/1/reference", parameters={multipart} -2025-05-28T00:18:48.750+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.reference.web.controller.ReferenceController#SaveReference(Long, SaveReferenceReq) -2025-05-28T00:18:48.858+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:18:48.858+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-3] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:18:48.858+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-3] c.l.m.g.e.GlobalExceptionHandler : 이미 존재하는 파일명입니다. -2025-05-28T00:18:48.861+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:18:48.861+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=409, data=null)] -2025-05-28T00:18:48.862+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.reference.exception.DuplicateImgNameException] -2025-05-28T00:18:48.863+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed 409 CONFLICT -2025-05-28T00:18:55.110+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : GET "/moamoa/folder/1/reference", parameters={multipart} -2025-05-28T00:18:55.170+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.reference.web.controller.ReferenceController#getAllReference(Long) -2025-05-28T00:18:55.355+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:18:55.362+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=ReferenceSummaryRes[folderId=1, referenceSummaryList=[Reference (truncated)...] -2025-05-28T00:18:55.375+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:19:02.132+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] o.s.web.servlet.DispatcherServlet : POST "/moamoa/recommendation", parameters={} -2025-05-28T00:19:02.136+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#createRecommendation(CreateRecommendationReq) -2025-05-28T00:19:02.165+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.likelion.moamoa.domain.recommendation.web.dto.CreateRecommendationReq@14251abc] -2025-05-28T00:19:02.206+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:19:02.206+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-5] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:19:02.206+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-5] c.l.m.g.e.GlobalExceptionHandler : 이미 추천질문이 존재합니다. -2025-05-28T00:19:02.206+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:19:02.206+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=409, data=null)] -2025-05-28T00:19:02.207+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.DuplicateRecommendationException] -2025-05-28T00:19:02.207+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-5] o.s.web.servlet.DispatcherServlet : Completed 409 CONFLICT -2025-05-28T00:19:06.184+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={multipart} -2025-05-28T00:19:06.194+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:19:06.207+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:19:06.207+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-6] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:19:06.207+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-6] c.l.m.g.e.GlobalExceptionHandler : 레퍼런스가 존재하지 않습니다. -2025-05-28T00:19:06.207+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:19:06.208+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:19:06.209+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException] -2025-05-28T00:19:06.209+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND -2025-05-28T00:19:10.050+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={multipart} -2025-05-28T00:19:10.056+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:19:10.073+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:19:10.073+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-7] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:19:10.073+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-7] c.l.m.g.e.GlobalExceptionHandler : 레퍼런스가 존재하지 않습니다. -2025-05-28T00:19:10.073+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:19:10.074+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:19:10.075+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException] -2025-05-28T00:19:10.075+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND -2025-05-28T00:19:16.872+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-8] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/1", parameters={multipart} -2025-05-28T00:19:16.885+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-8] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:19:16.918+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:19:16.927+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-8] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=RecommendationDetailRes[recommendationId=1, question=넷플릭스 드라마에서 (truncated)...] -2025-05-28T00:19:16.934+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-8] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:19:30.448+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : POST "/moamoa/chat", parameters={} -2025-05-28T00:19:30.451+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.chat.web.controller.ChatController#sendMessage(ChatMessageReq) -2025-05-28T00:19:30.460+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.likelion.moamoa.domain.chat.web.dto.ChatMessageReq@419140d2] -2025-05-28T00:19:30.643+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.client.RestTemplate : HTTP POST https://api.openai.com/v1/chat/completions -2025-05-28T00:19:30.650+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.client.RestTemplate : Accept=[application/json, application/cbor, application/*+json] -2025-05-28T00:19:30.651+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.client.RestTemplate : Writing [{max_tokens=200, temperature=0.7, messages=[{role=system, content=당신은 사용자의 창의적인 브레인스토밍을 적극적으로 돕는 AI 챗봇입니다. 사용자의 질문과 아이디어에 대해 단순히 정보를 제공하는 것을 넘어, 다양한 관점을 제시하고, 새로운 아이디어를 제안하며, 심층적인 질문을 통해 사용자의 생각을 확장하고 발전시키도록 유도하세요. 핵심은 '질문을 통해 다음 아이디어를 이끌어내는 것'입니다. 예를 들어, '이 아이디어의 장점은 무엇일까요?', '다른 방식으로 접근한다면?', '이 아이디어가 현실화될 때 예상되는 어려움은 무엇인가요?'와 같은 질문을 던지며 대화를 이어가세요. 당신은 항상 대화의 흐름을 주도하며 사용자의 아이디어가 구체화되고 풍부해지도록 돕습니다. 답변은 항상 완성된 문장으로 구성하며, 최대 4줄을 넘지 않도록 간결하게 작성해주세요. 현재 브레인스토밍 중인 추천 질문은 다음과 같습니다: 넷플릭스 드라마에서 백강혁의 역할이 시청자에게 깊은 인상을 남긴 이유는 무엇일까요?}, {role=user, content=다른 캐릭터들은 적자라고 싫어했던 백강혁을 나중에는 인정하게 돼 놀랍지?}, {role=user, content=다른 캐릭터들은 적자라고 싫어했던 백강혁을 나중에는 인정하게 돼 놀랍지?}], model=gpt-4o}] as "application/json" -2025-05-28T00:19:32.778+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.client.RestTemplate : Response 200 OK -2025-05-28T00:19:32.784+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.client.RestTemplate : Reading to [java.util.Map] -2025-05-28T00:19:32.821+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:19:32.822+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=201, data=ChatMessageRes[chatId=2, recommendationId=1, message=정말 흥미로운 전개 (truncated)...] -2025-05-28T00:19:32.830+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : Completed 201 CREATED -2025-05-28T00:20:23.202+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.servlet.DispatcherServlet : POST "/moamoa/chat", parameters={} -2025-05-28T00:20:23.208+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.chat.web.controller.ChatController#sendMessage(ChatMessageReq) -2025-05-28T00:20:23.212+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.likelion.moamoa.domain.chat.web.dto.ChatMessageReq@16a51767] -2025-05-28T00:20:23.557+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.client.RestTemplate : HTTP POST https://api.openai.com/v1/chat/completions -2025-05-28T00:20:23.558+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.client.RestTemplate : Accept=[application/json, application/cbor, application/*+json] -2025-05-28T00:20:23.558+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.client.RestTemplate : Writing [{max_tokens=200, temperature=0.7, messages=[{role=system, content=당신은 사용자의 창의적인 브레인스토밍을 적극적으로 돕는 AI 챗봇입니다. 사용자의 질문과 아이디어에 대해 단순히 정보를 제공하는 것을 넘어, 다양한 관점을 제시하고, 새로운 아이디어를 제안하며, 심층적인 질문을 통해 사용자의 생각을 확장하고 발전시키도록 유도하세요. 핵심은 '질문을 통해 다음 아이디어를 이끌어내는 것'입니다. 예를 들어, '이 아이디어의 장점은 무엇일까요?', '다른 방식으로 접근한다면?', '이 아이디어가 현실화될 때 예상되는 어려움은 무엇인가요?'와 같은 질문을 던지며 대화를 이어가세요. 당신은 항상 대화의 흐름을 주도하며 사용자의 아이디어가 구체화되고 풍부해지도록 돕습니다. 답변은 항상 완성된 문장으로 구성하며, 최대 4줄을 넘지 않도록 간결하게 작성해주세요. 현재 브레인스토밍 중인 추천 질문은 다음과 같습니다: 넷플릭스 드라마에서 백강혁의 역할이 시청자에게 깊은 인상을 남긴 이유는 무엇일까요?}, {role=user, content=다른 캐릭터들은 적자라고 싫어했던 백강혁을 나중에는 인정하게 돼 놀랍지?}, {role=assistant, content=정말 흥미로운 전개네요. 그렇다면 백강혁의 어떤 행동이나 성격이 다른 캐릭터들의 마음을 변화시켰을까요? 그의 성장 과정이나 특정 사건이 그 변화에 어떻게 기여했는지 생각해볼 수 있을까요? 이 이야기가 시청자들에게 주는 교훈은 무엇일까요?}, {role=user, content=백강혁은 누구보다 뛰어나 그의 성장 과정은 드라마에 나오지 않았지만 지금 웹툰에서 진행하고 있어. 시청자들에게 정말 큰 교훈을 줄꺼야}, {role=user, content=백강혁은 누구보다 뛰어나 그의 성장 과정은 드라마에 나오지 않았지만 지금 웹툰에서 진행하고 있어. 시청자들에게 정말 큰 교훈을 줄꺼야}], model=gpt-4o}] as "application/json" -2025-05-28T00:20:26.807+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.client.RestTemplate : Response 200 OK -2025-05-28T00:20:26.810+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.client.RestTemplate : Reading to [java.util.Map] -2025-05-28T00:20:26.826+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:20:26.826+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=201, data=ChatMessageRes[chatId=4, recommendationId=1, message=흥미로운 전개네요! (truncated)...] -2025-05-28T00:20:26.828+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-10] o.s.web.servlet.DispatcherServlet : Completed 201 CREATED -2025-05-28T00:20:54.035+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : POST "/moamoa/chat", parameters={} -2025-05-28T00:20:54.041+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.chat.web.controller.ChatController#sendMessage(ChatMessageReq) -2025-05-28T00:20:54.046+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.likelion.moamoa.domain.chat.web.dto.ChatMessageReq@49a7cad0] -2025-05-28T00:20:54.079+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.client.RestTemplate : HTTP POST https://api.openai.com/v1/chat/completions -2025-05-28T00:20:54.080+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.client.RestTemplate : Accept=[application/json, application/cbor, application/*+json] -2025-05-28T00:20:54.080+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.client.RestTemplate : Writing [{max_tokens=200, temperature=0.7, messages=[{role=system, content=당신은 사용자의 창의적인 브레인스토밍을 적극적으로 돕는 AI 챗봇입니다. 사용자의 질문과 아이디어에 대해 단순히 정보를 제공하는 것을 넘어, 다양한 관점을 제시하고, 새로운 아이디어를 제안하며, 심층적인 질문을 통해 사용자의 생각을 확장하고 발전시키도록 유도하세요. 핵심은 '질문을 통해 다음 아이디어를 이끌어내는 것'입니다. 예를 들어, '이 아이디어의 장점은 무엇일까요?', '다른 방식으로 접근한다면?', '이 아이디어가 현실화될 때 예상되는 어려움은 무엇인가요?'와 같은 질문을 던지며 대화를 이어가세요. 당신은 항상 대화의 흐름을 주도하며 사용자의 아이디어가 구체화되고 풍부해지도록 돕습니다. 답변은 항상 완성된 문장으로 구성하며, 최대 4줄을 넘지 않도록 간결하게 작성해주세요. 현재 브레인스토밍 중인 추천 질문은 다음과 같습니다: 넷플릭스 드라마에서 백강혁의 역할이 시청자에게 깊은 인상을 남긴 이유는 무엇일까요?}, {role=user, content=다른 캐릭터들은 적자라고 싫어했던 백강혁을 나중에는 인정하게 돼 놀랍지?}, {role=assistant, content=정말 흥미로운 전개네요. 그렇다면 백강혁의 어떤 행동이나 성격이 다른 캐릭터들의 마음을 변화시켰을까요? 그의 성장 과정이나 특정 사건이 그 변화에 어떻게 기여했는지 생각해볼 수 있을까요? 이 이야기가 시청자들에게 주는 교훈은 무엇일까요?}, {role=user, content=백강혁은 누구보다 뛰어나 그의 성장 과정은 드라마에 나오지 않았지만 지금 웹툰에서 진행하고 있어. 시청자들에게 정말 큰 교훈을 줄꺼야}, {role=assistant, content=흥미로운 전개네요! 백강혁의 뛰어난 점이 무엇인지, 그리고 그가 어떻게 다른 캐릭터들에게 영향을 미치는지 더 깊이 탐구해보면 어떨까요? 웹툰에서 그의 성장 과정을 통해 시청자들이 어떤 구체적인 교훈을 얻을 수 있을까요? 또한, 그의 이야기를 통해 사람들이 어떤 감정적 또는 지적인 연결을 경험할 수 있을지 생각해보세요.}, {role=user, content=그는 사실 타고난 천재야. 사람을 살리겠다는 의지가 누구보다 대단해}, {role=user, content=그는 사실 타고난 천재야. 사람을 살리겠다는 의지가 누구보다 대단해}], model=gpt-4o}] as "application/json" -2025-05-28T00:20:57.005+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.client.RestTemplate : Response 200 OK -2025-05-28T00:20:57.006+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.client.RestTemplate : Reading to [java.util.Map] -2025-05-28T00:20:57.016+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:20:57.016+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=201, data=ChatMessageRes[chatId=6, recommendationId=1, message=백강혁의 천재성과 (truncated)...] -2025-05-28T00:20:57.017+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed 201 CREATED -2025-05-28T00:20:59.613+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/moamoa/chat/history/2", parameters={multipart} -2025-05-28T00:20:59.618+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.chat.web.controller.ChatController#getChatHistory(Long) -2025-05-28T00:20:59.633+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:20:59.633+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=[])] -2025-05-28T00:20:59.635+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:21:05.628+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : GET "/moamoa/chat/history", parameters={multipart} -2025-05-28T00:21:05.662+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]] -2025-05-28T00:21:05.668+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.r.ResourceHttpRequestHandler : Resource not found -2025-05-28T00:21:05.674+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleException(Exception) -2025-05-28T00:21:05.674+09:00 ERROR 76289 --- [moamoa] [http-nio-8080-exec-3] c.l.m.g.e.GlobalExceptionHandler : Exception Error - -org.springframework.web.servlet.resource.NoResourceFoundException: No static resource chat/history. - at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585) ~[spring-webmvc-6.2.6.jar:6.2.6] - at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) ~[spring-webmvc-6.2.6.jar:6.2.6] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.2.6.jar:6.2.6] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.6.jar:6.2.6] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.6.jar:6.2.6] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.6.jar:6.2.6] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.40.jar:6.0] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.6.jar:6.2.6] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.40.jar:6.0] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.6.jar:6.2.6] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.6.jar:6.2.6] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.6.jar:6.2.6] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.6.jar:6.2.6] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.6.jar:6.2.6] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.6.jar:6.2.6] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.40.jar:10.1.40] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] - -2025-05-28T00:21:05.683+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:21:05.683+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=500, data=null)] -2025-05-28T00:21:05.684+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource chat/history.] -2025-05-28T00:21:05.685+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed 500 INTERNAL_SERVER_ERROR -2025-05-28T00:21:10.469+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : GET "/moamoa/chat/history/1", parameters={multipart} -2025-05-28T00:21:10.477+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.chat.web.controller.ChatController#getChatHistory(Long) -2025-05-28T00:21:10.504+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:21:10.504+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=[ChatMessageRes[chatId=1, recommendationId=1, message=다른 캐릭터들은 (truncated)...] -2025-05-28T00:21:10.506+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:21:17.258+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : POST "/moamoa/keywords/extract", parameters={} -2025-05-28T00:21:17.261+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.keyword.web.controller.KeywordController#extractKeyword(ExtractKeywordReq) -2025-05-28T00:21:17.272+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.likelion.moamoa.domain.keyword.web.dto.ExtractKeywordReq@3a121f62] -2025-05-28T00:21:17.307+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.client.RestTemplate : HTTP POST https://api.openai.com/v1/chat/completions -2025-05-28T00:21:17.307+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.client.RestTemplate : Accept=[application/json, application/cbor, application/*+json] -2025-05-28T00:21:17.308+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.client.RestTemplate : Writing [{max_tokens=200, messages=[{role=user, content=다음 텍스트에서 중요한 키워드 10개를 뽑고 각각 몇 번 나왔는지 세어서 '키워드:횟수,키워드:횟수' 형식으로만 답해줘. 예: 인공지능:3,데이터:2 - -다른 캐릭터들은 적자라고 싫어했던 백강혁을 나중에는 인정하게 돼 놀랍지? 정말 흥미로운 전개네요. 그렇다면 백강혁의 어떤 행동이나 성격이 다른 캐릭터들의 마음을 변화시켰을까요? 그의 성장 과정이나 특정 사건이 그 변화에 어떻게 기여했는지 생각해볼 수 있을까요? 이 이야기가 시청자들에게 주는 교훈은 무엇일까요? 백강혁은 누구보다 뛰어나 그의 성장 과정은 드라마에 나오지 않았지만 지금 웹툰에서 진행하고 있어. 시청자들에게 정말 큰 교훈을 줄꺼야 흥미로운 전개네요! 백강혁의 뛰어난 점이 무엇인지, 그리고 그가 어떻게 다른 캐릭터들에게 영향을 미치는지 더 깊이 탐구해보면 어떨까요? 웹툰에서 그의 성장 과정을 통해 시청자들이 어떤 구체적인 교훈을 얻을 수 있을까요? 또한, 그의 이야기를 통해 사람들이 어떤 감정적 또는 지적인 연결을 경험할 수 있을지 생각해보세요. 그는 사실 타고난 천재야. 사람을 살리겠다는 의지가 누구보다 대단해 백강혁의 천재성과 강한 의지는 그의 캐릭터를 더욱 매력적으로 만드네요. 그렇다면 그의 천재성이 어떤 방식으로 드라마의 갈등을 해결하는 데 기여할 수 있을까요? 그의 의지가 다른 캐릭터들에게 어떤 영향을 미치고, 그로 인해 생기는 변화는 무엇인지 생각해보면 좋겠습니다. 또한, 이러한 요소들이 시청자들에게 어떤 감정적 울림을 줄 수 있을지 탐구해보세요. }], model=gpt-4o}] as "application/json" -2025-05-28T00:21:19.025+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.client.RestTemplate : Response 200 OK -2025-05-28T00:21:19.026+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.client.RestTemplate : Reading to [java.util.Map] -2025-05-28T00:21:19.083+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:21:19.084+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=ExtractKeywordRes[folderId=1, keywordList=[ExtractKeyword[keywo (truncated)...] -2025-05-28T00:21:19.095+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:21:29.279+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet : GET "/moamoa/keywords/folder/1", parameters={} -2025-05-28T00:21:29.290+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.keyword.web.controller.KeywordController#getKeywords(Long) -2025-05-28T00:21:29.313+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:21:29.314+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=KeywordSummaryRes[folderId=1, keywordList=[KeywordSummary[keywo (truncated)...] -2025-05-28T00:21:29.321+09:00 DEBUG 76289 --- [moamoa] [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:39:02.099+09:00 INFO 76289 --- [moamoa] [SpringApplicationShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete -2025-05-28T00:39:02.188+09:00 INFO 76289 --- [moamoa] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete -2025-05-28T00:39:02.284+09:00 INFO 76289 --- [moamoa] [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' -2025-05-28T00:39:02.317+09:00 INFO 76289 --- [moamoa] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... -2025-05-28T00:39:02.434+09:00 INFO 76289 --- [moamoa] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. -2025-05-28T00:39:08.688+09:00 INFO 86301 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Starting MoamoaApplication using Java 21.0.5 with PID 86301 (/Users/juhan/Desktop/project/BeArchive/moamoa/build/classes/java/main started by juhan in /Users/juhan/Desktop/project/BeArchive/moamoa) -2025-05-28T00:39:08.689+09:00 INFO 86301 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : No active profile set, falling back to 1 default profile: "default" -2025-05-28T00:39:09.320+09:00 INFO 86301 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-05-28T00:39:09.365+09:00 INFO 86301 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 40 ms. Found 6 JPA repository interfaces. -2025-05-28T00:39:09.706+09:00 INFO 86301 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2025-05-28T00:39:09.713+09:00 INFO 86301 --- [moamoa] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2025-05-28T00:39:09.714+09:00 INFO 86301 --- [moamoa] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.40] -2025-05-28T00:39:09.739+09:00 INFO 86301 --- [moamoa] [main] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring embedded WebApplicationContext -2025-05-28T00:39:09.739+09:00 INFO 86301 --- [moamoa] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1016 ms -2025-05-28T00:39:09.826+09:00 INFO 86301 --- [moamoa] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2025-05-28T00:39:09.866+09:00 INFO 86301 --- [moamoa] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.13.Final -2025-05-28T00:39:09.885+09:00 INFO 86301 --- [moamoa] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2025-05-28T00:39:10.043+09:00 INFO 86301 --- [moamoa] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2025-05-28T00:39:10.058+09:00 INFO 86301 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2025-05-28T00:39:10.329+09:00 INFO 86301 --- [moamoa] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3f64d943 -2025-05-28T00:39:10.330+09:00 INFO 86301 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2025-05-28T00:39:10.372+09:00 WARN 86301 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000025: MySQL8Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-05-28T00:39:10.372+09:00 WARN 86301 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead -2025-05-28T00:39:10.380+09:00 INFO 86301 --- [moamoa] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: - Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] - Database driver: undefined/unknown - Database version: 8.0 - Autocommit mode: undefined/unknown - Isolation level: undefined/unknown - Minimum pool size: undefined/unknown - Maximum pool size: undefined/unknown -2025-05-28T00:39:10.823+09:00 INFO 86301 --- [moamoa] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-05-28T00:39:10.917+09:00 INFO 86301 --- [moamoa] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-05-28T00:39:11.294+09:00 WARN 86301 --- [moamoa] [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-05-28T00:39:11.337+09:00 DEBUG 86301 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerMapping : 21 mappings in 'requestMappingHandlerMapping' -2025-05-28T00:39:11.370+09:00 DEBUG 86301 --- [moamoa] [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Patterns [/webjars/**, /**] in 'resourceHandlerMapping' -2025-05-28T00:39:11.381+09:00 DEBUG 86301 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerAdapter : ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice -2025-05-28T00:39:11.398+09:00 DEBUG 86301 --- [moamoa] [main] .m.m.a.ExceptionHandlerExceptionResolver : ControllerAdvice beans: 1 @ExceptionHandler, 1 ResponseBodyAdvice -2025-05-28T00:39:11.443+09:00 INFO 86301 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/moamoa' -2025-05-28T00:39:11.446+09:00 INFO 86301 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Started MoamoaApplication in 3.173 seconds (process running for 3.775) -2025-05-28T00:39:28.970+09:00 INFO 86301 --- [moamoa] [http-nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-05-28T00:39:28.973+09:00 INFO 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2025-05-28T00:39:28.974+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver -2025-05-28T00:39:28.974+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected AcceptHeaderLocaleResolver -2025-05-28T00:39:28.974+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected FixedThemeResolver -2025-05-28T00:39:28.980+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@35ab0bf3 -2025-05-28T00:39:28.980+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.support.SessionFlashMapManager@21e60eed -2025-05-28T00:39:28.980+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data -2025-05-28T00:39:28.981+09:00 INFO 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 7 ms -2025-05-28T00:39:28.990+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={multipart} -2025-05-28T00:39:29.017+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:39:29.144+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:39:29.144+09:00 ERROR 86301 --- [moamoa] [http-nio-8080-exec-1] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:39:29.144+09:00 ERROR 86301 --- [moamoa] [http-nio-8080-exec-1] c.l.m.g.e.GlobalExceptionHandler : 레퍼런스가 존재하지 않습니다. -2025-05-28T00:39:29.183+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:39:29.186+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:39:29.207+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException] -2025-05-28T00:39:29.207+09:00 DEBUG 86301 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND -2025-05-28T00:39:44.490+09:00 INFO 86301 --- [moamoa] [SpringApplicationShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete -2025-05-28T00:39:44.529+09:00 INFO 86301 --- [moamoa] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete -2025-05-28T00:39:44.575+09:00 INFO 86301 --- [moamoa] [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' -2025-05-28T00:39:44.596+09:00 INFO 86301 --- [moamoa] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... -2025-05-28T00:39:44.638+09:00 INFO 86301 --- [moamoa] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. -2025-05-28T00:39:53.015+09:00 INFO 86670 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Starting MoamoaApplication using Java 21.0.5 with PID 86670 (/Users/juhan/Desktop/project/BeArchive/moamoa/build/classes/java/main started by juhan in /Users/juhan/Desktop/project/BeArchive/moamoa) -2025-05-28T00:39:53.165+09:00 INFO 86670 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : No active profile set, falling back to 1 default profile: "default" -2025-05-28T00:39:53.581+09:00 INFO 86670 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-05-28T00:39:53.740+09:00 INFO 86670 --- [moamoa] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 37 ms. Found 6 JPA repository interfaces. -2025-05-28T00:39:54.088+09:00 INFO 86670 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2025-05-28T00:39:54.094+09:00 INFO 86670 --- [moamoa] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2025-05-28T00:39:54.094+09:00 INFO 86670 --- [moamoa] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.40] -2025-05-28T00:39:54.113+09:00 INFO 86670 --- [moamoa] [main] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring embedded WebApplicationContext -2025-05-28T00:39:54.113+09:00 INFO 86670 --- [moamoa] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 910 ms -2025-05-28T00:39:54.188+09:00 INFO 86670 --- [moamoa] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2025-05-28T00:39:54.216+09:00 INFO 86670 --- [moamoa] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.13.Final -2025-05-28T00:39:54.229+09:00 INFO 86670 --- [moamoa] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2025-05-28T00:39:54.356+09:00 INFO 86670 --- [moamoa] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2025-05-28T00:39:54.373+09:00 INFO 86670 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2025-05-28T00:39:54.580+09:00 INFO 86670 --- [moamoa] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2430cf17 -2025-05-28T00:39:54.581+09:00 INFO 86670 --- [moamoa] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2025-05-28T00:39:54.614+09:00 WARN 86670 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000025: MySQL8Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-05-28T00:39:54.615+09:00 WARN 86670 --- [moamoa] [main] org.hibernate.orm.deprecation : HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead -2025-05-28T00:39:54.621+09:00 INFO 86670 --- [moamoa] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: - Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] - Database driver: undefined/unknown - Database version: 8.0 - Autocommit mode: undefined/unknown - Isolation level: undefined/unknown - Minimum pool size: undefined/unknown - Maximum pool size: undefined/unknown -2025-05-28T00:39:55.061+09:00 INFO 86670 --- [moamoa] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-05-28T00:39:55.180+09:00 INFO 86670 --- [moamoa] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-05-28T00:39:55.561+09:00 WARN 86670 --- [moamoa] [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-05-28T00:39:55.597+09:00 DEBUG 86670 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerMapping : 21 mappings in 'requestMappingHandlerMapping' -2025-05-28T00:39:55.632+09:00 DEBUG 86670 --- [moamoa] [main] o.s.w.s.handler.SimpleUrlHandlerMapping : Patterns [/webjars/**, /**] in 'resourceHandlerMapping' -2025-05-28T00:39:55.644+09:00 DEBUG 86670 --- [moamoa] [main] s.w.s.m.m.a.RequestMappingHandlerAdapter : ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice -2025-05-28T00:39:55.662+09:00 DEBUG 86670 --- [moamoa] [main] .m.m.a.ExceptionHandlerExceptionResolver : ControllerAdvice beans: 1 @ExceptionHandler, 1 ResponseBodyAdvice -2025-05-28T00:39:55.713+09:00 INFO 86670 --- [moamoa] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/moamoa' -2025-05-28T00:39:55.718+09:00 INFO 86670 --- [moamoa] [main] com.likelion.moamoa.MoamoaApplication : Started MoamoaApplication in 3.021 seconds (process running for 3.935) -2025-05-28T00:40:00.922+09:00 INFO 86670 --- [moamoa] [http-nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/moamoa] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-05-28T00:40:00.923+09:00 INFO 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2025-05-28T00:40:00.923+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver -2025-05-28T00:40:00.923+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected AcceptHeaderLocaleResolver -2025-05-28T00:40:00.923+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected FixedThemeResolver -2025-05-28T00:40:00.928+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@6f999cf4 -2025-05-28T00:40:00.928+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Detected org.springframework.web.servlet.support.SessionFlashMapManager@5e8359da -2025-05-28T00:40:00.928+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data -2025-05-28T00:40:00.928+09:00 INFO 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms -2025-05-28T00:40:00.932+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={multipart} -2025-05-28T00:40:00.946+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:40:00.994+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:40:00.994+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-1] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:40:00.994+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-1] c.l.m.g.e.GlobalExceptionHandler : 레퍼런스가 존재하지 않습니다. -2025-05-28T00:40:01.009+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:40:01.010+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:40:01.016+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException] -2025-05-28T00:40:01.017+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND -2025-05-28T00:40:29.082+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={} -2025-05-28T00:40:29.086+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:40:29.101+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:40:29.101+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-3] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:40:29.102+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-3] c.l.m.g.e.GlobalExceptionHandler : 레퍼런스가 존재하지 않습니다. -2025-05-28T00:40:29.104+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:40:29.104+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:40:29.105+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException] -2025-05-28T00:40:29.106+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND -2025-05-28T00:40:53.587+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : POST "/moamoa/folder/1/reference", parameters={multipart} -2025-05-28T00:40:53.604+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.reference.web.controller.ReferenceController#SaveReference(Long, SaveReferenceReq) -2025-05-28T00:40:54.025+09:00 WARN 86670 --- [moamoa] [http-nio-8080-exec-4] com.amazonaws.util.Base64 : JAXB is unavailable. Will fallback to SDK implementation which may be less performant.If you are using Java 9+, you will need to include javax.xml.bind:jaxb-api as a dependency. -2025-05-28T00:40:54.071+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:40:54.073+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [SuccessResponse(httpStatus=200, data=SaveReferenceRes[referenceId=2, referenceName=중증외상센터1, referenc (truncated)...] -2025-05-28T00:40:54.078+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2025-05-28T00:40:59.750+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] o.s.web.servlet.DispatcherServlet : GET "/moamoa/recommendation/2", parameters={} -2025-05-28T00:40:59.754+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.likelion.moamoa.domain.recommendation.web.controller.RecommendationController#getRecommendation(Long) -2025-05-28T00:40:59.786+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.likelion.moamoa.global.exception.GlobalExceptionHandler#handleBusinessException(BaseException) -2025-05-28T00:40:59.786+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-5] c.l.m.g.e.GlobalExceptionHandler : BusinessError -2025-05-28T00:40:59.786+09:00 ERROR 86670 --- [moamoa] [http-nio-8080-exec-5] c.l.m.g.e.GlobalExceptionHandler : 추천질문이 없습니다. -2025-05-28T00:40:59.787+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/cbor] -2025-05-28T00:40:59.787+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [ErrorResponse(httpStatus=404, data=null)] -2025-05-28T00:40:59.788+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.likelion.moamoa.domain.chat.exception.NotFoundRecommendationException] -2025-05-28T00:40:59.789+09:00 DEBUG 86670 --- [moamoa] [http-nio-8080-exec-5] o.s.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/DuplicateLoginIdException.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/DuplicateLoginIdException.java deleted file mode 100644 index 3a099b3..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/DuplicateLoginIdException.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.likelion.moamoa.domain.auth.exception; - -import com.likelion.moamoa.global.exception.BaseException; - -public class DuplicateLoginIdException extends BaseException { - public DuplicateLoginIdException() { - super(AuthErrorCode.USER_DUPLICATE_LOGINID_409); - } -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/NotFoundLoginIdException.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/NotFoundLoginIdException.java deleted file mode 100644 index 85d61e2..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/NotFoundLoginIdException.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.likelion.moamoa.domain.auth.exception; - -import com.likelion.moamoa.global.exception.BaseException; - -public class NotFoundLoginIdException extends BaseException { - public NotFoundLoginIdException() { - super(AuthErrorCode.USER_NOT_FOUND_LOGINID_404); - } -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/repository/UserRepository.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/repository/UserRepository.java deleted file mode 100644 index c7822fd..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/repository/UserRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.likelion.moamoa.domain.auth.repository; - -import com.likelion.moamoa.domain.auth.entity.User; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -// User 엔티티 DB 연동, 회원 가입 중복 검사 -@Repository -public interface UserRepository extends JpaRepository { - - boolean existsByLoginId(String loginId); - - // User라는 객체가 존재하면 값을 담고, 존재하지 않으면 비어있는 상태로 반환 - Optional findByLoginId(String loginId); - - String userId(Long userId); -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserService.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserService.java deleted file mode 100644 index 78c4765..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.likelion.moamoa.domain.auth.service; - -import com.likelion.moamoa.domain.auth.web.dto.*; - -public interface UserService { - // 로그인 아이디 중복 체크 확인 - void loginIdCheck(loginIdCheckReq loginIdCheckReq); - - // 회원 가입 - SignupUserRes signup(SignupUserReq signupUserReq); - - // 로그인 - SigninUserRes singin(SigninUserReq signinUserReq); -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserServiceImpl.java deleted file mode 100644 index 1ec66a3..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/service/UserServiceImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.likelion.moamoa.domain.auth.service; - -import com.likelion.moamoa.domain.auth.entity.User; -import com.likelion.moamoa.domain.auth.exception.DuplicateLoginIdException; -import com.likelion.moamoa.domain.auth.exception.InvalidPasswordException; -import com.likelion.moamoa.domain.auth.exception.NotFoundLoginIdException; -import com.likelion.moamoa.domain.auth.repository.UserRepository; -import com.likelion.moamoa.domain.auth.web.dto.*; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - @Override - public void loginIdCheck(loginIdCheckReq loginIdCheckReq) { - // 아이디 중복 검사 - if (userRepository.existsByLoginId(loginIdCheckReq.getLoginId())) { - // 아이디 중복이 있는 경우 에러 반환 - throw new DuplicateLoginIdException(); - } - } - - // 회원 가입 - @Override - public SignupUserRes signup(SignupUserReq signupUserReq) { -// // 아이디 중복 검사 -> "중복 체크를 따로 뺌" -// if (userRepository.existsByLoginId(signupUserReq.getLoginId())) { -// // 아이디 중복이 있는 경우 에러 반환 -// throw new DuplicateLoginIdException(); -// } - - // User 생성 - User user = User.builder() - .loginId(signupUserReq.getLoginId()) - .password(signupUserReq.getPassword()) - .build(); - - // User 저장 - User saveUser = userRepository.save(user); - - // 반환 - return new SignupUserRes(saveUser.getUserId()); - } - - // 로그인 - @Override - public SigninUserRes singin(SigninUserReq signinUserReq) { - // 아이디 존재 여부 검사 - User user = userRepository.findByLoginId(signinUserReq.getLoginId()) - // 존재 X - .orElseThrow(NotFoundLoginIdException::new); - - // 비밀번호 확인 검사 - if(!user.getPassword().equals(signinUserReq.getPassword())) { - throw new InvalidPasswordException(); - } - - // 반환 - return new SigninUserRes( - user.getUserId(), - user.getLoginId()); - } - -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserRes.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserRes.java deleted file mode 100644 index 9e91669..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserRes.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.likelion.moamoa.domain.auth.web.dto; - -public record SigninUserRes( - Long userId, - String loginId) { -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserRes.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserRes.java deleted file mode 100644 index 6bea979..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserRes.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.likelion.moamoa.domain.auth.web.dto; - -public record SignupUserRes(Long userId) { -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/loginIdCheckReq.java b/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/loginIdCheckReq.java deleted file mode 100644 index ddf34cd..0000000 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/loginIdCheckReq.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.likelion.moamoa.domain.auth.web.dto; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; -import jakarta.validation.constraints.Size; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class loginIdCheckReq { - - @NotBlank(message = "아이디는 필수 입력 값 입니다.") - @Size(min = 4, max = 20, message = "아이디는 4~20자이어야 합니다.") - @Pattern( - regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]+$", - message = "아이디는 영문자와 숫자를 반드시 포함해야 합니다.") - private String loginId; -} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/chat/service/ChatServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/chat/service/ChatServiceImpl.java index 95fd5cb..82d346f 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/chat/service/ChatServiceImpl.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/chat/service/ChatServiceImpl.java @@ -7,12 +7,13 @@ import com.likelion.moamoa.domain.chat.repository.ChatRepository; import com.likelion.moamoa.domain.chat.web.dto.ChatMessageReq; import com.likelion.moamoa.domain.chat.web.dto.ChatMessageRes; +import com.likelion.moamoa.domain.reference.repository.ReferenceRepository; import com.likelion.moamoa.global.config.OpenAiConfig; import com.likelion.moamoa.domain.recommendation.entity.Recommendation; import com.likelion.moamoa.domain.recommendation.repository.RecommendationRepository; -import com.likelion.moamoa.domain.auth.entity.User; -import com.likelion.moamoa.domain.auth.exception.NotFoundLoginIdException; -import com.likelion.moamoa.domain.auth.repository.UserRepository; +import com.likelion.moamoa.domain.user.entity.User; +import com.likelion.moamoa.global.response.code.user.NotFoundEmailException; +import com.likelion.moamoa.domain.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -33,6 +34,7 @@ public class ChatServiceImpl implements ChatService { private final ChatRepository chatRepository; private final OpenAiConfig openAiConfig; // OpenAiConfig 주입 private final RestTemplate restTemplate; // RestTemplate 주입 + private final ReferenceRepository referenceRepository; // 메시지 전송 메서드 @Override @@ -40,7 +42,7 @@ public ChatMessageRes sendMessage(ChatMessageReq chatMessageReq) { // 사용자 검증 (findById는 기본키를 검증) User user = userRepository.findById(chatMessageReq.getUserId()) - .orElseThrow(NotFoundLoginIdException::new); + .orElseThrow(NotFoundEmailException::new); // 추천 질문 검증 Recommendation recommendation = recommendationRepository.findById(chatMessageReq.getRecommendationId()) @@ -162,8 +164,8 @@ private String getResponseFromOpenAI(List> messages) { throw new RuntimeException("GPT-4 API 호출 실패: " + e.getMessage()); } } - - @Override + + @Override public List getChatHistory(Long recommendation) { List chatLogs = chatRepository.findByRecommendation_RecommendationIdOrderByCreatedAtAsc(recommendation); diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/entity/Folder.java b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/entity/Folder.java index ffb30ab..c6f7e78 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/entity/Folder.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/entity/Folder.java @@ -3,7 +3,7 @@ import com.likelion.moamoa.domain.reference.entity.Reference; import jakarta.persistence.*; import lombok.*; -import com.likelion.moamoa.domain.auth.entity.User; +import com.likelion.moamoa.domain.user.entity.User; import java.util.ArrayList; import java.util.List; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/repository/FolderRepository.java b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/repository/FolderRepository.java index 14d8728..26cf2e3 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/repository/FolderRepository.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/repository/FolderRepository.java @@ -9,9 +9,9 @@ @Repository public interface FolderRepository extends JpaRepository { // 폴더 이름 중복 - boolean existsByFolderNameAndUser_UserId(String folderName, Long userUserId); + boolean existsByFolderNameAndUser_Id(String folderName, Long userUserId); // userId로 폴더 조회 - List findAllByUser_UserId(Long userId); + List findAllByUser_Id(Long userId); // userId에 몇개의 폴더가 있는지 확인 - Long countFolderByUser_UserId(Long userId); + Long countFolderByUser_Id(Long userId); } diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/service/FolderServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/service/FolderServiceImpl.java index 30cbc63..acb5da4 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/service/FolderServiceImpl.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/folder/service/FolderServiceImpl.java @@ -1,12 +1,12 @@ package com.likelion.moamoa.domain.folder.service; -import com.likelion.moamoa.domain.auth.entity.User; -import com.likelion.moamoa.domain.auth.repository.UserRepository; +import com.likelion.moamoa.domain.user.entity.User; +import com.likelion.moamoa.domain.user.repository.UserRepository; import com.likelion.moamoa.domain.folder.entity.Folder; -import com.likelion.moamoa.domain.folder.exception.DuplicateFolderNameException; -import com.likelion.moamoa.domain.folder.exception.InvalidFolderOrderException; -import com.likelion.moamoa.domain.folder.exception.NotFoundFolderException; -import com.likelion.moamoa.domain.folder.exception.NotFoundUserException; +import com.likelion.moamoa.global.response.code.folder.DuplicateFolderNameException; +import com.likelion.moamoa.global.response.code.folder.InvalidFolderOrderException; +import com.likelion.moamoa.global.response.code.folder.NotFoundFolderException; +import com.likelion.moamoa.global.response.code.folder.NotFoundUserException; import com.likelion.moamoa.domain.folder.repository.FolderRepository; import com.likelion.moamoa.domain.folder.web.dto.*; import com.likelion.moamoa.domain.folder.web.dto.FolderSummaryRes.FolderSummary; @@ -35,13 +35,13 @@ public CreateFolderRes createFolder(Long userId, CreateFolderReq createFolderReq .orElseThrow(NotFoundUserException::new); // 폴더 중복 예외 - if(folderRepository.existsByFolderNameAndUser_UserId(createFolderReq.getFolderName(), userId)) { + if(folderRepository.existsByFolderNameAndUser_Id(createFolderReq.getFolderName(), userId)) { throw new DuplicateFolderNameException(); } Folder folder = Folder.builder() .folderName(createFolderReq.getFolderName()) - .folderOrder(folderRepository.countFolderByUser_UserId(userId)) // 0번부터 시작 + .folderOrder(folderRepository.countFolderByUser_Id(userId)) // 0번부터 시작 .user(user) .build(); @@ -50,7 +50,7 @@ public CreateFolderRes createFolder(Long userId, CreateFolderReq createFolderReq // Folder Entity -> CreateFolderRes로 변환 return new CreateFolderRes( - saveFolder.getUser().getUserId(), + saveFolder.getUser().getId(), saveFolder.getFolderId(), saveFolder.getFolderName(), saveFolder.getFolderOrder() @@ -64,7 +64,7 @@ public FolderSummaryRes getAllByFolder(Long userId) { User user = userRepository.findById(userId) .orElseThrow(NotFoundUserException::new); - List folders = folderRepository.findAllByUser_UserId(userId); + List folders = folderRepository.findAllByUser_Id(userId); List folderSummaryList = new ArrayList<>(); for (Folder folder : folders) { @@ -76,7 +76,7 @@ public FolderSummaryRes getAllByFolder(Long userId) { folderSummaryList.add(folderSummary); } - return new FolderSummaryRes(user.getUserId(), folderSummaryList); + return new FolderSummaryRes(user.getId(), folderSummaryList); } // 폴더 이름 변경 @@ -90,12 +90,12 @@ public ModifyFolderRes modifyFolderName( Folder folder = folderRepository.findById(folderId) .orElseThrow(NotFoundFolderException::new); - if (!folder.getUser().getUserId().equals(userId)) { + if (!folder.getUser().getId().equals(userId)) { throw new NotFoundUserException(); } // 폴더 이름 중복 예외 - if(folderRepository.existsByFolderNameAndUser_UserId(modifyFolderReq.getFolderName(), userId)) { + if(folderRepository.existsByFolderNameAndUser_Id(modifyFolderReq.getFolderName(), userId)) { throw new DuplicateFolderNameException(); } @@ -103,7 +103,7 @@ public ModifyFolderRes modifyFolderName( folder.setFolderName(modifyFolderReq.getFolderName()); return new ModifyFolderRes( - folder.getUser().getUserId(), + folder.getUser().getId(), folder.getFolderId(), folderNameBefore, folder.getFolderName() @@ -117,13 +117,13 @@ public void deleteOneFolder(Long userId, Long folderId) { Folder folder = folderRepository.findById(folderId) .orElseThrow(NotFoundFolderException::new); - if (!folder.getUser().getUserId().equals(userId)) { + if (!folder.getUser().getId().equals(userId)) { throw new NotFoundUserException(); } // 폴더 삭제하면 모두 앞당기기 Long orderValue = folder.getFolderOrder(); - folderRepository.findAllByUser_UserId(userId).stream() + folderRepository.findAllByUser_Id(userId).stream() .filter(f -> f.getFolderOrder() > orderValue) .forEach(f -> f.setFolderOrder(f.getFolderOrder() - 1)); @@ -142,23 +142,23 @@ public ChangeFolderRes changeFolderOrder(Long userId, Long folderId, ChangeFolde Folder folder = folderRepository.findById(folderId) .orElseThrow(NotFoundFolderException::new); - if (!folder.getUser().getUserId().equals(userId)) { + if (!folder.getUser().getId().equals(userId)) { throw new NotFoundUserException(); } Long orderBefore = folder.getFolderOrder(); Long orderAfter = changeFolderReq.getFolderOrderAfter(); - if (orderAfter < 0 || orderAfter >= folderRepository.countFolderByUser_UserId(userId)) { + if (orderAfter < 0 || orderAfter >= folderRepository.countFolderByUser_Id(userId)) { throw new InvalidFolderOrderException(); } if (orderBefore < orderAfter) { - folderRepository.findAllByUser_UserId(userId).stream() + folderRepository.findAllByUser_Id(userId).stream() .filter(f -> f.getFolderOrder() > orderBefore && f.getFolderOrder() <= orderAfter) .forEach(f -> f.setFolderOrder(f.getFolderOrder() - 1)); } else { - folderRepository.findAllByUser_UserId(userId).stream() + folderRepository.findAllByUser_Id(userId).stream() .filter(f -> f.getFolderOrder() >= orderAfter && f.getFolderOrder() < orderBefore) .forEach(f -> f.setFolderOrder(f.getFolderOrder() + 1)); } @@ -166,7 +166,7 @@ public ChangeFolderRes changeFolderOrder(Long userId, Long folderId, ChangeFolde folder.setFolderOrder(orderAfter); return new ChangeFolderRes( - folder.getUser().getUserId(), + folder.getUser().getId(), folder.getFolderId(), orderBefore, folder.getFolderOrder() diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/keyword/service/KeywordServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/keyword/service/KeywordServiceImpl.java index 5fb0571..2b81056 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/keyword/service/KeywordServiceImpl.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/keyword/service/KeywordServiceImpl.java @@ -15,7 +15,7 @@ import com.likelion.moamoa.domain.recommendation.service.OpenAiService; import com.likelion.moamoa.domain.folder.entity.Folder; import com.likelion.moamoa.domain.folder.repository.FolderRepository; -import com.likelion.moamoa.domain.folder.exception.NotFoundFolderException; +import com.likelion.moamoa.global.response.code.folder.NotFoundFolderException; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/recommendation/service/RecommendationServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/recommendation/service/RecommendationServiceImpl.java index 8ef70bb..e80b769 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/recommendation/service/RecommendationServiceImpl.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/recommendation/service/RecommendationServiceImpl.java @@ -6,7 +6,7 @@ import com.likelion.moamoa.domain.recommendation.exception.NotFoundReferenceException; import com.likelion.moamoa.domain.recommendation.repository.RecommendationRepository; import com.likelion.moamoa.domain.recommendation.web.dto.CreateRecommendationRes; -import com.likelion.moamoa.domain.auth.entity.User; +import com.likelion.moamoa.domain.user.entity.User; import com.likelion.moamoa.domain.folder.entity.Folder; import com.likelion.moamoa.domain.recommendation.web.dto.RecommendationDetailRes; import com.likelion.moamoa.domain.reference.entity.Reference; @@ -53,7 +53,7 @@ public CreateRecommendationRes createRecommendation(Long referenceId) { return new CreateRecommendationRes( saved.getRecommendationId(), saved.getQuestion(), - saved.getReference().getFolder().getUser().getUserId(), + saved.getReference().getFolder().getUser().getId(), saved.getReference().getFolder().getFolderId(), saved.getReference().getReferenceId() ); @@ -74,7 +74,7 @@ public RecommendationDetailRes getRecommendation(Long referenceId) { return new RecommendationDetailRes( recommendation.getRecommendationId(), recommendation.getQuestion(), - recommendation.getReference().getFolder().getUser().getUserId(), + recommendation.getReference().getFolder().getUser().getId(), recommendation.getReference().getFolder().getFolderId(), recommendation.getReference().getReferenceId() ); diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/service/ReferenceServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/reference/service/ReferenceServiceImpl.java index 9ecc043..a10d3e8 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/service/ReferenceServiceImpl.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/reference/service/ReferenceServiceImpl.java @@ -1,11 +1,11 @@ package com.likelion.moamoa.domain.reference.service; import com.likelion.moamoa.domain.folder.entity.Folder; -import com.likelion.moamoa.domain.folder.exception.NotFoundFolderException; +import com.likelion.moamoa.global.response.code.folder.NotFoundFolderException; import com.likelion.moamoa.domain.folder.repository.FolderRepository; import com.likelion.moamoa.domain.reference.entity.Reference; -import com.likelion.moamoa.domain.reference.exception.DuplicateImgNameException; -import com.likelion.moamoa.domain.reference.exception.NotFoundReferenceException; +import com.likelion.moamoa.global.response.code.reference.DuplicateImgNameException; +import com.likelion.moamoa.global.response.code.reference.NotFoundReferenceException; import com.likelion.moamoa.domain.reference.repository.ReferenceRepository; import com.likelion.moamoa.domain.reference.web.dto.*; import com.likelion.moamoa.domain.reference.web.dto.ReferenceSummaryRes.ReferenceSummary; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/entity/User.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/entity/User.java similarity index 55% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/entity/User.java rename to moamoa/src/main/java/com/likelion/moamoa/domain/user/entity/User.java index 5f84de9..7c28a6b 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/entity/User.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/entity/User.java @@ -1,8 +1,11 @@ -package com.likelion.moamoa.domain.auth.entity; +package com.likelion.moamoa.domain.user.entity; +import com.likelion.moamoa.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; +import java.io.Serializable; + @Entity @Getter @Setter @@ -10,14 +13,14 @@ @NoArgsConstructor @AllArgsConstructor @Table(name = "users") -public class User { +public class User extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "USER_ID") - private Long userId; + private Long id; - @Column(name = "LOGIN_ID") - private String loginId; + @Column(name = "EMAIL") + private String email; @Column(name = "PASSWORD") private String password; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/repository/UserRepository.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/repository/UserRepository.java new file mode 100644 index 0000000..5b0a49a --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/repository/UserRepository.java @@ -0,0 +1,15 @@ +package com.likelion.moamoa.domain.user.repository; + +import com.likelion.moamoa.domain.user.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface UserRepository extends JpaRepository { + + boolean existsByEmail(String email); + + Optional findByEmail(String email); +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserService.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserService.java new file mode 100644 index 0000000..fdc015c --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserService.java @@ -0,0 +1,15 @@ +package com.likelion.moamoa.domain.user.service; + +import com.likelion.moamoa.domain.user.entity.User; +import com.likelion.moamoa.domain.user.web.dto.*; + +public interface UserService { + // 이메일 중복 체크 확인 + User checkEmail(String email); + + // 회원 가입 + SignupUserRes signup(SignupUserReq signupUserReq); + + // 로그인 + SigninUserRes singin(SigninUserReq signinUserReq); +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserServiceImpl.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserServiceImpl.java new file mode 100644 index 0000000..31e9f28 --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/service/UserServiceImpl.java @@ -0,0 +1,58 @@ +package com.likelion.moamoa.domain.user.service; + +import com.likelion.moamoa.domain.user.entity.User; +import com.likelion.moamoa.global.response.code.user.DuplicateEmailException; +import com.likelion.moamoa.global.response.code.user.InvalidPasswordException; +import com.likelion.moamoa.domain.user.repository.UserRepository; +import com.likelion.moamoa.domain.user.web.dto.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class UserServiceImpl implements UserService { + + private final UserRepository userRepository; + + // 이메일 체크 + @Override + public User checkEmail(String email) { + return userRepository.findByEmail(email) + .orElseThrow(DuplicateEmailException::new); + } + + // 회원 가입 + @Override + @Transactional + public SignupUserRes signup(SignupUserReq signupUserReq) { + + // User 생성 + User user = User.builder() + .email(signupUserReq.getEmail()) + .password(signupUserReq.getPassword()) + .build(); + + // User 저장 + User saveUser = userRepository.save(user); + + // 반환 + return new SignupUserRes(saveUser.getId()); + } + + // 로그인 + @Override + public SigninUserRes singin(SigninUserReq signinUserReq) { + User user = checkEmail(signinUserReq.getEmail()); + + // 비밀번호 확인 검사 + if(!user.getPassword().equals(signinUserReq.getPassword())) { + throw new InvalidPasswordException(); + } + + // 반환 + return new SigninUserRes( + user.getId(), + user.getEmail()); + } +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/controller/UserController.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/controller/UserController.java similarity index 81% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/controller/UserController.java rename to moamoa/src/main/java/com/likelion/moamoa/domain/user/web/controller/UserController.java index 8bbd5ab..94265c4 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/controller/UserController.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/controller/UserController.java @@ -1,7 +1,7 @@ -package com.likelion.moamoa.domain.auth.web.controller; +package com.likelion.moamoa.domain.user.web.controller; -import com.likelion.moamoa.domain.auth.service.UserService; -import com.likelion.moamoa.domain.auth.web.dto.*; +import com.likelion.moamoa.domain.user.service.UserService; +import com.likelion.moamoa.domain.user.web.dto.*; import com.likelion.moamoa.global.response.SuccessResponse; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -16,15 +16,15 @@ @RequestMapping("/user") @RequiredArgsConstructor public class UserController { - // 의존성 부여 + private final UserService userService; // 로그인 아이디 중복 체크 확인 @PostMapping("check") public ResponseEntity> check( - @RequestBody @Valid loginIdCheckReq loginIdCheckReq + @RequestBody @Valid EmailCheckReq emailCheckReq ) { - userService.loginIdCheck(loginIdCheckReq); + userService.checkEmail(emailCheckReq.getEmail()); return ResponseEntity .status(HttpStatus.OK) @@ -36,10 +36,8 @@ public ResponseEntity> check( public ResponseEntity> signup( @RequestBody @Valid SignupUserReq signupUserReq ) { - // 서비스 SignupUserRes signupUserRes = userService.signup(signupUserReq); - // 반환 return ResponseEntity .status(HttpStatus.CREATED) .body(SuccessResponse.created(signupUserRes)); @@ -50,10 +48,8 @@ public ResponseEntity> signup( public ResponseEntity> signin( @RequestBody @Valid SigninUserReq signinUserReq ) { - // 서비스 SigninUserRes signinUserRes = userService.singin(signinUserReq); - // 반환 return ResponseEntity .status(HttpStatus.OK) .body(SuccessResponse.ok(signinUserRes)); diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/EmailCheckReq.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/EmailCheckReq.java new file mode 100644 index 0000000..7f78293 --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/EmailCheckReq.java @@ -0,0 +1,15 @@ +package com.likelion.moamoa.domain.user.web.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class EmailCheckReq { + + @Email(message = "유효한 이메일 주소가 아닙니다.") + @NotBlank(message = "이메일은 필수 입력 값 입니다.") + private String email; +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserReq.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserReq.java similarity index 52% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserReq.java rename to moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserReq.java index a4ceafe..9ce2144 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SigninUserReq.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserReq.java @@ -1,17 +1,17 @@ -package com.likelion.moamoa.domain.auth.web.dto; +package com.likelion.moamoa.domain.user.web.dto; +import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @Getter @NoArgsConstructor public class SigninUserReq { - @NotBlank(message = "아이디는 필수 입력 값 입니다.") - private String loginId; + @Email(message = "유효한 이메일 주소가 아닙니다.") + @NotBlank(message = "이메일은 필수 입력 값 입니다.") + private String email; @NotBlank(message = "비밀번호는 필수 입력 값 입니다.") private String password; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserRes.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserRes.java new file mode 100644 index 0000000..2d7996f --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SigninUserRes.java @@ -0,0 +1,7 @@ +package com.likelion.moamoa.domain.user.web.dto; + +public record SigninUserRes( + Long id, + String email +) { +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserReq.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserReq.java similarity index 59% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserReq.java rename to moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserReq.java index 7021870..2313c83 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/web/dto/SignupUserReq.java +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserReq.java @@ -1,22 +1,19 @@ -package com.likelion.moamoa.domain.auth.web.dto; +package com.likelion.moamoa.domain.user.web.dto; +import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @Getter @NoArgsConstructor public class SignupUserReq { - @NotBlank(message = "아이디는 필수 입력 값 입니다.") - @Size(min = 4, max = 20, message = "아이디는 4~20자이어야 합니다.") - @Pattern( - regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]+$", - message = "아이디는 영문자와 숫자를 반드시 포함해야 합니다.") - private String loginId; + @Email(message = "유효한 이메일 주소가 아닙니다.") + @NotBlank(message = "이메일은 필수 입력 값 입니다.") + private String email; @NotBlank(message = "비밀번호는 필수 입력 값 입니다.") @Size(min = 8, max = 20, message = "비밀번호는 8~20자이어야 합니다.") diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserRes.java b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserRes.java new file mode 100644 index 0000000..64b53e2 --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/domain/user/web/dto/SignupUserRes.java @@ -0,0 +1,4 @@ +package com.likelion.moamoa.domain.user.web.dto; + +public record SignupUserRes(Long id) { +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/DuplicateFolderNameException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/DuplicateFolderNameException.java similarity index 80% rename from moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/DuplicateFolderNameException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/DuplicateFolderNameException.java index 1abd386..3fe0f6c 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/DuplicateFolderNameException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/DuplicateFolderNameException.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.folder.exception; +package com.likelion.moamoa.global.response.code.folder; import com.likelion.moamoa.global.exception.BaseException; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/FolderErrorCode.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/FolderErrorCode.java similarity index 92% rename from moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/FolderErrorCode.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/FolderErrorCode.java index d7129a6..96cf277 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/FolderErrorCode.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/FolderErrorCode.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.folder.exception; +package com.likelion.moamoa.global.response.code.folder; import com.likelion.moamoa.global.response.code.BaseResponseCode; import lombok.AllArgsConstructor; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/InvalidFolderOrderException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/InvalidFolderOrderException.java similarity index 80% rename from moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/InvalidFolderOrderException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/InvalidFolderOrderException.java index 2ca07e6..a0f3473 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/InvalidFolderOrderException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/InvalidFolderOrderException.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.folder.exception; +package com.likelion.moamoa.global.response.code.folder; import com.likelion.moamoa.global.exception.BaseException; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundFolderException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundFolderException.java similarity index 79% rename from moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundFolderException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundFolderException.java index 54a4b34..367a61c 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundFolderException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundFolderException.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.folder.exception; +package com.likelion.moamoa.global.response.code.folder; import com.likelion.moamoa.global.exception.BaseException; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundUserException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundUserException.java similarity index 67% rename from moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundUserException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundUserException.java index c6bc91a..df2bc0c 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/folder/exception/NotFoundUserException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/folder/NotFoundUserException.java @@ -1,6 +1,5 @@ -package com.likelion.moamoa.domain.folder.exception; +package com.likelion.moamoa.global.response.code.folder; -import com.fasterxml.jackson.databind.ser.Serializers; import com.likelion.moamoa.global.exception.BaseException; public class NotFoundUserException extends BaseException { diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/DuplicateImgNameException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/DuplicateImgNameException.java similarity index 79% rename from moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/DuplicateImgNameException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/DuplicateImgNameException.java index d85152c..7bfdd66 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/DuplicateImgNameException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/DuplicateImgNameException.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.reference.exception; +package com.likelion.moamoa.global.response.code.reference; import com.likelion.moamoa.global.exception.BaseException; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/NotFoundReferenceException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/NotFoundReferenceException.java similarity index 79% rename from moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/NotFoundReferenceException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/NotFoundReferenceException.java index 0f3ec29..fe35b31 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/NotFoundReferenceException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/NotFoundReferenceException.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.reference.exception; +package com.likelion.moamoa.global.response.code.reference; import com.likelion.moamoa.global.exception.BaseException; diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/ReferenceErrorCode.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/ReferenceErrorCode.java similarity index 90% rename from moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/ReferenceErrorCode.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/ReferenceErrorCode.java index 2638a7b..052b1b2 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/reference/exception/ReferenceErrorCode.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/reference/ReferenceErrorCode.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.reference.exception; +package com.likelion.moamoa.global.response.code.reference; import com.likelion.moamoa.global.response.code.BaseResponseCode; import lombok.AllArgsConstructor; diff --git a/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/DuplicateEmailException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/DuplicateEmailException.java new file mode 100644 index 0000000..fdfd216 --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/DuplicateEmailException.java @@ -0,0 +1,9 @@ +package com.likelion.moamoa.global.response.code.user; + +import com.likelion.moamoa.global.exception.BaseException; + +public class DuplicateEmailException extends BaseException { + public DuplicateEmailException() { + super(UserErrorCode.USER_DUPLICATE_EMAIL_409); + } +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/InvalidPasswordException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/InvalidPasswordException.java similarity index 60% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/InvalidPasswordException.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/InvalidPasswordException.java index e20e7af..1f0cccc 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/InvalidPasswordException.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/InvalidPasswordException.java @@ -1,9 +1,9 @@ -package com.likelion.moamoa.domain.auth.exception; +package com.likelion.moamoa.global.response.code.user; import com.likelion.moamoa.global.exception.BaseException; public class InvalidPasswordException extends BaseException { public InvalidPasswordException() { - super(AuthErrorCode.USER_INVALID_PASSWORD_401); + super(UserErrorCode.USER_INVALID_PASSWORD_401); } } diff --git a/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/NotFoundEmailException.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/NotFoundEmailException.java new file mode 100644 index 0000000..b2ab3a8 --- /dev/null +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/NotFoundEmailException.java @@ -0,0 +1,9 @@ +package com.likelion.moamoa.global.response.code.user; + +import com.likelion.moamoa.global.exception.BaseException; + +public class NotFoundEmailException extends BaseException { + public NotFoundEmailException() { + super(UserErrorCode.USER_NOT_FOUND_EMAIL_404); + } +} diff --git a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/AuthErrorCode.java b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/UserErrorCode.java similarity index 52% rename from moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/AuthErrorCode.java rename to moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/UserErrorCode.java index 0ccef66..714931a 100644 --- a/moamoa/src/main/java/com/likelion/moamoa/domain/auth/exception/AuthErrorCode.java +++ b/moamoa/src/main/java/com/likelion/moamoa/global/response/code/user/UserErrorCode.java @@ -1,4 +1,4 @@ -package com.likelion.moamoa.domain.auth.exception; +package com.likelion.moamoa.global.response.code.user; import com.likelion.moamoa.global.response.code.BaseResponseCode; import lombok.AllArgsConstructor; @@ -6,11 +6,11 @@ @Getter @AllArgsConstructor -public enum AuthErrorCode implements BaseResponseCode { +public enum UserErrorCode implements BaseResponseCode { USER_INVALID_PASSWORD_401("USER_INVALID_PASSWORD_401", 401,"비밀번호가 일치하지 않습니다."), - USER_NOT_FOUND_LOGINID_404("USER_NOT_FOUND_LOGINID_404", 404, "해당 ID가 존재하지 않습니다."), - USER_DUPLICATE_LOGINID_409("USER_DUPLICATE_LOGINID_409",409,"이미 존재하는 ID입니다."); + USER_NOT_FOUND_EMAIL_404("USER_NOT_FOUND_EMAIL_404", 404, "해당 이메일이 존재하지 않습니다."), + USER_DUPLICATE_EMAIL_409("USER_DUPLICATE_EMAIL_409",409,"이미 존재하는 이메일입니다."); private final String code; private final int httpStatus;