30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
NoUniqueBeanDefinitionException 예외를 처리했는데도 발생하는 이유
안녕하세요. 스프링 빈 조회 - 동일한 타입이 둘 이상부분을 듣고있는데, 궁금한 점이 생겨서요 ! AnnotationConfigApplicationContext package hello.core.beanfind; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.junit.jupiter.api.Assertions.*; public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회시 자식이 둘 이상 있으면, 중복 오류가 발생한다") void findBeanByParentTypeDuplicate() { DiscountPolicy bean = ac.getBean(DiscountPolicy.class); assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class)); } @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } } 위 코드의 findBeanByParentTypeDuplicate 테스트를 실행했을 때, 자식이 둘 이상이고, DiscountPolicy bean = ac.getBean(DiscountPolicy.class); 부분이 있어서 오류가 발생하는 것은 이해했습니다! 그런데, assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class)); 이렇게예외를 처리하는 구문이 있는데도, 왜 테스트가 pass 되지 않는 것인지 궁금합니다 !! 에러를 왜 못잡아낼까요 ??
- 미해결스프링 핵심 원리 - 기본편
스프링 컨테이너 관련 질문 드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]커뮤니티 내 질문을 읽다가 의문이 들어서 질문드립니다.ApplicationContext를 굳이 만들지 않아도 main 메서드 내 SpringApplication.run() 메서드 내부에서 컨테이너를 생성한다고 답변 주신걸 보았습니다.하지만 ApplicationContext를 만들 때 AppConfig.class로 커스텀한 config파일을 지정하는 걸로 보이는데, SpringApplication.run() 메서드는 따로 클래스를 지정 하지 않아도 @Configuration 애노테이션이 있는 모든 클래스를 스캔하는건가요?
- 미해결스프링 핵심 원리 - 기본편
18:00 AppConfig 오류 관련 질문
18:00 정도에 basicScan() 테스트를 실행하면서 AppConfig 클래스의 OrderServiceImpl의 생성자 관련 오류가 발생한 이유가 궁금합니다. basicScan()에서 ac 를 만드는 과정에 인자로 들어간 것은 AutoAppConfig.class인데 왜 AppConfig 클래스에서 오류가 발생하나요?
- 미해결스프링 핵심 원리 - 기본편
beanDefinition cannot resolve symbol 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 해당 강의 부분 코드를 실습 하던 중 beanDefinition 부분에 빨간 줄이 뜨고 cannot resolve symbol 이라고 에러가 뜹니다. 빌드하면 다음과 같은 에러가 뜨는데 어떻게 해야할까요?다른 질문들과 구글링을 통해 Build 에서 rebuild 하기File 에서 cache 삭제하고 다시 시작하기 방법은 해봤는데해결되지 않았습니다,,* Where:Build file 'C:\Users\User\OneDrive\���� ȭ��\spring-study\core\build.gradle' line: 3* What went wrong:Plugin [id: 'org.springframework.boot', version: '2. 7.11'] was not found in any of the following sources:- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)- Plugin Repositories (could not resolve plugin artifact 'org.springframework.boot:org.springframework.boot.gradle.plugin:2. 7.11') Searched in the following repositories: Gradle Central Plugin Repository* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.
- 미해결스프링 핵심 원리 - 기본편
UnsatisfiredDependencyException, NoUniqueBeanDefinitionException
강의에 나온 테스트를 그대로 따라 진행하였는데, AutoAppConfigTest는 통과가 되었는데,CoreApplicationTests에서 에러가 두개가 나옵니다. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/aiden/Desktop/CP/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepositoryCaused 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 둘 에러 전부 memoryMemberRepository 와 MemberRepository와 관련있어보이는데 어떻게 해야할까요?
- 미해결스프링 핵심 원리 - 기본편
Run 시 Test Results 하위 내용 미표시
관심사의 분리 25:39 강의에서 전체 테스트 Run 시 좌측에 Test Results에 관한 하위 항목들이 표시되는데요, 함께 실습하며 실행 시 저는 Test Results 하위에 항목들이 하나도 나오지 않습니다. 동일한 코드로 함께 실습 중인데 어떤 부분 때문에 안보이는 걸까요?
- 미해결스프링 핵심 원리 - 기본편
appConfig.xml 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요.==================================*오류 메시지org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [appConfig.xml]; nested exception is java.io.FileNotFoundException: class path resource [appConfig.xml] cannot be opened because it does not existCaused by: java.io.FileNotFoundException: class path resource [appConfig.xml] cannot be opened because it does not exist====================================================================*XmlAppContextpackage windwish.com.example.core.xml; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import windwish.com.example.core.member._5MemberService; import static org.assertj.core.api.Assertions.assertThat; public class XmlAppContext { @Test void xmlAppContext() { ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml"); _5MemberService memberService = ac.getBean("memberService", _5MemberService.class); assertThat(memberService).isInstanceOf(_5MemberService.class); } }==================================*appConfig.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="memberService" class="windwish.com.example.core.member._6MemberServiceImpl"> <constructor-arg name="memberRepository" ref="memberRepository" /> </bean> <bean id="memberRepository" class="windwish.com.example.core.member._4MemoryMemberRepository" /> <bean id="orderService" class="windwish.com.example.core.order._3OrderServiceimpl"> <constructor-arg name="memberRepository" ref="memberRepository" /> <constructor-arg name="discountPolicy" ref="discountPolicy" /> </bean> <bean id="discountPolicy" class="windwish.com.example.core.discount._3RateDiscountPolicy" /> </beans>==================================왜 존재하지 않는다는 건지 모르겠습니다;;
- 미해결스프링 핵심 원리 - 기본편
@PreDestroy에 대해
@PostConstruct를 쓰면 밑에 있는 init 메소드가 자동으로 실행돼서 테스트에서 init을 따로 호출하지 않아도 connect()와 call 메소드가 불러와 실행됩니다. 반면에 close메소는 아래 두번째 사진과 같이 따로 호출하지 않으면 실행되지 않는데 원래 그런것인가요??원래 그렇다면 @PreDestory는 왜 붙인건가요??
- 해결됨스프링 핵심 원리 - 기본편
@RequiredArgsConstructor이 작동하지 않음
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]위와 같이 @RequiredArgsConstructor 설정해주었지만 해당 생성자가 없다고 에러가 납니다.lombok설치 자체는 HelloLobok은 에러없이 돌아가는 것으로 보아 정상 설치 된 거 같습니다.위와 같이 getter, setter 없이 잘 동작합니다.
- 미해결스프링 핵심 원리 - 기본편
의존 관계 자동 주입 시 아직 등록되지 않은 빈이 어떻게 들어가는지 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 강의를 듣고 이해하던 중에 궁금한 점이 생겼습니다. 먼저 결과 이미지입니다.위 결과를 보면 memberServiceImpl의 인스턴스가 먼저 생성이되고 등록되는 거 같아보입니다.그런데 여기서 제가 궁금한 것은 바로 밑에 memoryMemberRepository가 등록되는데 제가 생각하기로는 두 객체의 인스턴스가 반대 순서로 등록이 되어야 아닌가 하는 생각이 들었습니다.그 이유는 다음 코드를 봐주시면 감사하겠습니다.위 코드처럼 MemberServiceImpl은 생성될 때, MemberRepository를 넣어서 생성합니다. 그렇다면 MemoryMemberRepository 빈이 등록되지 않은 상태에서 MemberServiceImpl의 빈이 만들어진다면 객체가 만들어진 후에 넣을 수 있어야 말이 된다고 생각했습니다. 하지만 현재 제 코드에서는 private final MemberRepository이기 때문에 후에 setter나 다른 메서드로는 넣을 수 없는 걸로 알고 있습니다. 또한 MemberRepository를 넣을 수 있는 setter나 다른 메서드들 또한 없습니다.그렇다고 했을 때, 어째서 MemberServiceImpl 빈이 먼저 만들어지는데도 불구하고 에러가 나지 않는지 궁금합니다.
- 미해결스프링 핵심 원리 - 기본편
실무에서 RequiredArgsConstructor를 사용할 때의 Annotation 사용 유무
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. Lombok의 RequiredArgsConstructor를 https://www.inflearn.com/questions/71872/requiredargsconstructor%EA%B3%BC-qualifier%EC%A7%88%EB%AC%B8저와 비슷한 질문이 있을까봐 질문 게시판을 찾다가 위의 글을 익어보았습니다. 실무에서도 저렇게 Lombok 설정을 바꾼 다음에 Primary, Qualifier, 혹은 사용자 정의 Annotation을 필드 앞에 적는 방식을 주로 사용하나요? 저러면 개발 팀 전체의 Lombok 설정이 바뀌는 것인데, 보통 저걸 합의하고 저렇게 바꾸는지 여쭤보고 싶습니다.아니면 실무에서는 Primary, Qualifier, 혹은 사용자 정의 Annotation을 사용하지 않고Discountpolicy rateDiscountPolicy;위와 같이 필드명(패러미터명)을 바꿔서 사용하는 방식이 일반적인지 여쭤보고 싶습니다. 강의에서는 위와 같은 방식을 별로 강조하지 않으셔서, 의문점이 남습니다. 또한 제가 생각하기에도 바람직한 방법은 아닌 것 같은게, package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy rateDiscountPolicy; @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = rateDiscountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } }위와 같이 rateDiscountPolicy를 필드명으로 선언하면 createOrder에서도 rateDiscountPolicy로 사용해야 하는 불상사가 일어나지 않나요? 긴 글 읽어봐주셔서 감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
OCP의 대해서 질문이 있습니다.
OCP에 대해서 궁금한 점이 있습니다. 제가 이해하기로는 OCP란 기능을 확장을 했을 때, 구성 영역인 AppConfig와 확장된 기능에 대한 코드 말고 클라이언트 코드(사용 영역)의 변경이 없어야 된다고 이해했습니다. 그런데 만약에 여기서 기능의 확장을 하면서 메서드 명이 바뀐다거나 메서드의 인자가 추가된다고 했을 때는 결국 OCP를 지킬 수 없다고 생각을 합니다. 다음은 제가 생각한 예시입니다.예시 1 인자추가 또는 변경 => 강의에서 사용하신 discount에서 상품에 분류에 따라 할인률이 바뀐다고 한다면 결국 public int discount(Member member, int price) 해당 메서드에서 상품에 가격뿐만 아니라 상품의 종류를 나타낼 인자 혹은 상품이라는 객체를 만들면서 인자를 변경해야 합니다.예시 2 메서드명의 변경=> MemberRepository의 save라는 메서드명을 regist로 바꾼다고 하면 결국 MemberServiceImpl의 코드도 save에서 regist로 변경해야 합니다.결국 두 예시 모두 변경에 닫혀있지 않게 되는데 그렇다고 해서 OCP가 위반되었다고 볼 수 있는 건가요? 이런 모든 경우를 따진다면 사실 OCP는 지킬 수 없는 원칙이라 생각되는데 막상 친구가 저런 반박을 했을 때 딱히 할 말이 없었습니다. 이런 경우에 위반인지 아닌지와 이유에 대해서도 설명해주시면 감사하겠습니다.
- 미해결스프링 핵심 원리 - 기본편
CoreApplication.java 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 마지막에 앱실행 하는 부분에서 이 에러가 발생합니다.포트번호를 이미쓰고 있다고 말하는거 같은데 핸들링을 못하겠습니다. 혹시 방안 제시 해주실수 있을까요 ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
IntelliJ 질문드립니다.
안녕하세요 인텔리제이에 대해 잘 알지못해 질문드립니다.강의가 intellij 무료버전으로 진행이 되는데 유료버전을 사용해도 환경설정 등 동일하게 강의 수강하며 코딩하는데 지장이 없는지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
프로세스흐름도를 그릴때 보통 어떤프로그램을 많이 사용하나요? 대ㅐ중화된 프로그램이 있을까요? 아니면 그냥 PPT 를 활용해서 캡쳐해서 사용하는식인가요? 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) Y2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 모름3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) Y[질문 내용]안녕하세요. 강의를 듣고 있는 학 직장인입니다. 20초에 나오는 설계 그림중 프로세스 흐름도를 그리신 자료가 있는데요. 개발자들이 보통 구조도나 프로세스흐름도를 그릴때 사용하는 프로그램이 어떤 프로그램을 많이 사용하는지 궁금합니다. (대중적인게있는지요.)질문자체가 좀 뜬구름 잡는 질문일 수 있지만 순수하게 궁금하여 물어보는 점 양해부탁드립니다.
- 미해결스프링 핵심 원리 - 기본편
단일책임 원칙에 대해 질문이 있습니다.
요청과 응답에 대한 DTO클래스를 생성할때 이너클래스를 사용해도 될까요?@Getter @Setter @NoArgsConstructor public class Member { @Getter public static class Request { private String name; } @Getter public static class Response { private Long id; private String name; } }이런식으로 하나의 클래스안에 두개의 책임을 가지게 되면 SRP에 위배되는 거니까 요청과 응답에 대한 DTO를 모두 만들어 두는게 더 좋은걸까요? 그렇게 하면 DTO클래스들이 너무 늘어날까봐 좋지 않을것 같고..질문을 요약하자면 DTO를 많이 생성하더라고 SRP를 지키는게 좋은 선택일까요?
- 미해결스프링 핵심 원리 - 기본편
프록시 객체 조회하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]request 스콥인 객체를 DI 할 때, 프록시를 만들어 가짜 객체를 주입하는것으로 이해했습니다.예제에서 LogDemoController에서 위 방법을 사용했으므로, LogDemoController 빈을 컨테이너에 저장할 때 DI 가 진행되어 필드값인 myLogger 에 myLogger의 프록시 객체가 저장되었다 생각했습니다.이후 @PostConstruct 를 통해 해당 필드값을 조회하면(롬복을 적용해 toString 을 사용했습니다) 오류가 발생합니다. 오류메세지에서 myLogger 가 request 스콥이고 아직 request가 없다고 했는데, myLogger에는 프록시 객체가 이미 저장되어있어서 조회가 될 거라 생각했는데 왜 조회가 안될까요?@Controller @RequiredArgsConstructor @ToString public class LogDemoController { private final LogDemoService logDemoService; private final MyLogger myLogger; @PostConstruct public void init() { System.out.println(this.toString()); } }
- 미해결스프링 핵심 원리 - 기본편
policyMap.get(discountCode) 부분이 이해가 되질 않습니다.
public static int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } 여기서 policyMap 이 Map<String, DiscountPolicy> 라는 것 때문에 키값으로 문자열 "fixDiscountPolicy" 가 들어갔을때, value 값으로 fixDiscountPolicy 가 나오는 이유를 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
복습 방법 및 로드맵 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 실무 경험은 1년 6개월 정도 있고,Java와 Spring 프레임워크 사용 경험이 있는 주니어 개발자입니다. 그러나 경력 동안 흔들리는 기초 개념도 많고, 제가 잘하고 있는 것인지 의문이 많이 들어서 얼마 전에 퇴사를 하고, 자바 기본 이론책과 인프런 강의를 수강하고 있는데요. 지금은 인프런 강의에 집중해서 공부를 하고 있습니다. 입문 강의 때부터 강의를 쭉 듣고, 인프런 강의노트에 필요한 이야기들은 받아 적고, 코드를 따라치면서 학습을 해나가고 있습니다. 이해가 안가는 부분들은 강의를 멈추고 검색을 해서 추가적으로 알아보는 부분도 있습니다. 곧 스프링 핵심 원리도 완강을 앞두고 있는데요.뭔가 온전히 제 것이 된 느낌들은 아니어서.. 이걸 조금 더 효율적으로 학습해서 어떻게 제 것으로 더 흡수하면 좋을지가 고민이 됩니다. 1) 완강 이후에 전체적으로 한 번 쭉 복습을 하는 것이 좋을지 궁금합니다.2) 추천하는 복습 방법이 있을까요? 복습 시에도 그대로 코드를 따라치면서 한 번 더 공부를 하는 게 좋을지. 아니면 기존에 학습했던 코드와 강의 자료를 같이 보면서 학습하는 게 좋을까요?3) 현재 개인 프로젝트를 준비 중에 있는데, 로드맵 순서 및 유튜브에 업로드된 로드맵 영상처럼 쭉 수강하면서 프로젝트 구현에 힘을 쓰면 좋을지,아니면 스프링 핵심 원리 강의 수강 이후에 MVC 1편-JPA 활용1 보면서 개인 프로젝트 진행해도 괜찮을지 궁금합니다. 강의 재미있게 잘 보고 있습니다.감사합니다.
- 미해결스프링 핵심 원리 - 기본편
강의 재생 오류 (크롬, 엣지)
안녕하세요.한 30분 전까지만 해도 강의 재생이 잘되었었는데어느 순간부터 흰 바탕화면에 아무런 반응이 없네요쿠키 삭제를 해봐도, 브라우저를 크롬에서 엣지로 바꿔봐도 똑같습니다.. +)개발자 도구로 확인해보니 api 서버 쪽 오류인 것 같기도 한데 확인 부탁드립니다 ㅠㅠ