분류 전체보기
-
📂 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는 스택 또는 큐로 사용할 수 있다..
-
MSA 환경에서의 트랜잭션 처리 - SAGA 패턴🚀 MSA 2024. 1. 22. 21:56
☁️ MSA 환경에서의 트랜잭션 처리 📍 분산 트랜잭션을 구현하는 방법 2PC (2 Phase Commit) SAGA 패턴 📌 2PC (2 Phase Commit) 2PC는 분산 트랜잭션을 구현하는데 널리 사용되는 패턴으로 Prepare 단계와 Commit 단계로 구성되어 있다. 분산 시스템 환경에서 Cordinator라는 추가적인 인프라 필요 Prepare Phase 관련된 모든 서비스는 Commit을 준비, Transaction Coordinator에 트랜잭션을 시작할 준비가 되었음을 알린다. Commit Phase 트랜잭션을 시작할 준비가 되었다면, Coordinator는 Commit을 요청 - 서비스 중 하나라도 실패한다면, Coordinator는 관련된 모든 서비스에 해당 트랜잭션을 롤백하도록 ..
-
[우아한테크코스 - 프리코스] 4주차 로또 게임 회고 🤑⭐️ 우아한테크코스 2023. 12. 7. 12:24
이번에도 늦은 회고록...작성 😨😨 ⭐ 지난 미션 피드백 1️⃣ 내가 구현하는 방식에서 왜 그 방법을 사용했는지 생각하며 사용하자 다른 분들의 리뷰와 회고록을 보다보니 많은 디자인 패턴을 사용하고 개발을 위한 여러 방법을 사용하는 것을 볼 수 있었다. 사용하게된 이유들을 보면서 내가 놓친 부분에 대해서 많이 생각할 수 있었다. 나 또한 많은 개발 방식을 무턱대고 사용하지 말고 사용할 때의 장점과 단점들을 생각하고 요구 사항을 해결하는데 어떤 것이 더욱 효율적인지를 고려하며 구현해나가는 연습을 할 필요가 있다고 느꼈다. 2️⃣ 요구 사항… 코드를 최종적으로 제출하고 디스코드방을 보니 기능 요구 사항에 대한 내용으로 많은 분들이 의견을 나누고 있었다. 이야기를 슬쩍보니.. 출력을 하는 요구 사항에서 1,00..