학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. MemberServiceIntegrationTest의 회원가입 테스를 진행 중에 오류가 발생하여 질문을 남깁니다.. 제가 알아본걸로는 빈 자동 주입이 2개이상여서 안되는것 같아서 어노테이션들도 확인해봤는데 없었고 다른 이유들도 많이 봤지만 오류를 찾을 수 없어 질문 남깁니다.... [에러 코드] org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springConfig' defined in file [/Users/hyrki/Desktop/study/hello/build/classes/java/main/hellospring/hello/SpringConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springDataJpaMemberRepository' defined in hellospring.hello.repository.SpringDataJpaMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long)! No property 'findfById' found for type 'Member'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long)! No property 'findfById' found for type 'Member' ㅠㅠㅠㅠㅠㅠㅠㅠ부탁 드리겠습니다.....
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 'java'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라는 오류는 아래 블로그 참고해서 해주시면 됩니다!! 2번 단계부터 진행하시면 되요~!! https://m.blog.naver.com/under0tree/222343927513 다만, 경로 같은 경우는 intellij에서 File -> Project Structure -> SDKs 에서 JDK home path 에서 확인하시면 될 것 같습니다!! 저는 D 드라이브에 설치해놔서 따로 설정해줬습니다!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Order와 Item은 다대다 관계입니다. 하나의 주문이 여러개의 상품을 담을 수 있고, 하나의 상품은 여러개의 주문에 속할 수 있다. 여기서 궁금한 점이 있습니다. 하나의 상품이 여러 개의 주문이 속할때 예를 하나의 상품이라는 객체가 다음과 같이 구성될때 id : 1 name : 핸드폰 stockQuantity : 3 categories : 전자제품 이라는 하나의 객체가 주문( id : 2)에도 속하고 다른 주문(id:3)에도 속할 수 있다는건가요?
spring batch5에서 더이상 JobBuilderFactory와 StepBuilderFactory를 지원하지 않아 스프링 가이드를 참고해 JobBuilder와 StepBuilder로 해보고 있는데 아무래도 수업내용과는 코드차이가 있어 어려움이 있는데요, 혹시 spring batch5에 호환되는 버젼의 코드 업데이트 예정이 있으신지 여쭈어봅니다!
@Configuration(proxyBeanMethods = false) static class MyConfig { private final Common common; public MyConfig(Common common) { this.common = common; } @Bean public Bean1 bean1() { System.out.println("bean1 생성자"); return new Bean1(common); } @Bean public Bean2 bean2() { System.out.println("bean2 생성자"); return new Bean2(common); } } @Configuration(proxyBeanMethods = false) static class MyCommonConfig { @Bean public Common common() { return new Common(); } } 과 @Configuration(proxyBeanMethods = false) static class MyConfig { @Autowired private Common common; public MyConfig() { } @Bean public Bean1 bean1() { System.out.println("bean1 생성자"); return new Bean1(common); } @Bean public Bean2 bean2() { System.out.println("bean2 생성자"); return new Bean2(common); } @Bean public Common common() { return new Common(); } } 빈 구성 정보를 프록시 객체로 생성하지 않는다는 대안을 코드로 작성해보면 별도의 구성 정보를 사용하는 방식과 내부에서 필드 주입으로 초기화 하는 방식이 생각났습니다. 별도의 구성정보를 사용하면 어떤 클래스를 의존하는지 생성자를 보고 확인할 수 있다는 장점과 테스트 코드를 작성할때 더 편할거라 생각이 들고, 밑에 방식은 Common이라는 클래스가 MyConfig 에서만 사용된다면 관리하기도 편할거라 생각이 들었습니다. 그리고 설정 정보 클래스니까 굳이 생성자로 초기화를 하지 않아도 되지 않을까 라는 생각도 들었습니다. 강사님께서 Config 클래스도 테스트를 해봐야한다고 말씀해주셨는데 이런 경우라면 상황에 따라 선택해야하는 부분인가요 ? 아니면 설정 정보도 환경에 따라 다를 경우가 있느니까 별도로 분리하는게 나을까요?
스프링 시큐리티에서 기본적으로 제공하는 formlogin 방식이 아닌 방식(예를 들면 json 요청)으로 로그인을 구현할 때, 기존의 방식 처럼 컨트롤러에서 처리하는 것과 커스텀 필터를 등록하여 처리하는 것에 차이가 무엇인지 궁금합니다. 아무래도 필터는 Dispatcher Servlet을 거치지 않고 먼저 처리할 수 있다는 장점이 있을 것 같은데 컨트롤로 단에서 처리하는 것 보다 어떤점이 유리할까요? 또 다른 이점이 있는지도 궁금합니다!
1. 문제 HelloRepositoryTest 테스트 실행 시 findHelloFailed() 테스트 실패 및 에러 발생 Expected :null Actual :tobyspring.hello.Hello@579846cc 2. 강의 정보 제목: [섹션 10] 스프링 부트의 자동 구성과 테스트로 전환 시간: 6:23 내용: HelloRepositoryTest.java의 @HellobootTest를 @SpringBootTest로 변경 후 실행 3. 내 프로젝트 상태 HelloRepositoryTest.java 코드 package tobyspring.hello; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) public class HelloRepositoryTest { @Autowired private HelloRepository helloRepository; @Test void findHelloFailed() { assertThat(helloRepository.findHello("Toby")).isNull(); } @Test void increaseCount() { assertThat(helloRepository.countOf("Toby")).isEqualTo(0); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(1); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(2); } } 4. 해결 과정 increaseCount() 테스트 실행 결과가 findHelloFailed() 테스트에 영향을 미치는 것으로 추정 따라서 @Transaction을 @SpringBootTest 아래 줄에 추가 package tobyspring.hello; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) @Transactional public class HelloRepositoryTest { @Autowired private HelloRepository helloRepository; @Test void findHelloFailed() { assertThat(helloRepository.findHello("Toby")).isNull(); } @Test void increaseCount() { assertThat(helloRepository.countOf("Toby")).isEqualTo(0); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(1); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(2); } } 5. 결과 정상적으로 테스트 통과 6. 질문 강의에서 @Transactional 어노테이션 없이 테스트를 통과할 수 있었던 이유가 궁금합니다!
1. 문제 DataSourceTest 테스트 실행 시 transaction 로그가 출력되지 않음 INFO o.s.t.c.transaction.TransactionContext : Began transaction (1) for...(생략) INFO o.s.t.c.transaction.TransactionContext : Rolled back transaction for...(생략) 2. 강의 정보 제목: [섹션 10] 스프링 부트의 자동 구성과 테스트로 전환 시간: 6:00 내용: DataSourceTest.java의 @HellobootTest를 @JdbcTest로 변경 후 로그 보기 3. 내 프로젝트 상태 자바 버전: 17 스프링 부트 버전: 3.2.0 build.gradle의 의존성 repositories { mavenCentral() maven { url 'https://repo.clojars.org' name 'Clojars' } } dependencies { implementation ('org.springframework.boot:spring-boot-starter-web') implementation 'org.springframework:spring-jdbc' runtimeOnly('com.h2database:h2:2.2.220') implementation 'hikari-cp:hikari-cp:3.0.1' testImplementation 'org.springframework.boot:spring-boot-starter-test' } DataSourceTest.java 코드 @JdbcTest public class DataSourceTest { @Autowired DataSource dataSource; @Test void connect() throws SQLException { Connection connection = dataSource.getConnection(); connection.close(); } } 4. 해결 과정 application.properties에 로그 단계를 정의 logging.level.ROOT=DEBUG logging.level.org.springframework.transaction=DEBUG 5. 결과 단계를 DEBUG -> TRACE로 다양하게 바꾸고 테스트를 실행했으나 transaction은 출력되지 않음 6. 질문 강의 중간에 로깅 단계를 바꾸는 작업이 있었는데 제가 그 부분을 놓친 것인지 스프링 부트의 버전이 올라가며 transaction 로그를 출력하지 않도록 바뀐 것인지 아니면 다른 방식으로 접근해야 하는 것인지 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 지금 많이 바뀌었는데 프로젝트 부분을 어떻게 선택해야할까요? 버전은 3.2.1로 해도되나요? 해당 내용들을 공지해주신 곳이 있나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 내용에 entity에 setter는 사용하지 않는다 변경내용을 추적하기 어렵다. 변경 확인하려면 오랜 시간이 소요될 수 있다라고 말씀해주셨는데, entity에 직접적으로 setter 를 쓰지 않고 dto에서 entity 로 옮겨서 save 할 때, toEntity toDto 메소드를 만들어서 일일히 사용하고 있다가 스프링에서 지원하는 BeanUtils.copyPropertyies(source,target) source -> target으로 복사하는 메소드를 알게 되었고, 이게 작동되려면 source에는 getter 가 target 에는 setter 가 필요한 걸로 알고 있는데 화면에서 받아온 requestDTO 를 entity로 복사할 때 entity에 setter 가 필요한데 이걸 사용하기보다 그냥 builder 패턴을 사용한 메소드를 사용하는 게 맞을까요?.. 궁금하여 질문드립니다..
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. V3.1 실행 후 콘솔창에 뜨는 쿼리문이 다음과 같이 뜹니다. springboot version 3.2.1 이고 Hibernate5JakartaModule로 설정했습니다. application.properties 도 아래와 같이 설정했습니다. 그외 부분도 강사님 코드를 그대로 복붙해도 다음과 같이 물음표가 너무 많이 뜨는데 버전 문제인건가요?
지금 서비스엔티티에서 작업자와 상품이 2개 전부 1:N 상태입니다 @Query("select s from Services s join fetch s.workers w " + "join fetch s.serviceTime st " + "where s.id = :id") Services findByIdWithWorkers(@Param("id") Long id); OneToMany인 경우 2개가 동시에 fetch join이 안되는걸 알고 application.yml에 jpa: hibernate: ddl-auto: update properties: hibernate: default_batch_fetch_size: 100 format_sql: true show-sql: true 위에 spring: 있습니다 이렇게 default_batch_fetch_sizes을 추가했는데 sql에 Hibernate: select rg1_0.service_id, rg1_0.id, rg1_0.base_category, rg1_0.created_at, rg1_0.price, rg1_0.service_item_name, rg1_0.service_time, rg1_0.sub_category, rg1_0.super_category, rg1_0.updated_at from reservation_goods rg1_0 where rg1_0.service_id=? in이 나오지 않는데 데이터가 지금 10개 정도 있는데 데이터 작아서 in절이 나오지 않는걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 강의를 듣다가 아래가 동작하지 않아서 import javax.persistence.Entity; 아래 줄로 일단 넘어갔는데요 import jakarta.persistence.Entity; 스프링부트가 이제는 JDK-17로 어쩔수 없이 환경설정을 해야해서 17로 했느데요 모든 강의가 중 이렇게 조금씩 동작을 안하는 수정된 부분을 영상으로 업로드할 계획이 있으신가요? 아니면 누군가 미리 듣고서 한번 당해보고 그분이 또는 본인이 질문하고 질문의 답변을 알아서 찾아서 적용해서 들어야할까요?ㅠ