🔀비선형 자료 구조
·
Computer Science/Data Structure
비선형 자료구조란 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말합니다. 일반적으로 트리나 그래프를 말합니다.🔗 그래프그래프는 정점과 간선으로 이루어진 자료 구조를 말합니다.🧭 정점과 간선어떠한 곳에서 어떠한 곳으로 무언가를 통해 간다고 했을 때 '어떠한 곳'은 정점(vertex)이 되고 '무언가'는 간선(edge)이 됩니다.단방향 간선과 양방향 간선이 있습니다.정점으로 나가는 간선을 정점의 outdegree라고 하며, 들어오는 간선을 해당 정점의 indegree라고 합니다. 앞 그림의 정점 V는 outdegree는 세 개, indegree는 두 개인 상태입니다. 또한, 정점은 약자로 V 또는 U라고 하며, 보통 어떤 정점으로부터 시작해서 어떤 정점까지 간다를 "U에서부터 V로 간다."라고..
📘선형 자료 구조
·
Computer Science/Data Structure
선형 자료 구조는 데이터가 일렬로 차곡차곡 나열된 형태의 자료 구조를 말합니다.데이터가 한 줄로 정렬되어 있어서 앞에서부터 뒤까지 순서대로 접근하는 특징을 가집니다.🔗 연결 리스트연결 리스트는 데이터를 감싼 노드들을 포인터로 연결해 놓은 구조라서, 메모리를 필요할 때마다 가져와서 붙일 수 있습니다. 그래서 공간 활용이 좋고, 중간에 삽입·삭제가 빠릅니다(O(1)). 하지만 임의 위치 탐색은 처음부터 차례대로 따라가야 해서 O(n) 이 걸립니다.prev 포인터와 next 포인터로 앞과 뒤의 노드를 연결시킨 것이 연결 리스트이며, 연결 리스트는 싱글 연결 리스트로, 이중 연결 리스트, 원형 이중 연결 리스트가 있습니다. 참고로 맨 앞에 있는 노드를 헤드(head)라고 합니다.싱글 연결 리스트 : next ..
⏳복잡도
·
Computer Science/Data Structure
자료 구조(data structure)는 데이터를 효율적으로 관리하고, 빠르게 수정·삭제·탐색·저장할 수 있도록 구성한 구조적 집합을 말합니다.⏱️ 시간 복잡도시간 복잡도란 ‘입력 크기(n)에 따라 알고리즘이 실행되는 데 필요한 시간 증가량’을 분석하는 척도입니다.🧮 빅오 표기법주요 로직의 반복 횟수를 기준으로 알고리즘의 성능을 표현하며, 이를 빅오(Big-O) 표기법으로 나타냅니다.예를 들어, 입력 크기 n에 대한 알고리즘 수행 시간이 10n² + n이라고 하면 다음과 같은 반복문 구조를 상상할 수 있습니다.for(int i=0;i빅오 표기법은 입력 크기(n)가 커질 때 가장 크게 영향을 미치는 항만 남기고 나머지는 제거하는 방식입니다.위 알고리즘의 경우 n² 항이 지배적이므로 시간 복잡도는 O(n²..
🔗조인
·
Computer Science/Database
🧩 조인의 종류조인(Join)이란 두 개 이상의 테이블을 묶어서 하나의 결과물로 만드는 작업입니다. 조인의 종류: 내부 조인(inner join): 두 테이블의 교집합입니다. 양쪽 모두에 데이터가 있는 행만 표기합니다.왼쪽 조인(left outer join): 왼쪽 테이블의 모든 행을 표기하고, 오른쪽은 매칭되는 것만 붙입니다.오른쪽 조인(right outer join): 오른쪽 테이블의 모든 행을 표기하고, 왼쪽은 매칭되는 것만 붙입니다.합집합 조인(full outer join) : 두 테이블의 모든 행(합집합)을 표기합니다.💻 조인 코드 예시1. 내부 조인 : 두 테이블 간에 교집합을 나타냅니다.SELECT * FROM TableA AINNER JOIN TableB B ONA.key=B.key 2..
🔖 인덱스
·
Computer Science/Database
🏗️ B-트리(B-Tree)인덱스는 대개 B-트리라는 자료 구조로 이루어져 있습니다. 트리 구조는 최상단의 루트 노드(Root Node), 가장 끝단의 리프 노드(Leaf Node), 그리고 그 사이를 연결하는 브랜치 노드(Branch Node)로 나뉩니다.탐색 효율성 예시: 만약 데이터 'E'를 찾는다고 가정해 봅시다. 인덱스가 없다면 A, B, C, D, E 순서대로 전체 테이블을 훑어야 하므로 5번의 탐색이 필요합니다. 하지만 B-트리 구조를 활용하면 루트에서 경로를 찾아 단 두 번 만에 리프 노드의 'E'에 도달할 수 있습니다. 구체적인 작동 원리 (Key: 57 검색 시): 키값 57을 찾는다고 가정할 때, 탐색은 항상 루트 노드에서 시작하여 브랜치 노드를 거쳐 리프 노드로 내려갑니다.루트 노..
🔍 데이터베이스의 종류
·
Computer Science/Database
🏛️ 관계형 데이터베이스(RDBMS)Relational DataBase Management System 행(Row)과 열(Column)로 구성된 표(Table) 형식으로 데이터를 저장하고 관리하는 데이터베이스입니다. 테이블 간의 '관계'를 통해 데이터를 구조화하며, SQL(Structured Query Language)이라는 언어를 사용하여 데이터를 조작합니다.대표적인 제품: MySQL, PostgreSQL, Oracle, SQL Server (MSSQL) 등SQL의 특징: 모든 RDBMS는 ANSI SQL(표준 SQL)을 준수하지만, 각 제품마다 성능 향상이나 고유 기능을 위해 특화된 독자적인 문법을 가집니다.Oracle: PL/SQLSQL Server: T-SQLMySQL: SQL (표준을 따르되 ..
🔐 트랜잭션과 무결성
·
Computer Science/Database
📦 트랜잭션(Transaction)데이터베이스에서 논리적 기능을 수행하기 위한 작업의 단위입니다. DB 접근 방법인 쿼리들을 하나로 묶은 단위이며, 작업의 완전성을 보장합니다. 주요 특징으로 원자성, 일관성, 독립성, 지속성이 있으며, 앞 글자를 따 ACID라 부릅니다.⚛️ 원자성(Atomicity)"All or Nothing" 트랜잭션 내의 모든 작업이 완벽하게 수행되었거나, 아예 수행되지 않아야 함을 보장합니다. 중간에 문제가 생기면 롤백하여 아무 일도 없던 것처럼 만듭니다.주의점: 트랜잭션 단위 내 외부 API 호출은 지양해야 합니다. 롤백 시 외부 API 호출 취소가 어렵기 때문입니다.용어 설명: 커밋(commit) :여러 쿼리가 성공적으로 처리되어 변경 내용을 영구 저장하는 것.롤백 :에러나 ..
📐 ERD와 정규화 과정
·
Computer Science/Database
ERD(Entity Relationship Diagram)는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션(테이블) 간의 관계들을 정의한 설계도입니다.🏗️ ERD의 중요성ERD는 시스템의 요구 사항을 기반으로 작성되며, 이를 토대로 실제 데이터베이스가 구축됩니다. DB 구축 이후에도 디버깅을 하거나 비즈니스 프로세스를 재설계해야 할 때, 길잡이가 되는 설계도 역할을 담당합니다.하지만 ERD는 관계형 구조로 표현할 수 있는 데이터에는 유용하지만, 비정형 데이터를 표현하는 데는 한계가 있다는 단점이 있습니다. 용어 설명: 비정형 데이터:비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 정해진 규칙으로 정리되지 않은 정보(예: 동영상, 오디오, 소셜 미디어 피드 등)를 뜻합니..
🗄️ 데이터베이스의 기본
·
Computer Science/Database
데이터베이스(DB, DataBase)는 일정한 규칙이나 규약을 통해 구조화되어 저장된 데이터의 집합입니다. 이 데이터베이스를 제어하고 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 부릅니다.데이터베이스 내부의 데이터는 각 DBMS마다 정의된 쿼리 언어(query language)를 사용하여 삽입(Insert), 삭제(Delete), 수정(Update), 조회(Select) 등의 작업을 수행할 수 있습니다. 또한, 실시간으로 접근할 수 있고 여러 사용자가 동시에 공유할 수 있다는 특징이 있습니다.구조는 보통 데이터베이스 -> DBMS -> 응용 프로그램 순서로 연결되어 데이터를 주고받습니다. 예를 들어, MySQL이라는 DBMS가 있고, 그 위에서 작동하는 Node...
🚦 CPU 스케줄링 알고리즘
·
Computer Science/Operating System
CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라, 어떤 프로세스(의 스레드)에게 CPU를 할당할지 결정합니다. 프로그램이 실행될 때, CPU 스케줄링 알고리즘은 어떤 프로그램에 CPU 소유권을 줄 것인지 결정합니다. 이 알고리즘의 목표는 다음과 같습니다.CPU 이용률은 높게처리량 (주어진 시간에 많은 일을 처리)은 많게대기 시간 (준비 큐에서 기다리는 시간)은 짧게응답 시간 (작업 요청 후 첫 반응까지의 시간)은 짧게✋ 비선점형 방식(non-preemptive)프로세스가 스스로 CPU 소유권을 포기할 때까지 (예: I/O 작업 요청) 기다리는 방식입니다. 운영체제가 강제로 프로세스를 중지시키지 않습니다. 따라서 문맥 교환(Context Switching)으로 인한 부하가 적습니다.🚶➡️ FCFS(Fi..