월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
강의 수강 전 질문 있습니다.
안녕하세요! 강의 정말 잘 듣고 있습니다.혹시 db를 처음 다뤄보는데 이 강의를 진행해도 되는지 알 수 있을까요..?이전 강의들 전부 복습하면서 sql이랑 postgres 를 유데미로 공부하기는 했는데 다른 선수 지식이 필요한지 답변 부탁드립니다..!
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
프로젝트 생성 후 실행
2022-08-26 14:50:53.851 INFO 3056 --- [ main] hello.jdbc.JdbcApplication : No active profile set, falling back to 1 default profile: "default"2022-08-26 14:50:54.636 INFO 3056 --- [ main] hello.jdbc.JdbcApplication : Started JdbcApplication in 1.259 seconds (JVM running for 2.611)Process finished with exit code 0프로젝트 실행 시 저런 오류가 뜨는데 어딜 다시 봐야 할까요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
H2 DB <-> 웹
H2 데이터베이스에서 JdbcTemplate 쿼리문으로 데이터를 가지고 와 웹에 뿌려주고 싶으면 어떻게 해야 하나요 ?혼자 새로운 데이터를 만들고 웹에 뿌려주고 싶은데 (item-service 처럼) NULL POINT EXCEPTION이 나옵니다
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
transactionManager가 쓰이는 곳
안녕하세요. TestConfig에 등록한 transactionManager 빈을 필요로 하는 곳은 어디인가요?
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
선생님 댓글 달아주세요
선생님 댓글 달아주세요 애타게 기다리고 있어요 https://inf.run/s9Co
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
예외 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의를 듣다 궁금한점이 있어서 질문드립니다. 스프링 예외 변환기 파트에서 변환기를 사용하기 전 MyDuplicateKeyException 예외를 만들고 서비스 계층에서 MyDuplicateKeyException 예외가 Repository에서 던져졌다면 ID를 다시 만들어 save하는 로직을 만들었는데 변환기를 사용할 경우 스프링에서 만들어 놓은 예외들이 발생할텐데 서비스 계층에서 똑같이 변환기 사용하기 전처럼 로직을 만들어 사용하면 되는걸까요? catch(BadSqlGrammerException e) { 로직 } 이런식으로 똑같이 사용하면 될까요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 질문입니다.
트랜잭셔널 어노테이션 잘 쓰다가 갑자기 혼란이 와서요.. void updateName(string id){ person=repo.findById(id) person.setName() // 변경 감지에 의한 update 쿼리 } 이런경우에 트랜잭셔널 걸어줄 필요가 없다는 글을 봐서 혼란이 옵니다.. 제가 생각했을때는 findById로 조회하고--1setName으로 변경--2 여기서 1이 실행됐을때다른 트랜잭션B가 침투해서 해당 데이터를 임의로 바꿔주고 커밋까지 하면 2가 실행되는 순간 트랜잭션B가 그냥 무시되는것 아닌거 생각했어요.그래서 1,2는 무조건 atomic하게 연결되어야된다 생각을했는데.. 그래서 꼭 @Transactional 을 해줘야 한다고 생각했는데 아니라면 그 이유가 궁금합니다!
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
entity를 async 메소드 파라미터로 넘길 경우에 대한 질문입니다.
안녕하세요 강사님 항상 좋은강의 잘 보고있습니다. DB관련 강의를 보고서 코드를 작업하던 중 이해가 안가는 부분이 있어 질문드립니다. 정확한 질문포인트 강의를 찾지 못해 트랜잭션 관련 질문이라 이곳에 남깁니다.. Parent entity가 onetomany로 child entity list를 갖고있는 상황입니다. Lazy Loading으로 사용중입니다. @transactional이 붙은 A 메서드가 parent entity를 find해왔습니다. 아직 child를 사용하지 않았습니다. 조회쿼리도 나가지 않았습니다. A메서드는 @Async로 별도 thread에서 동작하는 B메서드에 parentEntity를 parameter로 넘깁니다. (B메서드에는 transactional코드가 없습니다) B메서드에서는 child를 사용하여 동작하는 코드가 들어있습니다. 의문점은 이게 fail to lazily initialize... no session이 나와야하지 않나 싶은데 정상작동한다는 점입니다. 강의를 통해 제가 이해한것은.. 1. transaction은 db connection과 함께 움직입니다. 2. transaction은 thread local로 관리되어 thread마다 할당됩니다. 고로 db connection은 thread에 할당됩니다. 3. entity manager는 일부러 엮지 않는 이상 thread끼리 공유하지 않는다. 한 thread에 하나씩 붙는다. 4. open session in view를 켜지 않는 한 entity manager는 transaction과 생명주기를 같이한다 async에서 할당된 thread들은 transaction이 없기 때문에 entity manager를 갖고 있지 않은 상태이고, parameter를 통해 받은 parent entity는 사실상 dto와 같은 취급을 받아야 하는게 아닌가 하는 생각입니다. 고로 parent entity에서 child를 조회하려하면 entity manager와 db connection이 없기 때문에 관련 에러가 터질것이라 생각했습니다. 하지만 async 메소드에서 child를 사용하려하면 정상적으로 쿼리가 나가고 실행에 아무런 장애가 없습니다. 이에 궁금증이 생겼습니다. 1. entityManager 생성이 transaction과 같이하는게 아니라, Thread가 생성될때마다 각 Thread는 entityManager를 자동으로 부여받는것인가? 2. 1번이 맞다면.. entity가 갖고있는 Lazy loading인 상태의 proxy항목이 Async thread에 있는 entitymanager를 사용해서 조회를한것인가? parameter로 넘긴 entity가 내부적으로 db connection을 물고있는건가 싶은 의문도 생겼습니다. 테스트코드는.. https://github.com/zzangisdaeho/transaction-test.git TestAsync.testAsync() 를 한번만 봐주실 수 있다면 감사하겠습니다. (테스트코드 에러는.. 테스트 종료시에 entitymanager를 release하면서 나는 NPE인데.. 아직 원인을 파악하지 못하였습니다. 궁금한점은 async쪽입니다..) 감사합니다.
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
레거시 코드에서 DriverManager를 사용하는데요...
안녕하세요~ 로드맵을 따라 듣다가 아직 이 강의를 볼 타임이 아닌데 ㅠㅠ 오늘 인수인계 받은 배치 애플리케이션의 소스코드를 봤는데 도무지 이해가 가지 않는 코드로 작성되어 있어 혹시나 싶은 마음에 강의를 찾아보니 있네요 ㅎㅎ 레거시 코드의 배치 애플리케이션에서 DriverManager, PreparedStatement, ResultSet을 사용해서 DB 처리를 하고 있습니다. 그런데... 서버가 기동될 때 최초 1회만 커넥션을 생성해서 close하지 않고 계속 사용합니다. 이걸로 서버 재기동전까지 계속 쿼리를 동작시킵니다. (PreparedStatement와 ResultSet는 사용하면 close 합니다.) 강의를 보니 커넥션을 맺는 비용이 비싸기 때문에 이런 코드가 만들어진 것으로 추측해보는데요 close를 하지않는 단일 커넥션을 사용하는 것은 어떤 장단점을 가지는지 궁금합니다. close를 하지 않는 단일 커넥션은 커넥션풀에 커넥션이 1개만 있는 경우와 같을까요? 배치 애플리케이션이니까 단일 커넥션으로 처리했을까요? * 배치의 정보를 드리자면.. 대략 수는 50개, 동시에 처리되는 것들이 보통 5개, 실행시간은 보통 5분 내외, 최대 3시간입니다. 이상한 코드가 맞겠죠?? 자야하는데 고민이 깊어지네요
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 커넥션풀과 데이터소스에 대해 아직 잘 이해가 안된 부분이 있는데 커넥션풀들은 거의 대부분 데이터소스를 구현하고 있잖아요. 강의에서도 HikariDataSource를 예시로 설명을 해주셨는데 HikariDataSource dataSource = new HikariDataSource(); 를 만들고 설정을 해주는 과정이 커넥션 풀링을 하는 것이고 이 HikariDataSource클래스가 커넥션 풀 클래스인게 맞는걸까요? 클래스 이름에 datasource가 써있어서 헷갈리는것 같습니다. ㅜㅜ
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
Pool이 다 찼을때 커넥션이 생성된 후 대기하는건가요?
커넥션 풀이 다 찼을때 다음은 대기한다고 하셨는데 커넥션이 생성된 후 풀에 들어가는 것을 기다리는 것인지 아니면 커넥션이 생성되는 것을 기다리는 것인지 헷갈립니다 !
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
connection 연결
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 듣고 있습니다. JDBC에서 궁금한게 생겼는데 JDBC를 구글링하니까 Class.forName()라는 메소드를 사용해 드라이버를 로드하던데 강의에서는 이걸 생략하고 DriverManager.getConnection()을 하잖아요. 이걸 생략할수 있는 이유가 무엇일까요? 그리고 강의에서 대부분의 커넥션풀은 DataSource를 구현하고 있다고 설명해주셨는데 그러면 HikariDataSource 클래스가DataSource를 구현하고 있으니까 HikariDataSource가 커넥션 풀인거고 데이터소스 클래스는 존재하지 않는건가요? 헷갈립니다 ㅜ
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
H2가 동작하지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 예전 강의에서 h2를 사용할 때는 정상적으로 동작하였는데 현재는 동작하지 않네요. H2 Console을 실행시켜도 cmd에서 h2.bat을 실행시켜도 아무런 동작을 하지 않습니다. 그냥 아무것도 안뜹니다. H2는 2.1.214입니다.
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DB 락과 조회에 대해 질문드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 이번 강의를 수강하면서 한 세션에서 데이터 로우 락을 사용하는 경우 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없다, 조회는 허용한다. 라고 정리해볼 수 있을것 같은데요! 혹시 락을 사용하면서 조회조차도 막는 방법이 혹시 있을까요?!
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 이해- 트랜잭션-적용1 부분 질문입니다.
MemberServiceV1Test에서 assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); 에서는 정상적으로 테스트가 되는데 assertThat(memberA.getMoney()).isEqualTo(8000); assertThat(memberB.getMoney()).isEqualTo(12000); 로 바꾸면 테스트가 실패하는 이유를 알고 싶습니다.
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV1Test 컴파일 오류 질문드립니다
위와 같이 MemberServiceV1의 경로를 package hello.jdbc.service 외에 다른곳에 두면 정상 실행이 되는데 package hello.jdbc.service 로 설정하면 컴파일 에러가 납니다. 원인을 못찾겠습니다. V2는 정상 실행되고 파일 경로도 이상이 없고 코드도 자료에 있는 코드를 그대로 복사해서 써도 해결이 안되네요
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
Dto 로직은 Service 계층에 들어가나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] DB에서 데이터를 가져와서 프론트에 필요한 구조로 변경하는 로직도 Service 계층에 들어가야 하나요? 일종의 Dto 로직인 거 같아요. Presentation 계층이 UI와 관련된 계층이라고 해서, 그런 로직이 Presentation 계층에 들어가야 하는지 궁금합니다.
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
update 쿼리를 날려도 이미 생성된 인스턴스에는 영향을 못 주는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 강의에서 update 메서드로 member 인스턴스의 money를 변경해준 뒤 findById로 새롭게 불러와서 사용하길래 저는 궁금해서 그냥 기존 member 인스턴스에 그대로 검증해보니 값이 적용되어 있지 않더라구요. 쿼리로 값을 변경해줬으면 매번 인스턴스를 갱신해줘야 하나요? mysql에서 값을 update로 변경해줬으면 그걸 확인하기 위해 다시 select해줘야하는 것과 동일선상에서 생각하면 되는 걸까요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
임시 데이터 저장 영역
Q. 커밋을 호출학 전에 임시로 데이터를 저장한다고 말씀하셨는데 정확히 어디에 저장하는지 궁금합니다 (임시로 저장하는 영역이 롤백 세그먼트인가요?)
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
화면 캠이 바꼇군요
화면 캠이 바꼇네요 ㅎㅎ 이전보다 훨씬 더 보기 편한것 같습니다! 스프링 DB도 달리겟습니다~ 나하~