월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 핵심 원리 - 기본편
@AllBeanTest 코드 작성 시 Rate,FixDiscountPolicy에 @Component만 있을 때 실행 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]1.강의 영상을 따라 코드를 따라 치는데, 강의영상에서 DiscountService 생성자에 @Autowired를 적용하고,FixDiscountPolicy와 RateDiscountPolicy에 적용된 다른 애너테이션은 제외하고 @Component 애너테이션만 붙히고 테스트를 실행하여도 정상적으로 되는데,저는 테스트를 실행하면 아래와 같은 에러가 발생합니다.org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [/Users/jinagyeomi/Desktop/dev/intelliJ-project/core/build/classes/java/main/hello/core/order/OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy@RateDiscountPolicy에 @Primary를 붙혀서 우선순위를 적용하면 테스트가 성공이 되는데.. 영상과는 다르게 왜 그러는지 이유를 알 수가 없어 무시하고 진도 나가다가 도저히 궁금증을 참을 수 없어 알아보다가 시간을 너무 뺏겨서 염치불구하고 질문을 남겨드립니다..AllBeanTest 클래스에 @Autowired가 테스트 성공여부와 상관없이 빨간줄이 쳐져있는데 이건 그냥 무시해도 되는 것일까요?(저번 강의에서 아래 스크린샷에 Syntax로 바꿔서 하라는 답변을 본 것같은데 뭔가 명쾌한 해답이 아닌 것 같기도 하고 다른 질문의 Ai 답변으로는 궁금증이 해결이 안되어서 질문 남깁니다..) 자바는 21, 스프링 부트는 3.2.2 사용 중입니다.코드는 해당 링크로 첨부파일 전달 드립니다https://drive.google.com/file/d/1ectcWfuhvlZJVh1SUKn003MQoWIf4puY/view?usp=sharing
- 해결됨스프링 핵심 원리 - 기본편
스프링 빈 조회 질문입니다
스프링 빈 조회할때 검증할때 isInstanceOf로 타입 비교를 할 때 느낌상으로는 MemberService 인터페이스를 넣어야될것같은데 MemberServiceImpl이 들어가는 이유가궁금합니다... 너무 당연하긴하지만 MemberService가 들어가도 검증이 되는지 궁금합니다.그리고 하나 더 궁금한건 객체 타입이면 memberService이렇게 들어가면되는데 확장자 이름까지 들어가는지궁금합니다. ex) MemberServiceImpl -> MemberServiceImpl.classpackage hello.core.beanfind; import hello.core.AppConfig; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import static org.assertj.core.api.Assertions.*; class ApplicationContextBasicFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("빈 이름으로 조회") void findBeanByName() { MemberService memberService = ac.getBean("memberService", MemberService.class); assertThat(memberService).isInstanceOf(MemberServiceImpl.class); } @Test @DisplayName("이름 없이 타입만으로 조회") void findBeanByType() { MemberService memberService = ac.getBean(MemberService.class); assertThat(memberService).isInstanceOf(MemberServiceImpl.class); } @Test @DisplayName("구체 타입으로 조회") void findBeanByName2() { MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); assertThat(memberService).isInstanceOf(MemberServiceImpl.class); } @Test @DisplayName("빈 이름으로 조회X") void findBeanByNameX() { //ac.getBean("xxxxx", MemberService.class); Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class)); } }
- 미해결스프링 핵심 원리 - 기본편
IOC 제어의 역전 프레임워크
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의 4:50쯤에 프레임워크 설명하실 때MemberApp에서 main 메소드를 실행하는 것은 개발자가 직접 제어하는 것이라고 하셨는데 이해가 잘 안가서요 ㅠㅠ 그럼 이 경우는 프레임워크가 내가 작성한 코드를 제어하는 것이 아니므로 프레임워크가 아닌가요? 프레임워크와 라이브러리 차이에 대해 좀 더 자세한 설명 부탁드립니다!
- 미해결스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 오류를 settings에서 Gradle로 바꿔도 문제가 생겨요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]같은 오류가 나신 분의 답변으로 Settings에서 Intellj를 Gradle로 바꾸고test를 Run해봤는데 로그를 내리다 보면 다음과 같은 빨간 글씨가 떠요파일 압축해서 드라이브에 공유한 링크입니다https://drive.google.com/file/d/1vF5v6L9qBpGj6BH-0JCW4YwbuEwQUeO_/view?usp=drive_link
- 미해결스프링 핵심 원리 - 기본편
DI, IOC 등 모든 개념들이 API를 끌어다 쓸때 개념이죠?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. API 즉, 프레임워크를 불러다 사용시인터페이스의 의존해서 해당 라이브러리들을 당겨와서 사용하더라구요. 즉, IOC, DI 그리고 컨테이너 개념들은 pom.xml에 주입되어 사용되는 모든 도구, 엔진 들은 프레임워크 처럼 나 자신이 주도권을 가지는 것이 아니라 대부분 대신 해주죠?
- 미해결스프링 핵심 원리 - 기본편
@MainDiscountPolicy 적용이 안되는 것 같습니다.
오류에는 애노테이션이 문제라고 하는 것 같은데..
- 해결됨스프링 핵심 원리 - 기본편
test 중 빌드 오류 - java.io.IOException: Unable to delete directory
안녕하세요. 영한님 덕분에 좋은 강의 잘 듣고 있습니다.그런데 이번 강의를 수강하던 중에 test를 실행하는 과정에서 갑작스럽게 빌드 오류가 발생하였습니다. java.io.IOException: Unable to delete directory~~이와 같은 메세지가 출력되는데 프로젝트 내의 build 폴더와 관련이 있는 듯 하여 삭제 후 다시 작동하면 처음엔 잘 돌아갈 때도 있지만, 한번 더 test를 실행하면 같은 오류가 다시 발생했습니다. (주로 build/test-result/test/binary가 지목되었습니다.)그 후로는 나름대로 구글링해보며 재부팅부터 시작해서 gradle 폴더 삭제, java 프로세스 중지, invalidate caches등 다양한 방법을 시도해 보았습니다. 하지만 간혹 해결된 경우에도 위의 상황과 같이 두 번째로 다시 돌려봤을 때는 오류가 반복됩니다. 혹시나 하여 새로운 프로젝트를 생성하고 수정하지 않은 채 test만 작동해 보았는데, 이 역시 같은 증상이 나타납니다. 그래서 현 상황에서는 test를 실행하려면 실행 전에 매번 수동으로 문제를 해결해주어야 합니다..수업 내용과 관계가 없는 듯 하여 가급적 제 선에서 해결하고 싶었지만 저와 같은 사례가 흔치 않아 어려움을 겪고 있습니다. 조언해주시면 정말 감사하겠습니다.
- 미해결스프링 핵심 원리 - 기본편
단위테스트 시간 보는법
[질문 내용]테스트에 오류가 나지는 않는것 같은데, 단위테스트라 해도 어떤 테스트가 몇초 걸렸는지 저는 전체로 나오네요.. 각각 걸리는 것을 보고 싶은데 왜 이러는 걸까요? 참고로 상위 페키지 오른쪽 키 눌러 런 돌렸습니다!
- 미해결스프링 핵심 원리 - 기본편
회원 도메인 실행과 테스트 8:30 쯤 DIP 위반
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 회원 도메인 실행과 테스트 8:30 쯤 DIP 위반 언급하실 때MemberRepository는 인터페이스를 의존한다고 하시면서 MemberServiceImpl를 가리키셨는데 이해가 안가서요 ㅠㅠDIP가 어떻게 위반됐는지 다시 한 번 설명 부탁드립니다!
- 미해결스프링 핵심 원리 - 기본편
Request 스코프를 생성할때 그럼 항상 Provider를 사용해야하는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요싱글톤 스코프 빈에서 request 스코프 빈을 사용하려면 항상 provider를 이용해서 생성해야지 오류가 발생하지 않는건가요?
- 미해결스프링 핵심 원리 - 기본편
@Configuration이 없는 DiscountService 클래스에 대해
static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } }강의 예시처럼 DiscountService class에 @Configuration을 달지 않고,ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); 코드를 실행시켰을 경우 단순히 개별 discountService 빈을 스프링 컨테이너인 ac에 등록되는 것인가요?
- 미해결스프링 핵심 원리 - 기본편
초기화 의미
빈이 생성되고 나서 해당 빈에 의존 관계를 주입해준 다음 필드(속성)값을 넣어주는 과정을 초기화라고 하나요?
- 해결됨스프링 핵심 원리 - 기본편
테스트 코드에서 ApplicationContext 의 구현체를 생성하면 스프링 컨테이너가 2개 생성되나요?
안녕하세요 현재 강의를 세션 6까지를 수강하고 다시 한번 복습을 하고 있는 중입니다.복습을 하면서 이해가 안되는 부분이 있어서 질문을 드리게 되었습니다.@Configuration 을 설정하면 Spring에서 자동으로 그 클래스 안에 있는 @Bean 을 자동으로 스프링 컨테이너에 등록됬다고 알고 있습니다.수업 중에 테스트코드에 ApplicationContext 를 스프링 컨테이너라고 소개를 하셨고, 그것을 구현을 하셨느데, 그럼 테스트코드를 실행을 하면 스프링 컨테이너가 2개가 생성이 되는 건인가요?아니면 해당 클래스에서 생성된 bean을 가져오는 역할을 하는 것인가요? @Autowired 에서 주입된 Bean이 어디에서 가져온 객체인지도 판별이 될 것 같아요
- 미해결스프링 핵심 원리 - 기본편
@Autowired와 @Bean, @Component
bean 안에서만 @Autowired가 동작하고 @Component 키워드도 또한 bean을 생성하기 때문에 해당 키워드가 붙은 class 안에서 @Autowired가 동작하는 것이라 이해해도 될까요?
- 해결됨스프링 핵심 원리 - 기본편
생성자 @Autowired 테스트를 할때 저는 영한님 처럼 로그가 뜨지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래는 제 IDE 상황인데 테스트는 통과하는데 memberRepository랑 discountPolicy 주소를 찍게 했는데 그것도 뜨지 않고 영환님 처럼 로그가 뜨지 않네요 설정의 문제일까요??
- 미해결스프링 핵심 원리 - 기본편
현재 파일만 컴파일 하고 싶은데 다른 파일도 컴파일 돼서 오류가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 파일만 컴파일 하고 싶은데 아직 고치지 않은 다른 파일도 컴파일 돼서 오류가 나서 실행이 안되는데 방법이 있을까요?
- 미해결스프링 핵심 원리 - 기본편
MemberServiceTest시 다음처럼 출력됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.> Task :compileJava UP-TO-DATE> Task :processResources UP-TO-DATE> Task :classes UP-TO-DATE> Task :compileTestJava UP-TO-DATE> Task :processTestResources NO-SOURCE> Task :testClasses UP-TO-DATE> Task :testDeprecated 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 SUCCESSFUL in 1s4 actionable tasks: 1 executed, 3 up-to-date오후 8:12:13: Execution finished ':test --tests "hello.core.member.MemberServiceTest"'.테스트 실행했을때 다음과 같이 나옵니다gradle버전을 업데이트하라고 하는것 같은데 맞나요?
- 미해결스프링 핵심 원리 - 기본편
@Autowired 와 빈 수동 등록
@Autowired 키워드는 보통 @ConponentScan 키워드를 이용한 자동 빈 등록 시에 주로 사용하고, 만약 컴포넌트 방식을 사용하지 않고, 앞서 배웠던 AppConfig 클래스를 이용해 빈을 수동으로만 등록할 때에는 @Autowired 키워드가 거의 사용되지 않을 것 같은데 제 생각이 맞나요?
- 미해결스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 오류에 대한 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]UnsatisfiedDependencyException 오류 내용Error creating bean with name 'memberServiceImpl' defined in file [C:\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,memberRepositoryNoUniqueBeanDefinitionException 오류 내용No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository오류 2가지가 발생하는데 두가지 모두 스프링 빈에 대한 오류인 것 같은데 해결을 못하겠습니다. (해결은 했으나 질문남깁니다.)======================================뒷 부분 강의영상을 참고해서 에러발생하는 지점인 MemoryMemberRepository, Policy 부분에 @Primary 애노테이션을 사용해서 오류를 풀긴했는데 왜 그렇게 해야하는지 모르겠습니다.스프링 부트 자체에 Componentscan이 포함되있어서 AppConfig 파일이 스프링 빈에 등록된다는 답변글을 봤었는데 그럼 메인으로 사용하는 클래스(Rate, Fix)가 변경될 때 마다 @Primary를 적용해줘야하는건가요?그리고 해결방법 중에 gradle 을 통해서 빌드 실행하는 것이 있던데 설명을 봐도 이해가 안갑니다. 초기에 알려주신 설정으로 gradle 은 intelliJ 로 설정되어있는데 빌드 실행하라는것이 terminal 에서 빌드를 하라고 하시는건지 이해가 안됩니다.
- 미해결스프링 핵심 원리 - 기본편
섹션6 필터, 커스텀 어노테이션 관련 질문입니다.
@Component와 같은 기능을 수행하는 어노테이션 생성 시 @Component내부에 있는 @Rentation(RentationPolicy.RUNTIME)@Target(ElementType.Type)@Documented위 3가지를 가져다 붙여서 @Rentation(RentationPolicy.RUNTIME) @Target(ElementType.Type) @Documented public @interface MyIncludeComponent{ }로 작성하라 하셨는데 @Component public @interface MyIncludeComponent{ }위와 같이 작성은 불가능한가요?