DB 19

[DB, Django] Migration 이슈 해결 모음

migration 이슈 발생시 주로 파악해야 될 연관 부분migration 이슈는 각 개별 환경마다 특수하기 때문에, django에서 특정 DB에 migrations시 어떤 과정으로 반영되는지 직접 이해하는 것이 트러블 슈팅이나 디버깅에 좋다.django의 migrations/ 내 migrations 파일들DB의 django_migrations 테이블 히스토리 사례 1 - 모델이 해당 DB에 없다고 나오는 경우👉 오류 메시지table ~ does not exist 👉 사례 / 해결방법1) migration 파일이 없어서 안생겼을 경우- django의 migration 파일이 잘 생성되었는지 확인 (django makemigrations 시 migrations/__init__.py가 있는지 등) 2) ..

[DB 설계] RDB에서 JsonField 사용 vs 관계형 테이블 맺기

JSON Field의 장단점 (vs 외래키 테이블 구성) Json Field 장점 - 추가 적인 테이블 관리가 필요 없음 (테이블 간 추가 Join 필요 X) - 생성/수정시 값에 대해 Dictionary를 교체하는 식으로 쉽게 가능 - Validation이 큰 상관이 없는 경우 / 정적인 값 경우 사용하기 좋음 - JSON Field만 가지고 추가 쿼리 가능 Json Field 단점 - 난독화 발생 우려 - JSON 내 관계형 값이 변할시 값을 업데이트 하기 힘듬 - JSON 값에 대한 Validation을 하기가 힘듬 (값 검증시 내부 값들의 type 까지 검증 필요) - DB 테이블 트랜잭션 분산 가능 - RDB가 JOIN이 잘되어 있으면 성능적으로 큰 이점은 없음 JSON Field의 장단점 사례..

[Celery] Celery 비동기 작업 큐 예제 (by. FastAPI)

Celery 란? Celery 란 비동기 방식의 작업 큐로, Broker에게 받은 메시지 작업(Task)을 수행하는 Worker 이다. 👉 Celery를 사용하는 이유? 동기적으로 처리할 경우 오래 걸리는 메일 전송 / 대용량 파일 업로드 등의 Task를 비동기 처리하기 위함 Worker들을 병렬적으로 실행 하여 동시에 처리도 가능 일반적으로 비동기 이벤트 기반 처리의 구조는 Producer (Server Framework) => Broker (RabbitMQ, Redis 등) => Consumer (Celery) 로 이루어지는데, Celery는 Consumer 역할을 수행한다. 👉 Broker Broker로는 일반적으로 RabbitMQ(Message Queue)를 많이 사용하고, Redis와 같은 Pu..

DB/기본 실습 2022.11.29

[MQ] 메시지 지향 미들웨어 (by. RabbitMQ, Redis)

메시지 지향 미들웨어(Message Oriented Middleware, MOM) 란? 메시지 지향 미들웨어(Message Oriented Middleware, MOM)이란, 응용 프로세스 간 비동기 방식의 데이터 통신을 통해, 메시지를 전달 해주는 시스템을 뜻하며, 주로 대용량 배치 처리, 이메일 전송, 채팅 서비스 등에 주로 많이 사용됨 👉 메시지를 전달하는 방식의 모델 2가지 Message Queue 기반 모델 발행(Publish)-구독(Subscribe) 기반 모델 📌 메시지 지향 미들웨어 시스템 사용시 장점 비동기성 작업 처리 프로세스간 결합도(의존성)가 낮음 메시지 생산자(Producer)나, 메시지 소비자 (Consumer)에 대한 확장성이 좋음 메시지 생산자의 서버가 다운되도, Messag..

DB/이론 2022.11.26

[Cache] Memcached vs Redis 차이

Memcached 와 Redis 란? Memcahced와 Redis는 Key-value 형태의 인-메모리 기반의 캐싱 시스템으로, 캐시 레이어로서 DB의 부하를 줄여주며, 주로 웹 어플리케이션의 응답 속도 개선을 위해 사용된다. 두가지 모두 사용하기 어렵지 않지만, Memcached는 Cache 서비스를 위해 설계된 반면, Redis는 좀더 다양한 용도에 효과적으로 사용 할 수 있도록 설계되었다는 차이가 있다. Memcached 특징 웹 서버에서 기존에 할당된 캐시 메모리를 초과시, 전체 할당된 메모리에서 유동적으로 사용 가능 Data Evicion 전략 : LRU (Least Recently Used) 알고리즘만 사용 Data Structure : String 형태만 지원 Persistance : Me..

DB/이론 2022.11.22

[DB] MongoDB Docker + Robo3T 셋팅

MongoDB , Robo3T 👉 MongoDB - 대표적인 NoSQL DB (링크) MongoDB Atlas: Cloud Document Database Cloud-hosted MongoDB service on AWS, Azure, and GCP www.mongodb.com 👉 Robo3T - MongoDB DBMS Tool (링크) Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo) Read by Dmitry Schetnikovich robomongo.org MongoDB Docker 명령어 # VOLUME 위치, USERNAME PASSWORD 임의 설정하기 $ docker run --name mongodb-container -v :/data..

DB/기본 실습 2022.11.13

[DB] Clustering, Sharding, Replication 차이

Clustering (DB 서버에 대한 고민) 우선, STORAGE는 DB 저장소를 DB 서버는 DB 작업을 하는 서버를 의미한다. 👉목표 서버를 여러개 만들어 DB SERVER가 죽는 것을 방지하자 👉 종류 1. 하나의 큰 STORAGE 안에 2 ACTIVE SERVER : 처리 속도는 더 빠르지만 병목현상 있을 수 있음 2. 하나의 큰 STORAGE 안에 ACTIVE-STANDBY : 하나는 대기 상태로 두어 병목현상 X REPLICATION (DB 손실에 대한 고민) 👉 목표 실제 데이터가 저장되는 저장소도 복제하여, 저장된 데이터 손실을 방지하자 👉 특징 MASTER-SLAVE 구조로 MASTER로 들어온 데이터를 SLAVE로 동기화하여 데이터를 백업 MASTER는 수정, 삽입, 삭제 역할 SLA..

DB/이론 2022.10.03

[DB] Replication 이란? (Feat. Mysql, Mongo)

Replication 이란? 복제본 데이터베이스를 운용하는 것 (=한 서버에서 다른 서버로 동기화 하는 것)을 Replication이라고 지칭 주로 DB 운용 상황에서 많이 사용되는데 데이터베이스(Master, 소스 서버), 복제된 데이터베이스(Slave, 레플리케이션 서버)라고 많이 부른다 Replication 사용 이유 Slave 데이터베이스는 Master 데이터베이스를 복제(Replication)하여 동일한 데이터를 가지게 됨 이유 1. 데이터 분산 부하 관리 Insert, Update, Delete 등의 작업 : Master 데이터베이스에서 처리 Select 등의 조회 작업 : Slave 데이터베이스에서 처리 ex) Scale-out 목적 트래픽 대응 ex) 데이터 분석의 경우 대량의 조회를 하는..

DB/이론 2022.10.03

[DB] Index란?

Index란? 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 Index가 효율적인 이유 모든 요소에 효율적으로 접근 할 수 있는 균형 적인 트리 구조와 트리 깊이의 대수 확장성 때문 대수확장성 : 트리 깊이가 리프 노드 수에 비해 느리게 성장하는 것을 의미 (ex. depth 1 추가시 node 당 4개 인덱스추가) Index 관리 DBMS에서 index는 항상 최신의 정렬된 상태로 유지 INSERT, UPDATE, DELETE가 수행시 인덱스에 대한 추가 작업 필요 INSERT: 신규 데이터에 인덱스 추가 DELETE: 해당 데이터 인덱스 삭제 UPDATE: 기존 인덱스 삭제 및 수정 데이터에 인덱스 추가 Index 장단점 장점 : 테이블 조회 성..

DB/이론 2022.08.11

[DB] Transaction 격리 수준 종류 (Isolation Level)

Transaction 격리 수준 이란? Transaction이 동시에 처리될 때 transaction끼리 얼마나 고립되어 있는지를 나타냄 RDBMS는 transaction의 격리 수준을 제어 가능하며 일반적인 DBMS는 READ COMMITTED나 REPEATABLE READ를 사용 (oracle, postgresql - READ COMMITTED / mysql - REPEATABLE READ) 격리 수준은 아래 4가지로 구분되며, 번호가 높아질 수록 트랜잭션간 고립 정도 ↑, 성능 ↓ 1) READ UNCOMMITTED 2) READ COMMITTED 3) REPEATABLE READ 4) SERIALIZABLE READ UNCOMMITTED 트랜잭션(A)의 변경내용이 COMMIT이나 ROLLBACK ..

DB/이론 2022.08.10