월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
@ComponentScan 범위 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]설정 정보에 @ComponentScan 어노테이션을 붙이면 해당 클래스의 패키지를 기준으로 하위 모든 클래스를 확인하여 Bean을 등록해주는 것으로 압니다.이번 강의에서 ComponentFilterAppConfigTest에 어노테이션을 붙여주었으니 filter폴더 하위 클래스 모든 곳을 스캔해야할것으로 예상했습니다. 하지만 includefilters를 주석처리하니 BeanA를 빈으로 등록하지 못하는데 왜 그런것인가요?
- 미해결스프링 핵심 원리 - 기본편
의존관계 주입 질문입니다.
4. '스프링 컨테이너와 스프링 빈'강의에서 빈을 한번에 등록하고 그 이후에 의존관계를 주입한다고 알고있습니다. 그런데 '@Configuration과 싱글톤'강의에서 @Bean public MemberRepository memberRepository() { if (memoryMemberRepository가 이미 스프링 컨테이너에 등록되어 있으면?) { return 스프링 컨테이너에서 찾아서 반환; } else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 MemoryMemberRepository를 생성하고 스프링 컨테이너에 등록 return 반환 } } 이렇게 되어있는데 else로직은 앞에서 말했던 것처럼 처음에 빈을 한번에 등록했을 때 실행되는 로직이 맞나요?
- 해결됨스프링 핵심 원리 - 기본편
Thread.sleep 질문입니다.
제가 이해한 바로는 챕터9장 request스코프 강의에서 Thread.sleep을 이용해서 request소멸을 지연하였습니다.이때 sleep메서드는 InterruptedException를 가지고 있기때문에 예외처리를 해줘야합니다.그래서 throws로 예외를 넘겼는데 어떻게 처리되는 건지 궁금합니다.package hello.core2.web; import hello.core2.common.MyLogger; import hello.core2.logdemo.LogDemoService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; //의존관계 주입이 일어남 -> MyLogger는 스코프가 request이다. //request의 생존범위는 고객의 요청이 들어오고 나오기까지의 범위이다. //그런데 고객의 요청이들어오지를 않으니 오류가 난다. @RequestMapping("log-demo") @ResponseBody //뷰 화면이 없으므로 ResponseBody로 바로 반환 //원래는 뷰리졸버에게 템플릿을 넘긴다. public String logDemo(HttpServletRequest request) throws InterruptedException { MyLogger myLogger = myLoggerProvider.getObject();// getObject를 호출시키게해서 request 요청을 한다. String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); //request 시작 myLogger.log("controller test"); Thread.sleep(1000); logDemoService.logic("testId"); //request 요청 마지막 //request close //request 요청이 끝남 return "OK"; } }
- 미해결스프링 핵심 원리 - 기본편
싱글톤과 프로토타입의 차이점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 싱글톤과 프로토타입의 차이점은 이해가 됐지만헷갈리는 부분이 있어서 질문 남깁니다. 테스트 진행할때 프로토 타입을 주입 받을 당시에 인스턴스를 계속 가지고 있어서 결국 클라이언트 빈을 호출 할때 새로운 프로토타입 인스턴스를 가지는 것이 아니라 주입받을 당시에 생성되었던 인스턴스가 유지된다는 것은 이해했습니다.다만 프로토타입으로 지정했던 빈이 싱글톤 빈이 였어도 똑같은 값이 나오지 않나요..?테스트를 진행한것이싱글톤인 빈을 주입받으면 똑같은 인스턴스를 갖기때문에 새로운 인스턴스를 받기 위해 프로토타입 빈을 받으려고 테스트 한것일까요??
- 해결됨스프링 핵심 원리 - 기본편
SpringApplication 내부에서 getBeanDefinition 호출
지금까지 수업에서는 빈검색할때 AnnotationConfigApplicationContext 를 사용해서 설정파일을 주입했습니다. 마찬가지로 @SpringBootApplication 가 붙어있는 main 안에서 빈검색해서 ac.getBeanDefinition(beanDefinitionName) 을 호출하고 싶습니다. 어떻게 해야 하나요? SpringApplication.run(CoreApplication.class, args) 은 AnnotationConfigApplicationContext 이 아니라 ConfigurableApplicationContext 타입을 리턴해서 getBeanDefinition 메서드가 존재하지 않습니다.
- 미해결스프링 핵심 원리 - 기본편
질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.안녕하세요 회원도메인개발 강의에서 9분 34초에 나오는 MemberServiceImpl 클래스내에서 memberRepository를 final로 설정했는데 그 이유가 무엇일까요? final을 붙이지 않아도 되나요?
- 미해결스프링 핵심 원리 - 기본편
Autowired members must be defined in valid Spring bean
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Autowired 를 명시했을 때 Autowired members must be defined in valid Spring bean (@Component|@Service|...)에러가 발생합니다. 해당 에러를 조사해보니 의존성 주입을 받는 클래스가 스프링 빈으로 등록되지 않았을 때 혹은 정의된 빈이 스프링 컨테이너에 의해 관리되지 않는 경우 에 발생한다고 하는데, Q1.명시하지않았을 때는 정상적으로 수행되는데, 명시했을 때 위문제가 발생하는 이유가 궁금합니다. Q2.@Autowired 를 명시했을 때는 다른 에노테이션들도 다 명시해야 되는건가요?
- 미해결스프링 핵심 원리 - 기본편
No Scope registered for scope name 'request'오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의와 똑같이 했는데 No Scope registered for scope name 'request'오류가 생깁니다구글링 해보니 설정에서 빌드 기본 설정을 intellij 가 아닌 Gradlle로 해도 똑같이 나오고 @Autowired대신 직접 생성자 주입을 해봐도 같은 오류가 계속 발생합니다.
- 해결됨스프링 핵심 원리 - 기본편
consol에서 log가 작성되지않음
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 얼마전부터 새로 스프링 심화학습이 필요하여 인강으로 수강중인 수강생입니다.김영한 강사님 영상을 보며 따라하며 실행하다가 실행에 오류는 없으나 현재 console에 log가 남질않아 난항을 겪고있습니다커뮤니티나 버전확인 등 구글링을 해보아도 답이보이지않아 게시글남깁니다.ps. java버전을 17로 낮춰도 log는 뜨지않습니다. build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.1.5' id 'io.spring.dependency-management' version '1.1.3' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }
- 해결됨스프링 핵심 원리 - 기본편
Scope 사용하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점까지 강의를 듣고 어느정도 프로토타입의 특성을 알게 되었습니다. 그런데 실무 경험이 없어서 그런지 프로토타입을 왜 사용하는지, 싱글톤과 프로토타입을 왜 같이 사용하는지 모르겠습니다.
- 해결됨스프링 핵심 원리 - 기본편
OCP 원칙관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]만약에 새로운 구현체를 만들어서 기능을 확장하게 되면 인터페이스에 새로운 내용을 추가해야 할수도 있을거 같은데 이러면 OCP 원칙에 위반된게 아닌건가요?예를 들면 구현체에Member del(Member member){ // 코드 생략 }이런식으로 멤버를 삭제하는 기능을 만들어서 확장한다고 하면 인터페이스에 Member del(Member member);라는 코드를 추가해야지 않나요??
- 미해결스프링 핵심 원리 - 기본편
mainDiscountPolicy 사용 시 StartApplicationTest에서 에러가 납니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. mainDiscountPolicy를 만들고 test를 돌려봤는데 다음과 같은 에러가 납니다.StartApplicationTest를 제외하고는 다 통과합니다.잘 따라한 것 같은데 에러가 나서 질문드립니다. 어떻게 해결해야 할까요? java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@15f2eda3 testClass = spring.demo.StartApplicationTests, locations = [], classes = [spring.demo.StartApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@27912e3, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@30b6ffe0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@24c22fe, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@72ade7e3, org.springframework.boot.test.context.SpringBootTestAnnotation@315e37a3], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
- 해결됨스프링 핵심 원리 - 기본편
static class
static class 설정파일왜 대부분의 테스트시 static class 를 이용해서 스프링설정을 하시나요? default class 를 이용해서 스프링 설정을 하는건 어떤지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
스프링 컨테이너를 테스트에 통합한 경우
강의자료에 아래의 문장이 있습니다. 순수한 자바 테스트 코드에는 당연히 @Autowired가 동작하지 않는다. @SpringBootTest 처럼 스프링 컨테이너를 테스트에 통합한 경우에만 가능하다. 이 말의 의미가 아래 2가지 경우 모두 해당되는게 맞을까요?1) @SpringBootTest 이 있는 클래스 내부에서 @Autowired 를 사용해서 의존관계주입하는 경우 2) Class 내부에 @Autowired 를 사용해서 의존관계를 표시하고 new AnnotationConfigApplicationContext(test.class) 으로 스프링 컨테이너를 생성한 경우
- 미해결스프링 핵심 원리 - 기본편
AppConfig import 되지 않는 이유가 궁금합니다..
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]AppConfig가 import되지 않는 이유가 궁금합니다.
- 미해결스프링 핵심 원리 - 기본편
CoreApplication 작동시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 마지막 스프링 부트 테스트에서 오류가 발생했습니다..강의 들으면서 똑같이 했는데 왜 저는 빈이 두개 나온다고 오류가 나올까요.... AppConfig.class 에서 @Configuration을 주석 처리 하면 스프링부트 테스트가 되긴 하는데 강의에서 주석처리하는걸 못봐서,,,,,어떻게 해야하는걸까요..?
- 해결됨스프링 핵심 원리 - 기본편
@RequiredArgsConstructor를 포함한 생성자 2개
[질문 내용]@RequiredArgsConstructor //필수값(ex final)으로 생성자를 제공 public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; //final을 붙이면 값이 무조건 필요하다는 뜻 public OrderServiceImpl() { System.out.println("abc"); } }이런식으로 @RequiredArgsConstructor 으로 final을 매개변수로 갖는 생성자와 매개변수가 없는 생성자를 따로 만들면 이런식으로 변수가 초기화 되지 않았다고 오류가 발생하는데 @RequiredArgsConstructor은 생성자가 없을 때만 사용할 수 있는거라서 매개변수 없는 생성자를 만들었기 때문에 @RequiredArgsConstructor` 가 작동을 안 하는건가요?
- 미해결스프링 핵심 원리 - 기본편
setter 주입 테스트 코드
[질문 내용]영상에는 생성자 주입 테스트만 있어서 수정자 주입을 했을 때 테스트 하는 방법에 대해 생각해 봤습니다.@Test void test(){ ApplicationContext ac = new AnnotationConfigApplicationContext(OrderServiceImpl.class); MemoryMemberRepository memberRepository = new MemoryMemberRepository(); memberRepository.save(new Member(1L, "name", Grade.VIP)); OrderServiceImpl bean = ac.getBean(OrderServiceImpl.class); bean.setMemberRepository(memberRepository); bean.setDiscountPolicy(new FixDiscountPolicy()); Order order = bean.createOrder(1L, "itemA", 10000); Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000); }이렇게 테스트 코드를 작성하는게 맞을까요?
- 미해결스프링 핵심 원리 - 기본편
의존관계 필드 주입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 똑같이 코드를 따라한 것 같은데 NoSuchBeanDefinitionException 이 터집니다.
- 미해결스프링 핵심 원리 - 기본편
@Autowired 생략 주소찍기
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 중 memberRepository 와 discountPolicy 주소를 출력하는 것이 안 됩니다.logback.xml 문서는 이미 작성되어 있습니다.