Project

Project/개인프로젝트

TransactionSynchronizationManager를 사용해 Transaction 이후에 Event 등록하기

Message기반의 이벤트 처리를 위해 Spring Integration을 적용하였습니다. Command는 DB를 조작할때 사용했고, Event는 DB이후에 데이터를 처리할때 사용하려고 합니다. 원하는것은 DB관련 로직의 Transaction이 성공적으로 커밋되면 Event를 발행하여 Event채널로 보내는 것입니다. 🎯데이터 베이스의 Trigger와 비슷한 개념입니다! 검색해보니 TransactionSynchronizationManager가 동기화 작업을 등록하고 이후의 처리한다는 것을 알았고 바로 적용해 보았습니다. 전체 흐름도 트랜잭션 동기화 하나의 실행 단위에서 모든 작업은 모두 성공하거나 실패해야 합니다. 이것을 원자성이라고부릅니다. 원자성을 지킬수 있게 하나의 Connection으로 모든 작업..

Project/개인프로젝트

ThreadLocal 초기화 에러

ThreadLocal을 사용하여 메세지 기반의 이벤트 처리를 하고 있었습니다. Command가 성공하면 ThreadLocal에 Event가 등록되고 Aop를 사용하여 Transaction이 성공될때만 ThreadLocal에 있는 Event를 가져와 처리하는 로직입니다. 하지만 예상치 못한 에러를 발견하였습니다. public class Events { private static ThreadLocal eventThreadLocal = new ThreadLocal(); private Events() { throw new IllegalStateException("Do not Initialize."); } public static void register(T event) { if (event == null) { ..

Project/팀프로젝트 - 운동메이트

Sse를 활용해 실시간 알림기능 어떤기술을 사용해야할까?

팀프로젝트를 진행하면서 로그인, Oauth, 알림기능을 구현하였습니다. 알림기능을 구현하다보니 순간 실시간 알림이 있으면 좋겠는데?라는 생각을 하였고 실시간 알림을 구현하기 위한 방법이 여러개 있다는 것을 알게되었습니다. 여러개의 방법 중 저는 실시간 알림기능을 SSE를 사용해 구현하기로 했습니다. 그 이유는 알림같은경우는 알림이 발생했을 경우에만 해당 클라이언트에게 응답해주면 되는 단방향 소통이기 때문입니다. 요청이 필요 없기때문에 웹소켓을 사용하지 않았고, 서버에 Traffic을 생각해 polling방식을 사용하지 않았습니다. 그럼 실시간 알림을 구현하는 방법들을 알아봅시다. 💡 실시간 알림 구현방법 1. polling 실시간을 흉내내는 방식입니다. 클라이언트가 일정한 시간마다 request 요청을 ..

Project/팀프로젝트 - 운동메이트

[Refectoring] Sse를 Strategy Pattern -> 컴포넌트(Bean)으로 리펙토링!

[Refectoring] Sse로직을 재사용을 해보자 (Static, 메소드 오버로딩(overloading)) 국비를 통해 처음 프로그래밍을 배우면서 팀프로젝트 진행하였습니다. 프로젝트의 기능은 잘 구현해서 해커톤 우수상을 받았지만, 코드는 당연히(?) 엉망이였습니다. 그리고 몇개월이 지난 지 sol-b.tistory.com 이전 글에서 이어지는 Sse 실시간 알림 기능을 리펙토링하는 글입니다. 이전에는 Static으로 Sse기능을 Static영역에서 공통으로 관리하여 사용했습니다. 이후 Sse기능을 Strategy pattern으로 리펙토링하였습니다. 그 이유는 각 서비스마다 Sse를 사용하여 알림을 보내는것을 전략으로 생각한다면 Strategy Pattern으로 적용하면 되지 않을까? 라는 생각에서부..

Sol b
'Project' 카테고리의 글 목록 (3 Page)