[Spring Boot] Long 타입 PK는 Redis Sorted Set의 score로 사용할 수 없다. (with. TSID)
·
Backend/Spring Boot & JPA
📕 목차1. Introcution2. How to Resolve?3. Lexicographical Sorting4. Consideration1. Introduction 📌 As-is빠른 저장 및 조회를 위해 Redis에 채팅 이력을 저장하여 관리하고 있는 상황.이 때, 채팅 아이디의 시간 기반 정렬(Time based sequence), 고유성(Unique)과 높은 동시성(High Concurrency)을 보장하기 위해 TSID를 사용하기로 결정했었다. 그리고 이 값들은 처음에 Hash로 바로바로 캐싱을 했었으나, 다음과 같은 문제로 Sorted Set을 사용하기로 결정했었다.채팅 조회의 경우 범위 탐색이 빈번하게 발생함.해시 자체는 고유성을 보장하지만, 저장 순서가 보장되지는 않음. (id가 뒤늦게..
[Spring Boot] 도메인 비즈니스 규칙과 멀티 모듈 아키텍처 설계
·
Backend/Spring Boot & JPA
💡 DDD를 제대로 공부해본 적 없는 학부생 수준의 조잡한 포스팅일 뿐이니 참고만 해주세요!참고로 DDD를 다루는 레퍼런스들이 대부분이 너무 어려운 개념으로 설명을 하는 게 마음에 안 들어서, 나름대로 쉬운 언어를 선택하려고 노력은 했으나, 그 과정에서 오류가 있을 수 있습니다.📕 목차1. Introduction2. Responsibility of Lower-level Modules3. Architecture Improvment4. Reflection and Future Direction1. Introduction 📌 As-is [Spring Boot] 프로젝트 멀티 모듈화 고찰💡 해당 포스트는 필자의 빈약한 이해 지식을 기반으로 한 프로젝트 멀티 모듈화입니다.개발이 진행됨에 따라 추후 지속적으로..
[Spring Boot] 도메인 검증(Validation)의 계층별 책임과 구현 전략
·
Backend/Spring Boot & JPA
📝 DDD 찍먹해봤다가 온갖 물음표들이 머릿속에 휘몰아 치는 중이라, 정리해둘 겸 작성한 포스팅입니다. 정답은 저도 모르겠습니다.📕 목차1. Introduction2. Is validation in both the controller and domain layers redundant?3. When and where should we validate within the domain layer1. Introduction 📌 the reason for writing this postDDD 찍먹..진짜 재밌었고, 새로운 시야가 보이게 된 거 같아서 좋긴 한데.못 보던 것들을 갑자기 마주하게 되니, 온갖 혼란과 기존 코드의 더러움이 거슬려서 미칠 것 같은 상태...그렇다고 죄다 리팩토링할 시간적 여유가 없으..
[Spring Boot] HTTP API 서버와 Socket 서버가 공존하는 채팅방 가입 시나리오를 DDD 관점에서 바라보기
·
Backend/Spring Boot & JPA
💡 구현 방법은 너무 다양한 방법들이 나올 수 있을 거 같기도 하고, 최근 블로그 글이 너무 길어지는 게 마음에 걸려서 생략했습니다. 대신 나름대로의 최종 아키텍처 설계까진 포함했습니다.📕 목차1. Introduction2. How should a subscription request be handled?3. Why can't we use a socket server for join the chatroom?4. Final Design1. Introduction 📌 Design일반적으로 대부분의 요청은 무상태 서버, 즉 일반적인 RESTful server에서 모두 처리가 가능하다.그러나 실시간(real-time)성이 요구되는 경우, socket 서버로 상태 유지 서버를 추가 도입하게 된다. 상태 유지..