월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
DiscountPolicy discount()의 매개변수 관련 질문
public interface DiscountPolicy { /** * * @return 할인 금액 */ int discount(Member member, int price); }discount()의 매개변수 int price는 FixDiscountPolicy에서는 사용되지 않고 RateDiscountPolicy에서만 사용됩니다. 모든 구현 클래스에서 사용되지는 않는 매개변수를 인터페이스에 선언했다는 점이 잘 이해가 되지 않습니다. 모든 구현 클래스에서 사용되지 않는 매개변수를 인터페이스 level에 선언해도 괜찮은 것인지 여쭤보고 싶습니다.
- 해결됨스프링 핵심 원리 - 기본편
모든 빈 출력에서 에러가 떠요
2분 30초에 런 해보는데 에러가 나옵니다. 파일 추가하라는 것도 했고 다 했는데 에러가 떠요깃허브에 코드도 올렸는데 이것도 참고해주세요...!
- 미해결스프링 핵심 원리 - 기본편
Order의 할인 금액, 주문 금액 관련 질문
public class Order { private int discountPrice; // 할인금액 public int calculatePrice() { // return: 주문금액 return itemPrice - discountPrice; } }(1) 주문 금액을 필드가 아닌 메서드로 두신 이유가 정말 궁금합니다.(2) 1개의 주문에 대해서는 여러 상품이 존재할 수 있고, 하나의 상품을 여러 개 주문할 수도 있습니다. 이 예제에서는 주문 1개에 대해서, 상품 1개를 1개만 구매할 수 있다는 상황이 가정된 것인가요?
- 미해결스프링 핵심 원리 - 기본편
lombok spring 3.2.x 설치 관련 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 모름3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]Java 21 버전, spring boot 3.2.1 , dependency-management 1.1.4 입니다.lombok관련해서 이슈가 있어 깔리지 않는걸까요 ? 아예 에러도 안뜹니다.
- 미해결스프링 핵심 원리 - 기본편
스프링 빈 조회 관련 질문 있습니다
"스프링 빈 조회" 내용 중 질문 있습니다.아래는 제가 질문이 있는 코드 부분입니다.class ApplicationContextBasicFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("빈 이름으로 조회") void findBenaByName() { MemberService memberService = ac.getBean("memberService", MemberService.class); assertThat(memberService).isInstanceOf(MemberServiceImpl.class); } ,,, }여기서 빈을 조회할 때는 타입을 MemberService.class로 조회하는데 조회한 빈을 검증할 때에는 MemberServiceImpl.class 로 이 타입의 인스턴스 인지를 확인하는데 이렇게 하는 이유가 AppConfig에서 memberService() 메소드가 스프링빈으로 등록될 때 아래 처럼 반환하는 객체가 MemberServiceImpl 이라서 빈에 등록될 때 MemberServiceImpl 로 등록되어서 그런건가요??@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } ,,, }직접해보니 isInstanceOf(MemberService.class)도 되더라구요.제가 아직 배우는 단계라 살짝 헷갈려요 ㅠㅠ 문장이 너무 길지만 알려주시면 감사하겠습니다 ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
Cannot invoke "hello.core.member.Member.getGrade()" because "member" is null
20번째 줄에서 오류가 발생합니다。멤버는 잘 등록된것을 확인 했습니다。discountPolicy에서 죽는것 같습니다。 관련 클래스입니다。아래 getGrage()에서 오류가 발생 하는듯
- 해결됨스프링 핵심 원리 - 기본편
공부법에 대해서 궁금해요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.현재 스프링을 공부중에 있습니다.김영한님의 커리큘럼 순서대로 가려고 하는데 궁금한 점은 1. 스프링 입문부터 스프링 부트 - 핵심 원리와 활용까지 그냥 쭉 한번 보면서 코드 따라 치고 다시 처음부터 복습하는 게 좋을까요? 2. 아니면 입문을 보고 다음으로 넘어가면서 새로운 거 학습 + 입문 복습 이렇게 하는 게 좋을까요?어떤 공부법이 더 좋을지 궁금합니다.제 상태는 거의 스프링 초보라고 생각하시면 됩니다.현재는 이해가 안되더라도 1번 형태로 쭉 한번 따라하고 2번째부터 2번 방식으로 할 예정입니다.
- 미해결스프링 핵심 원리 - 기본편
다형성
다형성 만으로는 구현 객체를 변경할 때 클라이언트 코드도 함께 변경된다 라고 하셨는데 이해가 안갑니다 ㅠㅠㅠㅠㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
설정 관련
강의 노트에서 build and run using과 run tests using 설정에서 spring3.2 이상부터는 Gradle을 설정하라고 하셨는데검색했더니 run tests using를 IntelliJ로 설정해야 테스트 코드를 실행했을 때 성공테스트 목록이 보인다고 하는데run tests using만 intelliJ로 설정해도 코드가 돌아가는데 이상이 없을까요?
- 미해결스프링 핵심 원리 - 기본편
request 스코프] CoreApplication 오류 납니다.
build.gradle에 웹 라이브러리 추가하고 dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'jakarta.inject:jakarta.inject-api:2.0.1' //web 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-web'CoreApplicaton을 돌렸더니, 아래와 같은 오류 메세지가 뜹니다. 대충 어떤 오류인지는 알겠는데.....어떻게 찾아서 고쳐야 할지는 모르겠네요? Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\SpringBoot\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]This may be due to missing parameter name informationAction:Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumedEnsure that your compiler is configured to use the '-parameters' flag.You may need to update both your build tool settings as well as your IDE.
- 해결됨스프링 핵심 원리 - 기본편
빈 생명 주기 콜백에서 생성자 주입 -> setter 주입으로 코드 변경 시 이벤트 라이프 사이클 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 강의에서 섹션 8 부분 ( 빈 생명 주기 콜백 시작 ~ 애노테이션 @PostConstruct, @PreDestroy)를 수강하던 중에 궁금한 점이 생겼습니다. Q. 생성자 주입 방식에서 Setter 메소드 주입 방식으로 코드를 변경 했을 때강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클 과실제 프로그램 실행 과정이 일치하는지 확인해보았는데일치하지 않는 것 같아서 관련 내용 문의 드립니다. ( 실제 강의에서는 setter 방식으로 변경하는 내용은 나오지 않았습니다.setter 메소드 주입으로 바꿨을 때 실제 라이프 사이클이 어떻게 돌아가는지 궁금해서제가 임의로 코드 변경하였습니다..혹시 이런 질문이 안된다면 글 삭제하겠습니다 ㅠㅠ참고로 setter 로 변경한 코드는 댓글에 남겨두었습니다.) [강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클]스프링 컨테이너 생성 → 스프링 빈 생성 → 의존 관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 [생성자 -> setter 로 변경 후 실행했을 때 결과값] 의존 관계 주입 되기 전에 초기화 콜백이 먼저 호출되는데 그러면 이벤트 라이프 사이클을 벗어나는 내용 아닌가요? 혹시 제가 setter 로 주입하는 코드를 제대로 구현하지 못해서 이런 일이 발생한 것일까요?ㅠㅠ ( + 사실 setter 방식일 때 의존 관계가 주입되는 시점이 정확히 어떤 부분인지에 대해서도 제대로 이해를 못한 것 같습니다. )
- 해결됨스프링 핵심 원리 - 기본편
스프링이 제공하는 인터페이스에 의존하면 안되는 이유 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] "스프링 핵심 원리 - 기본편" 강의에서커리큘럼 = 인터페이스 InitializingBean, DisposableBean에서3:45 부터 김영한 강사님께서 하신 말씀에 대해 궁금증이 생겨 질문 남깁니다. 강사님께서 스프링이 제공하는 어노테이션까진 괜찮지만 인터페이스까지 의존하게 되면 너무 부담스럽다고 말씀하셨는데 혹시 이유가 뭔지 알 수 있을까요? 이미 어노테이션에 의존했다면스프링에 의존적인 것은 피할 수 없는 일인데왜 어노테이션은 되고 인터페이스는 안되는 건가요?
- 미해결스프링 핵심 원리 - 기본편
실습관련 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 보며 실습을 진행하던 중 Test폴더에서 진행하는 코드에 에러가 발생해서 해결방법을 알고싶어 질문합니다두 파일에서 메소드를 확인할 수 없다는 에러가 발생해서 해결방법을 찾다가 해결하지 못했습니다
- 해결됨스프링 핵심 원리 - 기본편
PrototypeBean 클래스는 Static 영역과 Heap 영역 모두에 존재하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]너무 기초 질문인가 싶지만 제가 맞게 이해하고 있는지 확신이 안 돼서 질문드립니다. 제가 이해하고 있는 내용들을 적었습니다. 아래 코드에서 static class PrototypeBean으로 되어 있는 PrototypeBean 클래스는 클래스 로더가 클래스들을 로딩할 때 Method Area(Static Area)에 적재되며, 이 Method 영역에선 인스턴스 객체들처럼 여러 개로 존재하는 것이 아니다. getBean(PrototypeBean.class)을 통해 조회할 때마다 생성되는 프로토타입 빈들은 Heap 영역에 생성되는 객체들이다.(마치 PrototypeBean이 static 클래스가 아닌 것처럼)결론적으로 PrototypeBean은 static임에도 불구하고 Heap 영역에 객체 형태로도 여러 개 존재한다.(조회되는 만큼) 혹시 위 내용들 중에 제가 잘못 이해하고 있는 부분이 있을까요? 자바 기본 문법을 배웠을 땐 static으로 지정하는 것들은 Method Area에만 있고, 객체별로 관리되는 게 아니기 때문에 Heap 영역엔 없는 거로 이해하고 있었는데, PrototypeBean의 경우엔 static임에도 Heap 영역에도 있어서 좀 생소하긴 합니다. 그래도 이 강의를 들으면서 프로토타입 스코프에 대해 이해한 대로면 위에 정리한 1, 2, 3처럼 생각되기는 하는데 제가 혹시 이해를 잘못한 부분이 있나 해서 확인받고 싶습니다. public class PrototypeTest { @Test public void prototypeBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); System.out.println("find prototypeBean1"); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); System.out.println("find prototypeBean2"); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); System.out.println("prototypeBean1 = " + prototypeBean1); System.out.println("prototypeBean2 = " + prototypeBean2); assertThat(prototypeBean1).isNotSameAs(prototypeBean2); prototypeBean1.destroy(); prototypeBean2.destroy(); ac.close(); } @Scope("prototype") static class PrototypeBean { @PostConstruct public void init() { System.out.println("PrototypeBean.init"); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }
- 미해결스프링 핵심 원리 - 기본편
@ComponentScan 강의 중 테스트 코드 에러에 관하여
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberService' available다음과 같이 에러가 나타났으며 강의 내용 그대로 따라서 @Component @Autowired 작성했는데 해당 오류가 왜 나타난지 모르겠습니다. MemberServiceImpl에 @Component와 생성자에 @Autowired 다 확인했습니다. [이전 강의 중 Singleton에 대한 내용은 입력하지 않았는데 해당 클래스가 있어야 정상적으로 작동하는 것인가요..?]
- 미해결스프링 핵심 원리 - 기본편
노란 바탕 글씨는 왜 나오나요?
노란 바탕 글씨가 나오네요 ???
- 미해결스프링 핵심 원리 - 기본편
AutoAppConfig 필터링 문제
안녕하세요! 컴포넌트 스캔의 필터와 관련하여 질문이 있어 올립니다!기존에 있던 AppConfig.java로 등록한 Bean을 제외하려고 excludeFilters를 사용했는데, CoreApplication을 실행하면 Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [파일경로/core/out/production/classes/hello/core/member/MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]이런 오류가 뜹니다. 코드는 다음과 같습니다.AppConfig.javapackage 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 public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public DiscountPolicy discountPolicy() { //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } } AutoAppConfig.javapackage hello.core; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import static org.springframework.context.annotation.ComponentScan.*; @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { }위의 오류는 memberRepository뿐만 아니라 rateDiscountPolicy에서도 나옵니다. @Component와 @Autowired 어노테이션은 잘 설정한것 같은데 뭐가 문제일까요?
- 미해결스프링 핵심 원리 - 기본편
AllBeanTest 결과가 안나옵니다???
테스트 결과 map과 list가 다 비어서 나오네요?AutoAppConfig.class를 AppConfig.class로 바꾸어도 결과가 똑같습니다.
- 해결됨스프링 핵심 원리 - 기본편
static inner class 관련 과거 질문 글을 보고 추가적으로 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://www.inflearn.com/questions/257297/testconfig-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%EC%84%9C-static%EC%9D%84-%EB%96%BC%EB%B2%84%EB%A6%AC%EB%A9%B4 이 질문 글의 답변을 보고 저도 궁금한 점이 있습니다. 아마 이 질문과 관련된 코드는 아래 코드인 것 같습니다. public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); . . . (생략) . . . @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy FixDiscountPolicy() { return new FixDiscountPolicy(); } } } 답변 내용 중에 다음과 같은 내용이 있습니다. "Test 클래스 내 TestConfig 클래스에 static 키워드를 뺀다면 Test 클래스가 생성되어야 TestConfig를 사용할 수 있습니다. 그러나 Test 클래스 내에서는 이미 TestConfig가 생성되기도 전에 스프링 컨테이너에서 TestConfig 빈이 있는지 찾아오려고 합니다. 당연히 스프링에서는 그런 빈이 없다고 합니다." 여기서 스프링 컨테이너에서 TestConfig 빈이 있는지 찾아오려고 한다는 부분이 잘 이해가 안 됩니다. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); 이 코드는 TestConfig를 빈으로 등록하는 거로 알고 있습니다. 그러면 TestConfig 빈이 있는지 찾는 거랑은 다르지 않나요?
- 미해결스프링 핵심 원리 - 기본편
IoC 컨테이너와 DI 컨테이너의 차이점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]IoC 컨테이너와 DI 컨테이너의 차이점이 궁금합니다.IoC 기능의 대표 동작원리가 DI이다.라는 것은 구글링을 통해 알게되었습니다. 그렇다면 DI 컨테이너는 IoC 컨테이너의 하위 개념인가요?