Backend/DataBase

서론 최근 회사에서 하나의 DB를 두개의 DB로 분리하는 멀티 DB의 적용을 진행하고 있습니다. 그 작업을 진행하면서 가장 먼저 한 작업한 일은 각각의 DB에 들어가 있는 테이블들이 FK로 연결되어 있는 부분을 체크하고 FK를 해제해야 하는 것을 해제 해야 하는 일이였습니다. 1번 DB에 A테이블, 2번 DB에 B 테이블이 있다고 했을때 A테이블에 B테이블의 FK가 있을 경우 2번 데이터베이스로 이전을 하지 못하며, 사실상 FK자체를 적용할수가 없다고 생각해주시면 좋을거 같습니다. FK(Foreign Key)란? 외래키라고 부르며, RDBMS에서 관계를 지정할때 사용합니다. FK를 사용하는 이유는 FK와 PK간의 일관성을 유지하기 위함입니다. 외래키 설정 방법은 아래와 같습니다.여기서 child_tabl..
서론 도커를 사용해 MySQL을 띄우는 작업을 해볼 예정입니다. docker-compse.yml을 이용해 협업자에게도 같은 환경을 제공해줄수 있다. 도커를 사용하는 이유는 팀워크에서의 이점이 있기 때문이다. 프로그램은 버전에 따라 많은 차이점을 가질수가 있다. 다른 버전을 쓰면 다른 협업자에겐 오류가 나는 경우도 있다 보니, 그런 부분을 맞추기 위해 docker를 사용해 컨벤션을 지켜본다. docker-compose 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능이다. compose 파일을 준비하여 커맨드를 1회 실행하는 것으로, 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시키는 것이 가능하다. MySQL을 위한 docker-comp..
SQL의 DDL, DML, DCL, TCL 서론 SQL(Structured Query Language)란 구조적 질의 언어라는 의미로 질의 언어를 통해 데이터베이스를 제어, 관리 할 수 있다. SQL은 DDL, DML, DCL로 나눌 수 있습니다. 각 언어의 특징을 살펴보도록 하겠습니다. 해당 모든 테스트는 MySQL 8.0.17 환경에서 진행합니다. DDL(Data Definition Language) - 데이터 정의 언어 데이터베이스를 정의하는 언어로 데이터베이스를 생성, 수정, 삭제 등의 역할을 하는 언어 CREATE 데이터베이스, 테이블을 만드는 역할 데이터베이스 생성 CREATE database test 테이블 생성 CREATE table user ( user_id int not null, na..
🤔 CASE WHEN ~ THEN ~ ELSE END 서론 Oracle, MySQL 등 모든 DBMS에서 가능하며 프로그래밍 언어에서 If ~ else if ~ else와 같은 CASE WHEN문에 대해서 알아보도록 하겠습니다. 해당 예제는 프로그래머스의 중성화 여부 파악하기 를 통해 알아보도록 하겠습니다. 형식 CASE 컬럼명(생략가능) WHEN 조건식 THEN 결과 WHEN 조건식 THEN 결과 ELSE 결과 END WHEN절에는 해당 조건을, THEN에는 true일 경우에 결과를 ELSE는 모든 조건을 해당하지 않을 경우 결과값을 적어주시면 됩니다. 만약 ELSE 부분이 없고 조건이 true가 아니라면 NULL을 반환하게 됩니다. 예제 위의 문제에서 중성화 여부(SEX_UPON_INTAKE에서 Ne..
ORACLE, MYSQL 날짜에서 각 값들을 추출하기 🧐 서론 프로그래머스의 입양 시간 구하기(1) 문제로 DATETIME 컬럼의 값에서 시간만 추출해서 데이터를 처리해야 하는 문제였습니다. 이 문제를 풀려면 DATETIME의 값을 시간을 추출하는 방법을 알아야 했으며, 이번 기회에 전체적으로 한번 알아보자고 느꼈습니다. 근데 큰 문제는 ORACLE과 MYSQL과 추출방법이 다르다는 점입니다. 아래에서 각자 살펴보도록 하겠습니다. 모든 테스트는 저 위의 프로그래머스 문제를 기준으로 합니다.(프로그래머스 문제를 직접 실행해 값을 살펴보도록 하겠습니다. 아래의 사진처럼 데이터가 있습니다.(아래 사진보다 더 많은 데이터가 있습니다.) 보기 편하도록 GROUP BY, ORDER BY를 사용합니다. MySQL 개..
Transaction의 성질 - ACID 트랜잭션이란? 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합 예를 들어 계좌이체를 했을 경우 A 계좌에서 10만원을 인출하고 B 계좌에서 10만원을 입금되었을 경우 A 계좌 인출 시 문제가 생겼을 경우 원래 상태(B 계좌에 입금이 되면 안된다.)로 돌아가야 하고 B 계좌 입금시 문제가 생겼을 경우 원래 상태(A 계좌로 인출이 되면 안된다.)로 돌아가야 한다. 이러한 트랜잭션은 다양한 데이터 항목들을 접근하고 갱신하는 프로그램의 수행 단위가 된다. 트랜잭션은 아래의 ACID 성질이라고 하는 것으로 설명된다. 트랜잭션의 성질 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 성질 A - Atomicity(원자성) All or Notihng 모든 트랜잭션 연산..
개념 모델 vs 논리모델 vs 물리모델 개념 모델이란? 데이터 모델의 첫 단계로 고객의 요구사항을 수집, 분석해 전체적인 모양을 결정짓습니다. 이 단계에서는 전체 모델에서 중요한 골격이 되는 엔티티와 관계 위주로 모델링이 됩니다. 엔티티, 관계 위주의 모델링을 통해 전반적인 골격을 파악하는데 중점을 두기 때문에 데이터 모델의 속성 표현을 불필요할 수도 있습니다. 사용자가 요구하는 데이터의 범위 및 구조를 용이하게 확인이 가능하며 사용자와 함께 검토를 통해 신규 시스템에 해당 요구사항을 반영할지 여부를 결정하여 개발범위를 정하는데도 도움을 줍니다. 논리 모델이란? 데이터베이스 설계 프로세서의 Input으로 비지니스 정보의 구조, 규칙등을 명확하게 표현해야 합니다. 즉, 데이터 모델링이 최종적으로 완료되어 ..
Data Base 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임 SQL(Structured Query Language) 데이터 베이스에서 사용하는 쿼리 언어로 데이터를 검색, 저장, 수정, 삭제 등이 가능하다. 수직적 vs 수평적 확장 수직적(vertical) 확장(Scaling) 단순히 데이터베이스 서버의 성능을 향상시키는 것입니다.(예를 들어, CPU 업그레이드) 수평적(Horizontal) 확장 (Scaling) 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산된다. 따라서 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동한다. RDBMS(Relational Database Management System) 관계형 데이터 베이스로 데이터를 구성하는데 필요한 방법 중..
Seyun(Marco)
'Backend/DataBase' 카테고리의 글 목록