[Key]
[JOIN]
SELECT 컬럼 FROM A INNER JOIN B ON A.컬럼=B.컬럼
SELECT 컬럼 FROM A LEFT OUTER JOIN B ON A.컬럼=B.컬럼
SELECT 컬럼 FROM A RIGHT OUTER JOIN B ON A.컬럼=B.컬럼
SELECT 컬럼 FROM A FULL OUTER JOIN B ON A.컬럼=B.컬럼
SELECT 컬럼 FROM A CROSS JOIN B
SELECT 컬럼 FROM A, B
[SQL Injection]
1 = 1
같은 true문을 작성하여 무조건 적용되도록 수정한 뒤 DB를 마음대로 조작할 수 있다.[데이터베이스에서 인덱스를 사용하는 이유]
데이터베이스에서 인덱스를 사용하는 이유는 검색성능을 향상시키기 위함이다. 하지만, 실질적으로 검색성능을 향상시키기 위해서는 해당 쿼리가 INDEX를 사용하는지 카디널리티, Selectivity같은 요소들이 고려된 인덱스가 생성되어야 한다.
일반적인 경우 장점으로는 빠른 검색 성능을 들 수 있다.
일반적인 경우 단점으로는 인덱스를 구성하는 비용 즉, 추가, 수정, 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행된다.
따라서, 인덱스를 생성할 때 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야한다.
[트랜잭션]
트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위이다. 트랜잭션에는 여러 개의 연산이 수행될 수 있다.
트랜잭션은 수행 중 한 작업이라도 실패하면 전부 실패하고 모두 성공해야 성공이라고 할 수 있다.
[ACID]
[트랜잭션 격리 수준]
트랜잭션 격리수준은 고립도와 성능의 트레이드 오프를 조절한다.
[정규화]
정규화는 데이터의 중복방지, 무결성을 충족시키기위해 데이터베이스를 설계하는 것을 의미한다.
[RDBMS vs NOSQL]
RDBMS는 데이터베이스를 이루는 객체들의 릴레이션을 통해서 데이터를 저장하는 데이터베이스이다. SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요하다.
장점은 명확한 데이터 구조를 보장하고, 중복을 피할 수 있다.
NOSQL은 RDBMS에 비해 자유로운 형태로 데이터를 저장한다. 또한 수평확장을 할 수 있고 분산처리를 지원한다. 다양한 형태의 NOSQL 데이터베이스가 있고, 대표적으로 key-value store, bigtable등이 있다.
둘은 대체될 수 있는 것이 아닌, 각각 필요한 시점에 적절히 선택해서 사용해야한다.
[Redis]
Redis는 key-value store NOSQL DB이다. 싱글스레드로 동작하며 자료구조를 지원한다. 스프링에서는 세션을 관리하거나, 캐싱을 하는데 사용된다.
[Redis와 Memcached의 차이]
Redis는 싱글 스레드 기반으로 동작하고, Memcached는 멀티 스레드를 지원해서 멀티 프로세싱이 가능하다.
Redis는 다양한 자료구조를 지원하고 Memcached는 문자열 형태로만 저장한다.
Redis는 여러 용도로 사용할 수 있도록 다양한 기능을 지원한다. 스냅샷, AOF로그를 통해 데이터 복구가 가능하다.
[Elastic Search]
Elastic Search는 자바로 개발된 오픈소스 검색엔진이다. 보통 단독으로 사용하기보다는 ELK스택이라고 불리는 Logstash, Kibana, Beats를 추가적으로 사용한다.
Inverted Index구조로 데이터를 저장해서, 전문 검색시에 RDBMS에 비해 뛰어난 성능을 보장한다.
데이터 저장, 문서 검색, 위치 검색 등 다양한 용도로 사용할 수 있다.
[CAP이론]
CAP이론은 분산 환경에서 모두를 만족하는 시스템은 없다는 이론이다.