본문 바로가기

전체보기101

DB Index 인덱스는 데이터베이스에서 테이블의 데이터를 효율적으로 검색하기 위해 사용되는 자료구조다. 책의 목차를 보고 원하는 페이지를 찾아가는 거 처럼, 인덱스는 특정 열(Column) 또는 열 조합의 값을 기반으로 데이터의 위치를 빠르게 찾아낼 수 있게 한다. 데이터베이스에서 인덱스는 성능을 크게 좌우하는 핵심적인 요소로 적절한 설계는 데이터 조회 성능을 획기적으로 향상 시킬 수 있다. 기본 동작 원리1. 데이터 조회 (인덱스가 없는 경우)데이터베이스는 쿼리에서 조건에 해당하는 데이터를 찾기 위해 테이블의 모든 행을 처음부터 끝까지 확인하는 **Full Table Scan**을 수행해야 한다.데이터의 양이 많을 수록 검색 시간이 오래 걸린다.2. 데이터 조회 (인덱스가 있는 경우)인덱스는 데이터 값을 기반으로 정.. 2024. 10. 4.
DB Redis 레디스는 오픈 소스 기반의 인메모리 데이터 구조 저장소다. 주로 캐싱, 세션 관리, 실시간 분석, 메세지 큐, 데이터 스트림 처리 등에 많이 사용된다. 실시간 성능을 필요로 하는 웹 애플리케이션, 대규모 트래픽 처리가 필요한 시스템, 빠른 응답 속도를 요구하는 환경에서 효과적이다.  특징인메모리 데이터 저장소레디스는 데이터를 메모리(RAM)에 저장하기 때문에 매우 빠른 속도를 가지고 있다. 데이터 읽기 및 쓰기 속도가 매우 빠르기 때문에 고성능이 요구되는 애플리케이션에서 사용하기 적합하다.다양한 데이터 구조 지원키-값, 문자열, 해시, 리스트, 셋, 정렬된 셋, 비트맵 등 다양한 데이터 구조를 지원한다. 레디스는 NoSQL DB다.지속성 제공레디스는 인메모리 저장소임에도 불구하고 데이터를 디스크에 지속적.. 2024. 10. 4.
DB Transaction 데이터의 무결성데이터베이스에서 데이터의 정확성, 일관성, 신뢰성을 보장하는 것을 의미한다. 트랜잭션은 데이터베이스의 무결성을 보장하는 핵심 매커니즘이다.  트랜잭션은 데이터베이스에서 하나의 작업 단위로 처리되는 일련의 연산들을 의미한다. 트랜잭션은 데이터베이스에 대해 일관성을 유지하면서 여러 작업을 안전하게 수행하기 위한 중요한 개념이다. ACID 특성을 기반으로 하여 데이터의 무결성과 신뢰성을 보장한다. 개념1. 데이터베이스에서 수행되는 하나 이상의 작업을 모아 하나의 논리적인 작업 단위로 취급하는 것 2. 모든 작업이 성공해야만 트랜잭션이 완료되고 그 결과가 데이터베이스에 반영됨 3. 트랜잭션 내의 작업 중 하나라도 실패하면 전체 작업이 취소(롤백)되어 데이터베이스의 상태가 트랜잭션이 시작되기 전으로.. 2024. 10. 4.
DB SQL & NoSQL SQL과 NoSQL은 각각 관계형 데이터베이스와 비관계형 데이터베이스를 가르킨다. 이 두가지 데이터베이스 시스템은 데이터를 관리하고 저장하는 방식이다르고 특징에 따라 적합한 상황에서 사용한다.  ㅇ SQL(Structure Query Language)관계형 데이터베이스(RDBMS)를 기반으로 하며, 데이터를 테이블(행과 열의 구조)로 저장한다. 정형화된 스키마를 가지고 있고, SQL이라는 구조화된 쿼리 언어를 사용하여 데이터를 조작한다. * 스키마란 데이터베이스의 구조와 제약을 정의하는 개념이다. 스키마는 데이터가 어떻게 저장되고 조작되는지를 설명하는 틀을 제공하며, 테이블, 열, 데이터타입 등의 구조적인 요소를 정의한다. 특징관계형 모델데이터를 테이블에 저장하며, 테이블 간의 관계를 정의할 수 있다. .. 2024. 10. 4.
JAVA Stack & Queue Stack과 Queue는 선형 데이터 구조다. 데이터를 삽입하고 삭제하는 방식을 정의하며, 특정 상황에서 효율적으로 데이터를 처리하기 위한 용도로 사용한다. 서로 다르게 동작하며, 동작 방식에 따라 적합한 사용 사례가 다르다. JAVA에서 Stack은 Class로 Queue는 인터페이스로 제공된다. ㅇ Stack개념스택은 LIFO(Last In, First Out) 구조다. 가장 나중에 추가된 데이터가 가장 먼저 처리되는 후입선출 구조다. 비유하자면 쌓아논 접시를 생각할 수 있다. 접시를 쌓을 때는 맨위에 접시를 올리고 꺼낼 때도 맨 위에서 꺼내기 때문이다. 주요 연산push : 스택의 맨 위에 데이터를 추가하는 연산pop : 스택의 맨 위에서 데이터를 제거하고 반환하는 연산peek : 스택의 맨 위에 .. 2024. 10. 4.
JAVA List, ArrayList, LinkedList List는 자바 컬렉션 프레임워크에서 제공하는 인터페이스로 순서가 있는 요소의 집합을 다루기 위한 자료 구조다.List 인터페이스를 구현한 대표적인 클래스로는 ArrayList, LinkedList, Vector등이 있다. ㅇ List의 특징순서 유지List는 요소가 추가된 순서를 유지한다. 따라서 요소를 삽입하면 삽입 된 순서대로 요소가 저장된다.중복 허용Set과 달리 List는 동일한 요소를 여러 번 저장할 수 있다. 같은 값의 요소가 리스트에 여러 번 존재할 수 있다.인덱스 기반 접근List의 요소는 배열처럼 인덱스를 사용하여 접근할 수 있다. 배열과 같이 0부터 시작한다. ㅇ List와 Array(배열)의 차이점동적 크기배열은 크기가 고정되어 있지만, List는 크기를 동적으로 조절할 수 있다. .. 2024. 10. 3.
JAVA Array(배열) 자바의 배열은 동일한 타입의 여러 값을 하나의 변수에 저장할 수 있는 자료구조다. 배열은 고정된 크기를 가지며, 한 번 크기가 설정되면 변경할 수 없다. 인덱스를 통해 각 요소에 접근할 수 있다. ㅇ 배열의 특징동일한 타입의 값만 저장 가능 배열은 같은 데이터의 타입만 저장할 수 있다. 배열을 선언할 때 지정한 데이터의 타입과 같은 값만 저장할 수 있다.고정된 크기배열을 선언할 때 크기를 지정해야 하며, 크기가 설정되면 변경할 수 없다.0부터 시작하는 index배열의 인덱스는 0 부터 시작한다. (마지막 요소는 배열의 크기 - 1) ㅇ 배열의 선언과 초기화 배열 선언은 변수를 생성할 때 데이터 타입의 뒤에 []를 붙여준다.new를 사용하여 인스턴스를 생성할 때 [n]으로 배열의 크기를 지정한다.배열을 선.. 2024. 10. 2.
AWS EC2 인스턴스에서 docker 사용하기 AWS EC2 프리티어 인스턴스에서 Docker를 사용하여 Spring 웹 애플리케이션을 실행하는 과정을 포스팅한다.  AWS EC2 프리티어 인스턴스(OS ubuntu)를 생성한다.  보안그룹에 80, 443, 22, 8080 포트를 열어준다. ssh로 EC2 인스턴스에 연결한다 최초 연결 시 서버 신뢰 문제로 경고가 발생하는데 yes입력하면 연결이 이루어진다. 프리티어 인스턴스는 메모리가 부족하여 크래시가 발생할 수 있기 때문에 스왑 메모리를 추가해준다.# 2GB 크기의 스왑 파일을 생성sudo fallocate -l 2G /swapfile# 해당 파일의 읽기/쓰기 권한을 소유자에게만 부여sudo chmod 600 /swapfile# 스왑 파일을 스왑 영역으로 설정sudo mkswap /swapfil.. 2024. 9. 24.
Docker MySQL 컨테이너 실행하기 Docker로 MySQL 이미지를 사용하여 데이터베이스를 생성하고, 테이블을 생성 및 조회해본다. 컨테이너의 포트를 호스트와 연결하여 MySQL Workbench로도 접근할 수 있게 설정한다. 도커를 사용하여 MySQL 이미지를 다운로드하고 서버를 실행하면서 포트를 연결한다.# 이미지를 다운로드하고 컨테이너를 실행(포트 연결을 포함)docker run --name my-sql-test \  # mysql 컨테이너 내부의 mysql에 접속하는 명령어winpty docker exec -it my-sql-test mysql -uroot -pzxcv1234MySQL 접속에 성공했다면 테이블을 생성하고 데이터를 삽입해준다. # 사용할 데이터베이스 지정use testDB;# 테이블 생성create table use.. 2024. 9. 23.