[질문 내용] 대댓글을 확인안해주시는 것 같아 질문 다시 올립니다 ! 의존관계가 잘못되었는지 테스트 3개가 다 안 돌아갑니다 뭐가 잘못된건지 모르겠습니다 .. https://drive.google.com/file/d/1yZWpxXR6pZD3RVN6Zt3ni5hFttutBKrj/view?usp=sharing
구글드라이브 링크 https://drive.google.com/file/d/1gq1a-0nrQ9vHo0W2zv8Oo4gEK9pxp5jA/view?usp=sharing Could not autowire. No beans of 'ItemMapper' type found. 이런 에러가 발생했습니다. 무시하고 테스트 돌려보니 3개 모두 오류가 발생합니다. java.lang.IllegalStateException: Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext
@Repository가 Data Access layer 계층에 있고 선언만하면 Bean으로 등록이되서 spring container가 관리해주는것으로 알고있습니다. 여기서 질문인게 DB-1편 자료를 읽고와보니 PlatformTransactionManager를 썼을때 코드상에 @Repositroy를 안붙이셨는데 굳이 @Respository를 붙이지 않아도 되나요? 저는 꼭 붙여야만 저장소로 인식이 되는줄알아서요 정확한답변 부탁드립니다 @Slf4j public class MemberRepositoryV1 { private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource) { this.dataSource = dataSource; } public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values (?, ?)"; Connection con = null; PreparedStatement pstmt = null; 코드는 일부만 발췌했습니다! 지금 MemberRepository1~4까지 확인해보니 위에 전부다 @Repository를 붙이시지 않았더라구요! 제가 잘 알지못해서 정확하게 답변듣고싶습니다
보통 실무에서는 controller ->service(interface) -> repository -> dao ^ | serviceImpl (service Interface 구현체) 이렇게 많이 사용합니다. 제가 개발자로 실무를 하지 않아서 정확하지는 않지만 @Configuratiain 을 이용한 클래스에서 구성을 잡고 포인트컷으로 지정된 패키지와 그 하위 *Impl 메서드에 모든 @Transaction 어노테이션이 적용되도록 설정을 했던 것 같습니다. 그리고 serviceImpl에서 @Transactional 어노테이션을 사용하지 말라고 가이드가 내려 옵니다. 코딩은 public class serviceImpl { public int createMember(MemberVO member) { deleteMember(member); insertMember(member); updateMember(member); } public int deleteMember(MemberVO member) { //비지니스 로직 수행 String id = member.getId(); //null 체크 되어 있다고 가정 repository.delete(id); } public int insertMember(MemberVO member) { //비지니스 로직 수행 repository.insert(member); } public int updateMember(MemberVO member) { //비지니스 로직 수행 repository.update(member); } } 그런데 한번도 아키텍처나 업무 공통 단에서 내부 호출에 대한 가이드가 없었습니다. 그리고 실제로 내부 호출을 해도 Transaction 처리에 문제가 있지는 않았습니다. 그렇다고 AspectJ 의 컴파일러를 이용하는 것 같지도 않고 ObjectProvider를 사용하는 것 같지도 않는데 말입니다. 고급편에서도 궁금했지만 DB2편을 다 수강하고 나서 질문을 드립니다 아키텍처 쪽에서 내부 호출에 대한 문제를 모르진 않았을것 같은데 통상적으로 어떻게 @Transactional 처리를 하기에 개발자들은 내부 호출 문제에 신경 쓰지 않을까요?
[질문 내용] 안녕하세요 자바 17에 스프링 3이상으로 실습해보고있습니다. 처음엔 의존관계 설정을 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" 이렇게 해줬는데 clean만 빌드가 되며 compileJava가 빌드가 안되고 그래들에서 의존관계에 빨간불이 뜨며 persistence를 찾을 수 없다는 에러 메세지가 나왔습니다 찾아보던 도중 persistence버전을 3.0.1로 높이면 해결이 된다라는 글을 보고 버전을 올려줬습니다. 그 후 빌드를 해줬더니 jakarta로 import해주었던게 다 javax로 바뀌어있더라고요 그래서 일일히 들어가 다시 jakarta로 바꿔주니까 clean과 compileJava 둘 다 정상적으로 빌드되었습니다. 하지만 그래들은 저렇게 아직 빨간불이 뜹니다 이대로 진행해도 되는걸까요 ? 왜 persistance 버전을 높이면 javax로 돌아가는건가요 ?
만약 규모가 작은 프로젝트인 경우 현업에서 controller, service, vo 이런식으로 구조를 나누고 그 안에 비지니스 로직기준해서 폴더를 나누어 주는 경우도 있는데, 그 경우에는 말씀하셨던 비지니스따라 class파일을 만드는것과 크게 구조적으로 차이가 클까요?
Test 부분에서 application.properties 에 spring.profiles.active=test #spring.datasource.url=jdbc:h2:tcp://localhost/~/testcase #spring.datasource.username=sa #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug url과 username을 추가했었는데 h2 서버를 띄우지도 않았는데 작동되는 이유가 무엇인가요? (저 주석은 마지막강의 임베디드 메모리 강의듣느라 주석처리했습니다.) 이미 서버를 한번 띄었었기 때문에 작동이 되는것인지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 이전 수업까지 datasource를 저희가 주입하는게 아닌 properties 파일로 자동으로 주입받을 때 src/test/resources 를 만든적이 없는걸로 기억합니다. 그런데도 에러 없이 잘 돌아갔었는데 src/test/resources 를 만들어서 분리하는 순간 src/test/resources에 있는 properties 파일은 src/test 를 위한 설정 파일이 되는건가요? 만약 src/test/resources를 만들지 않았다면 src/main에 있는 설정 정보를 그대로 src/test에서도 끌어다 쓰는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Item 클래스에 getId()도 있는데 BeanPropertySqlParameterSouce(item)을 사용하면 id값도 만들어지나요??
강의 중 트랜잭션 관련 부분을 보다 @Transactional과 직접 트랜잭션을 사용하는 예제를 떠올려 생각중인데 제가 생각한것이 맞는지 궁금하여 질문드립니다. @Transactional이 적용된 A클래스의 메서드에서 @Transactional이 적용되지 않은 B클래스의 메서드를 호출하고 B클래스 메서드의 내부는 직접 트랜잭션 매니져로 트랜잭션을 생성하고 롤백하는 로직이 포함되어 있는 상황이 있다고 가정한다면 트랜잭션 처리 순서는 A클래스에서 트랜잭션이 시작되고 B클래스는 @Transactional이 없어서 트랜잭션AOP 프록시가 생성되지 않는것과는 상관없이 트랜잭션 매니져로 직접 생성한 트랜잭션으로 인해 A클래스의 트랜잭션에 합류하게 되어 B클래스의 롤백으로 인해 결과는 모두 롤백되는게 맞는걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 강의에서 @SpringBootApplication(scanBasePackages = "hello.itemservice.web") 로 controller 부분 package 만 componentscan하고 나머지 설정부분은 @Import 를 통해서 @configuration 파일을 componentscan하는걸로 이해하고있는데 service, repository의 package에 bean을 config 파일에서 직접 등록하고 의존주입하고있는 상태에서 @Service , @Repository annotation 생략해도 되는데 사용한 이유가 서비스계층, repository계층을 명시 해주기 위해서 사용한 것 인지 궁금해서 질문 남깁니다.
트랜잭션을 리포지토리 말고 서비스 계층에 달면 문제가 생기네요ㅠㅠ org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 서비스 계층서 클래스레벨에 트랜잭션 달고 실행시 이렇게 ..나오는데 레포지토리에달면 잘 동작하는데.. 서비스 계층에 달면 왜그런걸까요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의를 듣다가 순간 애매해서 질문드립니다. V2config에서 해당 코드를 @Bean public ItemService itemService() { return new ItemServiceV2(itemRepositoryV2, itemQueryRepositoryV2()); } @Bean public ItemQueryRepositoryV2 itemQueryRepositoryV2(){ return new ItemQueryRepositoryV2(em); } @Bean public ItemService itemService() { return new ItemServiceV2(itemRepositoryV2, new ItemQueryRepositoryV2(em)); } /** @Bean public ItemQueryRepositoryV2 itemQueryRepositoryV2(){ return new ItemQueryRepositoryV2(em); } **/ 처럼 ItemQueryRepositoryV2부분은 주석처리 해서 @Bean으로 등록을 하지 않으면 작동이 안돼야 할까요?? 변경하고 작동해봤는데 문제가 없어서 질문드립니다.