30%
53,900원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션에 궁금함이 있습니다.
안녕하세요. 강사님 강의를 정주행중인 학생입니다. 아직 디비 관련 강의를 듣기 전인데 실제 프로젝트를 하다 궁금함이 있어 질문드립니다. 비즈니스 로직상 동일한 사용자 아이디를 등록할 수 없습니다. 테이블 상 유니크 제약 조건은 사용하지 않고 비지니스 로직에서 에러 처리를 하기위해 사용자를 등록 시 최초 동일한 아이디가 있는지 디비에서 검색합니다. 그 다음 동일한 아이디가 없을 때 먼저 다른 서버에 데이터를 등록 요청 후 디비에 사용자를 등록합니다. 성능 테스트를 위해 api를 여러번 호출했습니다. 요청당 각 별도의 쓰레드로 실행되다 보니 몇개는 동일한 아이디가 여러개 등록됩니다. 현재는 멀티 프로세스 환경을 사용할 계획이 없어서 synchronized 키워드를 사용하여 동기화 처리를 했습니다. 더 나아가 궁금한 점은 단일 프로세스 환경이면 동기화로 처리하는 방법은 좋은 방법일까요? tps가 많을 경우 속도 느려진다는 단점이 있을 것 같습니다.tps 많다면 결국 서버를 늘려야 하겠죠. 그럼 결국 멀티 프로세스 환경으로 넘어가네요..ㅎㅎ... 멀티 프로세스 환경(다중 서버)일 경우 어떤식으로 처리하는게 좋을까요? 강사님이 다른 질문에 올려주신 디비에 유니크 제약 조건을 이용하여 공통 예외 처리를 하는 내용도 봤습니다. 다른 서버에 데이터 등록 요청을 하지 않는다면 멀티 프로세스 환경에서도 좋은 방법인 것 같습니다.다만 다른 서버에 데이터를 등록했으니 예외를 잡아 등록된 다른 서버 데이터를 삭제 요청 후 에러를 발생시키는게 좋은 방법일까요?https://www.inflearn.com/questions/59250 강사님이 올려주신 디비 강의에 해당 관련 내용이 있는지도 궁금합니다. 있다면 어느 강의에서 볼 수 있을지도 궁금하네요. 강의에 없다면 어떤 키워드를 참고해서 검색하면 될지도 궁금하네요. 코드도 비슷하게나마 올려봅니다. @Transactional public synchronized void createUser(String username){ ... Optional<User> findUserOptional = repository.findByUsername(username); if(!findUserOptional.isPresent()){ ~~~ 블라블라 다른 서버에 데이터 등록(MSA 구조) em.persist(user); }else{ throw new RuntimeException("username already exists."); } ... }
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
try-with-resources 사용할 경우 마지막 리턴은 널로 반환하는게 일반적인가요?
로드맵 정주행중입니다마지막 리턴은 널로 반환하는게 일반적인가요? JPA로드맵도 해보고 싶은데 20%할인 쿠폰 부탁드립니다ㅠ public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values(?, ?)"; try (Connection con = getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; } catch ( SQLException e) { e.printStackTrace(); } return null;}
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
db 락과 jpa
안녕하세요 강의 잘듣고 있습니다 DB 락 관련하여 질문 드립니다. h2에서는 for update 문을 사용하는데 for update 로 락을 가져와도 select 문을 통해 이전 commit 들에 대한 결과는 가져오는 것을 실험으로 확인 했었습니다. JPA에서는 어노테이션 LOCK을 사용해서 for update 구문을 지원 하던데, 이렇게 될 경우 다음과 같은 1. select ---- for update (세션1) 2. select ---- (세션2) 3. 커밋 (세션1) 4. 가져온 data dirty check로 인한 update (세션2) 일 경우가 가능 한가요? (특히 4번) 가능하다면 2,4 번이 위험한 행동이 아닌가에 대해 궁금합니다. 또 실무에서는 낙관적락, 비관적락에 대해서 무엇을 더 우선순위로 택하는지 궁금합니다 감사합니다
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
체크 예외 문제점 - 코드 - CheckedAppTest
controller .request를 호출하면, service.logic이 호출되고, service.logic 이 실행되면 service 클래스안에 logic 메소드가 호출이 됨. 호출이되면, repository.call exception과 networkClient.call exception 두개 모두 발생한다고 생각합니다. 그런데 왜 SQLException.class로 assetThrownBy 하면 테스트가 성공하고, ConnectException으로 테스트하면 실패하는지 모르겠습니다.
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
인텔리j 버전 어떤게 필요한가요??
안녕하세요. 스프링 강의 로드맵에 있는 모든 강의를 구매 했는데 인텔리j 버전 확인을 안했네요.. 혹시 모든 강의가 ultimate 버전으로 강의가 진행되나요? 만약 그렇다면 저는 커뮤니티 버전으로 강의를 따라가도 괜찮나요? 특히 '스프링 DB1,2편'이 있던데 JDBC 처럼 ultimate 버전에서만 할 수 있다거나 하진 않나요?
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
예외를 catch 할 때는 import가 필요 없나요 ?
MemberRepository 4_1 에서 catch(SQLException e) 로 catch 하면 MyDbException을 던져줌으로서 체크예외를 언체크 예외처럼 사용하는법은 이해했습니다 근데 Catch할 때 SQLException은 왜 import 없이 사용할 수 있는건가요 ?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Exception 질문입니다
SQLException 와 ConnectException 부모로 SCException 같은 것을 하나 만들어서 throws SCException 하는 것은 안좋은 방법인가요 ??? 그러면 체크 예외를 체크할 수 있으면서 다른 기술에도 의존하지 않게 되지 않나요 ??
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 매니저가 커넥션을 생성하는게
커넥션 풀에서 커넥션을 꺼내오는 것인가요? 그림에서 커넥션 풀은 안나오는데 사용하지 않는건가요 ?
- 해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
SQLExceptionTranslator를 JPA에서도 사용하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. SQLExceptionTranslator를 JPA에서도 사용하나요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션풀은 핸들러고 dataSoure는 어댑터의 역할을 하는건가요??
일종의 어댑터와 핸들러 역할을 하는건가요 ??
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
8분경에 질문입니다
dataSource.setPassword(PASSWORD);가 맞지 않나요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 종료
4분50초 쯤에 con.close 호출돼서 커넥션 종료하는건 의미상 알겠는데 close가 직접적으로 명시된 코드를 찾으려고 했는데 안보이더라구요 이게 혹시 정확히 어디에 있는지 알 수 있을까요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
JDBC Template
궁금한게 jdbc template을 쓰다가 jpa로 바꿀때는 MemberRepository에 있는 코드를 jpa template으로만 바꿔주면 되는건가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
하나의 DB에 두 개 이상의 ORM Application Server를 붙일 시.
안녕하세요. 강의 내용과는 좀 무관하다고 이야기할 수도 있지만.. 진짜 마땅히 물어볼 데가 없어서 욕 먹을 각오하고 올립니다. 현재 제가 다니는 회사에 nest.js + typeOrm로 붙여진 서버와 DB가 있습니다. 이제 Admin Server를 만들어야 하는데, 저는 이것을 Kotiln + JPA 환경으로 구축할려고 합니다. (같은 DB의 테이블) 이럴 경우, 발생할 문제여지들이 무엇이 있을지 알고 싶습니다. JPA Entity 만들면, 보통 자동으로 DDL 쿼리를 날려주잖아요. 근데 ORM 툴이 다르다보니, 이럴 경우 entity class를 기존에 존재하는 table 내 칼럼 형식에 맞게끔 다 명시적으로 바꿔줘야 할테고, 만약 칼럼 구조를 변경시켜주는 쿼리를 실행을 했다. 그러면 다른 ORM entity에서 갑자기 이상이 생기는지도 걱정이 되고, 동시성 제어는 어떤 식으로 해야될까 걱정도 되고.. 조언을 주실 수 있나요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀에 커넥션이 들어오는 부분에 대해 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 테스트할때 useDataSource 메서드를 사용해서 하나 이상의 커넥션을 얻어오면 교재처럼 IDE 하단의 결과 창에 커넥션풀에 커넥션이 채워지는게 보이는데, 커넥션을 얻어오지 않거나 useDataSource 메서드를 주석처리하면 커넥션풀에 커넥션이 차는게 보이지 않습니다. 커넥션을 얻어오는 과정이 있어야 커넥션 풀에 커넥션이 차는게 보이는건가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DriverManager
DataSource를 이용하게 되면 H2로 연결되는 순서가 애플리케이션 로직 -> DataSource -> DriverManagerDataSource -> DriverManager.getConnection() -> H2드라이버 이 순서인가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
@Autowired
궁금한게 그전에 핵심원리강의에서는 @Componentpublic class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; }} 이런식으로 @Autowired로 주입을 받았는데 여기서는 왜 안쓴건가요?
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀에서 타임아웃 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 영한님 강의 수강생입니다. 다음이 아니라 커넥션 풀에 대한 강의를 듣다가 질문이 생겼습니다. 질문1) 강의에서는 커넥션 풀의 커넥션들은 이미 연결이 된 상태로 존재한다고 들었는데, 만약 커넥션을 필요로 하는 요청이 오지 않고 계속해서 커넥션 풀에 커넥션이 남아있게 된다면, TCP 타임아웃이 발생하여 커넥션이 만료될텐데, 이럴 경우에는 어떻게 처리가 되는지 궁금합니다. 히카리에서 TCP 타임아웃이 발생한 커넥션을 다시 살려놓거나 아니면 JDBC 드라이버 단에서 알아서 다시 살려놓을수도 있겠다는 생각을 해봤습니다. 질문2) 커넥션 풀에서 커넥션을 받아 쿼리를 수행하던 도중에, TCP 커넥션이 만료된다면 어떤 상황이 발생하는지 궁금합니다. 감사합니다.
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
throws 질문
안녕하세요. throws 관련해서 질문드릴 게 있습니다. 영한샘 강의자료에 -> 예를 들어서, `Exception`을 `throws`으로 던지면 그 하위 예외들도 모두 던질 수 있다. 이런 문장이 있는데, 그냥 그렇구나 하고 넘어갔는데 테스트를 해보니, 잘 이해가 안 돼서요... throws Exception을 하면 모든 SQLException, IOException 같은 모든 자식 CheckedException을 던진다는 의미인가요? try { throw new Exception("Super Exception");} catch (SQLException e) { log.error("message={}", e.getMessage(), e);} catch (Exception e) { log.error("message={}", e.getMessage(), e);} 그럼 위 코드에서는 SQLException으로 Exception을 받는 catch문에도 걸려야 하는 거 아닌가요?, SQLException은 건너뛰고 바로 Exception으로 가서 이해가 잘 안 됩니다...
- 미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Test코드에 @Transaction 동작 문의
안녕하세요 , 영한님 강의 항상 잘보고 있습니다. 프로젝트를 진행하면서 궁금한 점이 생겨 혹시 도움을 받을 수 있는지 해서 문의남겨봅니다.. Service 에 @Transaction 어노테이션이 있는데 JPA repository save 를 호출하고 의도적으로 exception 을 발생시켰는데요, Test 클래스의 @Transaction 여부에 따라 결과가 제대로 확인되지 않는 점을 발견했습니다. Test 에서 findById 로 rollback 된 회원의 아이디를 조회하려고 하면, @Transaction 어노테이션이 테스트에 없다면 기대한대로 회원이 조회되지 않는데, @Transaction 을 붙이면 서비스에서 exeption 이 발생했는데도 rollback 이 되지 않은건지 테스트클래스에서 회원이 조회가 됩니다. 영속성 컨텍스트를 초기화하거나 @Transaction(readonly=true) 로 해도 마찬가지였고 , 서비스 트랜잭션 propagation 은 REQUIRES_NEW 로 트랜잭션을 분리했을 때는 롤백된 것이 확인되었는데요. 트랜잭션과 서비스가 하나의 트랜잭션으로 묶이면 서비스에서 발생한 exception 에 대한 rollback 은 일어나지 않고 마지막에 테스트가 끝날 때 rollback 이 발생하는 것인가요? 열심히 검색을 해봤는데, 힌트를 찾기 어려워 도움을 구합니다.. 물론 Test에서 findById 를 하는데 @Transactional 이 필요하지는 않지만, 그래도 붙였을 때 영향을 미치는 것이 궁금하여 문의 남깁니다.