묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
Itemservice-db와 item service-db-start 두개다 존재하는데 어떤거 여나요?
두개의 폴더가 모두 존재하는데 start의 폴더를 이름변경하여 덮어쓰는것인지 아니면 이미 존재하는 itemservice-db를 오픈하면 되는것인지 혼란이 옵니다.두개의 폴더 모두 오픈해보았는데 db-start폴더는 item클래스가 영상과 같지만 generated폴더가 존재하지 않고 그냥 db 폴더는 item클래스가 영상과 다르지만 generated폴더가 존재합니다 어떤걸 이용하면 되나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링 DB2 테스트 - 데이터 롤백 오류
findItems()에서 "itemA", "itemB"가 남아있다는 오류가 발생합니다. jdbc:h2:tcp://localhost/~/testcase 로 접속해서 select 해 보면 데이타가 없는데, =jdbc:h2:tcp://localhost/~/test 로 접속해서 select하면 "itemA", "itemB" 가 남아있습니다.(삭제하고 다시 실행해도....). TestDataInit을 실행하는거 같네요??@Bean @Profile("local") public TestDataInit testDataInit(ItemRepository itemRepository) { return new TestDataInit(itemRepository); }링크 :: https://drive.google.com/file/d/1HD2gxtYhL8B5fZ3KazZ148-4x66PPCuo/view?usp=sharing
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링DB 2 :: 테스트 - 데이터 베이스 연동 오류 (원하는 답변이 아닙니다)
Lombok의 @Data 가 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 를 만들어주는 애노테이션이라는 건 잘 압니다.제 질문은 왜 스프링DB 2 :: 테스트 - 데이터 베이스 연동 테스트의 save에서 오류가 발생 했었는데, @Getter, @Setter를 @Data 로 바꾼 행위만으로 오류가 발생하지 않게 된 이유를 알려달라는 겁니다. @Getter, @Setter 만 설정하는게 잘 못 된거라면 그 이유가 뭐냐는 걸 문의한겁니다. https://www.inflearn.com/questions/1258907/%EC%8A%A4%ED%94%84%EB%A7%81db-2-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EB%8F%99-%EC%98%A4%EB%A5%98
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링DB 2 :: 테스트 - 데이터 베이스 연동 오류
추가 질문입니다. @Data 보다는 @Getter @Setter를 쓰는게 좋다고 하셔서@Getter @Setter를 쓰고 별도 생성자도 만들었는데.......@Getter @Setter를 @Data로 변경 햤을 때 오류가 발생하지 않는 이유를 알려주세요. https://www.inflearn.com/questions/1258907/%EC%8A%A4%ED%94%84%EB%A7%81db-2-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EB%8F%99-%EC%98%A4%EB%A5%98
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링DB 2 :: 테스트 - 데이터 베이스 연동 오류
저는 데이터를 새로 생성해서 테스트를 했는데, save와 finditems 두 군데 모두 오류가 발생합니다. 링크 :: https://drive.google.com/file/d/1i7i95iRprKTD08l5TuPj1iCOAVPDvNTT/view?usp=sharing save 오류 :: org.opentest4j.AssertionFailedError: expected: hello.itemservicedb.domain.Item@a2df0d5 but was: hello.itemservicedb.domain.Item@26d028f7 finditems 오류 :: org.opentest4j.AssertionFailedError: Expecting actual: [hello.itemservicedb.domain.Item@4cc26df, hello.itemservicedb.domain.Item@7848321e, hello.itemservicedb.domain.Item@f4f843f, hello.itemservicedb.domain.Item@7b5833ee, hello.itemservicedb.domain.Item@1e471884, hello.itemservicedb.domain.Item@27261190, hello.itemservicedb.domain.Item@543b0737]to contain exactly (and in same order): [hello.itemservicedb.domain.Item@6e46891d, hello.itemservicedb.domain.Item@48632f69, hello.itemservicedb.domain.Item@5fde1d64]but some elements were not found: [hello.itemservicedb.domain.Item@6e46891d, hello.itemservicedb.domain.Item@48632f69, hello.itemservicedb.domain.Item@5fde1d64]and others were not expected: [hello.itemservicedb.domain.Item@4cc26df, hello.itemservicedb.domain.Item@7848321e, hello.itemservicedb.domain.Item@f4f843f, hello.itemservicedb.domain.Item@7b5833ee, hello.itemservicedb.domain.Item@1e471884, hello.itemservicedb.domain.Item@27261190, hello.itemservicedb.domain.Item@543b0737]
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트에서 select 로그가 노출안되는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 테스트 케이스 중 save() 테스트와 updateItem()테스트에서 itemRepository.findById를 호출하는 부분이 있습니다.itemRepository.findById(item.getId()).get();이 경우 select 쿼리가 나가는 걸로 알고 있는데 로그에는 노출되지 않습니다.1) save()2) updateItem()강사님 화면에도 노출되지 않던데 그 이유가 있을까요??
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
현재 스프링db2편 학습하는 중인데요
영상에선 itemservice-db파일 기존의 코드를 수정해서 사용하라고 하셔서 그렇게 했는데요거기에 깔려있는게 2.6.5입니다.id 'org.springframework.boot' version '2.6.5'근데 강의 자료에선 이제 3.0이상을 쓰라고 하셔서요이게 일단 거기 있는데로 2.65로 진행해도 되는건가요?아님 spring.io가서 3.0을 다시 깔아야하나요jpa까지 하다가 오류가 계속나서 처음부터 다시 시작하려고 하는데요일단 영상 그래도 2.6.5으로 진행하고 싶은데자료를 계속 보는데 전부 2.xx는 지원이 끊겨서 3.0으로 쓰라고 하셔서요진짜 2.xx다 빼고 3.0이상으로 전부 바꿔야 하나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
unexpectedRollbackException 에러가 로그에 다르게 남겨져요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 1분 51초 부근에 테스트를 할시에 unexpectedRollbackException이 에러에 남겨지는 것을 확인할 수 있는데, 로그가 저는 다르게 남겨집니다.2024-04-25T15:46:38.354+09:00 DEBUG 5056 --- [springdx] [ main] cResourceLocalTransactionCoordinatorImpl : JDBC transaction marked for rollback-only (exception provided for stack trace)java.lang.Exception: exception just for purpose of providing stack traceat org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:310) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:224) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] 다른 테스트도 몇개 그렇게 표시 되는데 recoverException_fail test 시에 위와 같이 에러표시가 됩니다.테스트 시 통과는 돼서 UnexpectedRollbackException가 터지는 건 맞는 것 같은데 로그에 에러가 그냥 Exception으로 표시가 되는 것 같아서 구글링해봤는데 문제가 무엇인지 모르겠어서 질문드립니다. https://drive.google.com/file/d/1UzxlCeILcMUkroixUZmV2W49LfPqQAnb/view?usp=sharing
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
MemberServiceTest에 관하여 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]MemeberServiceTest 다 돌려봤는데 outerTxOff_fail()만 에러 뜨는게 정상인거죠??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
임베디드 모드(메모리 모드)
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.3장의 14페이지의 부분입니다. 위의 url의 방식을 사용하면 임베디드(메모리 모드)로 동작한다고 적혀있습니다.그런데 db의 모드를 공부하다 보니 궁금증이 생겨 질문드립니다. db 모드에는 3가지 모드가 있습니다.server mode는 url: jdbc:h2:tcp://localhost/~/myShopProject이런 url 예시가 있으며 tcp 방식을 통해 네트워크 통신을 이용하여 서버의 디스크에 저장하는 것으로 이해했습니다.위의 경우는 localhost이므로 저의 로컬 컴퓨터의 디스크에 저장될 것 같습니다.만약 위의 localhost가 다른 ip라면 그 ip의 디스크에 저장될 것 같습니다. 임베디드 모드(Embedded Mode)는jdbc:h2:<databasePath> 이런 url 예시가 있으며 위의 경우는 데이터 베이스가 애플리케이션과 함께 하나의 프로세스 내에서 실행합니다.위의 databasePath에 데이터페이스 파일이 저장됩니다.로컬 컴퓨터의 애플리케이션에서 실행되므로 tcp 통신은 발생하지 않습니다. 인메모리 모드(In-Memory Mode)는jdbc:h2:mem:mydb 이런 url 예시가 있으며 위의 경우에는 데이터베이스가 메모리에만 저장되고, 따라서 파일의 경로를 지정할 필요가 없습니다.이렇게 하면 데이터베이스가 메모리에만 생성되며 디스크에 저장되지 않습니다. 그런데 위의 교재에서는 임베디드 모드는 위처럼 메모리 모드로 동작하는 기능이라고 설명해주고 있습니다. 하지만 제가 공부했던 임베디드 모드는 파일의 경로를 지정해서 영구히 저장해 주는 것으로 알았습니다.위의 임베디드 모드에 대한 설명이 잘 이해가 되지 않았습니다.=================================================================================정리하자면->jdbc:h2:mem:db 이므로 인메모리 모드로 동작하는 H2 데이터 베이스이다. 라고 바꿔야 하지 않을까요..? 임베디드 모드(메모리 모드) 라는 표현이 잘 이해가 안된다 -> 두개는 별개의 모드로 이해하고 있습니다. (메모리 모드와 인메모리 모드가 같은 의미라고 이해하고 있습니다.) + 위의 임데디드 모드에 대한 정의와 설명이 잘 이해되지 않았습니다. 좀 설명이 중구난방하고 제가 학습이 부족하여 잘 이해하지 못한 것 같습니다! 설명해주시면 감사하겠습니다!!
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
5. 데이터 접근 기술 - JPA.pdf 11쪽
JPA가 만들어서 실행한 SQL select item0_.id as id1_0_0_, item0_.item_name as item_nam2_0_0_, item0_.price as price3_0_0_, item0_.quantity as quantity4_0_0_ from item item0_ where item0_.id=? item_nam2_0_0_ -> item_name2_0_0_ 이렇게 수정하는 것이 맞지 않은가요?item_nam2_0_0_ <- 이것이 맞다면, sql으로 변환되는 기준에 대해서 여쭈어보고자 합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
JpaRepository의 메서드 대신 ItemService의 메서드를 사용하는 이유가 궁금합니다
안녕하세요 섹션 8(데이터 접근 기술) 실용적인 구조 강의에서 ItemSercvice 클래스에서 update 메서드를 작성할 때 itemRepositoryV2.findById(itemId)처럼 JpaRepository 메서드를 사용하지 않고 바로 밑의 findById 메서드를 사용해서 findItem을 가져오는 이유가 궁금합니다 제 생각에는 둘 다 Optional로 반환되어서 결과값은 똑같을것 같은데 다른 이유가 있는건지 아니면 단순 가독성 때문인지 궁금해서 질문드립니다
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
쿼리 테이블 별칭
선생님꼐서 쓰는 쿼리를 보면 select m from Member m 이런식으로 m별칭주시는데 m.*이런식이나 테이블이 하나라면 별칭 없이 가는것과 무슨 차이가 있을까요?? 그냥 단순히 개발자 스타일일까요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
<WHERE>태그 대신
<WHERE>태그 대신 WHERE 1=1 주고 강제적으로 true 준 이후에 and조건을 <if>안에 사용하는데 그게 더 안좋은 방법일까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
dataSource 우선순위(?)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ItemServiceApplication에 test일때만 dataSource를 직접 정의해주었는데인메모리 DB가 properties에 정의한 datasource보다 우선되는건가요?h2 서버 끄고 properties는 그대로 둔 채 돌려도 정상작동 하는 것으로 봐선 properties의 datasource는 아예 시도를 안 하는 것 같은데...인메모리가 있으면 무시하고 넘어가는 것인지 궁금합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 적용 확인
[질문 내용]TxBasicTest 클래스 안에 BasicService가 있는데 왜 Autowired로 의존성주입이 필요한지 헷갈리고 궁금합니다ㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
test 코드에 static을 사용하는 이유와 new 생성자가 나오는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]너무 늦게 눈치챈 일이긴 합니다만, 테스트 코드를 짤 때, 강의 전반적으로 static 클래스를 사용하는 것을 발견했습니다. 평소 Config를 구성할 땐 static을 사용하지 않았었는데 말이죠.몇 가지 실험을 통해 발견한 것은@Slf4j 애너테이션이 non-static nested classes엔 지원하지 않는다 였습니다.그렇다면 RollbackTestConfig 클래스에선 스태틱 클래스를 new 키워드로 생성하는 부분은 왜 그런 것인지@TestConfigurationstatic class RollbackTestConfig { @Bean RollbackService rollbackService() { return new RollbackService(); } } , @Slf4j 이외에 static을 쓰는 이유가 무엇인지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
내부 호출에 대한 재질문
제가 좀 헷갈려서 다시 질문을 좀 드립니다.@Transactional이 있으면 프록시 생성이 된다그런데 내부 호출을 하면 대상 객체(this)의 메소드를 호출하니까 트랜잭션이 발생하지 않는다그래서 문제이다. 이를 해결하기 위한 방법 중에서 제일 권장하는 것이 클래스를 분리하는 것이다라고 이해를 했습니다. 그런데 실무에서는@Transactional (<= 클래스 전체에 트랜잭션을 걸었다는 표현입니다 어떻게 했는지는 잘 모르겠지만...클래스에 걸린 것은 확실합니다)class ServiceImpl implements Servcie {public void mainMethod() { // 메인 메서드deleteMethod(); // 내부 메서드 호출insertMethod(); // 내부 메서드 호출} public void deleteMethod() {} // 내부 메서드public void insertMethod() {} // 내부 메서드}보통 위와 같이 코딩을 자주 하는데 이때는 클래스에 @Transactioanl 어노테이션이 있어전체 메서드에 @Transactional 이 적용된다는 것은 이해를 합니다. "그런데 mainMethod()에서 deleteMethod()를 호출하면 내부 호출이라 대상 객체의 즉, ServiceImpl 클래스에서 deleteMethod()를 호출하므로 트랜잭션이 적용되지 않는다"가 맞지 않나요? 아니면 굳이 클래스를 분리하지 않고 클래스 단위에 @Transactional 애노테이션을 적용시키면내부 호출에 문제가 없다는 뜻인지? 글로 질문을 하기가 어렵습니다. 답변을 글로써 하시기는 더욱 더 어려우실 것 같은데너무 궁금해서 다시 질문을 드리니 양해 바랍니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
학습 내용과 번외로 의존관계 주입 시 궁금증
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1. 의존관계 주입 방법@Configuration public class HelloConfig{ @Autowired private DataSource dataSource; @Bean public PlatformTransactionManager txManager(){ return new DataSourceTransactionManager(dataSource); } } 2. 의존관계 주입 방법@Configuration public class HelloConfig{ @Bean public PlatformTransactionManager txManager(DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } } 안녕하세요 의존관계 주입 연습 도중 궁금한 점이 생겨 올렸습니다 ! 보통 1번방법으로 스프링 부트에서 자동으로 등록해준 히카리 커넥션 풀 DataSource 구현체를 dataSource 변수에 의존관계 주입(@Autowired) 받았었습니다 그런데 2번 방법으로 시도해보니까 자동으로 dataSource 변수에 의존관계 주입이 되어서 DataSourceTransactionManager 객체가 정상적으로 빈으로 등록되는 것을 확인할 수 있었습니다. @Autowired가 있지도 않았는데 이것이 가능한 원리가 무엇인지 궁금합니다 !
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
mybatis적용2 오류
[질문 내용]https://drive.google.com/file/d/14dXFBLKqzY9hcZZAXjr0e1CCKV9u_U22/view?usp=sharing 제자리에 다 맞게 넣은 것 같은데 Could not detect default configuration classes for test class 오류가 뜹니다 ...이렇게 애노테이션을 추가해도 오류가 뜹니다@ContextConfiguration(classes = ItemServiceApplication.class
주간 인기글
순위 정보를
불러오고 있어요