월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
Provider 사용
package javax.inject; public interface Provider { T get(); } @Autowired private Provider<PrototypeBean> provider; public int logic() { PrototypeBean prototypeBean = provider.get();} Provider 인터페이스 사용시 위처럼 인터페이스를 구현한 구현체 없이도 사용이 가능한가요?
- 미해결스프링 핵심 원리 - 기본편
CoreApplication에 대한 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.CoreApplication의 @SpringBootAplication에는 @ComponentScan이 들어있다고 하셨습니다.그러면 스프링 빈 등록을 할 때 AutoAppConfig가 아니라 CoreApplication을 써도 될 것 같다는 생각이 들었습니다.그래서 방금 테스트한 코드를 이렇게 수정해보았습니다.public class AutoAppConfigTest { @Test void basicScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CoreApplication.class); MemberService memberService = ac.getBean(MemberService.class); assertThat(memberService).isInstanceOf(MemberService.class); }}하지만 제가 @Component를 사용하지 않은 MemberService 도 같이 bean으로 등록되어 있어서 NoUniqueBeanDefinitionException이 발생했습니다. 왜 CoreApplicaion을 사용하면 이러한 오류가 나는 건지 궁금합니다. 그리고 이것이 AutoAppConfig의 역할을 대체할 수 있는지 궁금합니다
- 해결됨스프링 핵심 원리 - 기본편
Lombok testcode질문
Lombok설치이후 test를 전부 test했더니 오류코드가 발생합니다.. 어떤점이 잘못되었을까요? https://drive.google.com/file/d/1MuwBRL6nZkJ1fB3GokLDo3hEAufjOCHq/view?usp=sharing 또한 오류를 잡을때 아직 초보라그런지 어디에서 잡아야하고 어떤부분을 고쳐야하는지 감이오지를 않습니다 조언해주실수있으실까요?
- 해결됨스프링 핵심 원리 - 기본편
spring container 질문입니다
영한님 강의에 annotationconfigapplicationcontext이 스프링 컨테이너를 만들어주어 여기서 이제 관리한다고 알고있습니다.class OrderServiceImplTest { @Test void createOrder() { OrderServiceImpl orderService = new OrderServiceImpl(); orderService.createOrder(1L, "itemA", 10000); } } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); // return null; }@Component public class OrderServiceImpl implements OrderService{ @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } } 1 .여기 세개의 코드를 보면 첫번째에는 annotationconfigapplicationcontext 를 선언해주지않았는데 스프링컨테이너에 저장이될수있는건가요?Component는 클래스를 빈으로 등록해줘 ~ 라는느낌으로 알고있습니다. 첫번째코드를 실행시켰을때 두번째코드인 return new OrderServiceImpl(memberRepository(), discountPolicy()); 에서 에러가 발생합니다. 강의와 구글링을 검색했는데 @Component와 @Bean은 코드상의 유연함을 바탕으로 다르다고 알고있습니다. 왜 두번째에서 에러가나는지 궁금합니다
- 미해결스프링 핵심 원리 - 기본편
빈 중복 관련하여 질문이 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 일단 오류 로그는 이러한데 이 autowired를 통해 주입 받는 과정에서 @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; }@Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); }이 수동 빈의 등록과 @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); } }이 자동 빈의 등록이 중복이 되어 MemberRepository의 빈을 조회하여 주입할 때 2개의 빈 중복으로 해당 오류가 발생하는 것으로 이해하였는데 gpt의 의견으로 @primary를 사용하면 해결이 되는걸 확인을 했습니다만처음에 타입으로 조회 한 이후에 여러 개의 빈이 조회 된다면 memberRepository의 이름인 빈이 선택되어 오류가 나지 않아야 하는 것이 아닌가 하여 이해가 되지 않아 질문 드립니다.감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 질문입니다
https://drive.google.com/file/d/1Ilyl5R3LPq0dH7d2lsg0cwKXXNzxQsjj/view?usp=sharing 강의 내용과 똑같이 코드를 따라했는데 Autowired로 했을때 오류가나네요 ㅠㅠㅠ 어떤게문제일까요?
- 미해결스프링 핵심 원리 - 기본편
PDF 강의자료 p.119 @Autowired 누락
AllBeanTest 클래스 내 DiscountService 클래스의생성자 메서드 위에 @Autowired가 누락돼있습니다. 강의본에서는 있는데 PDF 파일 내 코드에는 없네요.완강 후 PDF 코드 따라치면서 복습하다가 발견해서 글 올립니다.여담으로 PDF 내 코드가 다 있어서 빠르게 복습하기 좋아요!
- 미해결스프링 핵심 원리 - 기본편
DI 궁금증
@Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } 강의를 여러번봤는데 궁금증이 하나생겼습니다. @Bean으로 설정해주면 스프링컨테이너에서 라이프사이클을 관리해준다고 알고있습니다. 근데 결국은 new MemberServiceImpl에 memberRepository()가 들어간다는게 new MemberServiceImpl(new MemoryMemberRepository)랑 똑같은건데 직접주입하는거와 spring에서 관리하는거의 개념에만 차이가 있고 코드는 방금윗줄에서 설명한거랑 똑같은건가요?
- 해결됨스프링 핵심 원리 - 기본편
섹션5 싱글톤 컨테이너 인스턴스가 다릅니다.
강의내용과 똑같이따라했는데 서로다른 인스턴스가 나옵니다... 분명코드가 똑같은지 3번이나 비교했는데 다른거같아서 올려봅니다.
- 미해결스프링 핵심 원리 - 기본편
궁금한점이 있어 질문드립니다.
다름아니라 섹션 9를 공부하던중 Provider를 사용하던 프록시 객체를 사용하던 지연로딩이 제일 핵심이라고 하셨는데 그렇다면 해당 예제와같이 웹스코프말고 싱글턴의 스코프를 가진 객체를 지연로딩 생성후 의존성 주입을 해주는경우가 실무에서 사용하는경우가 있나요?
- 해결됨스프링 핵심 원리 - 기본편
섹션3 자동완성질문입니다
public class BeanDefinitionTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); void springContainer() { // AppConfig appConfig = new AppConfig(); ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);강의중에 class레벨에서 자동완성으로 코드작성할때는 변수 삽입 리팩토링은 현재 콘텍스트에서 지원하시 않습니다라고 나와있는데메소드안에서 선언될때는 바로 되더라구요 차이가 뭔지 알수있을까요?
- 미해결스프링 핵심 원리 - 기본편
혹시 강의 내용 개인 노션에 올려도되나요?
개인 노션에 공부한 내용을 작성하고 있는데 강의한 내용의 그림이나 글을 작성해도 되나요? 전부 복사 붙여넣기가 아닌 요약등으로 올리고있습니다
- 해결됨스프링 핵심 원리 - 기본편
섹션3. 스프링핵심원리 이해 강의내용질문
의존관계 주입을 사용하면 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다. 의존관계 주입을 사용하면 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경 할 수 있다. 결국 이 두문장은 똑같은 말 아닌가요? 클라이언트 코드를 변경하지 않는다 == 정적인 클래스 의존관계를 변경하지 않는다클라이언트가 호출하는 대상의 타입 인스턴스를 변경할수있다 == 동적인 객체 인스턴스 의존관계를 쉽게 변경할수있다. 결국 실행이 되는부분은 클라이언트코드니까 동적으로 실행될때 정적인 클래스 의존관계가 유지가 되겠고,인스턴스가 변경할 수 있다는 의미는 런타임중에 정률 할인 정책으로 될지, 정액 할인 정책으로 될지가 동적인 인스턴스의 관계를 변경할수있다는 의미로 들려서 결국 두문장은 같은의미로 사용되지않았나 싶습니다
- 미해결스프링 핵심 원리 - 기본편
List, Map 으로 빈 조회 할 때
AutoAppConfig.class를 넣으면 빈 값이 나와야 하는데 안 나와서 문의 드립니다..!
- 해결됨스프링 핵심 원리 - 기본편
질문이 있습니다.
1.ComponenetScan하는 부분에서 어차피 해당부분은 Bean관리를 직접해주지않는데 Configruation을 적어주는 이유가 뭔가요??2.테스트코드에서 다른 Appconfig의 경우에는멤버변수로 스프링 컨테이너를 설정했지만 컴포넌트 스캔을 사용하는경우에는 메소드 내부에서 스프링 컨테이너 객체를 설정했는데 이유를 알수있을까요?public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(SameBeanConfig.class);public class AutoAppConfigTest { @Test @DisplayName("컴포넌트 스캔 테스트") void componentScan(){ ApplicationContext ac=new AnnotationConfigApplicationContext(AutoAppConfig.class); MemberService memberService=ac.getBean(MemberService.class); Assertions.assertThat(memberService).isInstanceOf(MemberService.class); }
- 미해결스프링 핵심 원리 - 기본편
싱글톤 관련해서 궁금한점이 있습니다.
@Configuration static class SameBeanConfig{ @Bean public MemberRepository memberRepository1(){ return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2(){ return new MemoryMemberRepository(); } }@Test @DisplayName("타입으로 조회시 같은 타입이 둘이상 있을경우 빈이름으로 조회하면 가능함") void findBeansName(){ MemberRepository memberRepository1=ac.getBean("memberRepository1", MemberRepository.class); MemberRepository memberRepository2=ac.getBean("memberRepository2", MemberRepository.class); org.assertj.core.api.Assertions.assertThat(memberRepository1).isEqualTo(memberRepository2); }만약에 이렇게 빈을 등록하고 사용하는경우에는 사실상 싱글톤 패턴은 아니기때문에 예시를 보여주기위해서만 사용하셨을뿐 실무에서는 저런식으로 사용을 안한다고 이해해도될까요?
- 미해결스프링 핵심 원리 - 기본편
복습 하던중 궁금한 사항이 생겨 질문드립니다.
섹션 2 부분에서 MemoryMemberRepository의 부분의 store를 정적 변수로 설정한 이유가 만약 멤버변수로 선언하게되면 MemberServiceImpl , OrderServiceImpl에서 각가 의존하는 MemoryMemberRepository내부의 store 객체도 달라지기때문에정적 변수로 설정하신걸까요?
- 해결됨스프링 핵심 원리 - 기본편
request 스코프 에러에 대해서 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]김영한님이 하신 그대로 작성하여 Scope를 request에 맞춰서 컨트롤러와 서비스를 만들어 스프링 부트를 작동한 경우 로그에서 에러가 발생하셨습니다.똑같이 코드를 작성하였음에도 이상하게 정상적으로 스프링 부트가 실행이 되고 있고 스크린샷으로 첨부는 하지 않았으나 Debug로 로그 범위를 확장하였음에도 해당 오류 ('request 스코프 예제 만들기' 강좌 14:30 직후)에 대해서 확인이 안되고 있습니다.
- 미해결스프링 핵심 원리 - 기본편
왜 순수한 자바로 테스트 해야 하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]1. 제목과 같은 내용입니다. 강의 어느 편인가 해당 내용에 대해서 짧게 답변 해주신 부분을 어렴풋이 본거 같은데 잊어서 질문 드립니다. 해당 질문에 대한 답변 또는 관련 영상을 혹시 아신다면 감사 드릴거 같습니다.2. 해당 질문에 대한 원인은 다음과 같습니다. 순수한 자바 코드가 스프링 프레임워크를 포함한 것보다 상대적으로 작은 범위여서 일단 공통 부분인 자바 파트에서 테스트를 하고 그 다음 스프링으로 가는 것이 맞겠다는게 처음 생각이었습니다. 근데 문득 이게 맞나 ? 명확한 근거가 아닌 저의 추측에 기반한 근거였기 때문에 1번의 설명과 같이 모호해서 질문을 드립니다.개발자인데 아직도 문서를 두서 없이 작성합니다.해당 부분에 있어 양해를 구합니다.읽어주셔서 감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
Autowired 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]의존관계 자동주입에 대해 정리를 하던도 중 제가 이해한것이 맞는지 궁금하여 질문드립니다. 컨테이너에 빈을 등록하는 방법에는 대표적으로,1.컴포넌트 스캔을 통해 등록하는 방법2. 자바설정클래스를 통해 등록하는 방법3 xml 파일을 통해 등록하는 방법이 있고 이때 의존관계주입을 2번과 3번에서는 직접 구현체를 정의? 해주었지만컴포넌트 스캔을 사용할때 의존관계주입을 (OCP와 DIP 원칙을 지키며) 해주기 위해선 @Autowired 을 사용해야한다. 그리고 @Autowired 을 해주는 방법에는 아래와같은 방법이 있다.생성자주입필드주입setter 주입일반메서드 주입이렇게 이해하였는데 제가 이해 한 것이 맞나요?