본문 바로가기

Database75

DataBase 선택 가이드 (짧) 관계형 데이터베이스 관리 시스템 종류: oracle, mysql, postgresql, ms server.. 특징: 정형화 데이터, ACID, SQL, 고정된 스키마, 비용, 수평적 확장(샤딩) 접합성 : 데이터의 완전성이 중요한 경우, 고도의 정형화 데이터 문서 저장소 종류 : 몽고 DB, Couchbase 특징 : 데이터를 JSON, BSON, XML에 저장, 비관계형, 유연한 스키마, 빠른 속도, 수평 확장 용이, ACID 준수 희생, 질의가 한 문서 내에서만 가능 접합성 : 비정형, 반정형 데이터가 있는 경우, 분석, 빠른 프로토타입 작업 키-값 저장소 종류 : Redis, Memcached 특징 : 키는 값에만 연관된 고유 식별자이다. 키는 DBMS에 허용하는 모든 것, 값은 blob으로 저장되.. 2023. 6. 15.
관계형 데이터베이스의 기본키로 UUID Type을 사용한다면 고려사항 데이터베이스의 기본 키의 유형을 결정하는 것은 장기적으로 매우 중요한 요소를 갖는다고 생각한다. 나는 기본 키 유형을 선택해야 할 때 보통 자동으로 증분 되는 자연수를 선택한다. 이는 가장 적은 공간을 사용하면서 unique 특성을 잘 지킬 수 있게 하는 아주 쉬운 충분조건이라고 생각하기 때문이다. 그러던 와중 미리 데이터베이스와 Node.js 기반의 백엔드 서버로 구성된 한 애플리케이션을 봐야 하는 일이 생겼는데, 이때 기본 키의 타입이 UUID인 것을 발견했다. 이를 설계한 사람은 왜 UUID Type을 사용해야 했는지 의도를 좀 알려고 관련 정보를 찾아본다. 우선 UUID 타입의 간단한 정의가 필요하다. Universally Unique Identifier이라는 약자로 표준 128 bit pseud.. 2023. 2. 3.
데이터 모델에 대한 좋은 방법 관계형 데이터베이스를 대상으로 데이터 모델을 설계할 때 정답은 없지만 정답에 가까운 방법은 존재한다. 오늘 오전은 그 방법에 대해 정리하려고 한다. 1. 기본키는 필수인가? 관계형 모델은 하나의 레코드가 다른 레코드와 식별되어야 한다. 그렇기 때문에 모든 테이블에는 칼럼 한 개 이상으로 구분된 기본키가 있다. 그런데 가끔 전달받은 데이터베이스의 테이블을 검토하다 보면 논리적으로 고유하다고 판단하여 PK 제약조건을 생성하지 않는 경우가 있다. 이는 상당히 위험해 보인다. 기본키 제약조건은 로우마다 유일한 값을 보장하며 null 값이 없다는 것을 보장해준다. 또 가끔 기본키 자체가 없는 경우가 존재한다. 물론 기본키 자체가 없는 테이블을 만드는 것도 규칙에 어긋나는 것은 아니다. 기본키가 없다고 해도 데이터.. 2022. 11. 26.
PostgreSQL Schema 리뉴얼된 서비스를 테스트 및 안전하게 배포하기 위한 여러 가지 작업이 존재하는데 이때 고려해야 하는 상황이 생겼다. 기존 프로덕션 서비스를 이용하는 데이터베이스 이관 테이블과 여러 칼럼이 변경되었으며 여러 인덱스 및 제약조건이 생겼다. 만약 이를 바로 운영 디비에 붙여버리면 앱의 이전 버전 사용자들은 오류가 발생한다. 따라서 기존 디비를 잠시 보존하고 신규 버전 앱 사용자들이 이용할 수 있는 버전의 데이터베이스가 필요했다. 또한 데이터 이관을 진행하기 위해 데이터 이관 스크립트를 작성하고 이를 테스트해야 한다. 배포 전 충분한 QA 테스트가 필요한 상황이라 리뉴얼이 반영된 전체 서비스를 구성해야 한다. 현재 팀에게 주어진 리소스는 EC2 인스턴스 한 개, RDB(운영, 개발), 로컬 PostgreSQL,.. 2022. 11. 23.
SQL 코딩테스트 연습 오랜만에 SQL 코딩 테스트가 하고 싶어졌다. https://school.programmers.co.kr/ 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 간단한 문제 풀이를 하려고 한다. 이번 목표는 SQL의 가독성을 신경 써서 작성하는 연습이다. 1. 강원도에 위치한 생산공장 목록 출력 FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요. SELECT FACTORY_ID, FACTORY_NAME, ADDRESS FROM FO.. 2022. 10. 17.
트랜잭션 격리 수준, 락, MVCC 트랜잭션 격리 수준 만약 트랜잭션에 대해 깊게 알아볼 일이 있다면 아마 격리 수준에 대해서 공부하지 않을까? 동시성에 대해서 고민해본다면 아마 트랜잭션들이 서로에 영향을 미치지 않도록 격리 수준을 설정해야 하기 때문이다. 이와 같이 격리 수준(isolation level)에 대해 ANSI 표준으로 정의해 놓은 것들이 있다. Read Uncommited Read Committed Repeatable Read Serializable 아래로 내려갈 수 록 격리 수준이 높다. 격리 수준이 높다는 것은 동시성은 감소하고 순차적으로 처리하지만 그만큼 안정성을 보장한다는 것을 의미한다. 반대로 격리 수준이 낮으면 동시성은 증가한다. 다만 격리 수준이 낮을수록 많은 문제가 발생할 수 있다. Read uncommitte.. 2022. 9. 16.
[유선생] SQL 개발자 (3) SQL을 작성하기 앞서 우리가 사용할 Relational Database Management System에 대해서 정리할 필요가 있다. 세상에는 수많은 데이터가 있고 현재 데이터를 보관하는 장소는 데이터베이스 서버라는 곳에 데이터를 저장한다. 이 데이터를 저장하는 곳은 여러 가지 콘셉트를 가지고 다양하게 존재한다. 관계형 데이터베이스 객체지향 데이터베이스 XML 데이터베이스 Key-Value Store 계층형 데이터베이스 이 중 관계형 데이터베이스 흔히 RDB라고 불리는 데이터베이스는 관계형 데이터 모델에 기초를 두었다. 관계형 데이터 모델이란 관계 대수(relational algebra)라는 것에서 착안되었는데 바로 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 나타낸다. 관계형 데.. 2022. 2. 12.
[유선생] SQL 개발자 (2) SQL을 공부하다 보면 정규화 및 반정규화라는 개념이 나오는데, 이는 상당히 어려운 개념이다. 데이터베이스만 잡고 살지 않는 이상 한 번의 공부로 익히기엔 양도 꽤 되고 적절한 예시를 찾아도 잘 이해가 되지 않기 때문이다. 이번 챕터는 정규화, 반정규화에 대해서 공부할 것이다. [정규화] * 엔터티 : 사용되는 데이터를 용도별로 그룹화된 식별할 수 있는 객체 엔터티를 정확성과 일관성을 유지하기 위해 작은 단위로 분리하는 과정이다. 정규화 시 얻는 이점은 다음과 같은데 조회 성능 향상, 입력, 수정, 삭제 성능의 향상을 기대할 수 있다. 정규화에는 규칙이 존재한다. 따라서 규칙에 맞는 엔터티를 정규화되었다고 표현할 수 있을 것이다. 1) 제1 정규형 - 모든 속성은 반드시 하나의 값만 가져야 한다. 실제 .. 2022. 2. 4.
SQL 개발자 [유선배] SQL 전문가 정미나 SQL전문가 정미나 안녕하세요, SQL전문가 정미나입니다. 이 채널의 궁극적인 목표는 전공자 포함 Database에 관심이 있는 초보자분들께 조금이나마 도움을 드리는 것입니다. 지금은 어떨지 모르겠지만 제가 학부생 www.youtube.com 매우 꼬꼬마 시절 현재 재직 중인 회사는 모든 비즈니스 로직과 부가기능을 대부분 SP를 활용한다. 데이터베이스를 극도로 활용해 애플리케이션을 만드는 구조인데, 이때 가장 필요한 건 데이터를 추출, 가공, 통계 또는 RDBS의 종류에 따른 고유의 기능, 인덱스, Batch, 패키지 등등 다양한 데이터베이스 기술에 기반한 개념이 필요했다. SQL을 정식으로 공부하지 않았다. 필요할 때만 개념과 동영상을 보면서 이해하고 적용했는데, 이때 .. 2022. 1. 23.
ORACLE SQL 날짜함수 날짜 함수 오라클에서는 쉽게 날짜를 관리할 수 있도록 여러 가지 함수를 제공합니다. 우리는 일반적으로 날짜에서 숫자를 빼기도 더하기도 날짜끼리 더하기도 빼기도 합니다. 오라클 또한 같은 원리로 날짜 계산을 합니다. 날짜 +- 날짜 = 날짜 날짜 +- 숫자 = 날짜 날짜 += 날짜 = 숫자 SYSDATE 시스템의 현재 날짜와 시간을 알려줍니다. 오라클은 시간을 OS로부터 가져옵니다. 따라서 오라클 DB가 설치된 서버는 OS에서 시간을 함부로 바꾸면 안 됩니다. CURRENT_DATE 세션 설정에 따른 시간입니다. SYSTIMESTAMP 시스템의 현재 날짜와 시간 그리고 밀리세컨드까지 포함합니다. CURRENT_TIMESTAMP 세션 설정에 따른 시간에 밀리세컨드까지 포함합니다. 하지만 출력 결과 연도와 월.. 2021. 11. 26.