데이터베이스 인덱스의 자료구조 인덱스는 여러 자료구조를 이용해서 구현할 수 있는데, 대표적으로 해시 테이블(Hash Table)과 B+Tree가 있다. 1. 해시 테이블(Hash Table) 해시 테이블은 key와 value를 한 쌍으로 데이터를 저장하는 자료구조이다. (key, value)로 쌍을 표현하며, key값을 이용해 대응되는 value값을 구하는 방식이다. 해시 충돌이라는 변수가 존재하지만 평균적으로 O(1)의 매우 빠른 시간만에 원하는 데이터를 탐색할 수 있는 구조이다. 해시 테이블을 이용한다면 인덱스는 (key, value) = (컬럼의 값, 데이터의 위치)로 구현하는데, 해시 테이블은 실제로 인덱스에서 잘 사용되지 않는다. 그 이유는, 해시 테이블은 등호(=) 연산에 최적화되어있기 때문이..
1. B-Tree란? B-Tree는 탐색 성능을 높이기 위해 균형 있게 높이를 유지하는 Balanced Tree의 일종이다. 모든 leaf node가 같은 level로 유지되도록 자동으로 밸런스를 맞춰준다. 자식 node의 개수가 2개 이상이며, node 내의 key가 1개 이상일 수 있다. node의 자식 수 중 최댓값을 K라고 하면, 해당 B-Tree를 K차 B-Tree라고도 한다. B-Tree의 조건은 다음과 같다. 1. node의 key의 수가 k개라면, 자식 node의 수는 k+1개이다. 2. node의 key는 반드시 정렬된 상태여야 한다. 3. 자식 node들의 key는 현재 node의 key를 기준으로 크기 순으로 나뉘게 된다. 4. root node는 항상 2개 이상의 자식 node를 갖..
자바의 연산자에 대해 알아보겠습니다. 산술 연산자 산술이란 우리가 흔히 말하는 더하기, 빼기, 곱하기, 나누기를 수행하는 연산을 말한다. 자바에는 사칙연산과 나머지 연산을 포함한 총 다섯 가지의 산술 연산자가 있다. 몫을 구하는 연산자와, 나머지를 구하는 연산자가 따로 존재하는 것을 유의하자. +, -, *, /, % 🚨 주의사항 정수형 일 때 0으로 나누거나 모듈 연산을 수행하게 되면 런타임에 오류가 발생하기 때문에 컴파일 타임에 확인할 수 없다. 또한, 자료형의 크기에 따른 오버플로우 문제도 조심해야 한다. 예를들어 중간 값을 계산하는 로직의 경우 int middleValue = (a + b) / 2 와 같이 구하고는 하는데 이는 overflow가 발생할 수 있다. 이 때 int middleValue..
자바의 데이터 타입과 변수 그리고 배열에 대해 알아보겠습니다. 프리미티브(Primitive) 타입 종류와 값의 범위 그리고 기본값 Primitive(기본형) 타입의 종류에는 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 총 8개의 값이 있다. 프리미티브 타입(Primitive Type)과 레퍼런스 타입(Reference Type) 프리미티브 타입(Primitive Type). 기본형 타입, 또는 원시 타입이라고 한다. 프리미티브 타입이란 정수, 실수, 문자, 논리, 리터럴 등의 실제 데이터 값을 저장하는 타입이다. 레퍼런스 타입(Reference Type). 참조 타입이라고도 한다. 레퍼런스 타입이란 객체(Object)의..
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가에 대해 알아보겠습니다. JVM(Java Virtual Machine)이란 ? JVM은 Java Virtual Machine의 약자로써, 직역하면 '가상머신, 자바를 실행하기 위한 가상 기계(컴퓨터)' 라고 할 수 있다. (가상머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어적으로 구현한 것이다) Java는 운영체제(OS)에 종속적이지 않다는 특징을 가지고 있다. 운영체제에 종속받지 않고 실행되기 위해선 운영체제 위에서 Java를 실행시킬 무언가가 필요한데, 그게 바로 JVM이다. 쉽게 말해 윈도우를 사용하던 리눅스를 사용하던 어떤 운영체제를 쓰는지 상관없이 JVM이 설치되어 있다면 JAVA 애플리케이션을 실행할 수 있다. 컴파일..
데이터베이스에서 인덱스를 사용하는 이유와 장단점에 대해 알아보겠습니다. 인덱스(Index)란? [ 인덱스의 개념을 설명할 때 가장 쉬운 방법은 책의 예를 드는 것이다 ] 예를 들어 책에서 "폭포수 모델"이라는 단어를 찾는다고 했을 때 맨 앞에서부터 한장 한장 "폭포수 모델"이라는 단어를 찾을 수도 있지만, 책의 맨 뒤에 있는 "찾아보기"를 이용하여 "폭포수 모델"을 찾을 수 있다. "찾아보기"는 가나다 순서로 이미 정렬되어 있어서 "ㅍ" 부분을 찾아보면 쉽게 "폭포수 모델" 단어를 찾을 수 있고, 그 옆에 페이지 번호가 적혀 있어서 그 페이지를 펼치면 바로 원하는 내용을 찾을 수 있다. 그런데 만약 책 뒤에 "찾아보기"가 없다면 어떨까? 어쩔 수 없이 책의 처음부터 끝까지 단어를 찾아야 한다. 만약 책의..
쿠키,세션과 JWT의 특징과 차이점을 알아보겠습니다. 1. HTTP 특성 쿠키와 세션, JWT를 이해하기 위해서는 먼저 HTTP의 비연결성 및 무상태성 이라는 특성을 알아야합니다. [ 비연결성 (Connectionless) ] 클라이언트와 서버가 요청과 응답을 한 번 주고받으면 연결을 끊어버리는 특징 [ 무상태성(Stateless) ] 통신이 끝나고 연결이 끊어지면 서버에서는 클라이언트의 상태정보를 유지하지 않는 특징 만약 서버가 다수의 클라이언트와 연결을 계속 유지한다면, 이에 따른 자원 낭비가 심해집니다. 비연결성 및 무상태성의 특징을 가진다면 불필요한 자원 낭비를 줄일 수 있다는 장점이 있습니다. 그러나 서버는 클라이언트를 식별할 수 없다는 단점 또한 존재합니다. 로그인을 하더라도 다음 요청에서는 ..
쉘이란? 사용자 명령어 해석기 사용자가 프롬프트에 입력한 명령을 해석해서 운영체제에게 전달 쉘은 커널과 사용자간의 다리역할(인터페이스)을 하는 것으로 사용자로부터 받은 명령을 해석하고 프로그램을 실행하는 역할 쉘의 기능 사용자와 커널 사이에서 명령을 해석해 전달하는 명령어 해석기 기능 쉘 자체 내에 프로그래밍 기능이 있어 프로그램을 작성할 수 있다. 쉘 프로그래밍 기능을 이용하면 여러 명령을 반복적으로 수행하는 작업을 하나의 프로그램으로 제작 할 수 있다. 이런 쉘 프로그램을 쉘 스크립트 라고 부른다. 사용자 환경 설정의 기능 - 초기화 파일 기능을 이용해서 사용자의 환경을 설정할 수 있다. 로그인 할 때 이 초기화 파일이 실행되어 사용자의 초기 환경이 설정된다. 쉘을 공부하는데 있어 가장 중요한 것 중..