db 26

TypeScript TypeORM Migration 정리

TypeORM 사용중 migration 기능을 대충 본것 같아 관련한 기능을 정리해봤다. 모델 변경사항을 데이터 베이스에 동기화해야한다. 일반적으로 데이터베이스에서 데이터를 가져오면 프로덕션에서 스키마를 동기화할 때 사용하는 synchronize: true 는 안전하지 않다. 마이그레이션은 데이터베이스 스키마를 업데이트하고 기존 데이터베이스에 새로운 변경사항을 적용하기 위해 SQL 쿼리가 포함된 단일 파일이다. import { Entity, Column, PrimaryGeneratedColum } from "typeorm" @Entity() export class Post { @PrimaryGeneratedColum() id: number; @Column() title: string; @Column() ..

[삽잡이::db] PHP에 Mongo DB 연동하라~!

PHP와 Mongo DB를 연동해야할 상황에 쳐했었습니다. 여기서 Mongo DB는 NoSQL에 속하는 DB중 하나를 뜻합니다~ Mongo DB...간략하게 설명하자면 관계형 DB와 다른 형식의 DB이다.JSON Type의 데이터 저장구조를 가지고 있는데,기회가 되면 따로 정리할 시간을 가졌으면 하군요~ 아무튼... PHP에서 Mongo DB를 사용하기 위해서인터넷을 뒤지고 있었는데요~좋은 자료가 있더군요!(참고_ How to Configure Mongo DB With PHP for XAMPP On Windows) 저는 윈도우상에서 xampp 를 사용하고 있었기에,윈도우 환경에서 Mongo DB 연동이 필요했습니다. 간단하게, 현재 PC(Server)에 설치되어있는 PHP Version을 확인하시고~ 요..

[삽잡이::일기] SQL을 공부하며

요즘... Query문을 작성하며 성능이 멍멍이 같이 나오는멍멍이같은 경험을 하고 있습니다. 하.. 멍멍... 그래서 SQL 관련 서적을 보며이리 저리 신기해하고 바꿔봐야겠다는 열정을 태우며 있는데,쿼리 튜닝에 대한 중요성에 대해서 조금씩 느끼게 되었습니다. 쿼리 튜닝의 경우 각각의 DBMS마다 특성이 있고,자체적으로 지원하는 쿼리들이 있기 때문에 SQL 서적만으로는없지않아 부족한 감을 느낄 수 있다는 사실을 알게되었습니다. 결론은 서적이 정석이겠지만, 구글링과 병행하며쿼리 고수가 되어보자는 것!

[삽잡이::DB] Query Analyzer

EXPLAIN을 사용하여 explain plan 즉, 내가 작성한 Query문이 어떤식으로 진행될 것인지 실행 계획에 대해 확인할 수 있습니다. ... SUN에 인수된 MySQL에서는 EXPLAIN과는 같으나 시각적으로 좀 더 보기 편한 기능을 제공해줍니다.바로, MySQL Monitor인 Query Analyzer 입니다. [출처_ MySQL]EXPLAIN 만으로도 쿼리 분석은 가능하지만,비쥬얼하게 쿼리 분석을 할 수 있다는 것입니다.우와아~~

[삽잡이::DB] Index를 타라~

인덱스는 '색인'을 뜻합니다. (출처_ 네이버 백과사전) DB에서는 수 없이 많은 데이터속에서 빠르게 검색하기 위해 '인덱스'를 사용하게 됩니다.인덱스란, 원하는 데이터를 쉽게 찾을 수 있게 도와주는 녀석이라는 것입니다.제 주변에서는 흔히들 '인덱스를 타다'라고들 하더군요.. 오빠 차 뽑았다~ 널 데리러 가~ 아무튼, 우리가 만들어놓은 DB 테이블을 기반으로 인덱스를 생성할 수 있습니다. 모든 DBMS는 B*Tree 인덱스를 기본적으로 제공한다고 합니다.(출처_ dbguide.net) 나무를 뿌리부터 거꾸로 세워둔 형태의 구조입니다.어지럽겠다~~ 가지역할을 수행하는 Branch Block은 나무와 같이 분기를 목적으로 사용되고,가지에 달려있는 잎사귀와 같은 Leaf Block을 가리키는 포인터를 가지고 ..

[삽잡이::sql]mysql 테이블을 가지고 놀자! ALTER TABLE

기존에 존재하는 테이블에깜빡하고 하나의 컬럼을 빼먹은 적이 있습니다. 어떻게해야할까요? 다시 만들어야될까요?그러기에는 기존에 존재하는 데이터들이 너무 아까웠습니다. 물론, 다른 방법들도 존재하지만,컬럼을 추가하고 앞으로 들어오는 데이터에는추가된 컬럼의 값도 저장하기로 결정하였습니다. 좋아좋아~ 추가를 해보자~ '변하다', '바꾸다' 등의 실제 의미를 가지고 있는 ALTER 명령어는말 그대로 DB의 구조를 변경하는데 도움을 주는 녀석입니다. 그 중에서 우리는 Table에 Column을 추가하는 것이니ALTER TABLE 명령어를 사용하면 되겠지요. 1ALTER TABLE shovelman_info ADD COLUMN nickname varchar(25) NOT NULL;cs 이처럼 간단하게ALTER TAB..

[삽잡이::sql] 테이블을 복사 그리고, Index의 중요성

똑같은 데이터를 가지고 테스트할 일이 있어서테이블을 복사하고자 시도했었습니다. (그냥 dump로 복사할껄...) 1CREATE TABLE NEW_테이블명 AS SELECT * FROM OLD_테이블명cs select 문 안에 들어있는 테이블의 데이터를 복사하여새로운 테이블에 붙여넣을 수 있습니다. 참고로 구조만 복사할 경우에는 LIKE 를 사용하시면 됩니다.이렇게요~! 1CREATE TABLE NEW_테이블명 LIKE OLD_테이블명cs 간단하지 않습니까? 뭐야 쉽네~ 별거 없네~ 그런데 이렇게 복사한 테이블을 사용하여테스트를 진행했을 때에는엄청난 혼란만 키웠을 뿐입니다. 예... 쿼리가... 너무 오랫동안 실행하고 있어서....찾아봤더니!!!! 기존에 Index를 탔었는데,이 복사한 Table에서는 I..

[삽잡이::DB] 중복을 없애고 테이블을 최소화하라! 정규화(normalization)

학부생 때는 잘 느끼지 못했는데 지금 와서 느끼는것은 Query문도 잘못 실행하면 오랫동안 기다려야하는 사실입니다. 진짜 한번 잘못 실행했다가....언제까지 하나 보자 하고 화장실을 다녀오고도 무려 10분을 더 기다렸던 기억이.... 오버같죠? 진짜입니다. 그래서 저는 이제 Query문을 실행하기전에항상 EXPLAIN 을 붙여 어떤식으로 Query문이 실행될지 살펴본답니다. Index를 타나 안타나 살펴보는건데.... 아무튼... 왜 이런 썰을 풀었을까요? 예 그렇습니다.이번 시간에는 정규화(Normalization)에 대해서 알아보려고 하기 때문입니다. 사실 위의 썰과 정규화는 뭐... 그다지 정확히! 관련이 있다고 말씀드리긴 힘든데요.... 그냥 말하고 싶었던 것이구요... 아무튼... 정신차려! 삽..

[삽잡이::DB] 데이터 모델링 과정

저는 프로그래밍 세계와 일상 세계는 다르지 않다고 생각합니다.일상 세계를 프로그래밍 세계로 옮겨 놓을 수 있지요. 현실 세계에 있는 무언가를분석하여 요구조건을 명세하고 개념적으로 설계(ER Model)를 할 수 있습니다. ER Model이란, Entity 즉, 개체들간의 Relation이라는 관계를 도식화 한 Model을 의미합니다.개체들간의 관계! 이 개체는 '사람'이 될 수 도 있고, '사물'이 될 수도 있고이 세상에 존재하는 고유하게 식별할 수 있는 무언가를 개체라고 부릅니다! 이 개체들간의 관계를 도식화하면 ER Model이라고 부르는 것이지요. 예를 들어 이런거에요 아~ 이런거구나~! 이렇게 개념적으로 설계를 한 내용으로 모델을 만들면개념적 스키마라고 부르게 됩니다. 이제 이렇게 설계한 모델을 ..

[삽잡이::sql] 데이터를 그룹핑해보자! group by

진정한 개발자가 되기위해!!! DB는 필수!!!! 그렇다는 것은 Query도 잘 작성해야겠지!?!? 예 그렇습니다.개발의 고수 삽잡이가 되기 위해!!!!이번에는GROUP BY에 대해서 살펴보았습니다 굳~ GROUP BY 구문을 사용하게 되면데이터들을 원하는 그룹으로 나눠줍니다. GROUP BY 구문에 작성된 컬럼은 기준이 되어 하나의 결과로 Groupping 시켜줍니다. 다음은 삽질의 명문 삽질고에 학생 DB입니다. 삽질고에서 사건 사고를 일으키는 학우들에게는어마무시한 벌점을 준다네요 어느날 삽질고에 교육청에서 직원이 오신다고하네요...그래서 평소 지저분했던 창고를 정리하기 위해 인력이 필요한 교장선생님은 벌점 평균이 가장 높은 반 학우들을 부르려고 하십니다. 교장 선생님은 과감하게 Qeury문을 작성하..