묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
CoreApplication 생성이 안됐어요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)build.gradle까지 했는데 CoreApplication 없어서 강의보고 CoreApplication 생성해보니 에러 뜨더라구요https://drive.google.com/file/d/1VEjp2fk8EanR4O3tORA_nKa4wWMlasFv/view?usp=sharing
-
미해결대세는 쿠버네티스 (초급~중급편)
vagrant up설치시 질문드립니다
강사님께서 올려주신 실행환경을 보면 cpu 6core이상, 램 16기가이상이라고 명시해 두셨는데요 cpu 4 core, 램 8r기가를 써서 그런지 vagrant up시 속도가 너무 느리고... master와 node1만 제대로 세팅 되고 node2는 잘 안되는것 같습니다.ㅠㅠ node1을 복사하여 node2도 세팅하려고 했으나, 우선 노트북 램을 16기가로 바꾸는 방향으로 하려고 합니다. cpu는 교체가 불가할거 같은데 이런 상황이라면 설치가조금 힘들까요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
카드 역배치 문제 질문있습니다.
import sys input=sys.stdin.readline card=list(range(21)) for _ in range(10): start,end=map(int,input().split()) tmp=card[start:end+1] tmp.sort(reverse=True) card[start:end+1]=tmp for i in range(1,len(card)): print(card[i],end=" ")위와 같은 코드로 작성을 했는데 10가지의 경우에 어떤 경우에는 역배치가 잘 되는데 어떤 경우에는 역배치가 되지 않습니다. 이 코드의 문제점을 모르겠습니다...!
-
미해결데이터 분석 SQL Fundamentals
순서 관련
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님! 책을 추천받고 싶은데적당한 책이 있을지 모르겠네요..기본 개념은 아는데 실행 순서라던지 좀 더 세세한내용을 공부할 수 있어서 이거 하나만 가지고 있어도기본 베이스는 탄탄하게 갈 수 있다고 말할 수 있는 책이 있을까요? 추천 부탁드립니다
-
해결됨스프링부트 시큐리티 & JWT 강의
OAuth 로그인 비밀번호
PrincipalOauth2UserService 클래스에서 BCryptPasswordEncoder를 사용하다보니 순환참조오류가 발생하는 것인데 어차피 OAuth를 통해 회원가입 로그인이 진행된다면 비밀번호는 굳이 BCryptPasswordEncoder를 사용하지 않고 그냥 string값으로 "소셜 로그인" 이런식으로 진행해줘도 문제없지 않나요?이렇게 사용하면 순환참조도 발생하지 않긴해서요이렇게 사용하면 문제가 생기는 부분이 있을까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 관련 문의 입니다.
안녕하세요~!?강의자료를 부탁드려도 될까요?^^메일 주소는 ousp@naver.com입니다.
-
해결됨[코드캠프] 훈훈한 Javascript
자바스크립트.. 강의 말씀이 조금 빠른것같아요;;
프리캠프 수업 너무 재밌게 들었고... 자바스크립트는 비전공자가 듣기에.. 조금 어려운감이 있어요...말씀이 조금 빠르시고, 중간중간마다 악센트가 있다보니 외국어처럼 귀에 잘 안들어와요;;ㅠㅠ특히 [함수선언의종류]강의에서 0:27초부터는 랩처럼... 너무 빨라요..ㅠㅠ예를들어 ) 함수의 사용방법이 3가지가 있다면,한 화면에 3가지 방법을 간단히 글로 써주시고 ppt를 봤다면 좋았을 것 같아요. 한가지씩 설명해주시니 머릿속에서 좀 따로 도는느낌이 드네요..ㅠㅠ 여러번 반복해서 보고서야 3가지 방법이라는걸 이해했어요..ㅠㅠ 비전공자로써 조금 어렵습니다.
-
미해결
회사강의 연동으로 안들어가지네요
회사강의가 연동으로 안되고아무것도 목록에 안뜨네요..다른 친구들은 다 뜨는데어떤게 문제일까요?
-
미해결반응형 웹사이트 포트폴리오(Architecture Agency)
모바일 버전확인 시 테두리
■ 웹페이지 검사 > 모바일 버젼 확인 시모바일 테두리가 생기게 하는 방법이 궁금합니다.
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
멀티인덱스 정렬방법좀 알려주세요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.위 사진보면은 첫번째 행을 삭제하고 마지막에 상점수를 넣고 싶은데..droplever 써도 안되고... 어떻게해서든 바꾸고싶은데.. 안되네요컬럼을 시군구명 상권업종소분류명 상호명 상점수 이렇게 바꾸고싶습니다.df_gu_coffi=df_seoul_coffi.groupby(['시군구명','상권업종소분류명'])['상호명'].value_counts()df_c=df_gu_coffi.to_frame()df_c코드는 이렇게 쳤습니다..
-
해결됨프론트엔드 개발자를 위한, 실전 웹 성능 최적화(feat. React) - Part. 2
폰트 포멧에 대한 질문입니다.
4분에 있는 브라우저별 폰트 호환에 관련되어 있는 표에 질문이 있습니다.각 폰트와 브라우저간 매칭되는 숫자의 의미가 무엇일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-O 질문입니다.
안녕하세요 선생님!http://boj.kr/3c22c999557b40eb917d73182dcd2cc0위의 코드는 통과한 코드인데 통과 후 선생님 코드와 비교해보면서 보다가 궁금한 점이 생겨 질문드립니다.제 코드의 82 ~ 85번째 줄에서if (nx == cx && ny == cy && chess[nx][ny] == 1) { ka[i].d = nd; continue; }이 부분을 넣은 이유는 아래의 경우 때문입니다.4 3 0 0 0 0 0 2 1 2 0 0 0 0 0 0 0 0 2 3 2 1 3 3 3 3 3이렇게 파랑 - 빨강 - 파랑 순으로 놓여있을 때첫 번째 턴에서 (2, 3) 자리에 0 1 2 번째 말이 있게 되고 0번째 말의 방향이 변경됩니다.그리고 다음 턴에서 0번째 말이 움직일 때 움직일 칸이 파란색 칸이기 때문에 현재 칸이 빨간색이더라도 말의 순서가 뒤집히면 안 됩니다.82 ~ 85번째 줄을 넣지 않으면 이때 말의 순서가 뒤집혀서 2 1 0 순이 되는 문제점이 있었습니다.선생님 코드에서는 이 부분을 직접적으로 예외처리 하지 않는 듯한데 어떻게 저 케이스에서 정상적으로 작동하는지 궁금합니다.저거 찾느라 몇 시간을 쓰다 보니 저런 예외처리를 따로 안 해도 되는 방법이 있다면 좋을 것 같아서 질문드립니다.
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
Moshi 관련 Exception error
2022-12-12 09:04:14.193 11869-11909/com.example.booksearchapp E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1 Process: com.example.booksearchapp, PID: 11869 java.lang.IllegalArgumentException: Unable to create converter for class com.example.booksearchapp.data.model.SearchResponse for method BookSearchApi.searchBooks at retrofit2.Utils.methodError(Utils.java:54) at retrofit2.HttpServiceMethod.createResponseConverter(HttpServiceMethod.java:126) at retrofit2.HttpServiceMethod.parseAnnotations(HttpServiceMethod.java:85) at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:39) at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:202) at retrofit2.Retrofit$1.invoke(Retrofit.java:160) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy2.searchBooks(Unknown Source) at com.example.booksearchapp.data.repository.BookSearchRepositoryImpl.searchBooks(BookSearchRepositoryImpl.kt:14) at com.example.booksearchapp.ui.viewmodel.BookSearchViewModel$searchBooks$1.invokeSuspend(BookSearchViewModel.kt:18) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@5775e41, Dispatchers.IO] Caused by: java.lang.RuntimeException: Failed to find the generated JsonAdapter class for class com.example.booksearchapp.data.model.SearchResponse at com.squareup.moshi.internal.Util.generatedAdapter(Util.java:590) at com.squareup.moshi.StandardJsonAdapters$1.create(StandardJsonAdapters.java:61) at com.squareup.moshi.Moshi.adapter(Moshi.java:146) at com.squareup.moshi.Moshi.adapter(Moshi.java:106) at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:89) at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:362) at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:345) at retrofit2.HttpServiceMethod.createResponseConverter(HttpServiceMethod.java:124) ... 16 more Caused by: java.lang.ClassNotFoundException: com.example.booksearchapp.data.model.SearchResponseJsonAdapter at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:454) at com.squareup.moshi.internal.Util.generatedAdapter(Util.java:564) ... 23 more Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.booksearchapp.data.model.SearchResponseJsonAdapter" on path: DexPathList[[zip file "/data/app/~~ewlJIwWx_qkVa9ZkFq_uYw==/com.example.booksearchapp-D0tkT_fBZhzV4uo7HrITvw==/base.apk"],nativeLibraryDirectories=[/data/app/~~ewlJIwWx_qkVa9ZkFq_uYw==/com.example.booksearchapp-D0tkT_fBZhzV4uo7HrITvw==/lib/x86_64, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 26 moreSearchFragment에 RecyclerView와 searchBooks를 추가 한뒤 빌드하여 검색창에 텍스트를 입력하면 앱이 바로 죽는 현상이 나타나고 있어 질문드립니다.Moshi에서 JasonAdapter를 찾을 수 없다고 하는데 혹시 의존성 세팅이 다르게 되어 있어서일까요?plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' /*add ksp*/ id("com.google.devtools.ksp").version("1.6.10-1.0.4") id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' } android { compileSdk 32 defaultConfig { applicationId "com.example.booksearchapp" minSdk 23 targetSdk 32 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' /* Retrofit */ implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-moshi:2.9.0' /* Moshi */ implementation 'com.squareup.moshi:moshi:1.13.0' implementation("com.squareup.moshi:moshi-kotlin:1.14.0") ksp("com.squareup.moshi:moshi-kotlin-codegen:1.14.0") /* Okhttp */ implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0")) implementation("com.squareup.okhttp3:okhttp") implementation("com.squareup.okhttp3:logging-interceptor") /* Lifecycle */ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' /*Add Coroutine */ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' /*Add Coil*/ implementation 'io.coil-kt:coil:1.3.2' /*Add RecyclerView*/ implementation 'androidx.recyclerview:recyclerview:1.2.1' }제 Build.gradle 설정입니다. kapt 사용시 빌드과정에서 문제가 있어 ksp로 변경했고 이후 빌드와 run은 성공적으로 진행하는 것 확인했습니다..
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
영화 나열 Row 컴포넌트 생성하기 안되요..
쌤 play 버튼 클릭 하면 동영상나오는 것부터 왜안되는지 모르겠어요 ㅜ
-
미해결데이터 분석 SQL Fundamentals
집계함수 사고과정
부서별 평균 급여와 개인 급여와의 차이 출력-- analytic을 사용하지 않고 위와 동일한 결과 출력위 문제의 풀이 사고과정을 다음과 같이 생각해봤는데틀린 부분이 있다면 말씀 부탁드립니다emp 테이블에서 부서별 평균급여가 없다부서별 평균급여를 만들어야 하는데 analytic을 사용하지 않으므로 테이블을 따로 만들어 붙인다질문이 하나 더 있는데 analytic을 사용하지 않는다고 했는데 avg가 analytic 아닌가요? 조금 헷갈려서 여쭤봅니다.
-
미해결실전! 스프링 데이터 JPA
메소드 명이 중복되면 어떻게 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 데이터에서 제공하는 메소드 findById 또는 save처럼 커스텀 리포지 또는 혹은 JpaRepository 를 상속받는 interface에 선언한다 치면 어떤것이 우선시 되어 사용이 되는지 또는 에러가 예외가 발생하는지 궁금합니다.또, JpaRepository가 기본적으로 제공하는 페치 조인 메소드는 없을까요?
-
해결됨스프링 시큐리티 OAuth2
클라이언트 실행 시 발생한 오류에 대한 질문
안녕하세요. 섹션 20. OAuth 2.0 Client + Resource Server + Authorization Server 에 대한 질문입니다. Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2022-12-12T02:46:09.215+09:00 ERROR 17972 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'restApiController' defined in file [C:\Users\ryuup\Projects\IntelliJ IDEA\demo7\oauth2client\build\classes\java\main\com\example\oauth2client\RestApiController.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'authorizedClientManager' defined in class path resource [com/example/oauth2client/OAuth2ClientConfig.class]: Unsatisfied dependency expressed through method 'authorizedClientManager' parameter 0: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:9000/" at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:793) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:242) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1344) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1188) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:961) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:915) ~[spring-context-6.0.2.jar:6.0.2] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.2.jar:6.0.2] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.0.jar:3.0.0] at com.example.oauth2client.Oauth2clientApplication.main(Oauth2clientApplication.java:10) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-3.0.0.jar:3.0.0] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authorizedClientManager' defined in class path resource [com/example/oauth2client/OAuth2ClientConfig.class]: Unsatisfied dependency expressed through method 'authorizedClientManager' parameter 0: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:9000/" at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:793) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:543) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1161) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1405) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:880) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:784) ~[spring-beans-6.0.2.jar:6.0.2] ... 24 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:9000/" at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:640) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1161) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1405) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:880) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:784) ~[spring-beans-6.0.2.jar:6.0.2] ... 38 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:9000/" at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) ~[spring-beans-6.0.2.jar:6.0.2] ... 52 common frames omitted Caused by: java.lang.IllegalArgumentException: Unable to resolve Configuration with the provided Issuer of "http://localhost:9000/" at org.springframework.security.oauth2.client.registration.ClientRegistrations.getBuilder(ClientRegistrations.java:228) ~[spring-security-oauth2-client-6.0.0.jar:6.0.0] at org.springframework.security.oauth2.client.registration.ClientRegistrations.fromIssuerLocation(ClientRegistrations.java:152) ~[spring-security-oauth2-client-6.0.0.jar:6.0.0] at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getBuilderFromIssuerIfPossible(OAuth2ClientPropertiesRegistrationAdapter.java:83) ~[spring-boot-autoconfigure-3.0.0.jar:3.0.0] at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getClientRegistration(OAuth2ClientPropertiesRegistrationAdapter.java:59) ~[spring-boot-autoconfigure-3.0.0.jar:3.0.0] at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.lambda$getClientRegistrations$0(OAuth2ClientPropertiesRegistrationAdapter.java:53) ~[spring-boot-autoconfigure-3.0.0.jar:3.0.0] at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na] at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(OAuth2ClientPropertiesRegistrationAdapter.java:52) ~[spring-boot-autoconfigure-3.0.0.jar:3.0.0] at org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientRegistrationRepositoryConfiguration.clientRegistrationRepository(OAuth2ClientRegistrationRepositoryConfiguration.java:49) ~[spring-boot-autoconfigure-3.0.0.jar:3.0.0] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) ~[spring-beans-6.0.2.jar:6.0.2] ... 53 common frames omitted Caused by: org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [java.util.Map<java.lang.String, java.lang.Object>] and content type [text/html;charset=UTF-8] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:124) ~[spring-web-6.0.2.jar:6.0.2] at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1132) ~[spring-web-6.0.2.jar:6.0.2] at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1115) ~[spring-web-6.0.2.jar:6.0.2] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:865) ~[spring-web-6.0.2.jar:6.0.2] at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:714) ~[spring-web-6.0.2.jar:6.0.2] at org.springframework.security.oauth2.client.registration.ClientRegistrations.lambda$oidc$0(ClientRegistrations.java:163) ~[spring-security-oauth2-client-6.0.0.jar:6.0.0] at org.springframework.security.oauth2.client.registration.ClientRegistrations.getBuilder(ClientRegistrations.java:216) ~[spring-security-oauth2-client-6.0.0.jar:6.0.0] ... 65 common frames omitted Process finished with exit code 0 주요 메시지Unable to resolve Configuration with the provided Issuer of "http://localhost:9000"Caused by: org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [java.util.Map<java.lang.String, java.lang.Object>] and content type [text/html;charset=UTF-8]https://github.com/ryuu9505/demo202212120252 인가 서버는 정상 실행이 되었고 클라이언트를 실행할 때 발생한 오류입니다.오류의 의미 혹은 해결 방법에 대한 조언을 부탁드립니다.
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
똑같은 파일이름 저장시 문제점 질문드립니다.
안녕하세요 선생님. MVC03부분에서 MemberController.java입니다.// 회원사진 이미지 업로드(upload폴더에 저장, DB에 파일이름도 저장)@RequestMapping("/memImageUpdate.do")public String memImageUpdate(HttpServletRequest request, HttpSession session, RedirectAttributes rttr) {// 파일업로드 API(cos.jar(고전적 방식), 3가지)MultipartRequest multi=null;int fileMaxSize=10*1024*1024; // 10MBString savePath=request.getRealPath("resources/upload"); // 1.pngtry {// 이미지 업로드 // 1_1.pngmulti=new MultipartRequest(request, savePath, fileMaxSize, "UTF-8", new DefaultFileRenamePolicy());} catch (Exception e) {e.printStackTrace();rttr.addFlashAttribute("msgType", "실패 메세지");rttr.addAttribute("msg", "파일의 크기는 10MB를 넘을 수 없습니다.");return "redirect:/memImageForm.do";}// 데이터베이스 테이블에 회원이미지를 업데이트String memID=multi.getParameter("memID");String newProfile="";File file=multi.getFile("memProfile");if(file !=null) { // 업로드가 된상태(.png, .jpg, .gif)// 이미지파일 여부를 체크->이미지 파일이 아니면 삭제(1.png)String ext=file.getName().substring(file.getName().lastIndexOf(".")+1);ext=ext.toUpperCase(); // PNG, GIF, JPGif(ext.equals("PNG") || ext.equals("GIF") || ext.equals("JPG")){// 새로 업로드된이미지(new->1.PNG), 현재DB에 있는 이미지(old->4.PNG)String oldProfile=memberMapper.getMember(memID).getMemProfile();File oldFile=new File(savePath+"/"+oldProfile);if(oldFile.exists()) {oldFile.delete();}newProfile=file.getName();}else { // 이미지 파일이 아니면if(file.exists()) {file.delete();}rttr.addFlashAttribute("msgType", "실패 메세지");rttr.addFlashAttribute("msg", "이미지 파일만 업로드 가능합니다.");return "redirect:/memImageForm.do";}}// 새로운 이미지를 테이블에 업데이트Member mvo=new Member();mvo.setMemID(memID);mvo.setMemProfile(newProfile);memberMapper.memProfileUpdate(mvo); // 이미지 업데이트 성공Member m=memberMapper.getMember(memID);// 세션을 새롭게 생성한다.session.setAttribute("mvo", m);rttr.addFlashAttribute("msgType", "성공 메세지");rttr.addFlashAttribute("msg", "이미지 변경이 성공했습니다."); return "redirect:/";} 이 코드에서요 사진을 올리면 폴더에 사진파일이 올라가고 원래 DB에 저장된 이름을 가진 사진이 지워지는 거잖아요? 그런데 만약 똑같은 a.jpg 파일을 두번 연속 올리게 되면 처음에는 a.jpg가 폴더에 올라가고 db에 a.jpg가 등록되고 페이지에 a.jpg를 참조해서 사진이 잘 보입니다. 그런데 두번째 올리면 a.jpg가 파일 이름이 같아서 DefaultFileRenamePolicy에 의해서 a1.jpg로 저장이 됩니다. 그런데 여기서 문제가 a1.jpg가 폴더에 올라가고 원래 있었던 a.jpg가 삭제가 되는데 db에는 올릴 때 파일명인 a.jpg가 등록되어버려 페이지에 보여질 때 경로에 a.jpg가 되어 있어 사진이 안 보이게 됩니다. db에 DefaultFileRenamePolicy에 의해서 바뀐 파일명이 올라가게 해야 좋을지 아니면 처음 사진을 제출할 때 파일명이 db의 파일명과 같으면 제출이 안되게 할지 중에서 생각해보니 파일명은 같지만 다른 사진이 있을 수 있기 때문에 바뀐 파일명이 올라가게 했으면 좋겠습니다. 괜찮으시다면 바뀐 파일명이 올라가는 방법과 파일명이 같으면 제출이 안되게 하는법 두가지 방법 한번 알려주실 수 있을까요?? 고민을 많이 해봤는데 딱히 떠오르지 않고 아직 초보라서 구현하기 힘드네요;; 선생님의 도움의 손길을 간절히 바랍니다.
-
미해결실전! 스프링 데이터 JPA
test code에서 repository의 값을 읽어오지 못합니다.
안녕하세요. 강의 잘 듣고 있습니다. tdd를 작성 중 계속 findByStoreId, findByMemberId가 다 되지 않고 있어 그 이유가 궁금해 질문 남깁니다. executorService를 사용하지 않고 orderService.postOrder을 사용하면 findByStoreId, findByMemberId가 정상적으로 실행이 되는데 executorService를 사용하기만 하면 계속 repo에 있는 값을 찾아오지 못하네요,, ㅠ 코드는 아래 첨부해놓았습니다!public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom { Optional<Member> findByMemberId(Long id); }public class Member extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long memberId; @Column(nullable = false) private String name; @Column(nullable = false) private String nickname; @Column(nullable = false) private String password; @Column(nullable = false) private String address; @Column(nullable = false) private String role; @JsonIgnore @OneToMany(fetch = FetchType.LAZY, mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true ) private List<Orders> orders = new ArrayList<>(); @JsonManagedReference @OneToMany(fetch = FetchType.LAZY, mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true ) private List<Likes> likes = new ArrayList<>(); @OneToMany(fetch = FetchType.LAZY, mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true ) private List<Store> stores = new ArrayList<>(); }public class Item extends Timestamped{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long itemId; @Column(nullable = false) private String name; @Column(nullable = false) private int amount; @Column(nullable = false) private int price; //@Enumerated(EnumType.STRING) private String category; @JsonIgnore @OneToMany(fetch = FetchType.LAZY, mappedBy = "item", cascade = CascadeType.ALL, orphanRemoval = true ) private List<OrderHasItem> orderHasItems = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="store_id", nullable = true) private Store store; public Integer changeStock(int amount){ //case1) this.amount < amount if (this.amount < amount){ throw new CustomException(ErrorCode.NOT_ENOUGH_STOCK); } else if (this.amount == 0){ throw new CustomException(ErrorCode.OUT_OF_STOCK); } else{ this.amount -= amount; //stock 감소 } return this.amount; }@Transactional(rollbackFor = {CustomException.class}) public ResponseDto<?> postOrder(OrderRequestDto requestDto, HttpServletRequest request) { //case1)case2)token validity check tokenProvider.tokenValidationCheck(request); //case3) memberService.isPresentMember(requestDto.getMemberId()); //case4)StoreId에 해당하는 가게가 존재하지 않을 때 if (!storeRepository.existsById(requestDto.getStoreId())) { throw new CustomException(ErrorCode.STORE_NOT_FOUND); } //case5)ItemId에 해당하는 Item이 존재하지 않을 때 requestDto.getItemId().forEach(itemId -> { if (!itemRepository.existsById(itemId)) { throw new CustomException(ErrorCode.ITEM_NOT_FOUND); } }); //case6)Item 주문 수량이 0일 때 if (requestDto.getItemId().size() == 0) { throw new CustomException(ErrorCode.NEED_OVER_ONE); } //itemId에 해당하는 내용들을 찾아서 리스트로 List<Item> itemList = requestDto.getItemId() .stream() .map(item -> itemRepository.findByItemId(item).orElse(null)) //x-Lock(pessimistic_write) .collect(toList()); //item을 OrderHasItems에 넣어두기 Orders order = Orders.builder() .member(memberRepository.findByMemberId(requestDto.getMemberId()).orElse(null)) //s-Lock .store(storeRepository.findByStoreId(requestDto.getStoreId()).orElse(null)) //s-Lock .build(); orderRepository.save(order); //s-Lock for (int i=0; i<requestDto.getItemId().size(); i++){ Item item = itemList.get(i); Integer amount = requestDto.getAmount().get(i); OrderHasItem item1 = OrderHasItem.builder() .orders(order) .item(item) .amount(amount) .build(); orderHasItemRepository.save(item1); //s-Lock //stock update item.changeStock(amount); }@Transactional @SpringBootTest public class ServiceCustom{ @Autowired MemberService memberService; @Autowired OrderService orderService; @Autowired LikeService likeService; @Autowired SearchService searchService; @Autowired StoreService storeService; @Autowired MemberRepository memberRepository; @Autowired OrderRepository orderRepository; @Autowired OrderHasItemRepository orderHasItemRepository; @Autowired LikeRepository likeRepository; @Autowired ItemRepository itemRepository; @Autowired StoreRepository storeRepository; @Autowired RefreshTokenRepository refreshTokenRepository; @Autowired TokenProvider tokenProvider; @BeforeEach public void beforeEach() { //FK check 후 삭제 orderHasItemRepository.deleteAll(); likeRepository.deleteAll(); storeRepository.deleteAll(); itemRepository.deleteAll(); orderRepository.deleteAll(); refreshTokenRepository.deleteAll(); memberRepository.deleteAll(); } @AfterEach public void afterEach() { //FK check 후 삭제 orderHasItemRepository.deleteAll(); likeRepository.deleteAll(); storeRepository.deleteAll(); itemRepository.deleteAll(); refreshTokenRepository.deleteAll(); orderRepository.deleteAll(); memberRepository.deleteAll(); } //create Entity protected Store createStore(String name, String address, String category, Long memberId) { Store store = Store.builder() .name(name) .address(address) .category(category) .member(memberRepository.findByMemberId(memberId).get()) .build(); storeRepository.save(store); return store; } protected Item createItem(String name, int amount, int price, String category, Long storeId) { Item item = Item.builder() .name(name) .amount(amount) .store(storeRepository.findByStoreId(storeId).get()) .price(price) .category(category) .build(); itemRepository.save(item); return item; } protected Member createMember(String name, String nickname, String password, String address, String role) { Member member = Member.builder() .name(name) .nickname(nickname) .password(password) .address(address) .role(role) .build(); memberRepository.save(member); return member; } //create Dto protected MemberRequestDto createMemberRequestDto(String name, String nickname, String password, String address, String role) { return MemberRequestDto.builder() .name(name) .nickname(nickname) .password(password) .address(address) .role(role) .build(); } protected OrderRequestDto createOrderRequestDto(Long storeId, Long item1, Integer amount1, Long memberId) { List<Long> itemId = new ArrayList<>(); itemId.add(item1); List<Integer> amount = new ArrayList<>(); amount.add(amount1); return OrderRequestDto.builder() .storeId(storeId) .itemId(itemId) .amount(amount) .memberId(memberId) .build(); } @Test @DisplayName("주문 요청 동시에 진행할 시 동시성 issue 확인") public void 주문_요청_동시성_문제_테스트() { //given Member member = memberRepository.save(createMember("member1", "member1", "1234", "address1", "CONSUMER")); Store store = storeRepository.save(createStore( "store1","address1","category1",member.getMemberId())); Item item = itemRepository.save(createItem( "item1", 1000, 8000,"category1",store.getStoreId())); OrderRequestDto order = createOrderRequestDto(store.getStoreId(), item.getItemId(), 1, member.getMemberId()); MockHttpServletRequest request = new MockHttpServletRequest(); request.addHeader("Authorization", "Bearer " + "1234567890"); request.addHeader("Refresh-Token", "1234567890"); int amountBefore = itemRepository.findAmountByItemId(item.getItemId()); //when int threadCount = 2; ExecutorService executorService = Executors.newFixedThreadPool(threadCount); //concurrent : 2 CountDownLatch latch = new CountDownLatch(threadCount); for (int i=0; i<2; i++){ executorService.submit(() -> { try{ orderService.postOrder(order, request); }catch (Exception e) { log.info("exception : {}", e.getMessage()); }finally{ latch.countDown(); } }); } //then int amountAfter = itemRepository.findAmountByItemId(item.getItemId()); assertThat(amountAfter-amountBefore).isNotEqualTo(2); }
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
user와 request.user
detail.html 코드에서 질문입니다.로그인 한 상태에서 edit 링크를 보여주려고 {% if target_user == request.user %}를 입력하고,Change Info 링크를 보여주기 위해 {% if target_user == user %} 라고 입력했는데....똑같은 역할을 하는 것 같긴 한데, 위의 request.user와 user는 차이가 있을까요?아니면 {% if target_user == user %} 에서 user 앞에 request라는 의미가 함축되어 있는 건가요? <전체 코드>{% extends 'base.html' %} {% block content %} <div> <div style="text-align: center; max-width: 500px; margin: 4rem auto;"> {% if target_user.profile %} <img src="{{target_user.profile.image.url}}" alt="" style="height: 12rem; width: 12rem; border-radius: 20rem; margin-bottom:2rem;"> <h2 style="font-family: 'NanumSquareNeocBd';"> {{target_user.profile.nickname}} {% if target_user == request.user %} <a href="{% url 'profileapp:update' pk=target_user.profile.pk %}"> edit </a> {% endif %} </h2> <h5 style="margin-bottom: 3rem;"> {{target_user.profile.message}} </h5> {% else %} {% if target_user == request.user %} <a href="{% url 'profileapp:create' %}"> <h2 style="font-family: 'NanumSquareNeocBd'"> Create Profile </h2> </a> {% else %} <h2>닉네임 미설정</h2> {% endif %} {% endif %} {% if target_user == user %} <a href="{% url 'accountapp:update' pk=user.pk %}"> <p> Change Info </p> </a> <a href="{% url 'accountapp:delete' pk=user.pk %}"> <p> Quit </p> </a> {% endif %} </div> </div> {% endblock %}