반응형 트랜잭션13 InnoDB가 Phantom Read를 피하는 법 Real MySQL 복습을 진행하면서 가볍게 읽고 넘어갔지만 원리가 궁금해진 부분이 생겼다. InnoDB 스토리지 엔진에서는 갭 락과 넥스트 키 락을 어떻게 사용하길래 REPEATABLE READ 격리 수준에서도 팬텀 리드가 발생하지 않을까? 이 궁금증을 해소하고자 한다. REPEATABLE READ, 갭락과 넥스트 키 락에 대한 내용은 아래 포스팅에서 확인할 수 있다. https://devdebin.tistory.com/252 트랜잭션과 잠금 2023.10.9 복습 리팩토링 시작 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 즉, 정합성을 보장하기 위한 기능이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 devdebin.tistory.com 팬텀 리드 팬텀 리드란 다른 .. Database/MySQL 2023. 10. 11. 트랜잭션 수행 코드에 포함된 네트워크 통신 코드 분리하기 현재 프로젝트에서 관리자 권한을 가진 유저가 다수의 유저에게 초대 이메일을 보내는 비즈니스 로직이 존재합니다. 해당 로직을 수행하는 메서드에 트랜잭션이 걸리고, 메일 서버에 메일 전송 요청도 보내고 있습니다. 트랜잭션을 수행하는 중에 네트워크 통신을 진행하면 굉장히 안 좋다는 글을 본 적이 있습니다.(Real MySQL) 따라서 트랜잭션 수행 코드와 네트워크 통신 코드가 결합된 비즈니스 로직 코드를 개선한 과정을 포스팅으로 작성하려고 합니다. 시작하겠습니다. 비즈니스 로직 정리 멤버와 프로젝트 멤버 프로젝트는 M:N 관계이다. 비즈니스 로직을 수행하는 메서드의 로직은 다음과 같다. 로그인에서 사용하는 JWT 토큰에서 멤버 id를 얻는다. 트랜잭션 시작 멤버 id를 사용해 데이터베이스에서 멤버 엔티티를 조.. 프로젝트 2023. 7. 1. 토비의 스프링 Vol.1 6장 트랜잭션 포스팅을 시작하겠습니다. 아래는 우리가 작성한 TransactionAdvice의 invoke 메서드 코드다. public Object invoke(MethodInvocation invocation) throws Throwable { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try{ Object ret = invocation.proceed(); transactionManager.commit(status); return ret; } catch(RuntimeException e){ transactionManager.rollback(status); throw e; } } 우리가 .. 독서/토비의 스프링 2023. 2. 19. 토비의 스프링 Vol.1 5장 서비스 추상화 실습 코드는 아래에서 확인 가능합니다. https://github.com/happysubin/book-study/commits/main GitHub - happysubin/book-study Contribute to happysubin/book-study development by creating an account on GitHub. github.com 5.1 사용자 레벨 기능 추가 이전 시간까지는 UserDao에서 User 객체를 단순히 CRUD 하는 작업만 가능했는데, 이번 파트 부터는 특별한 비즈니스 로직을 추가했다. UserDao에서 User 객체를 모두 가져와서 일정 방문 횟수와 추천 수를 넘기면 User 객체의 레벨을 올리는 로직이다. 레벨을 나타내기 위해 Enum을 사용했다. 이번 파트에서.. 독서/토비의 스프링 2023. 2. 17. 트랜잭션과 잠금 2023.10.9 복습 리팩토링 시작 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 즉, 정합성을 보장하기 위한 기능이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어준다. MyISAM과 MEMORY 스토리지 엔진은 트랜잭션을 지원하지 않는다. 트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계 없이 논리적인 작업 셋 자체가 100% 적용되거나(COMMIT을 실행했을 때) 아무것도 적용되지 않아야 (ROLLBACK 또는 트랜잭션을 ROLLBACK 시키는 오류 발생) 함을 보장해 주는 것이다. InnoDB : 트랜잭션 지원, 부분 업데이트 현상 발생 X MyISAM, M.. Database/MySQL 2022. 11. 29. MySQL 엔진 아키텍처 2023.10.9 복습 리팩토링 시작 Real MySQL을 읽기 시작했는데, 이에 관한 공부 기록을 남겨보려고 합니다. 4장 아키텍처파트의 MySQL 엔진 아키텍처부터 시작하겠습니다. MySQL 엔진 아키텍처 MySQL 전체 구조 이미지 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. 이 둘을 모두 합쳐서 MySQL 또는 MySQL 서버라고 부른다. MySQL 엔진 MySQL엔진은 커넥션 핸들러, SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시와 버퍼로 이루어진다. 표준 SQL인 ANSI SQL 문법을 지원하므로 타 DBMS에서 사용할 수 있다. 커넥션 핸들러를 사용해 접속 및 쿼리 요청을 처리하고 옵티마이저로 쿼리를 최적화한다. 스토리지 엔진 MySQL 엔진은 요.. Database/MySQL 2022. 11. 25. 스프링 트랜잭션 본 게시글은 인프런 김영한 선생님 강의 스프링 DB 2편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 들어가기전에 인텔리제이에서 @Transactional을 타자로 직접 치면 2가지가 나온다. javax.transaction.Transaction.. 개발/Spring DB 2022. 6. 24. JPA 관련 기술 파트 요약 및 의문점 본 게시글은 인프런 김영한 선생님 강의 스프링 DB 2편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com Spring Data Jpa와 Jpa는 이전에 한번 학습했으므로 가볍게 중요 내용을 요약하겠으며, Querydsl을 좀 더 중점적으로 다루겠습니.. 개발/Spring DB 2022. 6. 23. 10주차 스터디 드디어 대망의 10주 서버 스터디가 마무리 되었습니다. 10주차 스터디 복습을 조금 늦게하는 감이 있으나, 마무리를 지어보려고 합니다. 그러면 시작하겠습니다! 10주차 스터디는 로그인 방식(Jwt, Cookie and Session) OAuth, 페이징, 트랜잭션에 대해 학습했다. 먼저 트랜잭션은 최근에 많이 공부했기 때문에 이에 대한 내용은 생략하려고 한다. 트랜잭션에 대한 글은 아래 포스팅에서 확인할 수 있다. https://devdebin.tistory.com/205?category=1028513 트랜잭션 본 게시글은 인프런 김영한 선생님 강의 스프링 DB 1편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/.. 대외활동/UMC SERVER 2022. 6. 22. 트랜잭션 문제 해결 본 게시글은 인프런 김영한 선생님 강의 스프링 DB 1편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 아직까지 존재하는 문제점 웹 애플리케이션은 크게 3가지 구조로 나뉜다. 프레젠테이션 계층 UI 관련 로직 담당, 형식적 검증, 사용자 요청을 담당,.. 개발/Spring DB 2022. 6. 16. 트랜잭션 본 게시글은 인프런 김영한 선생님 강의 스프링 DB 1편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 이번에는 트랜잭션에 관해 알아보겠다. 쓰다가 전부 날라가서 다시 쓰는데 이토록 슬플수가 ㅠㅠ 트랜잭션 데이터를 저장할 때 파일 시스템이 아닌 데이터.. 개발/Spring DB 2022. 6. 15. 영속성 관리 2023. 02.07 09:30 복습 시작 JPA 기능 JPA가 제공하는 기능은 크게 두 가지가 있다. 엔티티와 테이블을 매핑하는 설계 부분 매핑한 엔티티를 실제 사용하는 부분 매핑한 엔티티를 엔티티 매니저를 통해 어떻게 사용하는지 알아보자. 먼저 엔티티 매니저란 무엇인가? 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 개발자의 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 일반적으로 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다. 엔티티 매니저 팩토리를 생성하면 필요할 때마다 엔티티 매니저를 생성하면 된다. 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데.. 개발/JPA 2022. 2. 23. 이전 1 2 다음 반응형