월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
@BeforeEach, @AfterEach 작동방식
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 영한님.@Transactional과 관련해서 @BeforeEach가 어떻게 작동하는지 궁금해서 테스트를 좀 해봤는데요.@SpringBootTest class Test { @BeforeEach void before() //데이터 저장로직 존재 @Transactional @Test void count() //before()에서 저장된 데이터 개수와 비교검증 }위와 같은 테스트 클래스를 만들었습니다.제가 생각하는 테스트 흐름은 아래와 같습니다.//테스트 시작 before(); //데이터1, 데이터2 저장 //트랜잭션 시작 count(); //데이터 개수가 2이어야 테스트 성공 //트랜잭션 종료. 롤백 //테스트 종료before()가 트랜잭션 범위 밖에 있기 때문에 저장한 데이터가 롤백되지 않을거라 예상했습니다.그런데 실제로 테스트를 진행해보니 정상적으로 롤백이 되더라구요.왜 그런지 생각을 곰곰히 해봤는데단순히 각 테스트케이스 실행 전에 @BeforeEach를 따로 실행시켜주는 것이 아니라@SpringBootTest class TestProxy { Test target; void count() { 트랜잭션 시작(); if (@BeforeEach가 있으면) { target.before(); } target.count(); 트랜잭션 종료(); } }위처럼 트랜잭션 AOP 프록시에 before()가 직접 삽입되기 때문에 각 테스트케이스의 트랜잭션 안에서 before()가 실행되는 것으로 이해하면 될까요?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
간단한 오타 입니다
안녕하세요스프링DB2편-데이터접근활용기술 -> 1. 데이터 접근 기술 - 시작.pdf일관성 있게 afterEach() 로 변경되면 좋을 것 같습니다! +++추가identity 전략이고 하는데, -> identity 전략이라고 하는데,문맥 상 위처럼 변경되는 게 좋을 것 같습니다! +++추가형광펜 칠한 부분띄어쓰기가 잘못 들어간 것 같아요! 감사합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트코드 작성시 컴파일오류가 발생합니다.
https://drive.google.com/file/d/1WpW1BMidCxTZA4qmKPoDP5_6Ct0fVTh6/view?usp=sharing @TestConfiguration static class Config { @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }여기서 Autowire을 할 수 없다고 하는데, 테스트 코드는 정상적으로 실행되는데 TransactionManager의 로그는 뜨지 않는 걸로 보아 뭔가 문제가 있는 것 같습니다 ㅠㅠ
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링 데이터 JPA 질문입니다
스프링 데이터 JPA의 질문이 기본적인 CRUD를 지원해서 구현체를 안 만들어줘도 되는 것 아니었나요 ??JpaItemRepositoryV2를 만들면 이 부분이 깨지는 것 아닌지 궁금합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
PersistenceException은 런타임 예외이지 않나요 ?
PersistenceException이 RuntimeException을 상속 받았던데 이러면 service 계층에서 처리 할 의무가 없으니 DataAcessException으로 변환하지 않아도 JPA예외에 의존하는 것이 아니지 않나요 ?
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
쓰기 지연 질문입니다
JPA를 사용하지 않으면 데이터베이스에 바로 SQL을 을 보내지만, 커밋을 할 때 저장을하고, 롤백을 하면 내용을 원래대로 복구하던 것을JPA를 사용하면 커밋을 할 때 까지 SQL을 보내지 않기 때문에 롤백이란 기능이 사라졌다고 생각하면 되는 것일까요?그렇다면 원래는 커밋을 하지 않아도 내부에선 반영이 되기 때문에 테스트를 할 수 있었는데 이런 경우는 어떻게 되는 것인가요 ? (테스트코드에서 @Transactional같은 경우 )
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
스프링 db-2 트랜잭션 질문
트랜잭션이 적용이 되어있는지 확인을 하실때, 의존성 주입으로 확인을 하시는 것을 보고 왜 저렇게 해야하지 그냥 직접 객체 생성을 해서 하면 안될까..? 의문을 가지고 해봤는데 안되는 모습을 보고 질문드립니다. 왜 작동이 안하는 것일까요@Autowired 로 안하고, 그냥 new 로 직접 등록했습니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
프록시 내부호출 1 질문이 있습니다
고급편을 듣고 이 강의를 들었으면 알 수 있을 것 같은 내용이지만, 다른 분들을 위해 또 성격이 급해서 질문을 남깁니다. CallService의 프록시 객체는 CallService를 상속받은 자식 객체로 이해했는데요. 언뜻 생각하기로는 internal을 내부 호출을 하더라도 override된 internal이 호출되기 때문에 트랜잭션이 적용될 것 같다는 생각이 드는데, 간단하게라도 이렇게 동작하지 않는 이유를 알 수 있으면 좋겠습니다. 검색을 해보니 AOP가 런타임에 인터셉트 하는 방식으로 동작하기 때문에 그렇다고 하는데요. 그렇다면 왜 override 하는 방식으로 구현하지 않았는지도 궁금해집니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파에 대한 궁금증이 있어서 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]안녕하세요 선생님 제가 트랜잭션 전파 내용을 모두 완강하고 혼자 약간의 궁금증이 생기는 부분이 있어서 질문을 남깁니다.제가 궁금한 부분은 물리 트랜잭션을 시작하는 메서드 A가 있고 여기에 참여하는 메서드 B가 있는데 만약 트랜잭션 A가 먼저 커밋이 되면 그 후에 B가 어떤 상황이 오더라도 물리 트랜잭션에 영향을 줄 수 없을까요??제가 배운기억으로는 A 논리 트랜잭션 커밋 B 논리트랜잭션 커밋이 되는경우에 물리 트랜잭션이 커밋이 된다고 배웠던 것 같은데A 논리 트랜잭션만 커밋해도 물리 트랜잭션이 커밋이 될까? 하는 의문에 실험 해 본 결과 B 논리 트랜잭션은 커밋을 하지 않아도 커밋이 되더라구요(혹시 잘못된 테스트 일까요?)그럼 만약 A 논리 트랜잭션이 커밋이 되고 난 후 B 논리 트랜잭션이 롤백이 된다면 B 논리 트랜잭션이 참여는 했었지만 물리 트랜잭션을 시작한 A 논리 트랜잭션이 먼저 커밋이 되면 B의 롤백은 참여하고 있던 물리 트랜잭션에 영향을 줄 수 없을까요??(이 경우 앞에 다른 물리 트랜잭션을 시작하는걸 만들어 두개의 논리 트랜잭션을 이어 붙여서 트랜잭션 전파를 사용하는게 가장 좋다고 생각하지만 혹시나 하는 마음에 질문을 하게 되었습니다.)제가 테스트 해본 결과는 영향을 줄 수 없는데 혹시 제가 잘못된 방법으로 테스트를 한건지 제대로 테스트를 한건지 아니면 제가 잘못 이해한 내용이 있는건지 궁금해서 질문글을 작성하게 되었습니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
커넥션 풀 관련 질문 드립니다.
안녕하세요 항상 강의 잘 듣고 있습니다. 커넥션풀을 기본으로 사용해야된다고 이해를 했는데hikaricp 의 경우 기본이 10개입니다.그런데 tomcat thread 의 경우 기본이 200개던데요청이 많이 오는 경우 둘다 기본으로 사용하면 thread pool에 비해 thread가 너무 많이 생성이 돼서 서비스 운영시 문제가 될거 같은데실 서비스에서 저렇게 기본 값으로 많이 사용하는지 궁금합니다!
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
Mybatis 학습을 위해 실행 도중 오류에 대한 해결방법이 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]프로젝트를 따라 실행하며 학습하기위해itemservice-db 프로젝트를 받아 실행해봤지만앞서 학습내용을 건너 뛴 탓에 에러가 떴습니다.처음엔 H2가 실행되어있지 않는 오류로 떠서 해결하고보니 이런 오류가 뜹니다..테이블 ITEM 이 없다는 내용같은데앞에 강의내용을 건너뛰고 Mybatis 부분을 학습하고 싶은데 (지금 공부에 목표가 Mybatis 라서 해결 후에 완강을 해야겠다고 목표하고 있습니다.)영한님의 강의에서 Mybatis 부분을 문제없이 듣고 따라하기 위해선 어떤부분을 빠르게 수정해야 하는지 알려주시면 감사하겠습니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
실무에서의 @Column 명시
안녕하세요 좋은 강의 잘 듣고 있습니다. @Entity 에서 각 필드들을 정의할 때@Column 으로 컬럼 매핑을 하잖아요?그런데 사실 @Column 으로 하나하나 명세를 쓰지 않아도 동작을 하는 실무 프로젝트들을 해왔는데, 물론 회사, 팀마다 다 다르겠지만 흔히 말하는 빅테크 에서는 @Column 들을 다 명세해주는 경향인지 궁금합니다. 또는 플러그인으로 DB에서 자동으로 읽어와서 붙여주는 기능도 있다고 알고 있습니다. 감사합니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
jdbcTemplate, mybatis
안녕하세요 mybatis 대신 jdbcTemplate을 사용하는 이유가 궁금합니다. 밑의 질문 답변에서 Jpa의 @Query 사용하는 것 말고 Dto를 변환하는 과정에서 JdbcTemplate의 편리한 기능이 있다고 말씀하셨는데요.그런데 MyBatis 도 편리하게 Dto로 결과 반환을 할 수 있다는 점에서 마찬가지 아닌가요? MyBatis는 Mapper 매핑 등 여러가지 설정이 필요한 반면에, JdbcTemplate은 스프링 부트 기본 라이브러리에 포함되어 있고 간편해서 그런가요? 감사합니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
build.gradle 버전 명시
안녕하세요 질문이 있습니다. 스프링이 공식적으로 지원하는 라이브러리인지 아닌지는 어떻게 판단하나요?(버전 명시 유무)mybatis는 패키지 구조만 봤을 때 바로 스프링에 소속된 것이 아닌 것을 알 수 있는데(그래서 버전명시), h2랑 lombok 같은 경우도 org.springframework 하위에 속하지 않은 것으로 봤을 때는 스프링에서 공식 지원 라이브러리가 아닌 것처럼 보여서요. 감사합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트에서 h2 인메모리 방식 위한 라이브러리 추가
안녕하세요. 2가지가 궁금합니다.테스트에서 자동으로 h2 인메모리 방식을 사용하고 싶다면test의 dataSource등록을 하지 않고(application.properties 에 datasource 설정도 X) && @Transactional 사용 하면 되는것이죠? (@Transactional 을 넣지 않으니 로그에 h2 인메모리로 생성되지 않더라구요) 1번방식으로 사용하기 위해서는(수업처럼) build.gradle(또는 pom.xml) 에 반드시 h2 라이브러리를 추가해야 하나요? 감사합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
인메모리 DB h2
안녕하세요 좋은 강의 감사합니다! 보통 h2 데이터베이스를 인메모리 DB라고 하잖아요?그 '인메모리' 방식이 이번 임베디드 모드 DB에서 jvm 안에 메모리 로 동작한다는 의미인가요? 그러면 이전 시간까지 ./h2.sh 로 실행을 해서 했던 방식은 서버(test.mv.db, testcase.mv.db)로 실행한 방식 맞을까요? 답변 미리 감사드립니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파에 있어 트랜잭션 매니저
스프링 트랜잭션 전파에 있어서, 외부 트랜잭션이 수행중이고 아직 끝나지 않았는데 내부 트랜잭션이 수행 된다면, 트랜잭션 코드는 각각 트랜잭션 매니저를 통해서 신규 트랜잭션인지 확인을 하고 트랜잭션을 시작하는 과정을 거치는 것이라 이해했습니다.강의 자료 그림에서 본다면, 외부 트랜잭션코드와 내부 트랜잭션 코드가 서로 다른 트랜잭션 매니저로 부터 트랜잭션을 시작하는 것 처럼 표현되어 있는데, 이것은 같은 트랜잭션 매니저 아닌가요? definition이 다른 것일뿐.. 헷갈려서 질문 남겨 봅니다.또한, DB 1편부터 들었던 의문인데, service 레이어에서 트랜잭션을 시작하면 트랜잭션 동기화 매니저에 넣어두고, 레포지토리에서는 트랜잭션 동기화 매니저로 부터 해당 connection을 꺼내서 해결하는데, 트랜잭션 동기화 매니저는 spring bean으로, singleton으로 자동 등록되어 있는건가요?답변 부탁드립니다! 감사합니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
src/test 의 application.properties 문제
https://www.inflearn.com/questions/667899 의 질문과 유사한 문제가 해결되지 않아 재질문 드립니다.현재 저의 개발환경은os : macide: vscodespringboot : 3.0.4를 사용하고 있습니다.개발환경과 테스트 환경을 분리하기 위해서, src/main/resource 와 src/test/resource 에 각각 application.properties 파일을 만들고, 내부에 spring.profiles.active=localspring.profiles.active=test 라고 작성한 상태입니다. (강의와 동일하게 수행)그런데, 실제 테스트 실행 시, 여전히 로그에는The following 1 profile is active: "local" 이 나옵니다.동일한 질문에 답글로 달려있는 @ActiveProfiles("test")를 class에 붙여 실행하게 되면, 로그는The following 1 profile is active: "test"라고 나오지만, 그 외의 다른 설정(데이터베이스 설정)은 여전히 src/main/resource 에 있는 application.properties를 사용합니다. 혹시 문제를 해결할 수 있는 방법이 있으면 알려주시면 좋겠습니다. 부탁드립니다.
- 미해결스프링 DB 2편 - 데이터 접근 활용 기술
우선 해야하는 테스트 방식이 궁금합니다.
안녕하세요 :)평소 영한님 강의를 통해 많은 가르침을 받고 있는 주니어 개발자입니다.만약 별도 Test DB 없이 Service 계층 테스트를 한다면,크게 다음과 같은 세가지 테스트 방식이 있는 것으로 이해하였습니다!Service 테스트에 @Transactional 추가하여, 테스트 수행 후 롤백실제 DB에 수행하므로, insert시 유니크한 컬럼에 대해 이미 동일 데이터가 존재한다면 테스트 실패Repository 의존성을 Mock 처리Mock을 통해 행위를 검증하게되므로 보다 깨지기 쉬운 테스트가됨임베디드 DB에 테스트 수행임베디드 DB와 운영환경 DB의 차이점이 있을 수 있음 세가지 방식 모두 각자의 트레이드오프가 있을 것 같은데요.권장되는 방식이나, 주로 사용하시는 테스트 방식이 궁금합니다.
- 해결됨스프링 DB 2편 - 데이터 접근 활용 기술
6:58초에서 log로 왜 proxy가 찍히는건지 잘 모르겠습니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]잘 이해가 안되어 질문 남깁니다. test에 있는 itemRepository는 bean으로 Config 파일을 통해서 주입시킨 JpaRepository 객체가 autowired 통해서 들어왔는데, 왜 프록시 객체가 로그로 찍히나요?repository의 프록시는 서비스 레이어 넘기기 전, 예외 변경기능만 하는 것 아닌가요? itemRepository에 주입된 객체가 왜 repository의 프록시 객체인지가 궁금합니다.. save()같은 repository안의 메서드에서 예외가 발생하여 service로 넘어갈때 프록시 객체가 적용되어야 하는것 아닌가요?헷갈려서 질문남깁니다..감사합니다.