월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 핵심 원리 - 기본편
appconfig에 등록한거랑 @Component해서 등록한걸로 어느게 우선순위인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]web 라이브러리를 설치했는데parameter 0 of constructor in hello.core.member.memberserviceimpl required a single bean, but 2 were found이런 오류가 뜨더라고요appconfig안에 MemberRepository의 @Bean 과@Configuration //설정 public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } .... }MemoryMemberRepository.class의 @component//@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); } } 이렇게 두개가 겹쳐서 그런거같은데@Component를 지우니깐 잘되더라고요.둘다 우선순위가 따로 없는건가요?그리고 실습에서는 appconfig안에 Bean을 지웠나요?component를 지웠나요?열심히 들었는데 어디서 부터 실습을 잘못했는지 잘모르겠네요 죄송합니다.
- 미해결스프링 핵심 원리 - 기본편
MyLogger 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.package Hproject.core.common; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.UUID; @Component @Scope(value="request") public class MyLogger { private String uuid; private String requestURL; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message){ System.out.println("["+ uuid+ "]"+ "[" + requestURL+"]"+message); } @PostConstruct public void init(){ uuid= UUID.randomUUID().toString(); System.out.println("["+ uuid+ "] request scope bean create "+this); } @PreDestroy public void close(){ System.out.println("["+ uuid+ "] request scope bean close "+this); } }해당 MyLogger 클래스에서 init() 메소드 안에서 ,uuid의 값을 랜덤으로 초기화 시켜 줬는데,이 메소드가 아니라 처음에 필드 선언 부분에서 초기화 시키는건 안되는건가요??
- 미해결스프링 핵심 원리 - 기본편
빈, 컨테이너도 넓은 의미에서 객체일까요 ??
듣다보니 쓰임이 많을것같은 클래스를 빈으로 등록하고, 그 빈들을 컨테이너가 관리하는데 이렇게하는 이유를 생각해보면 멤버서비스, 오더서비스처럼 호출이 잦은 클래스를 한곳에서 관리하면 접근이 편할 것 같습니다 이렇게 빈으로 관리하는 이유가 무엇인가요 ??예전에 질문드렸을 때 객체 하나 자체는 메모리가 많이 들지 않는다고 하셨습니다. 그럼 객체를 많이 만들어도 메모리를 절약하기 위함은 아닐 것 같은데 빈, 컨테이너 개념을 이용하는 다른 이유가 있나요 ??
- 미해결스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException가 발생하는 테스트를 만들고 싶은데 안 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니요3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]의존성 주입이 안 되는 상황을 테스트 하기 위해ㅅComponentScan의 basePackges를 멤버로 제한하고 orderService를 호출해서 UnsatisfiedDependencyException에러가 발생하는 테스트를 진행하는데 테스트가 오류가 발생합니다.ComponentScan의 basePachages 설정 제가 만든 테스트: UnsatisfiedDependencyException에러가 발생시 테스트를 성공하게 하는 것이 목표로그 결과로그결과 확대
- 미해결스프링 핵심 원리 - 기본편
무조건 인터페이스-구현체 를 나누는게 좋은 건 아니겠죠 ???
모든 상황에서 인터페이스(DiscountPolicy)-구현체(FixDiscountPolicy) 처럼 나누는게 좋은 건 아니겠죠 ??지금 상황처럼 정책이 바뀔 경우가 없다면 그냥 바로 구현체를 만드는 게 더 효율적인 것 같은데, 설계상 정책이 안바뀐다 하더라도 만약의 상황을 대비해 인터페이스를 만들어두는편인가요 ??
- 미해결스프링 핵심 원리 - 기본편
테스트코드에서 스프링컨테이너 호출 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 컨테이너 테스트 할 때 보통 ApplicationContext 인터페이스에 없는 메서드들도 있기 때문에 AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext 을 쓰면 되는걸까요??
- 해결됨스프링 핵심 원리 - 기본편
강사님께서 말씀하시는 "클라이언트 코드"는 무엇인가요 ??
클라이언트 코드라고 자주 언급해주시는데, 사용자와 관련되어 일하는 코드를 전반적으로 일컫는 말일까요 ???
- 미해결스프링 핵심 원리 - 기본편
DIP와 관련된 어노테이션
강의 : 스프링 핵심원리 - "관심사의 분리" 현재 스프링 안쓰고 자바로만 하고 계시니 강의에는 안맞을 수도 있는데 궁금해서 질문 드립니다 ...DIP지키려고 객체생성 안해주고 인터페이스들을 선언만 해주고, 생성자 주입으로 마침내 DIP를 지킬 수 있다 이렇게 이해를 했습니다.여기서 더 나아가서 생성자도 쓰기 귀찮으니 @RequiredArgsConstructor쓰면 아래 코드에서 생성자 부분 안쓰고도 원래 의도대로 DIP지킬 수 있는거죠???
- 미해결스프링 핵심 원리 - 기본편
질문있습니다.
[질문 내용]빈 생명주기 콜백에 대해 공부하면서 의문점이 드는게 이 라이프사이클을 활용하여 테스트를 짜는걸 일개학생이 혼자 프로젝트를 진행할때 쓸 데가 있을까요?만약 있다면 언제 사용하면 좋을까요?
- 미해결스프링 핵심 원리 - 기본편
빈의 초기화가 무엇을 의미하나요?
현재까지 배운 내용으로 스프링 컨테이너가 빈의 생성+의존관계 주입을 해주는것은 이해가 가지만 초기화를 해준다는게 정확히 어떤 개념인지 이해가지 않습니다 앞선 강의에서 나왔던 @PostConstruct 어노테이션이 붙은 메소드를 초기화라고 생각하면 될까요?
- 미해결스프링 핵심 원리 - 기본편
포트번호가 생성이안되요
CoreApllication 클래스를 실행시키면 교수님처럼 localgost 8080이 출력이되고 웹사이트에서 url쳤을떄 화면이 띄워져야하는데 저는 연결조차안되네요
- 미해결스프링 핵심 원리 - 기본편
memberRepository에 lombok getter적용이 안됩니다
안녕하세요 강의 복습 도중 OrderServiceImpl에 getMemberReposiotry 메소드가 있어서 @Getter를 붙였는데 테스트 시에 cannot find symbol error가 뜹니다 IDE에서는 빨간줄도 안뜨는데 오류가 나는 이유가 무엇일까요?
- 해결됨스프링 핵심 원리 - 기본편
applicationContext를 통한 빈 객체 가져오기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이렇게 findByName() 메소드 내부에서는 ac.getBean()이 작동되는데, 외부에서는 compile-time error가 발생합니다. 왜 그렇나요?
- 미해결스프링 핵심 원리 - 기본편
컨테이너에 등록된 모든 빈 조회 ac.getBean
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 핵심 원리 - 기본편에서 컨테이너에 등록된 모든 빈 조회 2:07 에서 질문이 있습니다. Object bean = ac.getBean(BeanDefinitionName)에서 타입을 지정해주지 않았기 때문에 Object로 받았다고 말씀하셨는데요!for(String beanDefinitionName : beanDefinitionNames){} => 해당 반복문에서 beanDefinitionNames 배열들을 beanDefinitionName String 타입으로 받은 것 아닌가요? 이 부분이 궁금합니다!
- 해결됨스프링 핵심 원리 - 기본편
OrderServiceImpl은 DIP도 잘 지킨 코드인가요 ??
OrderServiceImpl은 DIP도 잘 지킨 코드인가요 ?? Order와 할인정책 사이 관계를 볼 때, 단일책임 원칙은 할인 정책이 discount하는 일 1개만 하고 있으니 지켰다고 보는데 DIP도 지킨 코드인가요 ?? 할인정책 관련 코드가 OrderServiceImpl부분에 아예 없는게 잘 지키는 거라고 생각했는데 아닌가요 ???
- 미해결스프링 핵심 원리 - 기본편
<섹션 7. 조회한 빈이 모두 필요할 때> 강의 질문
DiscountService 클래스에서 모든 Map으로 DiscountPolicy를 주입(@Autowired 생략) 받는다고 했는데 그렇다면 클래스에 @ComponentScan을 붙여서 등록된 빈들을 조회할 수 있도록 해야 하는 거 아닌가요?? 조금 헷갈리네요... ㅎㅎ
- 미해결스프링 핵심 원리 - 기본편
appConfig.xml
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.appConfig.xml 만들고 나서 에러가 뜨는데 어떻게 코드수정을 해줘야 할지 몰라 문의드립니다
- 미해결스프링 핵심 원리 - 기본편
해당 프로젝트 clone하면, 자바 파일이 생성이 안돼요.
private으로 가끔 다른pc에서 git clone해서 해당 프로젝트를 다운받으면, 항상 자바 파일이 컵모양 => 으로 바뀌면서, 읽기만되고 자바 파일도 생성이 안되더라고요.. 구글링 해본결과 소스 루트를 지정하면 해결되는데, clone할때마다 해줘야하는게 좀 번거롭고 이상한 거 같아서, 근본적인 해결책이 궁금합니다..
- 해결됨스프링 핵심 원리 - 기본편
멤버서비스 클래스 만드는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]현재 위와 같은 상황입니다. 왜 굳이 MemberService 인터페이스 및 클래스를 작성해야 하나요? 예를들어, MemberServiceTest 클래스에서다음과 같이 MemberService memberService = new MemberServiceImpl(); 대신 MemberRepository memberRepository=new MemoryMemberRepository(); 과 같이 하여도 되지 않나요? 굳이 MemberService 를 만드신 이유가 있을 것 같아 질문합니다.
- 미해결스프링 핵심 원리 - 기본편
프로토타입 빈 프록시
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. 웹 스코프에서 프록시 모드를 사용했는데, 이것을 프로토타입 빈에도 적용할 수 있는지 궁금해서 코드를 조금 수정해보았습니다. public class SingletonWithPrototypeTest1 { @Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class, SingletonBean.class); SingletonBean singletonBean = ac.getBean(SingletonBean.class); singletonBean.prototypeBean.addCount(); assertThat(singletonBean.prototypeBean.getCount()).isEqualTo(1); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); singletonBean1.prototypeBean.addCount(); assertThat(singletonBean1.prototypeBean.getCount()).isEqualTo(1); } @RequiredArgsConstructor static class SingletonBean { private final PrototypeBean prototypeBean; } @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }수명이 다할 때까지 동일한 인스턴스를 사용하는 request 스코프 빈과 달리 prototype 빈은 메서드를 호출할 때마다 인스턴스 주소값이 달라지는 것 같아요. 가짜 프록시 객체도 스프링 컨테이너에서 빈을 가져오기 때문인가요?request 빈은 수명이 다할 때까지 스프링 컨테이너에서 관리되지만, prototype 빈은 스프링 컨테이너에서 초기화 단계까지만 관여하므로, 가짜 프록시 객체가 해당 객체의 메서드가 호출될 때마다 새로운 인스턴스를 가져오는건가요?? 그럼 가짜 프록시 객체는 항상 스프링 컨테이너를 경유하는 건가요?