안녕하세요, 좋은 강의 올려주셔서 정말 감사합니다. 강의 덕분에 프로젝트를 무사히 할 수 있게 되었습니다. jwt 구현하면서 궁금한 점이 생겨 질문을 남기게 되었습니다. jwt를 사용하면서 컴퓨터 a에서 로그인하고 나서 컴퓨터 b에서 로그인을 할 경우, 중복 로그인이 발생하는데 이전 강사님 강의에서는 세션을 사용하면 세션에서 방지할 수 있다고 배웠으나 jwt에서는 세션을 사용하지 않기 때문에 중복 로그인을 어떻게 막을 수 있는 지 궁금하여 질문을 남기게 되었습니다. 나름대로 찾아본 결과, 디비에 로그인을 시도에 대한 컬럼을 넣고 이전 로그인의 토큰을 무효화하고 이후에 들어온 로그인에 대한 토큰으로 인증을 처리 -> 이렇게 되면 액세스 토큰, 리프레시 토큰을 모두 디비에 넣던가, 아니면 액세스 토큰의 만료시간을 굉장히 작게 잡아서 사용해야 할 것 같은데 모두 디비에 넣고 사용하게 되면 jwt 방식에 대한 효율점이 적어지게 되는데 어떤 점이 좋은 지 궁금하여 남기게 되었습니다. 하드웨어의 ip 값을 디비에 저장해서 사용하는 것이 좋은 건가요? 읽어주셔서 감사합니다.
안녕하세요! 먼저 좋은 강의 감사드립니다. 수강 중 궁금한 부분이 생겨 글 작성합니다. user-service 프로젝트에서는 @EnableDiscoveryClient 을 추가해주었는데, apigateway-service와 catalog-service에서는 @EnableDiscoveryClient 를 추가해주지 않아서 그 이유가 궁금하여 질문드립니다. @EnableDiscoveryClient 는 eureka server에 등록하기 위한 어노테이션이라고 이해했습니다. user-service 와 마찬가지로 apigateway-service, catalog-service에도 아래 설정은 추가되어서 eureka server에 등록되는 것이라고 생각하였는데 왜 위 어노테이션은 빠진 것인지 궁금했습니다! 그리고 위 어노테이션과 아래 설정의 정확한 의미 차이도 궁금합니다. 감사합니다!! eureka: client: register-with-eureka: true fetch-registry: true
안녕하세요! UI 디자인 원리중 '유사성의 원리' 와 'CTA의 중요성'을 중점으로 잘 사용되고, 사용되지 않은 사례들에 대해 찾아보았습니다. 좋은 사례 <직방> 먼저 좋은 사례로는 직방 어플을 선택했습니다. [메인 - 카테고리 선택 - 매물 선택] 의 순서로 보았을때 메인 - 각 아파트,빌라, 원룸 등 집을 알아보기 위한 사람들에게 한눈에 알아보기 쉽게 그룹화 되어있습니다. 카테고리 선택 - 원하는 동네 (또는 지역)을 지도/ 지하철역으로 찾기로 사용자가 더 편한 방법으로 선택할 수 있도록 합니다. 매물 선택 - 선택한 매물의 정보들이 나열되며, 원하면 바로 문의도 할 수있는 CTA가 자리합니다. 하지만 여기서 조금 아쉬웠던 부분은 CTA의 옆에 매물의 정보가 아닌, 상단에있는 찜버튼(하트)와 공유하기 버튼이 왔으면 더 좋지 않았을까 라는 생각을 했습니다. 전체적으로 이 어플을 사용했을 때, 직관적이고 사용자가 한눈에 알아보고 사용할 수 있게끔 유도한다고 느껴졌습니다. 안좋은 사례 <스테이폴리오> 안좋은 사례로는 스테이폴리오_여행 숙소 예약 어플입니다. 메인 - 원하는 여행지의 숙소를 찾으러 들어간 사용자의 입장에서 보았을 때, 사용하기 어렵다는 생각이 들었습니다. 여행지와 여행 날짜를 선택할 수 있는 버튼이 상단에 아이콘으로 작게 들어가 있는게 아쉬웠습니다. 한 눈에 보이도록 위치했다면 더 좋지 않았을까 싶습니다. 숙소 선택 - 숙소에 대한 컨셉부터 설명까지 너무 많은 글로 나열되어있고, 그 글들 사이에 예약하려는 방이 이미지로 보여져 그래도 눈에 띄었지만, 가격과 [예약하기] 버튼이 더 잘 보이도록 위치했으면 어땠을까? 라는 생각이 들었습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. contextLoads라는 오류가 생겼는데 어디가 잘 못된 건지 찾지 못해 질문드립니다. Failed to load ApplicationContext (오류문구 중) java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:98 ) at org.springframework.test.context.support .DefaultTestContext.getApplicationContext( DefaultTestContext.java:124 ) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary( ServletTestExecutionListener.java:190 ) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance( ServletTestExecutionListener.java:132 ) at org.springframework.test.context.TestContextManager.prepareTestInstance( TestContextManager.java:248 ) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance( SpringExtension.java:138 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8( ClassBasedTestDescriptor.java:363 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable( ClassBasedTestDescriptor.java:368 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9( ClassBasedTestDescriptor.java:363 ) at java.base/java.util.stream.ReferencePipeline$3$1.accept( ReferencePipeline.java:195 ) at java.base/java.util.stream.ReferencePipeline$2$1.accept( ReferencePipeline.java:177 ) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining( ArrayList.java:1655 ) at java.base/java.util.stream.AbstractPipeline.copyInto( AbstractPipeline.java:484 ) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto( AbstractPipeline.java:474 ) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining( StreamSpliterators.java:312 ) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining( Streams.java:735 ) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining( Streams.java:734 ) at java.base/java.util.stream.ReferencePipeline$Head.forEach( ReferencePipeline.java:658 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors( ClassBasedTestDescriptor.java:362 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6( ClassBasedTestDescriptor.java:283 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance( ClassBasedTestDescriptor.java:282 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4( ClassBasedTestDescriptor.java:272 ) at java.base/java.util.Optional.orElseGet( Optional.java:369 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5( ClassBasedTestDescriptor.java:271 ) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances( TestInstancesProvider.java:31 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0( TestMethodTestDescriptor.java:102 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare( TestMethodTestDescriptor.java:101 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare( TestMethodTestDescriptor.java:66 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$prepare$2( NodeTestTask.java:123 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.prepare( NodeTestTask.java:123 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:90 ) at java.base/java.util.ArrayList.forEach( ArrayList.java:1541 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at org.junit.platform.engine.support .hierarchical.Node.around( Node.java:137 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base/java.util.ArrayList.forEach( ArrayList.java:1541 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at org.junit.platform.engine.support .hierarchical.Node.around( Node.java:137 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.submit( SameThreadHierarchicalTestExecutorService.java:35 ) at org.junit.platform.engine.support .hierarchical.HierarchicalTestExecutor.execute( HierarchicalTestExecutor.java:57 ) at org.junit.platform.engine.support .hierarchical.HierarchicalTestEngine.execute( HierarchicalTestEngine.java:54 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:107 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:88 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0( EngineExecutionOrchestrator.java:54 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams( EngineExecutionOrchestrator.java:67 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:52 ) at org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:114 ) at org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:86 ) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute( DefaultLauncherSession.java:86 ) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute( SessionPerRequestLauncher.java:53 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses( JUnitPlatformTestClassProcessor.java:99 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000( JUnitPlatformTestClassProcessor.java:79 ) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop( JUnitPlatformTestClassProcessor.java:75 ) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop( SuiteTestClassProcessor.java:62 ) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:36 ) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch( ReflectionDispatch.java:24 ) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch( ContextClassLoaderDispatch.java:33 ) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke( ProxyDispatchAdapter.java:94 ) at com.sun.proxy.$Proxy2.stop(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run( TestWorker.java:193 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName( TestWorker.java:129 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:100 ) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute( TestWorker.java:60 ) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute( ActionExecutionWorker.java:56 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:113 ) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call ( SystemApplicationClassLoaderWorker.java:65 ) at worker.org.gradle.process.internal.worker.GradleWorkerMain.run ( GradleWorkerMain.java:69 ) at worker.org .gradle.process.internal.worker.GradleWorkerMain.main( GradleWorkerMain.java:74 ) Caused by: org.springframework.beans.factory.support .BeanDefinitionOverrideException: Invalid bean definition with name 'memberService' defined in class path resource [com/example/hellospring/service/SpringConfig.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=springConfig;
안녕하세요. 추가로 개인적으로 공부를 하다가 궁금한 점이 생겨서 질문드립니다! Projections 사용 시에 DTO 의 생성자 방식으로 사용하였는데, 혹시 DTO 안에 DTO 를 사용하는 방식은 가능할까요?? 이런 방식으로도 사용이 가능한 지 궁금해서 질문을 남겨봅니다! 감사합니다!
안녕하세요! 미션으로 내주신 UX디자인의 좋은 사례와 안 좋은 사례에 관해 글 남깁니다! 강의해주신 UX 디자인 원리 중에 '정보설계와 사용자의도'를 중점으로 찾아보았습니다. 좋은 사례 <올리브영_PC><올리브영_MO> <올리브영_MO> 좋은 사례로는 '올리브영'의 웹사이트와, 어플입니다. 올리브영은 특히나 사용자의 의도를 잘 파악한 것 같다고 생각했습니다. 상단에는 바로 보이는 카테고리들로, 높은의도를 가진 사람들이 바로 접근하여, 원하는 제품을 찾을 수 있도록 합니다. 중간부터 아래로 내려갈수록 본인에게 맞는 제품을 추천해주거나, 인기 있는 제품들을 노출 시킴으로, 낮은 의도를 가진 사람들이 관심 있게 둘러볼 수 있도록 해줍니다. 저 또한 사용해보면서, 높은 의도를 가지고 접속했을때에도 저만을 위한 제품을 추천해주는 카테고리에 눈길이가 한번 더 둘러봤던 경험이 있습니다. 이처럼 높은 의도를 가진 사람에게도 더 둘러보게 하는 흥미를 주고, 낮은 의도를 가진 사람들도 다양하게 찾아볼 수 있도록 해주었다고 생각합니다. 안좋은 사례 <'EQL' 쇼핑 플랫폼> 안좋은 사례로는 'EQL' 쇼핑 플랫폼입니다. 어플을 처음 접속했을 때, 화면의 반 이상을 채워 크게 보이는 이벤트 컨텐츠가 너무 눈길을 사로 잡아, 다른 부분들이 잘 눈에 들어오지 않는 듯 했습니다. 높은 의도를 가진 사람이 메뉴를 선택하기 위해선, 하단바에 있는 메뉴 버튼을 눌러야만 합니다. 페이지의 가장 상단에 있는 이벤트 컨텐츠 밑에 작게 있는 간편 메뉴 (투데이, 우먼, 맨, 라이프)를 선택했을 시엔 각 카테고리의 베스트 순위가 바로 나열되지 않고, 이벤트 중인 브랜드의 광고가 뜹니다. 그래서 베스트 순위를 확인 하려면 버튼을 눌러 또 한번 페이지를 넘어가야 하는 번거로움이 있습니다. 저도 직접 사용해보면서 물론, 낮은 의도를 가진 사람들은 다양하게 둘러볼 수 있다 라는 장점으로 와 닿는 페이지가 될 수도 있지만, 처음 접속하고, 원하는 제품이 확실히 있는 경우엔, 검색 창도, 메뉴도, 하단에 있는 버튼을 선택해야만 확인할 수 있다는 점이 조금은 낯설고 불편하다고 느끼게 되었던 것 같습니다. 물론 두가지의 어플/웹사이트를 자주 사용해보면서 좋은점도 아쉬운 점도 각각 있었지만, 가장 두드러지게 느낀점들을 토대로 작성해보았습니다!
안녕하세요 선생님 질문이 있습니다. 다른 질문들을 읽어보니 인증관련 관계도를 보면 이렇습니다. Session > SecurityContext > Authentication > UserDetials 입니다. + 그리고 스프링 시큐리티에서 SecurityContext 에 인증객체를 저장하는 것은 세션과는 아무런 상관이 없습니다. SecurityContextHolder > ThreadLocal > SecurityContext > Authentication > UserDetails 이러한 관계도를 가진다고 말씀해주셔서 디버깅 해보니 인증을 성공한 시점에 request.getSession에서 attribute로 SecurityContextImpl 을 들고 있다는것을 확인하였습니다. 궁금한 것은 spring security에서 SecurityContext에 인증객체를 저장하는것은 세션과 아무런 상관이 없다는것이 session은 attributes에 들고 있고 SecurityContextHolder는 threadlocal에 들고 있으니 그냥 각각 다른 저장소에 같은것을 저장할 뿐이다. 그래서 아무런 상관이 없다. 라고 이해하면 맞을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: ) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 복습하다가 궁금한 점이 생겨 질문드립니다 3 way handshake가 tcp 계층에서 실행되는데 연결시 ip 정보 없이 port정보로만 연결 하는 것인가요 ??? 그러면 3 way hand shake 연결 후 ip layer에서 ip정보 , network access layer에서 mac 정보가 추가된 후 클라리언트에게 패킷을 전달하는 것인가요???
GraphQL 완전정복 (키오스크를 만들며 배우는 풀스택 과정) - [2024 부분 리뉴얼]
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 전달인자가 있을때 화살표 함수를 쓰는게 더좋을까요.? Props 전달시 아래두개 차이는 무엇일까요? {함수명} {() => 함수명() }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 오류가 났는데 이 두가지밖에 안 뜹니다..
안녕하세요, podman으로 환경 구성을 하던 중 질문이 있습니다. root 계정에 podman을 설치하고 이미지를 pull해와서 컨테이너를 빌드해봤습니다. 그리고 나서 다른 user로 접속하여 이미지와 컨테이너를 검색해보니 아무것도 보이지 않습니다. docker에서는 docker 그룹에 user를 추가하여 사용하였는데 podman group은 없는것 같네요...?! 임의로 sudo podman images 해주니까 보이긴 합니다. 모든 계정에서 동일한 이미지와 컨테이너를 보려면 어떻게 해야되나요? 다른 user계정에 root권한을 주지 않고 가능한 방법이 있을까요?
// 2. DTO를 사용할 경우 @GetMapping("/api/v2/members") public MemberListResponse<List<Member>> membersV2(){ List<Member> member = memberService.findMembers(); return new MemberListResponse<List<Member>>(member); } @Data @AllArgsConstructor static class MemberListResponse<T>{ private T member; } 저는 김영한 강사님과 다르게 위에 코드처럼 구현했는데 이렇게 구현해도 문제 없는 걸까요? 성능상 안 좋거나 단점이 있는지 알고 싶습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import sys sys.stdin=open("input.txt", "rt") T=int(input()) for t in range(T): n, s, e, k = map(int, input().split()) a=list(map(int, input().split())) a=a[s-1:e].sort() print("#%d %d"%(t+1,a[k-1])) 저는 처음에 코드를 이런식으로 작성을 했었는데 TypeError: 'NoneType' object is not subscriptable 에러가 뜨게 됩니다. 검색해서보니 none인 경우에 index를 사용하려고 할때 다음과 같은 에러가 생긴다는 것을 알게 되었습니다. sort()함수를 같이 써주고 a를 출력해보면 none이 뜨게 되는데 왜 none이 뜨는지 그 이유를 모르겠습니다. a=a[s-1:e].sort() a=a[s-1:e] a.sort() 이렇게 쓰면 저는 같은 결과가 나올 것이라고 생각했는데 위에 코드에서 a를 찍어보면 none이 출력됩니다. 그 이유가 알고 싶습니다.