묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
런타임 시점의 정확한 의미는?2개?한개?
1. CGLIB에서 말하는 런타임의 정확한 시점이 궁금한데? 프록시를 생성하고 바이트 코드를 조작하는 그 시점이 런타임 이다 라고 하는게 맞나요? 스프링이 빈을 컨테이너에 등록하기 이전에 프록시를 생성해서 빈으로 등록하는 그 시점을 런타임이라고 하는거죠?2. AOP 적용 방식 3가지 중 마지막 런타임시점에 대해여기서 스프링이 쓰는 AOP도 결국 CGLIB인데 그러면 여기서 말하는 런타임의 정확한 의미도 1번과 동일한 시점을 얘기하는건가요?아니면 실제 객체의 메소드를 호출하는 그 시점을 런타임 이라고 얘기하는건가요? 아니면 둘다인가요?
-
미해결스프링 핵심 원리 - 고급편
위빙
위빙이 AOP 적용을 위해 애스펙트를 객체에 연결한 상태라고 하셨는데객체는 실제 타겟 객체이지요?스프링 AOP 는 런타임시점에, 컨테이너 로딩시점에, 프록시 생성시점에 위빙을 한다라고 하셨는데위빙이란게 결국 아래 코드 부분의 부가기능이 타겟 객체 호출(joinPoint.proceed) 앞뒤로 만들어주는걸(프록시 객체를 생성하는 시점에서 바이트 코드를 조작해서 심어줌)말씀하시는건가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
Redis만 사용하면 인증 상태 영속이 되지 않습니다..!
안녕하세요 구버전에 이어 신버전 강의도 출시해주셔서 감사합니다! 구버전 커뮤니티에 질문올렸었는데요~이번 강의를 봐도 해결이 되지않아서 질문 올려봅니답..!직접 spring security 메인테이너나 컨트리뷰터들한테도 물어봤는데, 제가 제대로 질문을 못해서인지 해결을 못했는데요. 시큐리티 + formlogin + Redis를 활용해서 인증방식을 구현했습니다. 아래 코드로 인증 객체를 꺼낼때 문제가 발생합니다. @ResponseStatus(HttpStatus.OK) @GetMapping("/test") public void test() { SecurityContextHolderStrategy contextHolderStrategy = SecurityContextHolder.getContextHolderStrategy(); System.out.println(">> contextHolderStrategy : " + contextHolderStrategy); // org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@7e1fbf12 SecurityContext context = contextHolderStrategy.getContext(); System.out.println(">> context : " + context); // SecurityContextImpl [Authentication=AnonymousAuthenticationToken Authentication authentication = context.getAuthentication(); System.out.println(">> authentication : " + authentication); // AnonymousAuthenticationToken MemberContext memberContext = (MemberContext) authentication.getPrincipal(); System.out.println(">> memberContext : " + memberContext); // ClassCastException String username = memberContext.getUsername(); System.out.println(">> username : " + username); } Redis를 사용하지 않고 tomcat에 저장할 경우 session을 통해서 인증 객체를 잘 받아오는데,>> contextHolderStrategy : org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@54f61d2b >> context : SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=A220DB3D8904393F7D9831276564566A], Granted Authorities=[ROLE_ADMIN]]] >> authentication : UsernamePasswordAuthenticationToken [Principal=com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=A220DB3D8904393F7D9831276564566A], Granted Authorities=[ROLE_ADMIN]] >> memberContext : com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]] >> username : sejinpark@email.com Redis만 사용하면 인증 완료 후 인증 후 요청에서 Anonymous로 변경됩니다.>> contextHolderStrategy : org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@577154a7 >> context : SecurityContextImpl [Authentication=AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=16bec162-3ad3-459d-8b97-bf3d6f1de226], Granted Authorities=[ROLE_ANONYMOUS]]] >> authentication : AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=16bec162-3ad3-459d-8b97-bf3d6f1de226], Granted Authorities=[ROLE_ANONYMOUS]] 2024-04-17T07:49:13.061+09:00 ERROR 84540 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.spring.security.config.security.service.MemberContext (java.lang.String is in module java.base of loader 'bootstrap'; com.spring.security.config.security.service.MemberContext is in unnamed module of loader 'app')] with root cause java.lang.ClassCastException: class java.lang.String cannot be cast to class com.spring.security.config.security.service.MemberContext (java.lang.String is in module java.base of loader 'bootstrap'; com.spring.security.config.security.service.MemberContext is in unnamed module of loader 'app') at com.spring.security.controller.MemberController.test(MemberController.java:43) ~[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]Redis 내부에 인증객체가 저장되어 있는것 까지 확인했는데요. 혹시 SecurityFilterChain에 Redis관련 저장소를 별도로 설정을 해줘야 하는지, 어떤 부분을 확인해야하는지 여쭙고 싶습니다. Redis를 사용하는데 계속 HttpSessionSecurityContextRepository에서 시큐리티 컨텍스트를 찾을 수 없다고 나옵니답.2024-04-17T17:05:01.251+09:00 WARN 30066 --- [nio-8080-exec-1] w.c.HttpSessionSecurityContextRepository : SPRING_SECURITY_CONTEXT did not contain a SecurityContext but contained: '{authentication={authorities=[{authority=ROLE_ADMIN}], details={remoteAddress=0:0:0:0:0:0:0:1, sessionId=null}, authenticated=true, principal={password=null, username=sejinpark@email.com, authorities=[{authority=ROLE_ADMIN}], accountNonExpired=true, accountNonLocked=true, credentialsNonExpired=true, enabled=true}, credentials=null, name=sejinpark@email.com}}'; are you improperly modifying the HttpSession directly (you should always use SecurityContextHolder) or using the HttpSession attribute reserved for this class? 우선 테스트용으로 SecurityFilterChain에서 아래처럼 기존 버전 처럼 사용해서 인증 상태를 무조건 저장할 수 있도록 해놨습니다.커스텀 인증필터를 사용 안하고, SecurityContextPersistanceFilter를 사용하도록했습니다.securityContext.requireExplicitSave(false);테스트용으로 만든 레포지토리 링크 첨부합니다!https://github.com/codesejin/security-test
-
미해결스프링 핵심 원리 - 기본편
request scope의 http 요청
"request: HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다." 여기서 HTTP 요청이라는게 사용자가 웹 브라우저 주소창에 URL을 입력하는 것인지 아니면 myLoggerProvider.getObject();코드가 컨테이너에 MyLogger 빈의 존재 유무를 묻는 걸 뜻하는건지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
갑자기 코드가 실행이 안됩니다. Edit Configuration
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]View 환결설정 강의를 시청하는중 아무런 문제없이 코드들은 잘 작성하고있엇습니다. dev tools 추가해서 recompile로 간편하게 해보는걸 하는중 윈도우 단축기는 crtl shift f9이라고 나왔고 그래서 몇번 계속 해보던중 갑자기 코드가 실행이 안되기 시작했습니다. 우선 HelloController, JpaShopApplication 마크가 클래스에서 자바 커피 모양으로 바뀌면서 .java가 붙엇고 실행하려고하면 Edit Configuration 이 나오면서 사진과 같은 창이 나오고 Cannot snapshot C:\Users\juny2\OneDrive\Desktop\study\jpashop\jpashop\build\resources\main\static\index.html: not a regular file 이라는 경고문이 나옵니다. build.gradle 다시 세팅햇더니 다시 클래스 마크로 돌아오긴했는데 여전히 같은 경고문 , Edit configuration이 뜨면서 실행이 안됩니다. (수정) 저기 Edit Config 설정하고 다른 글에서 snapshot 에러뜨면 Onedrive 밖으로 프로젝트 옮겨보라고 하셔서 프로젝트 옮겻고 정상적으로 돌아는가네요. 근데 문제는 index.html파일이 없는 상태에서 이렇게 초기화면에 뭐가 주르륵 뜨는데 어떻게 해결하는지 모르겟습니다. ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
크롬 주소입력창 자동으로 대문자 변경
안녕하세요, View 환경설정을 수강하고 있습니다.Controller에서 hello 부분 작성하고 있는데요. 주소창에 localhost:8080/hello라고 검색해도 자동으로 localhost:8080/Hello 로 검색이 됩니다. 이 부분 때문에 계속 에러 페이지 떠서, GetMapping부분을 "Hello"로 바꿔서 실행하니까 데이터는 출력이 잘 됩니다. 다만, 강사님이 작성하신대로 localhost:8080/hello을 검색했을때, 화면이 잘 나오게 하고 싶습니다. 자동으로 변환하는걸 막을 수는 없을까요 ㅠㅠ?
-
해결됨
스프링 오류 질문드립니다.
package jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() { Member member = new Member(); member.setUsername("memberA"); Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); //JPA 엔티티 동일성 보장 } } 위의 코드를 실행했는데, 아래와 같은 오류가 나왔습니다. 해결책을 알려주시면 감사하겠습니다. ... 91 common frames omitted============================CONDITIONS EVALUATION REPORT============================Positive matches:----------------- NoneNegative matches:----------------- NoneExclusions:----------- NoneUnconditional classes:---------------------- None2024-04-17T00:07:39.846+09:00 WARN 5176 --- [ Test worker] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [jpabook.jpashop.MemberRepositoryTest@41a23470]java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@48368a08 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@49cb9cb5, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@146587a2, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16c63f5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@6127a7e, org.springframework.boot.test.context.SpringBootTestAnnotation@8694b330], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] ... 55 moreCaused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) > Task :test FAILEDMemberRepositoryTest > testMember FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1786 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:276 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:1911 test completed, 1 failedFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/study/jpashop/build/reports/tests/test/index.html* Try:> Run with --scan to get full insights.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 6s4 actionable tasks: 1 executed, 3 up-to-date
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
errors.properties intelliJ 인식 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]왜 제 errors.properties는 아이콘 모양이 바뀌지 않고 인식을 안하는 걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findAny() 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션3 회원 도메인과 리포지토리 만들기 강의 중 MemoryMemberRepository.java의 findByName 코드에 대해 질문 있습니다.@Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); }해당 코드에서 findAny()는 하나라도 찾으면 반환한다고 설명해주셨는데 그럼 같은 이름의 서로 다른 회원이 여러 명 있어도 루프를 돌리면서 가장 먼저 찾은 한 명의 회원만 반환하는 건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring boot 초기 설치시 index파일
안녕하세요, spring boot를 처음에 설치하면 index.html이 없고 localhost:8080 으로 가면 error 문구가 적혀있는 화면이 출력됩니다. 개발자도구에 들어가서 보니까 해당 부분이 index이라고 되어있던데 실제로 스프링 부트에서 찾아보니까 해당 내용은 찾을 수가 없었습니다. 스프링부트에서 프로젝트를 생성한 후 임시로 index.html 파일을 생성해준것인가요?!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 db 설치 후 테이블 생성에서 오류
어떤게 문제 일까요.....
-
미해결스프링 핵심 원리 - 기본편
강의를 따라가다가 하나의 빈이 필요한데, 2개의 빈이 조회된다고 나오면서 스프링 서버가 띄워지지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 핵심 원리 - 기본편 수강 도중 영한님 코드를 보면서 실습하면서 진행하다가 스프링을 띄우면 갑자기 아래의 오류가 발생합니다. Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [/Users/wonjunjeong/study/inflearn/kim/project/core/out/production/classes/hello/core/member/MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class] @Component 애노테이션 때문이라고 생각되는데요, 코드를 보시면 아시겠지만, 이 애노테이션을 교재에 나와있는 것처럼 MemoryMemberRepository, RateDiscountPolicy, MemberServiceImpl, OrderServiceImpl에다가만 넣었습니다.그랬는데도 위와 같은 오류가 발생하는 게 이해가 가질 않아 질문 드립니다.분명 AutoAppConfig 클래스에서 excludeFilters로 Configuration.class를 제외했는데도 불구하고 이런 빈 오류가 발생하는 이유를 모르겠습니다.전체 코드를 올리고 싶지만 파일 업로드가 안 되는 것 같아, AppConfig와 MemoryMemberRepository 두 코드만 아래에 올리겠습니다. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { // @Bean: memberService -> new MemoryMemberRepository() // @Bean: orderService -> new MemoryMemberRepository() @Bean public MemberRepository memberRepository() { System.out.println("Call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService memberService() { System.out.println("Call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { System.out.println("Call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } } package hello.core.member; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Component; @Component public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(), member); } @Override public Member findById(Long memberId) { return store.get(memberId); } }
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터 에러 미전달 케이스
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용]기존 섹션에서 추가한 인터셉터가 있는 경우 sendError에서 지정한 에러 코드가 아닌 정상 값을 응답 값을 전달받은 이유가 궁금합니다. 에러를 포함한 응답 값이 없는 경우 톰캣에서 무조건 200 값을 반환하는 것인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
main함수 실행 시 무한 로딩이 걸립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.처음에 spring boot세팅하고 JpashpApplcation의 메인 함수를 실행하면 강의 영상과 달리 로딩 버튼이 뜨는데 계속 기다려도 사라지지 않습니다. 그리고 중간에 그냥 stop하면 Execution failed for task ':JpashopApplication.main()'.> Build cancelled while executing task ':JpashopApplication.main()'* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 1m 4s3 actionable tasks: 1 executed, 2 up-to-date 이렇게 뜨네요. 하지만 localhost:8080은 정상 실행되는데 문제 없는건가요?
-
해결됨스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException이 떠서 CoreApplicationTests가 안됩니다..
UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/yungyeong-il/Desktop/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository 이렇게 애러가 떴는데 어떤걸 고쳐할지 모르겠습니다. 현재 강의는 색션7 의존관계 자동 주입 옵션처리 듣던중에 발견했습니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 작동순서가 맞는지 확인 부탁드립니다!
@Controller @RequestMapping("/springmvc/v3/members") public class SpringMemberControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @GetMapping("/new-form") public String newForm() { return "new-form"; } } 핸들러 조회: 클라이언트로부터 /springmvc/v3/members/new-form에 대한 GET 요청이 들어오면, 스프링 MVC는 @RequestMapping("/springmvc/v3/members")과 @GetMapping("/new-form")을 통해 이 요청을 처리할 SpringMemberControllerV3 클래스의 newForm() 메소드를 핸들러로 결정합니다.핸들러를 처리할 수 있는 핸들러 어댑터 조회: 스프링은 결정된 핸들러(컨트롤러의 메소드)를 실행할 수 있는 핸들러 어댑터를 찾습니다. 스프링 MVC에는 여러 종류의 핸들러 어댑터가 있으며, 이 경우에는 RequestMappingHandlerAdapter가 사용됩니다.handle(): 핸들러 어댑터는 핸들러 메소드(newForm())를 호출하는 handle() 메소드를 실행합니다.handler(controller) 호출: newForm() 메소드가 호출되어 실행됩니다. 이 메소드는 뷰의 이름을 문자열로 반환합니다. 여기서는 "new-form"이 반환됩니다.ModelAndView 반환: 이 예제에서는 단순히 뷰 이름을 문자열로 반환합니다. 스프링 MVC는 이 문자열을 바탕으로 ModelAndView 객체를 내부적으로 생성하며, 모델 데이터는 비어 있고, 뷰 이름은 "new-form"입니다.ViewResolver 호출: 반환된 뷰 이름 "new-form"을 기반으로 ViewResolver가 호출됩니다. ViewResolver의 역할은 뷰 이름을 실제 뷰 객체로 변환하는 것입니다. 스프링 MVC에서는 InternalResourceViewResolver 등 다양한 ViewResolver 구현체를 사용할 수 있으며, 이는 보통 applicationContext.xml 혹은 @Configuration 설정 클래스에서 설정됩니다.View 반환: ViewResolver는 요청된 뷰 이름에 해당하는 실제 뷰 객체를 찾아 반환합니다. 예를 들어, JSP를 사용하는 경우, "new-form" 이름은 /WEB-INF/views/new-form.jsp 파일에 해당하는 JstlView 객체로 해석될 수 있습니다.render(model) 호출: 뷰 객체는 ModelAndView에서 제공하는 모델 데이터(이 예제에서는 비어 있음)를 사용하여 뷰를 렌더링합니다. 렌더링 과정에서 최종적으로 클라이언트에게 보낼 HTML이 생성됩니다.HTML 응답: 생성된 HTML이 클라이언트에게 응답으로 전송됩니다. 클라이언트는 이 HTML을 받아 브라우저에서 렌더링합니다. MVC의 대략적인 개념을 위와 같이 이해하면 될까요? (gpt가 정리해준건데 정확한지 모르겠습니다 ㅠ)
-
미해결스프링 핵심 원리 - 기본편
NoUniqueBeanDefinitionException 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]안녕하세요! 현재 기본편 Sec 7에 옵션처리 쪽을 듣고 있습니다. 2분 쯤 중에 오류가 나서 같이 라이브 코딩을 하면서 오류를 고치고 있었습니다. 하지만 영한님께서 오류를 고쳤지만 저는 자바 `CoreApplicationTest`에서 오류가 납니다. 오류의 내용은 IllegalStateException, UnsatisfiedDependencyException, NoUniqueBeanDefinitionException 세가지 오류가 납니다. NoUniqueBeanDefinitionException는 이름이 같은 Bean이 있는거 같아서 열심히 @Component 가 붙은 클래스들을 살펴보았습니다. 하지만 제가 봤을때는 중복된 Bean이 보이지 않았습니다. 오류의 내용 중에 memberServiceImpl에서 같은 빈이 두개가 발견되었다고 하던군요. 아마 제가 찾지 못하는 거 같은데 혼자서 오류를 찾을려고 잘 보이지도 않고 막막해서 질문 드립니다. 다음은 압축한 코드입니다. https://drive.google.com/file/d/1nie2IVX8eCfmNC4PmjTr9uMowFjMoEpm/view?usp=sharing
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
ec2서버에서 user예약어 관련 오류이신분
현제 45강까지 완료했고구글링해서 user라는 키워드가 현제 제가 쓰고있는 버전에서는 예약어이기때문에 사용아 안된다는것까지 인지했습니다.그래서 yml에 dev에 해당하는 url에 NON_KEYWORDS=USER까지 입력했고User class에 @Table(name ="USER")까지 적용해서git을 이용해서 ec2서버에 적용했지만 동일한 오류가 발생합니다.2일정도를 해결하려했는데 안되어서 질문 남깁니다.저의 github 는 https://github.com/Jo-Jun-Yeong/library-app입니다.그리고 제가 사용하는 hc2 ip는54.180.104.239입니다 다른 인프런에 답글달아주신 글도 봤지만user가 예약어이니 nonkeyword적용해라 이상의 해결을 못봤습니다..///////////////////////////////////////////라고 질문하려했는데마지막으로 ./gradlew build가 적용되지않아서 그런거지않을까? 해서 ./gradlew clean 후 build했더니 적용되었습니다.특히 User.class에 @Table(name="user")적용을 해야 하는것 같습니다. 저처럼 2틀동안 삽질하지 않으셨으면 좋겟네요
-
미해결실전! 스프링 데이터 JPA
스프링 부트 3.x버전은 쿼리가 다르게 나오나요?
slice 설명해주시는 부분인 16:30 부분에 쿼리가 저는 아래와 같이 나오는데 하이버네이트6 버전이여서 다르게 나오는 걸까요?selectm1_0.member_id,m1_0.age,m1_0.team_id,m1_0.usernamefrommember m1_0wherem1_0.age=?order bym1_0.username descoffset? rowsfetchfirst ? rows onlyList로 테스트 하는 경우도(18:57) 아래와 같이 다르게 나옵니다.selectm1_0.member_id,m1_0.age,m1_0.team_id,m1_0.usernamefrommember m1_0wherem1_0.age=?order bym1_0.username descoffset? rowsfetchfirst ? rows only
-
미해결스프링 핵심 원리 - 고급편
섹션 11 @target, @within 중 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, AOP에서 사용하는 포인트컷 지시자에서, args, @args, @target은 단독으로 사용하게 된다면 스프링 모든 빈에 대해서 적용을 시도하기 때문에, 에러가 나는 것을 강의에서 확인해주셨는데요.그런데, execution을 사용할 때 모든 메서드에 대해서 적용이 가능하도록 execution(* *(..)) 과 같은 식으로 사용해도 스프링 모든 빈에 대해서 적용을 시도하게 되고, 그러면 동일하게 에러가 발생해야되지 않는지 궁금합니다! (test 초반에 에러 안 나는 것은 봤는데 왜일까요 ㅠㅠ)