TIL/Database(6)
-
[Architecture] CQRS 패턴
CQRS란?CQRS(Command Query Responsibility Segregation)는 명령(Command)과 조회(Query)의 책임을 분리하는 아키텍처 패턴이다.전통적인 시스템은 동일한 데이터 모델과 경로를 통해 읽기와 쓰기를 처리하지만, CQRS는 이를 분리하여 각기 독립적인 모델로 관리한다.복잡한 도메인 로직이 존재하거나, 읽기 성능의 최적화가 중요한 시스템에서 효과적으로 사용된다.CQRS의 구조Command 모델데이터의 변경을 담당한다. 생성, 수정, 삭제와 같은 작업이 여기에 포함된다. 복잡한 비즈니스 로직이나 도메인 규칙이 이 모델에 포함되는 경우가 많다.Query 모델데이터의 조회를 담당한다. 사용자 화면에 데이터를 빠르게 제공할 수 있도록 최적화된 구조를 가진다. 도메인 로직은 ..
2025.04.24 -
[Architecture] Event Sourcing
이벤트 소싱(Event Sourcing)이란?이벤트 소싱(Event Sourcing)은 애플리케이션의 상태를 단순히 현재 상태로 저장하지 않고, 상태 변경을 일으킨 이벤트의 순서대로 저장하여 전체 상태를 재구성하는 아키텍처 패턴이다.각 이벤트는 “무엇이 언제 일어났는가”에 대한 정보를 담고 있으며, 이 흐름을 통해 현재 상태를 유추할 수 있다.전통적인 CRUD 방식은 데이터의 최종 상태만 저장하지만, 이벤트 소싱은 모든 변경 이력을 남기기 때문에 시간의 흐름에 따른 변화 과정을 추적할 수 있다.이벤트 소싱의 예시자막 편집 시스템을 예시로 들 수 있다.사용자가 자막을 추가, 수정, 삭제할 때마다 각각 하나의 이벤트로 저장된다.자막_추가됨(내용="Hello", 시작=00:00:01, 끝=00:00:03)자막..
2025.04.24 -
[Metabase] 데이터 모니터링 툴
걍력한 데이터 모니터링 툴사내 데이터 분석 및 집계를 할 일이 필요해서 찾아보던 중 Metabase라는 툴을 알게 되었다.긴 말 필요없이 어떻게 사용하는 건지 알아보자.docker 이미지 받아오기dockerhub에서 metabase 이미지를 pull 받을 수 있다.M1에서의 문제 발생docker pull metabase/metabase:latest를 했을 때 docker desktop의 image 목록에 다음과 같은 경고 메세지가 나타났다.이 얘기는 현재 이 이미지는 AMD64 아키텍처에서 실행되도록 빌드하는데, 너는 AMD64가 아니라는 뜻이다. 그렇기 때문에 내 M1 환경에 맞추기 위해 ARM64 아키텍처로 된 이미지가 있는지 찾아보았다.멀티플랫폼 버전의 이미지를 찾을 수 있었다(근데 베타 버전은 맘..
2025.03.28 -
[MySQL] DBeaver 연결 시 Public Key Retrieval is not allowed 문제
갑자기 DB 연결이 안된다.이번에 문제가 발생해서 DB를 새로 설치하였다. 그런데 갑자기 다음과 같은 에러가 발생했다.무슨 일인가 싶어서 찾아봤더니 MySQL 8.0 이상의 버전에서 세팅을 다르게 해줘야 한다고 한다. 바로 따라해 보았다.해결해보자.연결이 불가능해진 DB를 오른쪽 클릭한 후 Edit Connection을 누른다.그 다음 사진에 보이는 Driver properties 탭을 선택한 후 두 개의 설정을 변경해준다. 그 다음 왼쪽 아래의 Test Connection 버튼을 클릭했을 때 연결이 잘 되었다면 성공!
2024.06.03 -
[MySQL] INT(11)과 DATETIME(6)의 비밀
11자리 숫자까지? django orm을 사용하여 Table을 생성하고(migration) 관리하기만 하다가 문득 저 괄호 안의 숫자의 의미가 궁금해졌다. bigint(20)같은 경우에 20자리 숫자까지 표현하는데 20자리가 넘어가면 에러가 나거나 문제가 생기는 것이 아니다. 해당 필드에 ZeroFill(ZF) 옵션이 체크가 되어있을 경우 20자리까지 0을 채워 넣는다는 얘기이다. 예를 들면, 위 사진에서 font_size 필드가 smallint(5)인데, ZF가 true일 경우, 12라는 숫자를 넣게되면 00012라는 값으로 들어온다. 즉, ZF옵션이 체크되어 있을 경우에만 유의미하고 그렇지 않은 경우에는 상관없다. 그러나 각 type에 맞게 범위가 들어와야한다. smallint의 경우 -32768 부..
2023.04.11 -
[MySQL] Soft delete와 unique constraint
Soft delete인데 unique가 걸려있다... 제목을 어떻게 지어야할지 몰라서 저렇게 지었지만 회사 API 작성 중 회원가입 파트에서 막힌 부분이 있었다. 바로 탈퇴한 아이디인데 그 아이디로 다시 회원가입을 할 경우, 로직상 DB에서 레코드(row)를 삭제하는 것이 아닌, soft delete(논리 삭제)를 할 경우 unique해야 할 아이디가 이미 테이블에 존재한다며 에러를 내뿜었다. 이 부분에 대해 고민을 한 것이 2가지였다. unique constraint를 없애고 비지니스 로직으로 논리 삭제된 아이디를 제외하고 중복된 아이디인지 검사 nickname과 deleted_at 컬럼 두개를 다중 컬럼 unique를 건다. unique 삭제? unique 조건을 삭제한다면 문제가 분명히 생길 것이다..
2023.01.12