전체 글
-
DB 분리 스키마 vs 테이블프로그래밍/MSA 2024. 11. 28. 16:53
MSA 환경에서 데이터베이스를 어떻게 할 지 고민 도커컴포즈로 mysql과 레디스를 묶어 사용하려 했다. 이 경우 레디스는 key-space를 도메인 별로 나누면 된다. 하지만 mysql은 각 도메인마다 독립적인 데이터베이스를 가져야하는데 어떻게 구현해야하나 고민이 되었다. 방식은 두가지가 있다. 1. 각 도메인이 다른 스키마를 사용2. 같은 스키마를 공유하되, 도메인 별로 테이블을 분리 1. 각 도메인이 다른 스키마를 사용Order는 order_db, Product는 product_db, Auth는 auth_db 로 스키마를 분리할 수 있다. 이 경우 각 도메인은 url이 분리되어 각자 독립적인 db를 보유한 것처럼 사용할 수 있다.jdbc:mysql://mysql:3306/product_db..
-
마이크로서비스 깃허브 관리방식프로그래밍/MSA 2024. 11. 28. 02:18
MSA 프로젝트를 하며 깃허브 레포지토리를 어떻게 관리해야할지많은 고민이 생겨 이것저것 알아보았다. 깃허브 관리 방식에는 3가지를 찾을 수 있었다. 1. 모노레포 (Monorepo)2. 서브모듈 (Submodule)3. 다중 레포지토리 (Multi-repo) 각 방식에 대해 간략히 설명해보자면 1. 모노레포 (Monorepo)모노레포란 하나의 깃 레포지토리에서 여러 프로젝트 또는 서비스를 통합 관리하는 방식모든 서비스와 코드를 하나의 레포지토리에서 관리하는 것이 특징 장점1. CICD 파이프라인 설정과 코드 공유가 쉽다.2. 서비스 간 의존성 문제를 해결하기 쉽다.3. 같은 레포지토리에서 작업하므로 변경사항 추적이 쉬우며, 협업이 쉽다.4. 관련된 모든 변경사항을 한번의 커밋으로 관리할 수 있기 때문에 ..
-
Commit Count 확장 - 로그(TIL) 카운트 EventListener ErrordevRace 2024. 11. 26. 18:46
커밋카운트 로직을 바탕으로 알고리즘 카운트, 로그(TIL) 카운트 를 만들었다. @EventListener @Async public void handleLogSubmitEvent(LogSubmitEvent event) { logCountService.updateLogCountOnSubmit(event.getUserId()); }} 이 곳에는 비동기를 적용하여 사용자가 제출한 이후 카운트를 따로 처리하게 함으로써 제출 이후 바로 다른 작업을 할 수 있도록 하였다. 테스트코드를 작성하여 간단히 로그 제출 -> 제출하며 카운트 이벤트 호출 로직으로 구성하였다. 하지만 테스트에서 문제가 발생하였고, 비동기가 제대로 적용되지 않은것이라 생각해 Awaitility.aw..
-
레디스오늘/Today I.. 2024. 11. 25. 16:00
cache hit (캐시 적중) → 캐시에서 찾음cache miss (캐시 누락) → 캐시에서 못찾음eviction policy (삭제 정책) → 캐시에 공간이 부족할 때 어떻게 공간을 확보할지에 대한 정책 Cache - Aside 레이지 로딩이라고도 함데이터를 조회할 때 항상 캐시를 먼저 확인캐시에 데이터가 있으면 캐시에서 데이터를 가져오고, 없으면 원본에서 데이터를 가져온 뒤 캐시에 저장필요한 데이터만 캐시에 보관됨최초 조회 시 캐시를 확인하기 때문에 최초 요청은 상대적으로 오래 걸림반드시 원본을 확인하진 않기 때문에 데이터가 최신이라는 보장이 없음 Write - Through 데이터를 작성할 때 항상 캐시에 작성하고, 그 후 원본에도 작성하는 전략캐시는 항상 최신 데이터임이 보장됨자주..
-
레디스 명령어 (4) Hash, Sorted Set오늘/Today I.. 2024. 11. 24. 01:48
Redis의 Hash는 Hash데이터를 가져오기 위해 Key를 사용하고 Key에 저장된 Hash데이터에 Field - Value 쌍을 넣어주는 식으로 동작한다. HSET HSET user:1 name boy age 20 city seoul # 하나의 키에 복수의 필드와 밸류가 담김 HGET String 과는 다르게 키 와 필드까지 넣어서 확인해야함HMGET 2개 이상의 필드 지정 가능HGETALL 데이터 다 가져옴HGET user:1 name # boy 반환HMGET user:1 name age # boy 20 반환HGETALL user:1 # name boy age 20 city seoul 반환 HKEYS Hash에 포함된 모..