TL;DR MongoDB는 최초로 설치할 때 single node 로 생성되니, 트랜잭션을 사용하기 위해서는 Replica 설정이 반드시 필요하다. Too Long MongoDB 를 사용 중에 트랜잭션으로 데이터 일관성을 유지해야 하는 상황이 생겼다. Mongoose를 ODM으로 쓰고 있기 때문에 찾아본 결과, session을 활용하면 되었다. const session: ClientSession = await mongoose.startSession(); session.startTransaction(); try { // Add to do statement // Commit the changes await session.commitTransaction(); } catch (error) { // Rollbac..
가장 많이 사용하지만, 매번 잊어버리고 다시 검색하게 되는 주요 psql 명령어 정리 postgresql 클라이언트 실행 $ psql -U -d # 예. $ psql -U postgres -d postgres # 예. 기본 데이터베이스로 실행 $ psql postgres psql 명령어 데이터베이스 조회 # 데이터베이스 전체 조회 postgres=# \l # OR # SQL 문 활용 SELECT datname FROM pg_database; 기타 DB 정보 조회 -- schma (table) list # \t -- user list # \du -- function(extension) list # \df 권한 및 유저 관리 # 로그인 상태 유지하머 슈퍼유저로 생성 CREATE USER WITH LOGIN ..

문제 그룹 : 클라이언트 = N: M 관계이기 때문에 아래 사진처럼 클라이언트_그룹 관계테이블을 만들어 인덱스만 저장하는 형태로 설계하였다. 삽입과 수정이 용이하고, 조회할 때도 인덱스 탐색하기 때문에 보다 빠른 것으로 알고 있다. 그룹 전체 조회를 할 때, 그룹에 관계된 클라이언트 개수도 가져오려고 했다. group.repository.js // group.repository.js //그룹 전체 조회 getAllGroup = async () => { logger.info(`GroupRepository.getAllGroup Request`); const allGroupData = await Groups.findAll({ attributes: [ 'groupId', 'groupName', 'createdA..
only_full_group_by 모드 - MySQL 트러블슈팅 기본 환경: docker image mysql:latest 상황 Clients : Groups = N : M 관계로, 각 클라이언트와 그룹은 여러 개에 속할 수 있음 클라이언트 ID를 기준으로 그룹 정보와 클라이언트 정보를 조인으로 조회하고자 함 문제 아래와 같은 쿼리문 실행 SELECT cs.clientId, cs.clientName, cg.groupId, g.groupName FROM Clients AS cs LEFT OUTER JOIN ClientGroups cg ON cs.clientId = cg.clientId LEFT OUTER JOIN `Groups` g ON g.groupId = cg.groupId GROUP BY cs.cli..

데이터 모델링 (Data Modeling) 데이터 모델링은 현실 세계의 개념을 데이터로 저장하기 위해 논리적인 데이터베이스 모델로 만드는 작업을 말한다. 데이터로 정의하고 구조화하는데 여러 기법이 활용될 수 있지만, 그 중 개체-관계 모델 (Entity-Relationship Modelling) 이 많이 적용된다. ERD (Entity-Relationship Diagram) ERD는 개체-관계모델을 다이어그램으로 나타낸 것이다. 그렇다면 개체-관계 모델이란 무엇인가. 예를 들어서 설명해보겠다. 개체는 말 그대로 행동의 물체가 되는 사물, 사람 등의 '명사'를 나타낸다. 사람, 책, 컴퓨터 하나하나가 바로 하나의 개체를 뜻한다. 관계는 두 개 이상의 개체끼리 연관성을 나타내는데, 주로 '동사'형의 의미를 ..

DML (Data Manipulation Language) 데이터베이스/테이블에 있는 데이터 (레코드 또는 행)를 조작(생성, 수정, 삭제)하는 언어 CREATE (추가) 데이터베이스/테이블에 데이터를 추가(생성)하는 쿼리문 INSERT문으로 새로운 데이터 추가(생성)하기 INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES(데이터1, 데이터2, ...) -- 컬럼명 순서에 맞게 데이터를 순서대로 입력해야 함 READ (조회) 데이터베이스/테이블의 데이터를 조회(검색)하는 쿼리문 SELECT문으로 데이터 조회(검색)하기 -- * : 전체 컬럼 SELECT * FROM 테이블명 WHERE 컬럼명=속성값; SELECT 컬럼1, 컬럼2 FROM 테이블명 WHERE 컬럼명=속성값; UPDA..

DDL (Data Definition Language) 데이터베이스를 정의 (생성, 수정, 삭제)하는 언어 CREATE (생성) 데이터베이스와 테이블을 생성하는 쿼리문 CREATE 문으로 새로운 데이터베이스 생성하기 CREATE DATABASE `테이블 명`; 데이터베이스를 사용하기 위해서 USE문을 활용해야 함 USE `테이블 명`; CREATE 문으로 새로운 테이블 생성하기 CREATE TABLE `tb_test`{ '속성명' 타입, '속성명2' 타입, … } SHOW 문으로 현재 데이터베이스, 테이블 전체 목록 확인하기 -- 데이터베이스 목록 조회 SHOW DATABASES; -- 테이블 목록 조회 SHOW TABLES; ALTER (수정) 테이블을 수정하는 쿼리문 컬럼 추가하기 ALTER TABL..