전체 글
-
💡 템플릿 콜백 패턴💻 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..
-
[우아한테크코스 - 프리코스] 늦은 3주차 로또 게임 회고 😓⭐️ 우아한테크코스 2023. 11. 28. 01:19
🔗 나의 Pull Request Link 뒤늦게 올리는 3주차 회고록… 😓 😎 코드리뷰를 통해 성장해보자 프리코스를 함께 참여하고 있는 동료들에게 2주차 미션에 대한 코드리뷰를 주고 받았다. 코드리뷰 과정에서 내가 다른 코드들을 보며 느낀점과 내 코드에 대한 리뷰를 통해 아쉬운 부분과 배운 부분을 이번 미션에서 적용해보고자 했다. 1️⃣ 코드 컨벤션을 잘 지키자. 이전 미션에서 코드 컨벤션을 제대로 확인을 안한 내 자신의 코드를 발견했다..! if(...) print(...); 작은 컨벤션이라도 지킬 수 있도록 꼼꼼하게 내 코드를 작성하고 검토를 할 때에도 더 신경써야겠다. if(...) { print(...); } 2️⃣ 정적 팩토리 메소드를 사용할 때 더 적절히 활용해보자. public static ..
-
[우아한테크코스-프리코스] 2주차 경주게임 회고를 해보자🏁⭐️ 우아한테크코스 2023. 11. 2. 15:54
🔗 나의 Pull Request Link 😎 1주차와 비교 지난 미션에서 공부했던 내용에 대해서 이번 미션에서도 적용을 해보려고 노력을 많이 했다. 1주차때의 경험을 통해 String의 + 기능에 대해서 어떤 방법이 더 효율적인지 비교해보는데 JMH를 사용해보기도 하고 코드를 작성하는데도 더 수월하게 작성할 수 있었던 것 같다. ⚠️ 지난 미션을 진행할 때 아쉬웠던 부분이 테스트 코드 작성과 git commit message 관련 부분이었다. 이번에 이를 보완하고자 테스트 코드를 작성하는데 시간을 더 많이 사용하고 TDD를 적용해보고자 했다. 처음에는 테스트 코드를 작성하고 이 코드가 정상적으로 동작하도록 실제 코드를 구현하고 이를 리팩토링 하는 식으로 구현을 했다. 하지만, 점점 시간이 지나고 처음 테..