묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 부트 - 핵심 원리와 활용
autoconfiguration 관련 질문
[질문 내용]강의 예제에서 스프링부트에서 DBConfig 클래스 생성해서 @Configuration을 달고 안에서 관련 빈들을 스프링컨테이너에 등록을 하니 기존 자동구성에 의해 등록되는 빈은 이미 개발자가 등록한 빈에 의해 따로 추가적으로 등록이 안되는 걸로 이해했습니다. 그러면 이러한 빈을 등록하는 순서가 추가적인 설정이 없다면 항상 개발자가 등록한 빈부터 등록하고 이후에 스프링 부트의 자동 구성에 의한 빈등록이 일어나는건가요?? starter와 같은 라이브러리를 gradle에 사용해서 추가해주면 자동으로 수많은 빈들이 생성해서 스프링 컨테이너에 등록되는 걸로 이해했습니다. 해당 라이브러리 내에 있는 수많은 빈들 중에 사용을 원하지 않는 것들도 있을텐데, 그러한 것도 모두 등록이 되는건가요?? 아니면 사용을 안하는 빈들은 따로 등록이 되지 않는 기능들도 스프링 부트에 있나요??감사합니다 !
-
미해결Practical Testing: 실용적인 테스트 가이드
이런 경우는 어떻게 테스트 해야할까요?
지금 토스페이먼트 결제를 연동하고있는데 토스에서 결제 요청-인증을 하면 토스에서 주소에 파라미터로 paymentKey을 주는데 이 paymentKey을 가지고 백엔드에서 토스의 api에 결제 승인 요청을 해야합니다.그런데 서비스 단에서는 컨트롤러에서 파라미터을 통해 paymentKey을 알 수 있지 서비스단의 테스트 코드 작성 시는 paymentKey을 알 수 가 없는데 이런 경우는 테스트 코드를 어떻게 작성해야할까요? 추가적으로 외부 api 에서 paymentkey을 파라미터로 주는 컨트롤러는 어떻게 테스트해야할까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
레이어드 아키텍쳐에 대해 질문 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]보통 spring mvc 구조에서View -> Controller -> Service -> Repository로 구성되어있는데, 여기서 Dto 변환하는 곳에서 고민이 있었습니다. Dto를 Service까지 끌고 가서, Service에서 엔티티로 변환 과정을 거칠것인지. 아니면 Controller단에서 dto - Entity 변환 과정을 거칠것인지 고민이 있었습니다Service 단에서 변환 과정을 거치게 된다면, 즉 파라미터로 해당 컨트롤러 한곳만 종속적이게 되는 고민이 있게 되었습니다. Service는 여러곳에서도 쓸 수 있다는건데, Dto를 Service 까지 끌고 오게 되면, 매번 서비스 메소드를 만들어야 하는 문제가 있습니다.그래서 Controller와 Service 사이에Controller -> Business(Service) -> Service 라는 비즈니스를 추가하여 설계를 하였습니다 Business : dto - entity 변환 로직 처리. 컨트롤러와 상호작용하여 , dto를 받아 entity로 변환 다시 dto를 반환하도록 만들었고, 여기서는 여러 Service의 메소드를 가져와서 복잡한 비즈니스 로직을 처리하도록 하였습니다.Service : Entity를 받고 Entity를 반환하면, 순전히 해당 도메인의 비즈니스 로직으로만 구성하도록 하였습니다.이런 식으로 했더니, 좀 더 유연하게 비즈니스 로직을 처리할 수 있더라구요. 제가 설계한 레이어 아키텍쳐 (dto 변환)이 맞는 설계인지, 이렇게도 실무에서 구성하는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
코드에러를 어떻게 잡아야할까요?
https://drive.google.com/file/d/14AzHAHA4ulJ_F47TmZHwz1U9AP3uyIbw/view?usp=sharing 1.MVC와,Front-controller에서 회원정보를 입력하면 위에경로가 상대경로로지정된 save로 넘어가지않고404로 뜹니다..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그에 모든 경로의 url이 다 나옵니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의를 따라가다보니 저는 로그에 모든 url경로가 다 나오는데 선생님 강의에서는 localhost:8080은 제외한 이후 경로만 나옵니다. 제가 혹시 어느 부분을 놓친건지 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 given 중 연관 관계 / 참조키
안녕하세요. 강의 잘 들었습니다 ! 강의 수강 후 제가 진행했던 프로젝트에서 테스트 코드를 작성해보고 있는데 엔티티들의 연관 관계에 대해서 궁금한게 생겨서 질문 드립니다. 강의에서 Order의 create를 테스트하기 위해 Product를 먼저 생성 후 DB에 저장하는 것과 비슷하게,커뮤니티의 게시글이라면, 게시글(Board)과 작성자(User)는 엔티티에서 연관 관계가 설정되어 있고 Board 테이블에는 User의 PK가 참조키로 설정해야할 때, given에서 User 엔티티도 DB에 save 후 저장된 User를 Board가 참조하도록 테스트 코드를 작성하는게 맞을까요 ? 제가 궁금한 것은, 실제 서비스라면 엔티티들은 수많은 연관 관계가 있을텐데한 엔티티의 비즈니스 로직 등을 테스트하기 위해, 그 엔티티와 연관 관계에 있는 다른 엔티티들을 모두 given 절에서 생성하고 DB에 저장해야 하는지 궁금합니다.감사합니다 !
-
미해결실전! 스프링 데이터 JPA
대시보드에서 사용되는 Native Query들은 어디에 보관하나요?
보통 연관된 엔티티 레포지토리에 네이티브 쿼리를 넣는다고 생각했는데,대시보드 api를 구현하다보니 이런저런 테이블과 join되는 것들이 많아 연관된 엔티티도 많습니다..public interface SleepRepository extends JpaRepository<Sleep, Long> { // 여기에 sleep entity말고도 3개 이상의 entity가 조인되는 native query가 있습니다 }혹 이런경우는 native 쿼리들을 모아서 보관하나요? 보관하게 된다면 어디에 어떻게 보관하는지 알 수 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
에러메세지 만드는 거
https://drive.google.com/file/d/1z-zuoAUetdDnRiEBscuhmhDL95TM65C-/view?usp=sharing제 공유파일입니다. 수업듣고 혼자서 만들어 보는데 도무지 모르겠습니다. localhost:8080/member/save에서 아무것도 안 누르고 회원가입 눌렀는데 왜 에러메세지 안 뜨고 에러페이지가 뜰까요 ㅠㅠ 컨트롤러에 if(!StringUtils.hasText(memberDTO.getMemberId())) {//springutils spring꺼 임포트 해야함 bindingResult.addError(new FieldError("memberDTO","memberId","아이디는 공백이 안 됩니다.")); }이 부분도 추가 하고 다 했는데 ㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Java HotSpot 에러가 뜹니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.jar빌드도 되고 다 member테이블도 생겼습니다. 그런데 마지막 단계에서 계속 이런 오류가 뜨면서 쿼리파라미터 로그는 확인할 수 없는데요, 어느 부분이 잘못되었는지 모르겠습니다ㅠㅠ제가 적은 코드입니다 (Junit5로 진행했습니다)package jpabook.jpashop; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional // test에 있으면 test 끝난 뒤 바로 롤백함 -> 테스트 조회 불가능 @Rollback(false) // 롤백 안되게! public void testMember() throws Exception { // given Member member = new Member(); member.setUsername("memberA"); // when Long saveId = memberRepository.save(member); Member findMember = memberRepository.find(saveId); // then assertEquals(findMember.getId(), member.getId()); assertEquals(findMember.getUsername(), member.getUsername()); assertEquals(findMember, member); // 같은 트랜잭션 안에서는 영속성 콘텍스트가 같음 => id가 같으면 같은 엔티티로 식별함 System.out.println("findmember == member: " + (findMember == member)); } }spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create #application 실행 시점에 기존에 있으면 drop하고 없으면 자동으로 테이블 생성 properties: hibernate: # show_sql: true #sysout으로 확인 -> logger로 확인할 것이므로 생략하자! format_sql: true logging: level: org.hibernate.SQL: debug #logger로 확인: hibernate가 생성하는 모든 sql문이 debug로 확인가능 org.hibernate.type: trace #쿼리 파라미터 로그 남기기감사합니다!
-
미해결스프링 핵심 원리 - 기본편
main 에서 실행시 finished with non-zero -exit value1 에러 발생
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] main을 실행 할때마다 아래와 같은 에러가 발생하는데Execution failed for task ':DemoApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-17\bin\java.exe'' finished with non-zero exit value 1* 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.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 12s3 actionable tasks: 1 executed, 2 up-to-date 아래는 build 설정과 현재 저의 java 버젼입니다.Spring 3.2버전을 사용하고 있습니다. Build and run Using을 바꿀시에는 Intellij IDEA로 바꾸면 되긴하는데 변경하게 되면 rateDiscountPolicy 때문에 여기에서도 에러가 같이 나게 되버립니다. Build and run Using 을 Gradle로 사용해서 실행 시킬 방법은 없나요?
-
미해결스프링 핵심 원리 - 고급편
런타임시점의 AOP조인포인트에 질문이있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AOP조인포인트에서 static메서드 접근이 안된다고 하셨는데 혹시 그이유가 프록시 객체가 원객체의 메소드를 실행을 할때 반드시 객체를 호출하는 형태로 메소드를 실행하기떄문에 static메소드는 안되는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 스프링부트 강의 잘 수강하고 있습니다.<엔티티 설계시 주의점> 23:25 강의를 수강하며, 궁금한 점이 두가지 있습니다!메소드 내 순서//연관관계 편의 매소드 public void setMember1(Member member){ this.member = member; member.getOrders().add(this); } //순서 이렇게도 가능한가? public void setMember2(Member member){ member.getOrders().add(this); this.member = member; }강의에서는 setMember1 방식으로 진행을 하였는데,만약 setMember2 방식으로 순서가 바뀌어도 문제가 없는 것인지 궁금합니다.@Setter <-> setMember() 메소드 중복 Order 엔티티에 @setter 어노테이션을 붙였기에, 롬복이 setMember() 메소드를 자동으로 생성해줍니다.강의에서는 연관관계 메소드명을 setMember()으로 생성하여, 롬복이 만들어주는 메소드랑 이름이 중복됩니다. 생성자를 만들어 실험해보니 롬복이 만들어주는 setMember() 메소드는 보여지지 않으며 연관관계 편의 메소드가 덮어쓰기 한 것으로 보이는데, 제대로 한 것이 맞을까요?만약 실무에서 롬복을 사용할 때, 이런 경우(연관관계 메소드가 롬복 @Setter 메소드 위에 덮어쓴 경우)가 된다면 문제가 될 수도 있을까요???
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰에서 request.getAttribute()를 사용할 수 있는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); // Model에 데이터를 보관해야 한다. request.setAttribute("member", member); String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } } 여기서 request.setAttribute("member", member);를 통해 Model에 데이터를 보관하게 되고, 이를 뷰에서 사용할 수 있잖아요.뷰에서 request.getAttribute()를 사용할 수 있는 이유는 dispatcher.forward(request, response); 이 코드에서 request를 인자값으로 넘겼기 때문인가요? 아니면 이거 때문이 아니라 별개의 이유 때문인가요? 정리하면, 컨트롤러에서 request.setAttribute("member", member);를 통해 Model에 데이터를 보관하고,뷰에서 request.getAttribute()를 통해 그 데이터를 받을 수 있는 이유가 바로dispatcher.forward(request, response);에서 request를 인자값으로 넘겼기 때문이 맞는지, 아니면 이 코드랑 별개의 다른 이유가 존재하는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]test 전체 실행을 하였더니 java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@4c777e7b testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], 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@5a4ed68f, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@3956b302, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@100f9bbe, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1a78dacd, org.springframework.boot.test.context.SpringBootTestAnnotation@85e8c2c7], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) 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:762) at java.base/java.util.Optional.orElseGet(Optional.java:364) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [C:\Users\YWJEONG\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 at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:960) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:464) at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1458) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ... 17 moreCaused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1420) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 41 more이런 오류가 뜹니다 ㅠㅠ
-
해결됨스프링 핵심 원리 - 기본편
excludeFilters 가 작동하지않는거같습니다 ㅜㅜ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]안녕하세요 CoreApplication를 실행했는데 오류가 났습니다테스트 돌린 것들은 잘 작동 되었는데 CoreApplication을 실행하면 오류가나요 ㅜㅜ오류내용을 확인하면 AutoAppConfig에서 excludeFilters를 걸어 놓은게 제대로 작동을 안하는거같습니다오류내용은 아래와 같습니다.org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) //예제코드 때문에 필터 설정하였음.. ) public class AutoAppConfig { } 어느 부분이 문제가 있는지 혼자서 못찾겠습니다 도와주세요 ㅜㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@GetMapping 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@GetMapping 의 실행순서에 관한 질문입니다.@GetMapping("/") , @GetMapping("/members/new")2개의 매핑이 있을 경우, 매핑의 우선순위를 알고 싶습니다.좀 더 구체적인 경로가 먼저 매핑된다고 알고있었는데그럼 localhost:8080 을 실행했을때 home.html 이 아닌createMemberForm.html 이 나와야 하는건가? 해서요단순히 localhost:8080 으로 실행했기 때문에 "/" 로 간걸로 보면되나요?
-
미해결스프링 핵심 원리 - 기본편
web 라이브러리 추가 후 메인 메서드 실행 에러
request스코프 예제 만들때 web 라이브러리를 아래와 같이 추가 한 뒤, coreApplication Main메서드를 run했을때오류가 떠서 문의 드립니다..!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상대경로 질문
Spring MVC-1편에서 섹션3. 서블릿,MVC패턴에서 상대 경로 질문입니다.<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><form action="/jsp/members/save.jsp" method="post">username: <input type="text" name="username" />age: <input type="text" name="age" /><button type="submit">전송</button></form></body> 1.이 코드로 계속 왔다갔다할수있으면서 save되는걸 보신다고하셨는데 이때 상대참조이야기도 나오더라구요!action="/jsp/members/save.jsp" 이부분에서 "/jsp/members/save.jsp" 이부분을 웹에있는 action에 준다는거같은데 맞을까요? 그리고 action="/jsp/members/save.jsp" 이부분이 상대참조가 맞는지도 궁금합니다.!!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
httpSession 관련 질문드립니다.
request.getSession() 으로 생성된 httpsession은 sessionStore 인지 아니면 session 인지 궁금합니다.제 생각에는 sessionStore가 아니라 그냥 sessionStore에서 session을 검색해서 가져오거나, 없으면 session을 생성한 것이라고 생각합니다. 이렇게 생각하게 된 이유는, /session-info url로 크롬과 사파리로 브라우저를 다르게 하여 접속한 결과, 크롬에서 로그인을 했더라도, 사라피로 로그인하지 않고 session-info 로 접속한다면 session 이 없다고 떴기 때문입니다. 그렇기 때문에, request.getSession() 으로 생성된 session 에서 session.setAttribute("member", member) 이런식으로 attribute를 추가하는 것은 그냥 그 세션자체에 member라는 것을 추가하는 것으로 짐작됩니다. 따라서 직접 만들어본 SessionManager 의 createSession 과는 다르다고 생각하는게, createSession은 sessionStore에 직접 sessionId 와 member를 묶어서 직접 put을 해준것이고httpsession.setAttribute는 그저 session에 attribute를 추가해준 것이라고 생각하기 때문입니다.그리고 httpSession 은 어딘가에 있을 sessionStore에 저장되겠죠 << 사실 이 부분이 의문입니다. 어느시점에 session이 sessionStore에 저장되는지, 그 sessionStore는 어디있는지 궁금합니다.대충 시점은 getSession() 하는 순간 sesstionStroe를 탐색해서 없다면 sessionStore에 저장하면서 해당 session을 가져오고 그 세션에 setAttribute로 속성을 추가해주는 것 같다고 예상되긴 합니다. 그래서 궁금한 점은 httpSession의 sessionStore은 어디있는지 궁금합니다. 그리고 만약 존재한다면 어느시점에 생성되는건지 궁금합니다. 그리고 직접 확인이 가능한지도 궁금합니다.분명 여러유저가 접속한다면 sessionStore에 session이 쌓일텐데 그 쌓이는게 어떻게 쌓이는지 보고싶습니다. 그와 동시에 궁금해지는 점은 session.getAttribute("loginMember") 이런식으로 한번더 세션에 멤버 어트리뷰트가 존재하는지 확인하는 이유도 궁금합니다. 세션을 만들때 무조건 loginMember를 설정해줄것이고, 만약 세션자체가 사라진다면 그냥 사라질텐데, 세션을 만들때 session.setAttribute("loginMember", loginMember) 를 하지 않는 경우가 있나요??제 가정이 다 맞다고 가정하에, 그리고 브라우저 종료시에 쿠키가 즉시 브라우저에서 삭제된다고 가정할때, 로그아웃 하지 않고 바로 브라우저를 종료하고 로그인 하는 식으로 똑같은 사용자가 여러번 로그인을 한다면, 그때마다 브라우저는 항상 쿠키가 존재하지 않으니까, getSession으로 sessionStore에서 session을 찾지 못할 것이고 그렇다면 새로운 jsessionid 값에 똑같은 사용자를 가진 session을 게속 생성해서 sessionStore에 저장하게 되는 것이 아닌가요?? 그렇다면 세션이 시간이 만료되어서 자동으로 삭제 되기전까지 똑같은 사용자를 포함한 여러개의 세션이 세션스토어에 게속 쌓일것이라고 예상되는데, 그럼 여러가지 jsessionId로 하나의 계정에 접속이 가능한 것인지 궁금합니다. 혹시 제 예측이 틀린것이라면 어떻게 틀렸는지 설명해주시면 감사드리겠습니다.https://www.inflearn.com/questions/989189/request-getsession-%EA%B3%BC-sessionstore위 링크의 질문도 봤는데 아무리 생각해도 sessionStore를 여러개 생성한다는 개념은 뭔가 이상하다고 생각해서 의문이 해결되지 않습니다.
-
미해결스프링 핵심 원리 - 기본편
DI(의존관계 주입)에 대한 질문입니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위 코드에서 ac에는 어떤것이 DI되어 입력되는건지 잘 모르겠습니다.ac에 AnnotationConfigAplicationContext가 들어가는게 맞나요?