CQRS CQRS란 Command and Query Responsibility Segregation 의 약자입니다. 저장소로부터 질의/명령을 이용하여 읽기/ 쓰기 작업을 분리하여 애플리케이션의 성능, 확장성, 보안성 등을 증가시키는 방법입니다. 명령(Command): Aggregation을 중심으로 데이터의 변화를 만듭니다. 주로 쓰기 작업을 실행합니다. 질의(Query): Aggregation을 중심으로 데이터를 가져옵니다. 주로 읽기 작업을 실행합니다. CQRS는 읽기/쓰기 모델을 분리하여 읽기 작업에 보다 높은 트랜잭션에서의 자유를 부여합니다. 주로 MongoDB와 같은 NoSQL을 사용하여 읽기 성능을 증가시킵니다. 쓰기 작업에는 PostgreSQL과 같은 RDBMS를 사용해 트랜잭션을 보장합니다..
PostgreSQL
PostgreSQL에선 카탈로그도 시스템 테이블로 구성되어서 사용자도 SQL을 통해 카탈로그를 조회할 수 있다. 해당 카탈로그 테이블의 이름은 pg_catalog 이다. 이 카탈로그 안의 pg_stat_activity 테이블은 세션 정보, 세션 PID, 세션 설명 등의 정보를 담고 있다. 해당 테이블의 로우의 갯수는 커넥션의 갯수이며 제공된 PID를 이용해 세션을 종료할 수 있다. pg_stat_activity 테이블 조회 SELECT * from pg_catalog.pg_stat_activity; 세션의 쿼리 종료 SELECT pg_cancel_backend(PID); 세션 종료 SELECT pg_terminate_backend(PID);
PostgreSQL의 Docker 이미지에선 처음 디비를 빌드할 때 /docker-entrypoint-initdb.d/init.sql 위 경로의 sql 스크립트를 실행한다. .env 파일은 아래와 같다. POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres docker-compose.yaml 파일은 아래와 같다. postgresql-default: image: postgres:latest container_name: postgres-default ports: - "5432:5432" env_file: - .env volumes: - ./postgres/default/data:/var/lib/postgresql/data - ./postgres/default/init.sq..
해당 쿼리는 매우 위험하므로 주의해서 사용해야 한다. curruent_schemas() 함수로 가져온 모든 테이블 명을 프로시저에서 반복문을 이용해 drop table if exists 쿼리로 삭제한다. DO $$ DECLARE r RECORD; BEGIN -- if the schema you operate on is not "current", you will want to -- replace current_schema() in query with 'schematodeletetablesfrom' -- *and* update the generate 'DROP...' accordingly. FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = curre..