1. 파일 시스템
- 파일 시스템은 운영 체제의 일부로, 데이터를 조직하고 저장하는 방식입니다. 하드 디스크, SSD, USB 드라이브 등 저장 장치에서 데이터를 관리하기 위한 구조와 논리를 제공합니다. 파일 시스템은 파일과 디렉토리를 생성, 수정, 삭제 및 검색하는 기능을 제공합니다.
- FAT (File Allocation Table):
- 초기 파일 시스템 중 하나로, DOS와 Windows 초기 버전에서 사용됨.
- 단순하지만, 큰 파일 및 디스크 관리에 비효율적.
- NTFS (New Technology File System):
- Windows NT 계열에서 사용되는 파일 시스템.
- 보안, 압축, 대용량 파일 지원 등 다양한 고급 기능 제공.
- HFS+ (Hierarchical File System Plus):
- macOS에서 사용되는 파일 시스템.
- 파일 크기 제한, 파일 수 제한 등의 특징을 가짐.
- EXT (Extended File System):
- Linux에서 사용되는 파일 시스템.
- EXT2, EXT3, EXT4 등 여러 버전이 있으며, 저널링 기능을 제공.주요 파일 시스템 유형
- FAT (File Allocation Table):
2. I/O 처리 (Input/Output Processing)
- I/O 처리란 컴퓨터 시스템에서 데이터를 입력(Input)하고 출력(Output)하는 과정을 의미합니다. 이는 사용자와 시스템 간, 시스템 내의 다른 구성 요소 간, 또는 시스템과 외부 장치 간의 데이터 전송을 포함합니다.
- I/O 처리 방식
- 동기식 I/O (Synchronous I/O):
- I/O 작업이 완료될 때까지 호출한 프로세스가 기다립니다.
- 코드가 순차적으로 실행되며, 간단하지만 속도가 느릴 수 있음.
- 비동기식 I/O (Asynchronous I/O):
- I/O 작업이 백그라운드에서 수행되며, 호출한 프로세스는 작업이 완료될 때까지 기다리지 않습니다.
- 이벤트 기반으로 동작하여, I/O 작업 완료 시 콜백 함수가 호출됩니다.
- 성능이 향상되며, 특히 네트워크 요청 등에서 유용함.
- 동기식 I/O (Synchronous I/O):
- I/O 처리의 주요 개념:
- 버퍼링 (Buffering):
- 데이터를 일시적으로 저장하는 메모리 공간(버퍼)을 사용하여 I/O 성능을 향상시킵니다.
- 예를 들어, 파일을 읽을 때 데이터를 버퍼에 저장하고, 필요할 때 버퍼에서 데이터를 읽습니다.
- 캐싱 (Caching):
- 자주 사용되는 데이터를 캐시에 저장하여 I/O 성능을 향상시킵니다.
- 파일 시스템에서는 파일 데이터를 캐시에 저장하고, 동일한 파일에 대한 요청이 있을 때 캐시에서 데이터를 제공합니다.
- 저널링 (Journaling):
- 파일 시스템에서 데이터 무결성을 보장하기 위해 사용되는 기술입니다.
- 변경 내용을 저널(로그)에 기록하고, 시스템 충돌 등의 문제가 발생했을 때 저널을 통해 복구할 수 있습니다.
- 버퍼링 (Buffering):
3. 표준 I/O 입출력
- 표준 I/O 입출력(Standard Input/Output, Standard I/O)은 프로그램과 사용자 또는 다른 프로그램 간의 데이터 입력과 출력을 위한 기본적인 인터페이스를 제공하는 시스템입니다. 표준 I/O는 주로 세 가지 스트림으로 구성됩니다:
- 표준 입력(Standard Input, stdin):
- 프로그램이 입력을 받을 때 사용하는 스트림입니다.
- 기본적으로 키보드 입력을 통해 데이터를 받습니다.
- 예를 들어, 사용자가 터미널에서 입력하는 데이터가 표준 입력을 통해 프로그램으로 전달됩니다.
- 표준 출력(Standard Output, stdout):
- 프로그램이 출력을 내보낼 때 사용하는 스트림입니다.
- 기본적으로 터미널 화면에 데이터를 출력합니다.
- 예를 들어, print 또는 console.log 같은 함수들이 표준 출력을 통해 터미널에 메시지를 표시합니다.
- 표준 오류(Standard Error, stderr):
- 프로그램이 에러 메시지를 내보낼 때 사용하는 스트림입니다.
- 기본적으로 터미널 화면에 에러 메시지를 출력합니다.
- 일반 출력과 에러 출력을 분리하여 에러를 효율적으로 처리할 수 있게 합니다.
- 표준 입력(Standard Input, stdin):
- 표준 I/O의 특성 및 장점
- 범용성: 표준 I/O는 운영 체제 및 프로그래밍 언어에 관계없이 일관된 인터페이스를 제공합니다.
- 유연성: 표준 I/O 스트림을 리디렉션하여 파일, 네트워크 소켓 등 다양한 입력 및 출력 소스로 변경할 수 있습니다.
- 디버깅 편의성: 표준 오류 스트림을 통해 에러 메시지를 별도로 관리할 수 있어, 디버깅과 로그 관리가 용이합니다.
//node.js에서 표준 입출력
const readline = require('readline');
// 표준 입력과 표준 출력을 사용하는 인터페이스 생성
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 표준 입력으로부터 문자열 입력 받기
rl.question('Enter your name: ', (name) => {
// 표준 출력으로 문자열 출력하기
console.log(`Hello, ${name}`);
// 표준 오류로 에러 메시지 출력하기
console.error('This is an error message.');
rl.close();
});
4. 파일과 디렉토리 구분
- 파일은 데이터를 저장하는 기본 단위입니다. 텍스트, 이미지, 비디오, 프로그램 등 다양한 형태의 데이터를 포함할 수 있습니다. 파일은 특정한 형식을 가지고 있으며, 이름과 확장자로 구분됩니다.
- 파일(File)파일의 주요 특성
- 파일은 데이터를 저장하는 기본 단위입니다. 텍스트, 이미지, 비디오, 프로그램 등 다양한 형태의 데이터를 포함할 수 있습니다. 파일은 특정한 형식을 가지고 있으며, 이름과 확장자로 구분됩니다.
- 이름과 확장자: 파일은 이름과 확장자로 구성됩니다. 예를 들어, document.txt에서 document는 이름, txt는 확장자입니다. 확장자는 파일 형식을 나타냅니다.
- 크기: 파일은 데이터를 포함하므로 일정한 크기를 가집니다. 크기는 바이트 단위로 측정됩니다.
- 경로: 파일은 파일 시스템 내에서 위치를 가지며, 경로(path)를 통해 접근할 수 있습니다. 예를 들어, C:\Documents\file.txt는 파일의 경로입니다.
- 속성: 파일에는 읽기, 쓰기, 실행 등의 속성이 있습니다. 이러한 속성은 파일 접근 권한을 설정하는 데 사용됩니다.
- 디렉터리는 파일과 다른 디렉터리를 포함하는 컨테이너 역할을 합니다. 디렉터리를 통해 파일과 디렉터리를 조직화하고 구조화할 수 있습니다. 디렉터리는 폴더라고도 불립니다.
- 디렉터리의 주요 특성
- 이름: 디렉터리는 이름을 가지며, 파일처럼 확장자는 없습니다.
- 경로: 디렉터리도 경로를 가지며, 루트 디렉터리로부터의 경로를 통해 접근할 수 있습니다. 예를 들어, C:\Documents는 디렉터리의 경로입니다.
- 계층 구조: 디렉터리는 트리 구조를 형성하며, 루트 디렉터리로부터 시작됩니다. 하위 디렉터리는 상위 디렉터리의 하위 항목으로 포함됩니다.
- 파일 및 디렉터리 포함: 디렉터리는 파일뿐만 아니라 다른 디렉터리(서브 디렉터리)도 포함할 수 있습니다.
5. HTTP Request(요청)
- HTTP 요청은 클라이언트가 서버에 특정 작업을 수행하도록 요청하는 메시지입니다. 웹 브라우저나 기타 HTTP 클라이언트가 서버에 데이터를 요청하거나 제출할 때 사용됩니다. HTTP 요청의 주요 구성 요소는 다음과 같습니다
- HTTP 메서드 (HTTP Method)
- GET: 서버로부터 리소스를 요청합니다. 데이터 조회에 사용됩니다.
- POST: 서버에 데이터를 제출합니다. 데이터 생성이나 업데이트에 사용됩니다.
- PUT: 서버에 리소스를 생성하거나 기존 리소스를 업데이트합니다.
- DELETE: 서버에서 리소스를 삭제합니다.
- HEAD: 서버로부터 응답 헤더를 요청합니다(본문은 포함되지 않음).
- OPTIONS: 서버에서 지원하는 HTTP 메서드를 요청합니다.
- PATCH: 리소스의 일부를 업데이트합니다.
- URL
- 요청이 대상이 되는 서버의 리소스를 식별합니다. 예를 들어, https://example.com/api/resource.
- HTTP 버전
- HTTP 프로토콜의 버전을 명시합니다(예: HTTP/1.1).
- 헤더 (Headers)
- 요청에 대한 추가 정보를 제공합니다. 예를 들어, Content-Type, Authorization, User-Agent 등이 있습니다.
- 본문 (Body)
- POST, PUT과 같은 메서드에서 데이터를 전송할 때 사용됩니다. 예를 들어, JSON 형식의 데이터가 포함될 수 있습니다.
HTTP 요청의 예시
POST /api/resource HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer some_token
{
"name": "John Doe",
"email": "john.doe@example.com"
}
6. HTTP Reponse(요청)
- HTTP 응답은 서버가 클라이언트의 요청에 대해 보내는 메시지입니다. 응답은 요청에 대한 결과를 포함하며, 성공, 실패, 리소스에 대한 정보 등을 나타냅니다. HTTP 응답의 주요 구성 요소는 다음과 같습니다.
- HTTP 상태 코드 (HTTP Status Code)
- 요청의 처리 결과를 나타냅니다. 대표적인 상태 코드는 다음과 같습니다:
- 200 OK: 요청이 성공적으로 처리되었습니다.
- 201 Created: 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성되었습니다.
- 400 Bad Request: 잘못된 요청입니다.
- 401 Unauthorized: 인증이 필요합니다.
- 403 Forbidden: 접근이 금지되었습니다.
- 404 Not Found: 요청한 리소스를 찾을 수 없습니다.
- 500 Internal Server Error: 서버 내부 오류입니다.
- 요청의 처리 결과를 나타냅니다. 대표적인 상태 코드는 다음과 같습니다:
- HTTP 버전
- HTTP 프로토콜의 버전을 명시합니다(예: HTTP/1.1).
- 헤더 (Headers)
- 응답에 대한 추가 정보를 제공합니다. 예를 들어, Content-Type, Content-Length, Set-Cookie 등이 있습니다.
- 본문 (Body)
- 응답 데이터가 포함됩니다. 예를 들어, HTML 문서, JSON 데이터, 파일 등이 포함될 수 있습니다.
HTTP 응답의 예시
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
{
"id": 123,
"name": "John Doe",
"email": "john.doe@example.com",
"createdAt": "2024-08-05T12:34:56Z"
}
7. SQL 표준
- SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의하고 조작하는 데 사용되는 표준 언어입니다. SQL 표준은 국제 표준화 기구(ISO)와 국제 전기기술 위원회(IEC)가 관리합니다. 주요 SQL 표준은 다음과 같습니다
- SQL-86 (SQL1)
- SQL의 첫 번째 표준 버전. 기본적인 쿼리, 데이터 정의, 데이터 조작을 포함합니다.
- SQL-89 (SQL1)
- SQL-86의 소규모 개정판. 사소한 수정과 확장 포함.
- SQL-92 (SQL2)
- 보다 확장된 기능과 향상된 표준. 다양한 데이터 유형, 더 나은 일관성 제어, 뷰, 임시 테이블 등을 포함합니다.
- SQL:1999 (SQL3)
- 객체 지향적 기능, 트리거, 저장 프로시저, 재귀적 쿼리, 새로운 데이터 유형(예: BLOB, CLOB) 등을 포함한 확장.
- SQL:2003
- XML 관련 기능, 윈도우 함수, 자동 증가 열, 시퀀스 등 포함.
- SQL:2006
- SQL/XML 표준 통합. XML 데이터와의 상호 운용성 향상.
- SQL:2008
- 트랜잭션 제어, 데이터베이스 관리, 새로운 데이터 유형 지원 향상.
- SQL:2011
- 시간 및 날짜 관련 데이터 유형과 기능 추가.
- SQL:2016
- JSON 데이터 처리 기능 추가.
- SQL:2019
- 향상된 지원과 기능 포함
- SQL-86 (SQL1)
8. SQL 문법
- 데이터 정의 언어 (DDL, Data Definition Language)
- 데이터베이스 객체(테이블, 인덱스, 뷰 등)를 정의하고 수정하는 데 사용됩니다.
- 주요 명령어:
- CREATE: 새로운 데이터베이스 객체 생성.
- ALTER: 기존 객체 수정.
- DROP: 객체 삭제.
- TRUNCATE: 테이블의 모든 데이터를 제거(테이블 구조는 유지)
- 데이터 조작 언어 (DML, Data Manipulation Language)
- 데이터베이스의 데이터를 조작(삽입, 수정, 삭제, 조회)하는 데 사용됩니다.
- 주요 명령어:
- SELECT: 데이터 조회.
- INSERT: 데이터 삽입.
- UPDATE: 데이터 수정.
- DELETE: 데이터 삭제
- 데이터 제어 언어 (DCL, Data Control Language)
- 데이터베이스에 대한 접근 권한을 제어하는 데 사용됩니다.
- 주요 명령어:
- GRANT: 사용 권한 부여.
- REVOKE: 사용 권한 철회
- 트랜잭션 제어 언어 (TCL, Transaction Control Language)
- 트랜잭션의 시작과 종료를 제어하고, 트랜잭션의 일관성을 유지하는 데 사용됩니다.
- 주요 명령어:
- BEGIN TRANSACTION 또는 START TRANSACTION: 트랜잭션 시작.
- COMMIT: 트랜잭션 종료 및 변경 사항 저장.
- ROLLBACK: 트랜잭션 종료 및 변경 사항 취소.
- SAVEPOINT: 트랜잭션 내 저장 지점 설정.
- RELEASE SAVEPOINT: 저장 지점 해제.
- ROLLBACK TO SAVEPOINT: 저장 지점까지 롤백
9. DBMS : 데이터 베이스 관리 시스템
- 데이터베이스를 정의하고 생성, 관리하는 소프트웨어 시스템입니다. DBMS는 데이터의 저장, 수정, 검색, 삭제와 같은 작업을 효율적으로 수행하며, 여러 사용자가 동시에 데이터를 안전하게 접근하고 관리할 수 있도록 지원
- DBMS의 주요 기능
- 데이터 정의 (Data Definition)
- **DDL(Data Definition Language)**를 사용하여 데이터베이스 구조를 정의합니다. 이는 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 생성, 수정, 삭제하는 명령어들입니다.
- 예: CREATE TABLE, ALTER TABLE, DROP TABLE.
- 데이터 조작 (Data Manipulation)
- **DML(Data Manipulation Language)**를 사용하여 데이터베이스 내의 데이터를 조작합니다. 이는 데이터를 삽입, 수정, 삭제, 조회하는 명령어들입니다.
- 예: INSERT, UPDATE, DELETE, SELECT.
- 데이터 보안 (Data Security)
- 데이터에 대한 접근 권한을 관리합니다. 이는 데이터의 기밀성을 유지하고, 허가되지 않은 접근을 방지하는 기능입니다.
- 예: GRANT, REVOKE.
- 데이터 무결성 (Data Integrity)
- 데이터의 정확성과 일관성을 유지합니다. 이는 데이터의 유효성을 보장하고 데이터베이스의 신뢰성을 유지하는 기능입니다.
- 예: 기본 키, 외래 키, 유일성 제약 조건.
- 트랜잭션 관리 (Transaction Management)
- 트랜잭션을 관리하여 데이터베이스의 일관성을 유지합니다. 트랜잭션은 데이터베이스의 상태를 변경하는 일련의 작업을 의미하며, 이 작업들이 모두 성공하거나 모두 실패해야 합니다.
- 예: BEGIN TRANSACTION, COMMIT, ROLLBACK.
- 동시성 제어 (Concurrency Control)
- 여러 사용자가 동시에 데이터베이스를 접근할 때 일관성과 무결성을 유지합니다. 이는 데이터의 동시 접근 시 발생할 수 있는 문제를 해결하는 기능입니다.
- 예: 잠금(locking) 메커니즘.
- 백업 및 복구 (Backup and Recovery)
- 데이터베이스의 데이터를 보호하기 위해 정기적으로 백업을 수행하고, 데이터 손실 시 복구할 수 있는 기능을 제공합니다.
- 예: 데이터베이스 덤프, 로그 파일
- 데이터 정의 (Data Definition)
- DBMS의 유형
- 관계형 DBMS (RDBMS)
- 데이터를 행과 열의 형태로 구성된 테이블로 관리합니다.
- SQL을 사용하여 데이터를 조작합니다.
- 예: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
- 객체지향 DBMS (OODBMS)
- 객체지향 프로그래밍 언어의 객체를 데이터베이스로 관리합니다.
- 객체와 클래스, 상속 등의 개념을 사용합니다.
- 예: db4o, ObjectDB.
- 객체-관계형 DBMS (ORDBMS)
- 관계형 데이터베이스와 객체지향 데이터베이스의 특성을 결합한 시스템입니다.
- 예: PostgreSQL.
- NoSQL DBMS
- 전통적인 관계형 데이터베이스와 다른 구조로 데이터를 관리합니다.
- 문서, 그래프, 키-값 저장소 등 다양한 데이터 모델을 지원합니다.
- 예: MongoDB, Cassandra, Redis, Neo4j.
- NewSQL DBMS
- NoSQL의 확장성과 관계형 데이터베이스의 ACID 속성을 모두 제공하려는 시스템입니다.
- 예: Google Spanner, VoltDB.
- 관계형 DBMS (RDBMS)
- DBMS의 장점
- 데이터 중복 최소화
- 데이터를 중앙 집중적으로 관리하여 중복을 최소화하고 일관성을 유지합니다.
- 데이터 독립성
- 데이터베이스의 논리적 구조와 물리적 구조를 분리하여 데이터 독립성을 제공합니다.
- 데이터 무결성 유지
- 데이터의 정확성과 일관성을 유지하는 무결성 제약 조건을 지원합니다.
- 데이터 보안 제공
- 사용자 권한 관리와 암호화를 통해 데이터의 보안을 강화합니다.
- 효율적인 데이터 접근
- 인덱스와 최적화된 쿼리 처리를 통해 데이터를 효율적으로 접근할 수 있습니다.
- 데이터 백업 및 복구
- 데이터 손실에 대비한 백업 및 복구 기능을 제공합니다.
- 데이터 중복 최소화
- DBMS의 예시
- MySQL: 오픈 소스 관계형 DBMS, 웹 애플리케이션에서 널리 사용됨.
- PostgreSQL: 고급 기능을 갖춘 오픈 소스 관계형 DBMS.
- Oracle Database: 엔터프라이즈급 상용 DBMS, 높은 성능과 안정성 제공.
- Microsoft SQL Server: Microsoft가 개발한 관계형 DBMS, 기업 환경에서 널리 사용됨.
- MongoDB: 오픈 소스 NoSQL DBMS, 문서 지향 데이터 모델을 사용.
- Redis: 오픈 소스 인메모리 데이터 구조 저장소, 고속 데이터 접근을 지원.
10. 트랜잭션
- 트랜잭션(Transaction)은 데이터베이스 관리 시스템(DBMS)에서 하나의 논리적 작업 단위를 의미합니다. 트랜잭션은 여러 데이터베이스 연산(읽기, 쓰기, 수정, 삭제)을 포함할 수 있으며, 이러한 연산들이 하나의 단위로 처리되어야 할 때 사용됩니다. 트랜잭션의 주요 목적은 데이터베이스의 일관성과 무결성을 유지하는 것입니다.
- 트랜잭션은 ACID 속성을 준수해야 합니다. ACID는 다음 네 가지 특성을 나타냅니다:
- Atomicity (원자성)
- 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함을 보장합니다. 즉, 트랜잭션이 성공적으로 완료되면 모든 연산이 반영되고, 중간에 실패하면 모든 연산이 취소되어 데이터베이스가 트랜잭션 이전 상태로 복구됩니다.
- Consistency (일관성)
- 트랜잭션이 완료된 후 데이터베이스가 일관된 상태를 유지해야 함을 보장합니다. 이는 데이터베이스의 무결성 제약 조건을 만족시켜야 한다는 의미입니다.
- Isolation (고립성)
- 하나의 트랜잭션이 다른 트랜잭션의 중간 결과를 볼 수 없도록 보장합니다. 즉, 트랜잭션들은 서로 독립적으로 수행되어야 하며, 동시에 여러 트랜잭션이 수행되더라도 결과는 트랜잭션들이 순차적으로 실행된 것과 같아야 합니다.
- Durability (지속성)
- 트랜잭션이 성공적으로 완료된 후 그 결과는 영구적으로 반영되어야 함을 보장합니다. 시스템 오류가 발생하더라도 트랜잭션의 결과는 손실되지 않습니다.
- Atomicity (원자성)
- 트랜잭션은 다음과 같은 상태를 가질 수 있습니다:
- Active (활성 상태)
- 트랜잭션이 실행 중인 상태입니다.
- Partially Committed (부분 완료 상태)
- 트랜잭션이 마지막 연산을 실행했지만 아직 모든 연산이 데이터베이스에 반영되지 않은 상태입니다.
- Committed (완료 상태)
- 트랜잭션이 성공적으로 완료되어 모든 연산이 데이터베이스에 반영된 상태입니다.
- Failed (실패 상태)
- 트랜잭션 실행 중 오류가 발생하여 더 이상 진행할 수 없는 상태입니다.
- Aborted (중단 상태)
- 트랜잭션이 실패하여 실행한 모든 연산이 취소되고 데이터베이스가 트랜잭션 이전 상태로 복구된 상태입니다.
- Active (활성 상태)
11. 참조
1)입출력 시스템 : https://velog.io/@yuseogi0218/IO-System-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%8B%9C%EC%8A%A4%ED%85%9C
2) 트랜잭션 상세 : https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC