묻고 답해요
135만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
test 코드 실행 시 전부 실패
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/drive/folders/1omwrHagdmHylTjdmWgRgTnX7nQkNpvms?usp=sharingtest 코드 실행을 하는데 전부 다 실패합니다.datasource에 문제가 있는 것 같은데 왜 문제가 생긴건지 모르겠습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
mybatis적용2테스트시 오류발생
https://drive.google.com/file/d/1rDjuTFQjZZOER9yTzPuAWsmouu9D_p26/view?usp=sharing미치겠네요. 그대로 따라했는데 왜오류일까요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
컨트롤러 패키지명
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]컨트롤러를 두는 패키지명을 controller가 아닌 web으로 하신 이유가 궁금합니다
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
프록시 객체의 this
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요! 이번 강의 내용 중에 자바 언어에서 메서드 앞에 별도의 참조가 없으면 this라는 뜻으로 자기 자신의 인스턴스를 가리킨다는 this.internal() 이 되는데, 여기서 this 는 자기 자신을 가리키므로, 실제 대상 객체(target)의 인스턴스를 뜻한다.라고 설명이 되어 있는데 지금 까지 알던 개념은 CallService(부모), CallServiceProxy(자식)관계가 존재한다면 CallServiceProxy 입장에서는 this는 자기 자신의 주솟값을 가리킨다. super는 부모 즉 CallService의 주솟값을 가리킨다 입니다 여기서 this는 그럼 프록시 자기 자신의 객체 주솟값이 아닌(부모의 주솟값 == super == trarget )를 가리킨다고 이해하면 될까요? 그렇다고 하면 해당 프록시 객체는 자기 자신의 참조 주솟값은 스택 프레임에서 가지지 않는 걸까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
BeanPropertySqlParameterSource
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]BeanPropertySqlParameterSource를 사용하려면해당 DTO나 도메인에 getter setter or @Data가 필수로 있어야 하는 게 맞겠지요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
정상처리 예외반환
테스트코드에서 정상처리 되었을때 예외를 반환하는데이 예외는 service에있는 로직을 호출하면 잔고부족 때문에 메서드 자체에서 예외를 던진 것으로 알고있습니다.근데 만약 테스트에서 테스트 코드가 아니라 진짜 사용을 하는 사용자라면 이 던진 예외는 어떻게 처리가 되는것인가요 ??그리고 왜 정상로직에서는 예외를 던지고 잔고부족로직에서는 잡는지 궁금합니다. 정상로직에서는 잡으면 안되는 것인가요 ?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
의존관계주입
공부를하다가 제대로 이해하고있는건지 확인하고싶어 질문드립니다!JDBC템플릿도 그렇고JPA에서 의존관계주입시, 리포지토리안에서 JPAQueryFactory를 생성해 엔티티매니저를 주입받아 사용합니다.지금은 config에서 의존관계설정을 다하는데 이걸 스프링부트가 해주게되면 스프링컨테이너에 올라가있는 리포지토리,서비스,컨트롤러를보고 적절하게 생성자 파라미터에있는 이 엔티티매니저를 생성해 주입해주는것인가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
HashMap을 사용한 MemoryItemRepository에서 순서 보장 문제와 테스트 실패 가능성 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, "프로젝트 구조 설명3 - 테스트" 강의에서 ItemRepositoryTest 클래스안에 코드라인 88번 test(String itemName, Integer maxPrice, Item... items) 함수에서 사용되어진 containsExactly 함수는 참이기 위해서 모든 값이 같아하고 그리고 주어진 값들의 순서역시 같아야 한다고 이해를 하였습니다. 근데 여기에서 궁금한점이 MemoryItemRepository에서 HashMap을 사용한 경우 입력되어진 값들의 순서가 보장되어 지지 않아서 어떠한 경우에는 테스트 findItems이 값들의 순서가 일치하지 않아서 실패하는 것이 아닌가에 대해서 궁금증이 생기어서 질문을 남깁니다. 감사합니다 :)
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
프록시 호출
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]static class CallService{ public void external() { log.info("call external"); printTxInfo(); internal(); } @Transactional public void internal() { log.info("call internal"); printTxInfo(); } }위 코드에서 교안의 그림과 설명에서 callService.external()을 호출할 때, 트랜잭션 프록시로부터 먼저 호출된다고 되어있는데 external()메서드는 @Transactional이 적용되어 있지 않음에도 프록시로 호출되는 이유는 같은 클래스 레벨인 internal()메서드에 @Transactional이 선언되어 있어서 CallService클래스 자체가 프록시로 생성되기때문인가요?옳바르게 이해한지 확인하고싶어 질문드립니다ㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
ItemMapper 빈 오류
[질문 내용]안녕하세요, 스프링부트 3.3.0 버전이라서 교재에 나온대로 mybatis-spring-boot-starter 3.0.3으로 추가했는데 다음과 같이 ItemMapper가 빈으로 등록되지 않습니다.Could not autowire. No beans of 'ItemMapper' type found.그래서 다른 분들처럼 버전 내려보기도 해봤는데 계속 오류가 뜨네요. 자주하는 질문에 나오는 프로젝트 초기화도 해봤는데 오류가 생깁니다. 한번 봐주시면 감사하겠습니다.구글 드라이브 https://drive.google.com/file/d/1EDUWv_GFWyZqOXpXsSuGvkU_ovDC8SWA/view?usp=sharing
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
homeController
homeController에서 return "redirect:/items"; 를통해 itemController에 있는 items로 매핑이 된 메서드로 이동해 items뷰템플릿을 보여주는건 이해했습니다!그런데 왜 localhost:8080을 웝페이지에 띄웠을 때static에있는 index.html이 호출이 되지 않고 homeController에있는 /URL이 호출이되나요 ?requestMapping("/") 이게 기본화면과 매핑된 URL인가요 ??
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
임베디드모드는 H2에서만 가능할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]오라클에서 하려고 하니까 안 되는 것 같습니다 ㅠㅠ 임베디드 DB 사용 방법이테스트 클래스에 @Transactional 넣기test/resources/schema.sql 파일 작성test/resouces/application.properties 파일 작성맞지않나요?!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트시 @Transactional 붙이고, orphanRemoval = true
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트시 @Transactional 을 붙이고 , 객체 A(1) - B(N)간 다대일 양방향 참조를 설정 (일쪽에 mappedby Casecade ALL, orphanRemoval = true) 한 상태에서 부모객체의 참조를 끊으면 자연스레, 자연스레 N쪽에서 데이터가 사라지는 코드를 구현했었는데, @Transactional 적용 테스트시에 변경감지나, orphanRemoval = true 같은 경우 트랜잭션이 롤백되어서 orphanRemoval = true 작동이 되지 않는 문제가 있습니다. 이럴경우 테스트는 어떻게 해야하나요?? 실제 구현은 잘동작하지만, 테스트시에 동작 X @Transactional로 인해 orphanRemoval = true가 작동 안해서 , 떼고 테스트 코드를 작성할경우 검증로직에서 N쪽에서 데이터가 잘 들어갔거나, 삭제되는걸 검증하는 경우에는, 이미 트랜잭션이 서비스로직에서 detached 된 에러로, no session 에러를 만나게 되었습니다. 이럴 경우 어떻게 테스트 하시는지 여쭙고 싶습니다. 1쪽만 테스트 해야하는지, 본 강의에서와 같이 @Commit으로 해결하나요??
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
자동키?가 없는 오라클에서 useGeneratedkey 사용하는 방법??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]오라클의 경우는 시퀀스로 증가하는 방법을 사용하는데, useGeneratedkey를 사용할 방법이 있을까요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
수동 빈 등록과 자동 빈 등록 질문
[질문 내용] 강의에서는 이렇게 수동 빈 등록으로 서비스와 레포지토리를 등록했는데 이렇게 자동 빈 등록을 하면 위와 같이 수동 빈 등록했던 인터페이스들을 모두 그냥 @Component 처리 해버리면 굳이 config 클래스를 만들지 않고도 알아서 빈 등록 및 인터페이스와 구현체 연결이 되는게 맞나요? 맞다면 번거롭게 config클래스를 만들면서 수동 빈 등록을 하는 이유가 궁금해요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
mybatis 적용 문제
[질문 내용]여기에 질문 내용을 남겨주세요.https://drive.google.com/drive/folders/1-OMPceoH7sl_mkET-FmLH2xDZXuGfo4dmybatis를 적용시키고 ItemRepositoryTest를 실행시켰는데 오류 로그가 많이 떠서 무슨 문제인지 정확히 판단이 안되네요...일단 mybatis 관련 파일들은 제대로 쓴것같긴한데 오류가 생긴걸 보면 mybatis 적용이 안된것같은데 어디서 잘못되었는지 모르겠습니다
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
JpaRepository 조건
스프링 데이터 JPA 조건2에서SpringDataJpaRepository의 findAll 메서드의 `@Query`에서 오타를 내서 코드가 테스트에서 오류가 발생했습니다. 추후 코드를 고치니 문제를 해결할 수 있었습니다. 여기서 궁금한 점은 테스트에서 findAll에만 영향을 미치는 것이 아니라 왜 전체 테스트에서 오류가 발생하는 것인지 궁금합니다. 혹시 이 부분에 대해선 프록시 객체를 띄우는 데, 메서드의 유효성을 검사하는 로직이 존재하거나 아니면 다른 무언가가 있는지 궁금합니다. package hello.itemservice.repository.jpa; import hello.itemservice.domain.Item; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface SpringDataJpaItemRepository extends JpaRepository<Item, Long> { List<Item> findByItemNameLike(String itemName); List<Item> findByPriceLessThanEqual(Integer price); // 쿼리 메서드(아래 메서드와 같은 기능 수행) List<Item> findByItemNameLikeAndPriceLessThanEqual(String itemName, Integer price); // 쿼리 직접 실행 // error를 추가해 쿼리 오류 생성 @Query("error select i from Item i where i.itemName like :itemName and i.price <= :price") List<Item> findItems(@Param("itemName") String itemName, @Param("price") Integer price); }
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
enhancer by cglib 출력
JPA 적용3 - 예외 변환 6:02에 Enhancer~ 이런 식으로 출력이 되는데, 저의 경우는 다음과 같았습니다.정상적으로 스프링 예외 추상화로 변환했음에도 왜 Enhancer ~ 이런 식으로 출력이 안되는 것인가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
외부 트랜잭션 롤백 시점
여러개의 내부 트랜잭션 중에 하나의 내부 트랜잭션에서 롤백 요청이 와도 나머지 로직이 모두 수행되고 외부트잭션이 커밋 요청을 하는 시점에 rollbackOnly 값을 체크하고 true인 것을 확인하고 물리 롤백을 한다는 말씀이신가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Repository에서 체크 예외를 사용하면
이전에 체크 예외, 언체크 예외 강의때 예외가 종속이 되서 언체크 예외로 보통 한다고 하셨는데요. 그럼 리포지토리를 체크 예외로 구현해놨으면 서비스에서 @Transaction 애노테이션을 추가해도 롤백 처리가 안된다는 건가요??회사에서 back-to-back으로 서비스 단에서 다른서버로 API를 호출할 때 롤백을 해야 하는 경우, 롤백처리를 어떻게 해야 하나요??이런 경우에는 서버에서 내려주는 응답을 보고 언체크 예외를 발생시켜서 트랜잭션이 롤백할 수 있게 해줘야 하는건가요?