묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
AppConfig 클래스에서 의존성 주입을 통해 OrderService의 메서드 호출 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의와 똑같이 설계한 뒤 AppConfig 클래스를 만들고 사진과 같이 파라미터로 MemoryRepository를 넘기면 두개의 MemoryRepository가 생기는거 아닌가요? 저 두개의 Repository 객체는 서로 다른 객체 인데 어떻게 저게 작동이 되나요?? 강의와 똑같이 반신반의 하면서 작동해봤는데 discountPolicy 쪽에서 member객체가 nullPointer 나옵니다....그렇다고 또 이렇게 하기엔 AppConfig클래스는 인터페이스인 Repository도 의존하게 되고 구현체인 MemoryRepository도 의존하는데... 어떻게 해야하나요?** 추가해결했습니다... MemoryRepository의 Map의 키워드가 static으로 하면되네요.... 학습자료 보니깐 static이였네요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
객체지향 단일 책임의 원칙 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]단일 책임 원칙에 대해서 생각을 하다가 궁금한 것이 생겨서 질문을 작성합니다.강의의 내용을 보고 제가 이해한 내용은 "클래스는 한가지 책임만을 가지게 하여서 클래스가 수행하는 작업에 대해서 강한 책임을 부여시킨다" 입니다.클래스가 하나의 책임만을 수행하게 되면 책임을 분산시키기 위해 많은 클래스 파일이 생길 수 있을 것 같습니다.강의에서 현실세계에 비유를 해주셔서 생각을 가지게 됬는데. 클래스를 사람으로 비유하고 클래스가 가지는 책임을 맡겨진 일로 비유를 하였을 때.사람에게 한가지 일만 시키는 것은 일에 대한 정확도나 완성도에서 이점을 갖지만 많은 사람을 고용애야 한다는 비용이 발생합니다. 때문에 현실세계에서는 한사람에게 많은 일을 부여해서 많은 책임을 부여하는 것이 선호되는 경우도 있다고 생각합니다.이처럼 프로그래밍을 설계할 때도 책임을 분산시키는 것에 대한 현실세계처럼 어떠한 비용이 있는지 궁금합니다. 아니면 단지 현실과 객체지향을 비유로 표현해서 생기는 모순인지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
ConfigurationSingletonTest 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. ConfigurationSingletonTest를 하다가 MemberRepository에 static이 붙어있어서 강의내용과 다른 결과가 출력되었다는걸 알게되었습니다. 그런데 궁금한게 MemberRepository가 static으로 되어있다면 메모리상에 먼저 올라가 객체가 미리 만들어져서 여러번 호출시에도 똑같은 값이 나와야하지않나 하는 의문이 들어서 질문드립니다 ㅎㅎ 감사합니다
-
미해결스프링 핵심 원리 - 기본편
@Autowired 생성자 주입 관련 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.제 MemberServiceImpl 생성자는 다음과 같습니다.그리고, MemoryMemberRepository 클래스에 임의로 생성자를 추가해주었습니다.로그에 bean 생성 순서가 어떻게 되나 찍기 위해 임의로 만들어준 것입니다.출력되는 로그는 다음과 같습니다.22:05:11.598 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberServiceImpl'22:05:11.614 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memoryMemberRepository'122:05:11.629 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'memberServiceImpl' via constructor to bean named 'memoryMemberRepository'memberRepository = hello.core.member.MemoryMemberRepository@1a45193b제가 처음에 생각했던 것은, MemberServiceImpl 객체를 생성하여 bean으로 등록하려고 하는 시점에, 생성자를 통해 객체를 생성하는 과정을 거칠텐데, 이 때 생성자에 필요한 인자인 MemberRepository 객체가 아직 bean으로 등록되어 있지 않은 상황이라, 자동 주입이 이루어지지 않아 먼저 MemberRepository 객체부터 생성하고 bean으로 등록한 이후에, 마저 MemberServiceImpl 객체 생성을 마치고 bean으로 등록하는 과정으로 생각했습니다.그런데, 로그를 찍어보니까, 일단 먼저 memberServiceImpl이 bean으로 등록되고, 그 다음 memoryMemberRepository도 bean으로 등록된 다음에, memoryMemberRepository가 생성자를 통해 (1이 로그에 출력된 것으로 확인 가능) 객체로 생성되고(?) 그 다음 @Autowired를 통해 의존관계 주입이 되고, memberServiceImpl 생성자가 실행되는 것을 확인할 수 있습니다(memberRepository = ~ 구문이 로그에 출력된 것으로 확인 가능).memberServiceImpl의 생성자가 실행되기도 전에 memberServiceImpl이 bean으로 등록되는 과정이 이해가 가지 않습니다. (Creating shared instance of singleton bean 'memberServiceImpl'). memoryMemberRepository도 마찬가지입니다.생성자가 실행되기도 전에 Creating shared instance of singleton bean 문구가 출력되는 이유를 모르겠습니다.bean으로 생성(등록)되려면, 생성자를 통해 실행되는 것 아닌가요? 왜 bean으로 먼저 생성되고, 그 이후에, 자동관계 주입이 된 후에 생성자가 실행되는 것인지 질문 드립니다.
-
미해결스프링 핵심 원리 - 기본편
assertThat() 입력 시 actual 의 종류가 너무 많이 추천(?) 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]assertThat() 을 타이핑 하는 순간 3초 정도 IDE 가 멈추고 이렇게 actual 타입이 추천(?) 됩니다. 강사님께서는 이런 과정 없이 바로 진행이 되던데 이 설정을 어디서 조절하면 좋을까요..?
-
미해결스프링 핵심 원리 - 기본편
강의에서 rate,fix 둘다 component
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내에서fix,rateDiscount 부분 둘다 Component 지정 하여 AllBeanTest 시에 에러가 나는데강사님은 어떻게 에러가 안나는건가요 ?RateDiscount에 MainDiscountPolicy 어노테이션 삭제하셔서 거기서는 같이 삭제하고넘어갔습니다DiscountService위에 Autowired 지정한것도 빨간선으로 뜨더군요
-
미해결스프링 핵심 원리 - 기본편
스프링으로 전환하기 강의 질문
5분 17초쯤 강사님이 실행하셨을땐 'appConfig', 'memberService'등 태그가 뜨는데저는 이렇게만 뜨는데 뭐가 잘못된걸까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Mac brew로 java 설치시 오류
안녕하세요 이번에 mac을 초기화하면서 다시 재설치를 하고있는데요brew tap adoptopenjdk/openjdk 를 진행 뒤brew search idk 를 했을때이러한 오류가 나오면서 설치 가능한 jdk파일은 나옵니다.설치 시에 해당 위험 오류와 함께 설치가 안되는데 이유가 있을까요 ?Warning: Calling the appcast stanza is deprecated! Use the livecheck stanza instead.Please report this issue to the adoptopenjdk/openjdk tap (not Homebrew/brew or Homebrew/homebrew-core), or even better, submit a PR to fix it:/opt/homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk/Casks/adoptopenjdk-jre.rb:9 +추가brew untap adoptopenjdk/openjdk한 뒤에 brew search idk 를 했을 경우 이렇게 나와서우선 Formulae 에있는 openjdk 와 openjdk@11 를 다운받았구요..Azul 사이트에서 java11 arm64bit jdk를 설치해서자바는 잡아논 상태입니다.궁금한 점은brew untap adoptopenjdk/openjdk 했을때의 차이와Adoptopenjdk차이가 궁금합니다. Azul에서 다운받은 java도 괜찮은건지요현재 Mac m2 Air 사용중입니다.Ventura 13.5.1 이용중입니당
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
스트림 .toList와 .collect의 차이
안녕하세요, 우선 좋은 강의 정말 감사드립니다! 나도코딩님 유튜브로 파이썬 강의 듣다가개발자에 꿈이 생겨 현재 부트캠프에서 백엔드를 배우고 있습니다.강의를 듣던 중 궁금한 점이 생겨 여쭤보려고 합니다.스트림 챕터에서 리스트로 저장할 때 .collect를 사용해서 만들 수 있다고 하셨는데혼자 해보다가 collect가 생각이 나지 않아 collect를 사용하지 않고 바로 뒤에 .toList를 붙였는데도정상 작동 하는 것 같습니다.collect를 썼을 때와 안 썼을 때의 차이가 있을까요?또, list.stream().forEach(System.out::println) 를 스트림으로 안바꾸고 list.forEach(System.out::println)로도 사용할 수 있는 이유가 있을까요??//강의 내용 List<String> langListStartsWithC = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase) .collect(Collectors.toList()); langListStartsWithC.stream().forEach(System.out::println); //혼자 해본 코드 List<String> c = Arrays.stream(langs) .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); c.forEach(System.out::println); List<String> list = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); list.stream().forEach(System.out::println); // list.forEach(System.out::println) 작동
-
미해결스프링 핵심 원리 - 기본편
AppConfig와 같이 조립 역할을 하는 컴포넌트는 OCP와 DIP를 따르지 않아도 되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AppConfig와 같이 조립 역할을 하는 컴포넌트는 OCP와 DIP를 따르지 않아도 되는지 궁금합니다. OCP와 DIP 개념을 접했을 때 스프링을 사용하더라도 궁긍적으로는 확장에 따라 변경되는 부분과 구현체에 의존해야하는 영역이 생성된다고 생각합니다. (AppConfig와 같이) AppConfig를 사용할 경우 각각의 서비스들은 SOLID 원칙을 지킬 수 있는데 AppConfig는 SOLID 원칙을 지키지 못하게 되더라구요. 그럼 객체지향 프로그래밍에서 AppConfig는 객체지향 프로그램 대상을 벗어나는 것인지 혹은 프레임워크 헬퍼로서의 역할을 하는것인지... 강사님께서는 어떻게 생각하시는지 궁금합니다!
-
미해결스프링 핵심 원리 - 기본편
@Autowired에 대한 사용법이 궁금합니다.
// Test메서드 void AutowiredOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class); // ac 객체를 생성할 때 오른쪽 인자의 클래스에는 @Component가 자동으로 붙음 } // 등록 클래스 static class TestBean { @Autowired(required = false) // 이렇게 해야 예외 안남, 아예 메서드가 호출 안됨 public void setNoBean1(Member member) { // Member는 스프링 빈에 없음 System.out.println("setNoBean1 = " + member); } //null 호출 @Autowired public void setNoBean2(@Nullable Member member) { System.out.println("setNoBean2 = " + member); } //Optional.empty 호출 @Autowired(required = false) public void setNoBean3(Optional<Member> member) { System.out.println("setNoBean3 = " + member); } } 질문1. @Autowired가 붙은 메서드의 정보가 빈으로 등록이 되나요?(setNoBean1, 2, 3이란 이름의 빈이 등록되나요?)질문2. 빈 등록 방법 중에 @Configuration을 사용할 때는 @Bean을 메서드에 붙어야 한다고 알고 있는데 @Bean을 메서드에 붙여도 될까요?
-
미해결스프링 핵심 원리 - 기본편
Test를 돌렸을 때 자바 결과 + 스프링 로그(?)도 출력하고 싶습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 좋은 강의 잘 듣고 있는 전진호 학생입니다.아래 사진은 싱글톤 컨테이너 강의 3분 26초에 나오는 SingletonTest의 springContainer를 돌렸을 때 제 결과입니다. 강사님의 결과는 아래처럼 나오고 그 이후에 결과가 나옵니다.강사님의 터미널 결과처럼 나오게 하려면 어떻게 해야 할까요.그리고 강사님의 결과처럼 저는 왜 "Test Results"가 안 보이는지 모르겠습니다. (아래 사진에 보면 Test Result가 안 보입니다.) 구글링을 해보니 log4j라고 하는데 application.xml을 만들어서 넣어보기도 하고, application.properties에 넣어보기도 하고, implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0'를 빌드 해보기도 했는데 잘 안되어서 질문 드립니다. 관련 링크라도 주시면 감사하겠습니다.
-
미해결스프링 핵심 원리 - 기본편
Qualifier, 빈 이름 지정 등 OCP 위반
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의를 듣다보니 궁금한 점이 생겨서 질문 남깁니다.Interface에 대한 구현체가 여러개인 경우, 어떤 빈을 주입할지 결정하기 위해 @Qualifier를 이용하거나 빈 이름을 지정하는 방법등을 사용한다고 강의에 나오는데요.이것을 보다보니 구현체를 바꾸려면 결국 사용하는 서비스 layer에서 관련 코드 (구현체를 바꾸는)를 수정해야 하는 거 같은데 이러면 OCP를 위반하게 되는 거 같아서요.OCP 위반을 막으려면 AppConfig를 도입했을 때처럼 구현체를 설정하는 역할을 분리하고 수동 빈 등록으로 가야하는거 아닌가라는 생각이 들었는데 보통 실무에서는 어떻게 처리하는게 맞을까요??구현체를 바꾸는 코드 변경정도는 tradeoff로 감수하는 편인가요 역할 분리하는 편인가요??
-
해결됨스프링 핵심 원리 - 기본편
테스트 실행에 오류가 걸려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]main 아래의 코드들은 다 실행이 잘 되는데 test 아래의 코드가 실행이 안됩니다.무엇이 오류인지 모르겠습니다. 빨간 줄로 표시도 안되고 인터넷에 쳐도 못 찾겠어서 글 남깁니다.
-
미해결스프링 핵심 원리 - 기본편
userA와 userB에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용 중 userA의 주문 금액은 10000원, userB의 주문 금액은 20000원인데 코드 실행 결과 20000원이 나오는 경우는 스프링 컨테이너에서 자동으로 싱글톤 패턴이 적용되어 객체 인스턴스가 하만 생성되기 때문인가요? 그래서 객체 인스턴스가 공유되서 그런가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
super사용해봤는데 이해가 잘 안되네요
저는 super를 부모 클래스의 어떤 것을 사용하는 것으로 이해했습니다. package nodocoding; public class _18_ClassMethod { public static void main(String[] args) { Animal [] animals = new Animal[2]; animals[0] = new Animal(); animals[0].age = 10; animals[1] = new Lion(); ((Lion)animals[1]).name = "lion"; System.out.println(((Lion)animals[1]).name); ((Lion)animals[1]).cry(); } } class Animal { int age; String species; void cry (){ System.out.println("동물소리를 내며 울어요."); } } class Lion extends Animal{ String name; void lionCry() { super.cry(); System.out.println("라이언의 울음소리는 크아앙"); } } 제가 생각한 것은((Lion)animals[1]).cry();라고 코드를 작성했을 때결과가"동물소리를 내며 울어요." "라이언의 울음소리는 크아앙" 이라고 뜰 줄 알았는데 "동물소리를 내며 울어요."만 뜨더라구요.예상과 다르네요 ㅠ 왜 이런 걸까요??
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
강의와 크게 상관은 없지만 공부의 방향성에 대해서 질문합니다.
저는 올해 4월에 입사해서 이제 막 4개월차 주니어 개발자 입니다.퇴근 후에 공부를 하려고 하다가 매번 생각이 많아지는 주제인데요.저의 주요 업무는 전자정부프레임워크 기반의 jsp사이트를 ui유지보수하는 업무입니다.더 좋은 회사를 합격하지 못해서 아쉽긴하지만 그래도 신입받아주는 회사들이 많이 없어서 일단은 기분좋게 다니려고 하고 있습니다. 그런데 회사 업무를 하는 데 앞서서 공부를 하려고 하다보면 자꾸만 그런생각이 들더라구요. jsp/mybatis 를 이렇게 까지 공부해야하나? 전자정부프레임워크 어차피 다른 서비스 기업으로 이직하게 되면 안쓸텐데 굳이 이렇게 공부해야할까 하고요.그래서 회사기술스택에 맞춰서 해야할지 지금듣고 있는 김영한님 스프링강의를 들으면서 개인 포트폴리오를 보강하는 것이 나은지 둘다 하면 되지않냐고도 할수 있지만 그게 정말 맞는 방법인지 하는 의구심이 듭니다.최우선적으로 뭘 중점적으로 해야하는지 우선순위를 명확하게 알고싶습니다!!
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
_Quiz_10 번 문제
저는 Customer 클래스를 선언할 때 name, age를 private 으로 선언하고 Getter, Setter를 이용하여 값을 접근할려고 짯습니다. 근데 map() 을 하는 과정에서 아래와 같은 오류가 떠서 setName()을 그냥 String 반환값으로 고쳐서 했더니 에러가 해결이 됐습니다. 근데 왜 이런 오류가 났는지 이해가 안갑니다 public class _Quiz_10 { public static void main(String[] args) { List<Customer> customerList = new ArrayList<>(); customerList.add(new Customer("챈들러",50)); customerList.add(new Customer("레이첼", 42)); customerList.add(new Customer("모니카", 21)); customerList.add(new Customer("벤자민", 18)); customerList.add(new Customer("제임스", 5)); System.out.println("미술관 입장료"); System.out.println("=================="); customerList.stream() .map(x->x.getAge()>=20 ? x.setName(x.getName() + " 5000원"):x.setName(x.getName()+ " 무료")) .forEach(System.out::println); } } class Customer{ private String name; private int age; public Customer(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 11을 if~else 대신 swtich문으로 풀어도 똑같은 결과가 나오는데, 취사선택의 문제일까요??
package chap_11; public class _Quiz_11 { public static void main(String[] args) { //todo 사용자 정의 예외 클래스(extends Exception을 통해 가능) //todo 예외 객체 생성 메시지가 2개인 것을 보아, 클래스도 2개를 만들어야 할듯...? //todo 경우의 수가 3가지니까 if~else문으로 작성 int errorCode = 0; try { switch (errorCode) { case 0: System.out.println("상품 구매를 완료하였습니다."); break; case 1: throw new NotOnSaleException("상품 구매 가능 시간이 아닙니다."); case 2: throw new SoldOutException("해당 상품은 매진되었습니다."); default: throw new Exception("이외의 에러코드는 여기서 처리하였습니다."); } } catch (NotOnSaleException e) { System.out.println(e.getMessage()); System.out.println("상품 구매는 20시부터 가능합니다."); } catch (SoldOutException e) { System.out.println(e.getMessage()); System.out.println("다음 기회에 이용해주세요."); } catch (Exception e) { System.out.println(e.getMessage()); } } } class NotOnSaleException extends Exception { public NotOnSaleException(String msg) { super(msg); } } class SoldOutException extends Exception { public SoldOutException(String msg) { super(msg); } }위의 errorCode를 각각넣으면 퀴즈의 요구사항대로 정상적으로 출력이 됩니다. 또한, int errorCode = 99; 같이 default에 해당하는 다른 값을 넣어도 정상적으로 다음과 같이 출력이 되구요:제목과 같이 if~else문이나 swtich문으로 선택하는 것은 개인의 자유인가요? 아니면 특정 상황에 따라 다른가요?
-
미해결스프링 핵심 원리 - 기본편
oreApplicationTests 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의처럼 oreApplicationTests에서 오류가 나는데 오류내용이 달라서 질문드립니다 ,,ㅠㅠ오류내용Logging system failed to initialize using configuration from 'null'java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.ConsoleAppender[STDOUT] - No encoder set for the appender named "STDOUT". at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:260) at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:247) at org.springframework.boot.logging.logback.LogbackLoggingSystem.reinitialize(LogbackLoggingSystem.java:319) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:73) at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60) at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:187) at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:332) at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:81) at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:64) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:63) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:356) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1406) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:187) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:119) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) at java.base/java.util.Optional.orElseGet(Optional.java:364) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@597f48df testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], 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.WebDriverContextCustomizerFactory$Customizer@6cc0bcf6, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@f5c79a6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@49a64d82, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@37d3d232, org.springframework.boot.test.context.SpringBootTestAnnotation@a360168f], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:143) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) at java.base/java.util.Optional.orElseGet(Optional.java:364) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)Caused by: java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.ConsoleAppender[STDOUT] - No encoder set for the appender named "STDOUT". at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:347) at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:81) at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:64) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:63) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:356) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1406) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:187) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:119) ... 72 moreCaused by: java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.ConsoleAppender[STDOUT] - No encoder set for the appender named "STDOUT". at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:260) at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:247) at org.springframework.boot.logging.logback.LogbackLoggingSystem.reinitialize(LogbackLoggingSystem.java:319) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:73) at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60) at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:187) at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:332) ... 97 more