반응형

백엔드 Back-end/데이터베이스 Database 24

erdcloud.com에서는 동시에 여러 명이 ERD(Entity Relationship Diagram)를 편집하고 공개된 ERD 예시를 볼 수 있다

erdcloud.com 이란? 클라우드 기반의 ERD(Entity Relationship Diagram) 공유 편집툴이다. 클라우드 기반이라 여러 명이 편집 가능 erdcloud.com에서는 클라우드 기반이라 동시에 여러 명이 편집할 수 있다. 광고를 보면 숫자 제한이 없는 거 같다. 여러 명이 함께 ERD를 설계할 때 유용하다. 공개된 ERD 예시 많아 도움 다른 사람들은 어떻게 데이터베이스 모델링을 하는지 공개된 ERD를 보면서 참고할 수 있다. ERD 옆의 책이 쌓여 있는 아이콘을 누르면 아래처럼 공개된 ERD를 볼 수 있다. 아래 예는 OKKY의 예다. export시 외래키 정보가 사라져 export할 경우 외래키(Foreign Key) 정보가 사라진다. export 한 뒤 import 하면 다시..

dbdiagram.io를 활용해서 쉽고 간편하게 데이터베이스 모델링하기

dbdiagram.io란 DBML(Database Markup Language)이란 언어를 사용해서 관계형 데이터베이스 논리적 설계를 돕는 무료 툴이다. ORM(Object Relational Mapping) 또는 SQL DDL(Data Definition Language)을 활용한 물리적 설계 전에 미리 간편하게 설계해서 시간을 절약할 수 있다. DBML(Database Markup Language)이란? 아래 예처럼 SQL DDL을 좀 더 간소화한 것에 가깝다. 딱 설계에 필요한 정보만 남겨 DDL보다 훨씬 파악하기 쉽다. Table users { id integer username varchar role varchar created_at timestamp } Table posts { id integ..

Q. 웹서비스 운영 중 가장 비싼 자원은?

A. 데이터베이스다. 최소로 웹서비스를 운영해도 웹 서버와 관계형 데이터베이스 서버, 파일 서버 정도는 필요하다. 이 중 데이터베이스가 제일 비싸다. 비슷한 사양일 때 웹서버에 비해서 2배 이상 비싸다. 파일 서버는 파일량에 비례하기 때문에 비용이 초기에 적게 든다. 가상서버(EC2)와 관계형 데이터베이스 서버 가격 비교 AWS 비용을 살펴보자. OS Linux ec2 t2.2xlarge의 경우 8 vCPUs에 Memory 32GiB인 경우 1시간당 0.4608$다. 이번에는 AWS MySQL 가격을 살펴보자. 비슷한 사양인 db.m4.2xlarge의 경우 vCPU 8, Memory 32 GiB인데 1시간 당 0.966 USD 달러다. 비슷한 사양의 ec2의 거의 두배다. 한 달 기준 705.18 USD..

Q. ER Model, Entity-Relationship Model에서 Relationship의 의미는?

A. 부모 자식, 친구 등 흔히 말하는 관계다. 데이터베이스를 공부할 때 헷갈리게 만드는 원인이다. ER Model에서 Relationship은 진짜 관계다. 관계형 데이터베이스 Relational Database에서 Relation은 수학 용어다. 둘 다 한국어로는 관계라 더 헷갈린다. 영어로는 약간 차이가 있다. ER Model은 relationship이고, Relational Database에서는 relation이다. 그래서 관계형 데이터베이스에서는 관계라고 하지 않고 릴레이션이라고 영어 발음 그대로 적는 경우도 많다. ER Model 원 논문, The Entity-Relationship Model — Toward a Unified View of Data Peter Pin-Shan Chen이 쓴 원..

Q. 관계형 데이터베이스Relational Database에서 관계Relation는 어디서 나온 말일까?

A. 수학의 집합론에서 나온 말이다.부모 자식 사이의 관계, 사돈 관계 등 일반적인 관계를 뜻하는 '관계'에서 나온 것이 아니다. 관계형 데이터베이스의 시초, 에드가 커에드가 F. 커(Edgar Frank "Ted" Codd)는 관계형 데이터베이스의 아버지라고 불린다. 그 이유는 첫 상업용 관계형 데이터베이스 시스템인 오라클 데이터베이스Oracle Database가 바로 에드가 커의 논문의 영향을 받아 만들어졌기 때문이다. It was at this time that Ed Oates introduced Miner and Ellison to a paper by E. F. Codd on the relational model for database management. 번역: 이때 에드 오츠는 마이너와 엘리슨..

Q. MySQL에서 count(*)과 count()의 차이는?

A. count(*)은 WHERE 조건이 있다면 조건에 해당하는 모든 행수를 얻을 수 있고, count(칼럼명)의 경우는 해당 칼럼명의 데이터를 조회해서 NULL이 아닌 데이터가 들어 있는 행수를 얻을 수 있다. InnoDB 엔진 예 간단히 coffee란 테이블을 만들어서 5개의 데이터를 넣었다. 맨 마지막 5번 데이터는 NULL을 넣었다. 이 상태에서 SELECT count(*) FROM coffee; 를 실행하면 5가 나온다. 만약 칼럼명인 name으로 SELECT count(name) FROM coffee; 하게 되면 4가 결과로 나온다. 두 경우 모두 Query Cost를 살펴보면 0.75이고 Full Table Scan이 발생한다. SELECT count(*) FROM coffee; SELECT..

Q. MySQL 데이터베이스 쿼리 비용Query Cost를 확인하는 방법은?

A. MySQL Workbench를 활용하면 쿼리 비용을 확인할 수 있다! MySQL Workbench에서 번개에 돋보기가 있는 아이콘을 누르면 쿼리 비용을 숫자로 확인할 수 있다. 바로 아래 이미지 아이콘이다. 예를 들어서 아래와 같은 쿼리문의 비용을 확인해보자. SELECT beverage.name, beverage.price FROM beverage INNER JOIN category ON beverage.category_id = category.id; 번개돋보기 아이콘을 누르면 아래처럼 쿼리 비용 1.10이라고 나타나는 것을 확인할 수 있다. 이번에는 LEFT JOIN 예이다. SELECT beverage.name, beverage.price FROM beverage LEFT JOIN catego..

Q. MySQL 인덱스 타는지 안 타는지 확인하는 방법은?

A. Explain을 활용하면 쉽게 확인할 수 있다. 예를 들어서 아래와 같은 쿼리문이 인덱스를 타는지 궁금하다. SELECT beverage.name, beverage.price FROM beverage LEFT JOIN category ON beverage.category_id = category.id; 이때 SELECT 앞에 EXPLAIN만 붙여두면 확인할 수 있다. 아래 예처럼 말이다. EXPLAIN SELECT beverage.name, beverage.price FROM beverage LEFT JOIN category ON beverage.category_id = category.id; 실제 실행해보면 아래 예처럼 결과가 나온다. Extra에 나온 정보를 보면 Using index를 통해서 ..

셸 스크립트로 MySQL 데이터베이스 원격에서 로컬 데이터베이스로 복사하기

백엔드 개발을 하다보면 QA용 테스트 데이터베이스를 내 컴퓨터 로컬 데이터베이스로 복사를 자주하게 된다. DBeaver, Workbench 등 데이터베이스 클라이언트 프로그램을 이용해도 되지만 번거롭다. 매번 복사할 데이터베이스를 선택하고, export 누르고, 다시 로컬 데이터베이스에 접속해서 import 누르는 과정을 진행하는데도 시간이 꽤 걸린다. 자칫 잘못하면 로컬 데이터베이스를 QA 테스트 데이터베이스로 거꾸로 복사할 수도 있으니 집중해야 해서 더 피곤하다. 그래서 셸 스크립트로 만들었다. #!/bin/bash # 원격 데이터베이스 MYSQL_HOST="" MYSQL_USER="" MYSQL_PASSWORD="" # 로컬 데이터베이스 MYSQL_HOST_LOCAL="127.0.0.1" MYSQL..

Q. MongoDB 데이터베이스 백업Dump과 복원Restore 하는 방법은?

A. mongodump와 mongorestore 명령어를 활용하면 된다. EC2에 아래 글을 참고해서 우선 MongoDB를 설치하자. 참고할 글: Q. AWS EC2에 MongoDB 설치하고 외부 접속 가능하게 만드는 방법은? 테스트 데이터 입력하기 MongoDB Compass로 접속해서 아래처럼 test란 데이터베이스를 만들고 collection이란 collection을 만들어서 아무 데이터나 하나 넣었다. mongodump 어드민으로 사용자를 추가한 경우 --authenticationDatabase="admin" 를 추가해줘야 한다. mongodump --host="3.35.154.100:27017" --username="taptorestart" --password="password" --db="te..

데이터베이스 예제를 보면서 참고하기

관계형 데이터베이스를 설계 하다보면 다른 사람들은 어떻게 설계하는지 궁금해진다. 특히 전문가들은 어떻게 하는지 궁금해진다. 그때는 예제를 많이 보면 도움이 될 수 있다. Postgresql wiki Sample Databases 에 가면 무료 예제 데이터베이스를 살펴볼 수 있다. 무료 예제 데이터베이스 스키마를 참고하기 편하게 여기에 taptorestart/database-schema-examples 로 정리 중이다.

시계열 데이터베이스Time Series Database, influxDB v1.8 튜토리얼, python으로 데이터 입력과 조회하기

데이터베이스 만들기 먼저 데이터베이스를 만들어야 한다. influx를 실행한다. 그리고 weather란 데이터베이스를 만들자. $ influx Connected to http://localhost:8086 version 1.8.9 InfluxDB shell version: 1.8.9 > create database weather Python 코드 예 만들고 나면 아래처럼 코드를 적고 실행하자. influxdb 파이썬 팩키지 설치가 필요하다. 관계형 데이터베이스와 influxDB의 용어 차이를 다시 보면 아래와 같다. 관계형 데이터베이스 RDB influxDB v1.8 influxDB v2.0 database database bucket table measurement measurement indexed ..

시계열 데이터베이스Time Series Database, influxDB v1.8 튜토리얼, 데이터 수집과 조회 예제

influxDB v1.8 설치가 끝났다면 실제 데이터를 수집해보고 사용을 해보자. 설치 방법은 시계열 데이터베이스Time Series Database, influxDB 소개와 설치 방법을 참고하자. 권장 환경 AWS EC2 Ubuntu18.04 프리티어에서 실습해보기를 권한다. 데이터가 쌓이는 것을 경험하고, 실제 시각화툴에 익숙해지기 위해서는 일주일 이상 데이터를 수집할 필요가 있기 때문이다. 서버 컴퓨터가 있다면 서버에서 실습하기를 권한다. 계정 추가 v1.8에서는 웹UI가 없기 때문에 직접 계정을 추가해야 한다. 아래는 사용자명이 admin이고, 비밀번호가 verysecret!인 사용자를 만들고, 해당 사용자한테 모든 권한을 부여하는 경우다. $ influx > CREATE USER admin WI..

시계열 데이터베이스Time Series Database, influxDB 소개와 설치 방법

시계열 데이터베이스란? 시계열(시간과 값이 쌍을 이루는) 데이터를 저장하고 서비스하는데 최적화된 데이터베이스다. influxDB란? influxdata에서 만든 시계열 데이터베이스. 전세계에서 가장 인기 있는 시계열 데이터베이스 중 하나다. 참고: InfluxDB와 SQL 데이터베이스 비교 TICK Stack이란? 보통 Influxdb만 사용하지 않고, Telegraf, Influxdb, Chronograf, Kapacitor를 함께 사용한다. 앞글자를 따서 TICK라고 부른다. Telegraf 데이터 수집 InfluxDB 데이터 저장 Chronograf 데이터 시각화 Kapacitor 이벤트 감지, 알림 influxDB 버전에 따른 차이는? 버전 1.x 2.x 데이터베이스 명칭 database buck..

pandas, pymysql을 활용해서 자동으로 데이터베이스 명세서 만들기

여러 데이터베이스 명세서를 만들어야 할 일이 생겼다. 한개도 아니고 여러개. 일일이 복사해서 붙여 넣을 수는 없어서, 자동으로 만들어주는 프로그램을 짰다. 아래 코드 또는 첨부한 주피터 노트북에 데이터베이스 연결 정보를 넣고 실행하면 자동으로 데이터베이스명으로 엑셀 파일이 만들어진다. 위와 같이 table, field, type, collation, null, key, default, extra, privileges, comment 정보를 쉽게 얻을 수 있다.

Q. MySQL 외래키 추가 시 'Cannot Add Foreign Key Constraint' 오류 원인은?

A. 원인이 여러가지가 있는데 내 경우에 타입이 달라서였다. 같은 INT인데 왜 안 되지 한참 헤맸다. 이유는 테이블 A의 INT 타입은 UNSIGNED였고, 참조하는 테이블의 필드는 INT 타입이지만 SIGNED였다. desc 테이블명; 실행해서 정확히 type을 확인해보자. type을 정확히 맞춘 뒤에는 정상적으로 foreign key 추가할 수 있었다.

MySQL에서 사용자를 추가하고 특정 데이터베이스만 권한 허용하기

MySQL에 우선 관리자 계정으로 접속한다. 꼭 CLI커맨드라인인터페이스 기반 mysql-client 같은 걸로 접속하지 않아도 된다. 맥 사용자라면 SequelPro 같은 프로그램으로 접속해도 된다. 데이터베이스 추가 test란 데이터베이스를 만든다면 아래처럼 명령어를 실행하면 된다. CREATE DATABASE test; 사용자 추가하기 사용자 아이디는 test 비밀번호는 Te067813!3812@라면 아래 두 명령어를 실행한다. 내부 접속만 허용할 경우에는 'test'@'localhost'로 모든 IP주소를 허용할 경우에는 'test'@'%'로 적는다. 아래 명령어를 실행한다. USE mysql; CREATE USER 'test'@'%' IDENTIFIED BY 'Te067813!3812@'; 특정..

Mac에서 mysql client 설치하고 MySQL 원격 접속하는 방법

Mac에서 mysql client 설치 Homebrew가 설치 되어 있지 않다면 아래 명령어를 터미널에서 실행한다. % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 설치되어 있다면 brew install을 활용해서 mysql을 설치한다. % brew install mysql % brew install mysql-client 설치가 제대로 되어 있다면 $ mysql --version mysql --version을 실행해서 버전 정보를 확인한다. 원격 접속하기 접속주소 test.com 포트 3307 아이디 root 인 경우 mysql -h 접속주소 -P 포트번호 -u 유저명 -p m..

반응형