멋진 개발자/DB

트랜잭션트랜잭션(Transaction)이란 논리적인 작업 단위로 여러 개의 작업을 하나로 묶은 실행 유닛이다.각 트랜잭션은 하나의 특정 작업으로 시작해서 묶여 있는 모든 작업들이 모두 완료되어야 정상적으로 종료한다. (Commit 실행)만약, 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 해당 트랜잭션에 속한 모든 작업은 실패한 것으로 판단한다.(Rollback으로 모든 작업 취소) 트랜잭션은 성공 또는 실패 두 가지 결과만 존재하며 미완료된 작업 없이 모든 작업을 성공해야 한다.이러한 트랜잭션은 ACID라는 속성을 가지고 있어야 한다. ACID데이터베이스 내에서 발생하는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질이다.원자성(Atomicity), 일관성(Consisten..
복합키복합키란 두 개 이상의 칼럼을 하나의 key로 지정하는 것을 말한다.PK(기본키)는 한 테이블에 하나만 존재해야 하는데, 꼭 한 테이블에 칼럼 하나만을 기본키로 지정할 수 있는 것은 아니다. 복합키 설정CREATE TABLE student ( id bigint primary key, name varchar primary key);위와 같이 SQL 구문을 작성하게 되면 오류가 발생한다. CREATE TABLE student ( id bigint not null, name varchar not null, primary key(id, name));위와 같은 구문을 작성하게 되면 id, name 칼럼을 동시에 사용하는 복합기본키로 사용할 수 있게 된다. 주의사항복합키가 적용된 테이블에 데이터를 삽입을 할 ..
Cache(캐시)자주 사용하는 데이터의 값을 미리 복사해 놓는 임시 저장소를 캐시라고 한다.캐시는 저장공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다. 다음과 같은 경우에 캐시를 사용하게 되면 효과를 볼 수 있다.접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우 (서버의 균일한 API 데이터)반복적으로 동일한 결과를 반환하는 경우 (이미지, 썸네일 등)보통 Redis를 캐시로 많이 사용한다.싱글스레드로 원자성을 보장하고 NoSQL로 데이터의 입출력이 빠르기 때문이다.Redis에 대한 자세한 포스팅 : https://skroy0513.tistory.com/58캐싱전략캐시를 사용할 때는 '읽기 전략', '쓰기 전략'이 존재한다.읽기 전략에는 'Look Aside', 'Read Throu..
JOINJOIN은 두 개 이상의 테이블을 연결 지어서 데이터를 조회하는 것이다. 관계형 데이터베이스는 모든 정보를 하나의 테이블에 저장하는 것이 아니라, 데이터가 정규화되어 여러 테이블에 분산되어 있다.데이터가 여러 테이블에 흩어져 있기 때문에 사용자가 원하는 데이터를 찾기 위해서는 여러 테이블을 다 조회해야 한다. JOIN은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 원하는 정보만 가져와 가상의 테이블처럼 만들어서 데이터를 조회하는 것이다.예시EMP테이블에는 사번, 이름, 소속부서번호가 있다.DEPT 테이블에는 부서번호, 부서명이 있다.아래와 같이 EMP테이블에서 사원의 이름을 가져오고, DEPT테이블에서 그 사원이 소속된 부서명을 조회해야 한다.JOIN은 EMP테이블과 DEPT테이블의 각각의 행..
인덱스(index)란? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 우리가 백과사전에서 원하는 정보를 찾기 위해서 맨 첫 장부터 하나씩 찾아가게 된다면 오랜 시간이 걸리기 때문에 책의 맨 앞에 색인을 추가하는데, 데이터베이스의 인덱스는 이 색인과 같다. 이처럼 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 전체 테이블을 스캔(Full Scan)하는 것이 아니라, 인덱스를 사용하여 검색 대상 레코드의 범위를 줄일 수 있다. 이는 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시킨다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그 이유는 해당 연산을 수..
Oracle과 MySQL은 많은 DB 툴 중에서 양대산맥이 아닐까 싶다. 나는 학원에서 처음 DB에 대해서 배울 때 Oracle을 배우고 프로젝트를 진행할 때 MySQL을 사용하였다. (이유는 단지 둘 다 경험을 해보고 싶어서 두 개 다 사용해 보았다. oracle은 MacOS를 정식으로 지원하지 않아서 docker를 통해 겨우겨우 실행한 경험이 있다...) 보통 Oracle은 충분한 예산과 복잡한 비즈니스를 요구하는 큰 프로젝트를 주로 수행하는 대기업이, MySQL은 돈이 적거나 중소기업들이 선호한다. 그럼 이 2가지 DB관리 툴에 대한 특징과 차이점이 무엇이 있는지 알아보자. Oracle 미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용..
where과 having은 데이터 검색을 할 때 조건을 필터링하기 위해 사용된다. 하지만 동일한 기능을 하지 않기 때문에 상황에 맞춰 사용해야 한다. WHERE select * from 테이블명 where 조건절 항상 from절 뒤에 위치해야 하고 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있다. HAVING select * from 테이블명 group by 필드명 having 조건절 항상 group by 뒤에 나오며 where 절과 마찬가지로 비교연산자들을 사용해서 조건을 줄 수 있다. group by 같은 값을 가진 행을 그룹 짓는 SQL 명령어이다. COUNT(), MAX(), SUM() 등 집계함수와 함께 사용한다. 비교 where은 기본적인 조건절로서 우선적으로 모든 필드에 ..
세 가지 명령어 모두 "삭제" 기능을 하지만, 각각 삭제하는 범위와 특징이 다르다. 하나씩 알아보도록 하자 DELETE WHERE절을 사용하여 테이블의 데이터를 하나하나 선택하여 제거하는 방식 WHERE절을 사용하지 않고 모든 테이블의 데이터를 삭제하더라도 내부적으로는 하나하나 선택하여 삭제를 진행한다. 잘못 삭제하였을 경우 commit을 하기 전이라면 ROLLBACK을 통해 되돌릴 수 있다. ROLLBACK을 하기 위한 정보를 기록하기 때문에 TRUNCATE보다는 느리다. 행을 삭제하는 것이기 때문에, 존재하는 데이터의 양이 많다면 삭제될 때마다 많은 system 자원을 소모한다. 원하는 데이터, 행만 삭제할 때는 DELETE를 사용, 전체 데이터, 행을 삭제하고 싶으면 TRUNCATE를 사용한다. D..
Redis란? 풀네임에서 알 수 있듯이 Dictionary(key-value) 구조로 데이터를 저장하고 관리하는 서버를 말한다. Redis 공식 홈페이지(https://redis.io/docs/about/)에서는 Redis를 이렇게 소개하고 있다. Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. Redis는 데이터베이스, 캐시, 메세지브로커 및 스트리밍 엔진으로 사용되는 오픈소스, In-Memory 데이터 구조 저장소입니다. Redis provides data structures such as strings, h..
Primary Key(기본 키) SQL 데이터베이스에서 특정 레코드를 유일하게 식별하기 위해 사용되는 필드 또는 필드의 집합 테이블에서 각 레코드를 식별하는 데 사용되며, 테이블의 각 레코드에는 Primary Key 값이 반드시 있어야 한다. 특징 각 레코드에 대해 고유하기 때문에 중복이 불가능하다. NULL 값이 허용되지 않는다. 레코드를 식별하는 데 사용, 테이블 당 하나의 기본키만 가질 수 있지만 경우에 따라 1개 이상의 기본키를 정의할 수도 있다. (다수 열 기본 키, 복합 기본 키) 생성 // 방법 1 CREATE TABLE USER ( id INT PRIMARY KEY, name VARCHAR, password VARCHAR ); // 방법 2 CREATE TABLE USER ( id INT ..
0. SQL SQL(Structured Query Language)는 구조적인 질의 언어라는 것이다. SQL을 통해서 데이터베이스의 제어, 관리를 할 수 있다. SQL은 하는 역할에 따라 3가지로 나눌 수 있다. DDL : 데이터 정의 언어 DML : 데이터 조작 언어 DCL : 데이터 제어 언어 1. DDL(Database Definition Language) 데이터 베이스 스키마를 정의하거나 조작하기 위해 사용되는 언어이다. 스키마, 도메인, 인덱스, 뷰, 테이블 등을 다음 명령어로 정의, 변경, 삭제한다. CREATE : 새로운 데이터베이스를 생성 ALTER : 기존 데이터베이스 객체 변경 DROP : 기존 데이터베이스 객체 삭제 TRUNCATE : 데이터를 되돌릴 수 없도록 제거 2. DML(Da..
쿼리 최적화 SQL을 최적화할 수 있는 7가지 방법 1. SELECT 시에는 꼭 필요한 칼럼만 불러와야 한다. 많은 필드 값을 불러올수록 DB느 더 많은 로드를 부담하게 되기 때문에 칼럼 중에 불필요한 값을 가진 필드가 있다면 과감히 제외하고, 필요한 열만 불러오는 것이 좋다. 2. 조건 부여 시, 별도의 연산을 걸지 않는 것이 좋다. Full Table Scan을 하는지 파악을 하면서 쿼리를 작성하는 것이 좋다. 예) 평점이 2점대를 찾을 때(만점이 5점) FLOOR(avg/2) = 2 → Full Table Scan을 한 뒤 연산 진행 avg BETWEEN 4 and 5 → index를 활용해서 빠른 탐색 가능 3. LIKE 사용 시 와일드카드 문자열(%)을 String 앞부분에는 배치하지 않는 것이..
정규화(Normalization) 정규화란 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 즉, 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 이상현상(Anomly) 삭제 이상 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상 "장미란"이라는 학생의 정보를 지울 경우 "체육관 103" 강의실 정보도 같이 사라지게 되어 다른 튜플들이 "체육관 103"을 사용하지 못하는 경우에 발생한다. 삽입 이상 튜플 삽입 시 특정 속성에 해당..
Database, DBMS, SQL Database란 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합 DBMS(DataBase Management System)란 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어 SQL(Strucured Query Languate)란 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템이서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안 RDBMS DBMS 앞에 R이 붙어있는데, 이 R은 Relational의 약자로 RDBMS는 관계형 데이터베..
개발의 WinG
'멋진 개발자/DB' 카테고리의 글 목록