분류 전체보기
-
MySQL - 트랜잭션 격리 수준 실습💻 computer science/📦 database 2024. 5. 11. 21:24
⚙️ 실습 세팅트랜잭션 격리 수준을 실습해보기 위해서 테이블을 만들고 데이터를 넣어두었다. 👤 Member TableCREATE TABLE MEMBER ( id bigint auto_increment primary key, name varchar(255) not null, constraint UK_name unique (name)); ➕ 데이터 추가INSERT INTO MEMBER (id, name) VALUES(1, 'Beomsic');INSERT INTO MEMBER (id, name) VALUES(2, 'Beomseok');INSERT INTO MEMBER (id, name) VALUES(3, 'KO'); 💻 2개의 데이터베이스 세션 설정set autocommit = FALSE; // 현..
-
MySQL - 스토리지 엔진 수준의 락💻 computer science/📦 database 2024. 5. 11. 14:25
🔒 MySQL 의 락MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. 🧩 스토리지 엔진 레벨의 락테이블의 데이터를 다루기 위한 락 🧩 MySQL 엔진 레벨의 락테이블이나 데이터베이스 등과 같은 부분을 위한 락 🆎 스토리지 엔진 레벨의 락의 종류레코드 락 (Record Lock)갭 락 (Gap Lock)넥스트 키 락 (Next Key Lock)자동 증가 락 (Auto Increment Lock) 1️⃣ 레코드 락🎯 레코드 락은 테이블 레코드 자체를 잠그는 락을 의미한다. ❗MySQL에서 레코드 락은 테이블의 레코드가 아닌 인덱스의 레코드를 잠근다는 점이 다른 DBMS와의 차이점이다.MySQL에서는 레코드 자체를 잠그는 것이 아닌 인덱스를 잠그기 때문에..
-
📂 MySQL - 트랜잭션 격리 수준💻 computer science/📦 database 2024. 5. 11. 14:14
🔝 트랜잭션 격리 수준 🌟모든 DB 트랜잭션은 격리수준을 갖고 있어야 한다.서버 환경에서는 여러 개의 트랜잭션이 동시에 진행될 수 있다.적절하게 격리수준을 조정해 가능한 한 많은 트랜잭션을 동시에 진행시키면서도 문제가 발생하지 않게 해야 한다. 🌠 트랜잭션 격리 수준 격리 수준설명 발생하는 이상 현상SERALIZABLE트랜잭션을 순차적으로 진행- 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다.- deadlock이 일어날 확률도 높고 성능이 가장 떨어짐 ❌REPEATABLE_READ특정 행을 조회시 항상 같은 데이터를 응답하는 것을 보장하는 격리 수준 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없다- 새로운 행을 추가하는 것은 막지 않는다. phantom read READ_COMMI..
-
🎒 Knapsack 알고리즘 (배낭 알고리즘)💻 computer science/🤔 알고리즘 2024. 5. 9. 15:21
🎒 배낭 알고리즘DP 알고리즘 중 하나주어진 공간(배낭)에 최대 가치를 가지는 물건들을 넣도록 물건들을 선택하는 것이다. 배낭 알고리즘에는 2가지 유형이 존재한다. 1️⃣ Fraction Knapsack물건을 쪼갤 수 있는 경우이 경우는 그리디 알고리즘이 사용될 수 있다.단위 무게당 가치가 높은 물건을 차례대로 배낭에 넣는 방식 2️⃣ 0-1 Knapsack물건을 배낭에 넣을지 (1) 또는 넣지 않을지(0)을 결정하는 경우 🤔 왜 배낭 알고리즘이 Dynamic Programming 일까? 결국 최대 이익을 구하기 위해서는 물건을 배낭에 넣어야 한다.이때, 배낭에 물건을 넣는냐 마느냐 가 중요한 선택이다.2가지 선택지가 존재 만약, 배낭에 넣을 수 있는 양이 N 이고, 넣고자 하는 물건의 무게가 M 이..
-
💡 템플릿 콜백 패턴💻 computer science/🌠 디자인패턴 2024. 5. 7. 16:20
🧩 Template Callback 패턴스프링 프레임워크에서 DI(의존성 주입)에서 사용하는 특별한 전략패턴ex) Jdbc Template, Rest Template, Transaction Template, Redis Template public class TransactionTemplate extends DefaultTransactionDefinition implements TransactionOperations, InitializingBean { ... @Override @Nullable public T execute(TransactionCallback action) throws TransactionException { ... }} 🆚 기존의 전략패턴 기존의 전략패턴은 전략 알고리즘 부분을..
-
Transactional Outbox Pattern🌱 spring 2024. 4. 23. 22:19
💡 Transactional Messaging 비동기 메시징을 활용한 서비스 구현에서는 비즈니스 로직이 실행되었을 때, 이를 표현하는 이벤트도 온전하게 발행되는 것이 중요하다. 도메인 로직이 완료된 이후에 이벤트가 발행되지 않는다면, 해당 이벤트를 바라보는 컨슈머는 특정한 로직을 실행할 수 없게 되고, 이로 인해 전체 서비스의 데이터 정합성이 깨지거나 특정한 로직에서 버그가 발생할 수 있기 때문이다. 📖 Transactional Messaging 서비스 로직의 실행과 그 이후의 이벤트 발행을 원자적(Atomically)으로 함께 실행하는 것 Transactional Messaging의 구현 방법은 2가지가 존재한다. 1️⃣ 트랜잭셔널 아웃박스 패턴 (Transactional Outbox Pattern) ..
-
@TransactionalEventListener 적용해보기 😎🌱 spring 2024. 3. 17. 15:31
개인 프로젝트 진행 중 게시물을 생성하는 기능을 처리하는 도중 이미지 업로드하는 과정에서 고민이 생겼다. 📍 이미지를 올리는 이미지 서비스와 게시물을 게시하는 다른 서비스들 간의 호출을 통해 게시물을 올리는 기능을 구현하고자 한다. 이때, 이미지를 S3에 업로드하는 것이 성공하고나서 게시물 서비스에서 게시물을 만드는 도중 실패(예외)했을 경우 S3에 업로드된 이미지에 대한 문제가 발생할 것이라고 생각. 🤔 생각해본 해결 방법 1 - 이미지 업로드와 게시물 작성을 별도 처리 이미지 관련 요청을 먼저 처리한 후, 게시글과의 연관관계를 null로 설정 후, 게시글이 저장되면 그때 매핑 ⚠️ 위의 방식을 사용했을 때, 발생할 수 있는 문제 - 사용자가 이미지만 등록하고 게시글은 저장하지 않는다면?? 리소스를 낭..
-
ArrayDeque☕️ java 2024. 3. 15. 14:32
지금까지 알고리즘 문제 풀이를 하면서 Queue를 구현할 때 LinkedList를 주로 사용을 해왔다. 그러다 다른 사람들이 Queue를 구현할 때 ArrayDeque를 사용하는 것을 보고 ArrayDeque에 대해 자세히 알아보고 다른 자료구조들과의 장단점을 비교해보고 싶었다. 🔍 ArrayDeque ArrayDeque는 Queue의 서브 인터페이스인 Deque 인터페이스를 구현한 구현체이다. public interface Deque extends Queue { ... } public class ArrayDeque extends AbstractCollection implements Deque, Cloneable, Serializable {...} ❗ ArrayDeque는 스택 또는 큐로 사용할 수 있다..