본문 바로가기
카테고리 없음

[I/O, HTTP, SQL] 표준 I/O 입출력, HTTP, SQL

by hbIncoding 2024. 8. 5.

1. 파일 시스템

  • 파일 시스템은 운영 체제의 일부로, 데이터를 조직하고 저장하는 방식입니다. 하드 디스크, SSD, USB 드라이브 등 저장 장치에서 데이터를 관리하기 위한 구조와 논리를 제공합니다. 파일 시스템은 파일과 디렉토리를 생성, 수정, 삭제 및 검색하는 기능을 제공합니다.
    1. FAT (File Allocation Table):
      • 초기 파일 시스템 중 하나로, DOS와 Windows 초기 버전에서 사용됨.
      • 단순하지만, 큰 파일 및 디스크 관리에 비효율적.
    2. NTFS (New Technology File System):
      • Windows NT 계열에서 사용되는 파일 시스템.
      • 보안, 압축, 대용량 파일 지원 등 다양한 고급 기능 제공.
    3. HFS+ (Hierarchical File System Plus):
      • macOS에서 사용되는 파일 시스템.
      • 파일 크기 제한, 파일 수 제한 등의 특징을 가짐.
    4. EXT (Extended File System):
      • Linux에서 사용되는 파일 시스템.
      • EXT2, EXT3, EXT4 등 여러 버전이 있으며, 저널링 기능을 제공.주요 파일 시스템 유형 

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 작업 완료 시 콜백 함수가 호출됩니다.
      • 성능이 향상되며, 특히 네트워크 요청 등에서 유용함.
  1.  
  • I/O 처리의 주요 개념:
    • 버퍼링 (Buffering):
      • 데이터를 일시적으로 저장하는 메모리 공간(버퍼)을 사용하여 I/O 성능을 향상시킵니다.
      • 예를 들어, 파일을 읽을 때 데이터를 버퍼에 저장하고, 필요할 때 버퍼에서 데이터를 읽습니다.
    • 캐싱 (Caching):
      • 자주 사용되는 데이터를 캐시에 저장하여 I/O 성능을 향상시킵니다.
      • 파일 시스템에서는 파일 데이터를 캐시에 저장하고, 동일한 파일에 대한 요청이 있을 때 캐시에서 데이터를 제공합니다.
    • 저널링 (Journaling):
      • 파일 시스템에서 데이터 무결성을 보장하기 위해 사용되는 기술입니다.
      • 변경 내용을 저널(로그)에 기록하고, 시스템 충돌 등의 문제가 발생했을 때 저널을 통해 복구할 수 있습니다.

3. 표준 I/O 입출력

  • 표준 I/O 입출력(Standard Input/Output, Standard I/O)은 프로그램과 사용자 또는 다른 프로그램 간의 데이터 입력과 출력을 위한 기본적인 인터페이스를 제공하는 시스템입니다. 표준 I/O는 주로 세 가지 스트림으로 구성됩니다:
    1. 표준 입력(Standard Input, stdin):
      • 프로그램이 입력을 받을 때 사용하는 스트림입니다.
      • 기본적으로 키보드 입력을 통해 데이터를 받습니다.
      • 예를 들어, 사용자가 터미널에서 입력하는 데이터가 표준 입력을 통해 프로그램으로 전달됩니다.
    2. 표준 출력(Standard Output, stdout):
      • 프로그램이 출력을 내보낼 때 사용하는 스트림입니다.
      • 기본적으로 터미널 화면에 데이터를 출력합니다.
      • 예를 들어, print 또는 console.log 같은 함수들이 표준 출력을 통해 터미널에 메시지를 표시합니다.
    3. 표준 오류(Standard Error, stderr):
      • 프로그램이 에러 메시지를 내보낼 때 사용하는 스트림입니다.
      • 기본적으로 터미널 화면에 에러 메시지를 출력합니다.
      • 일반 출력과 에러 출력을 분리하여 에러를 효율적으로 처리할 수 있게 합니다.
  • 표준 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
  • 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
      • 향상된 지원과 기능 포함

 

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의 주요 기능
    1. 데이터 정의 (Data Definition)
      • **DDL(Data Definition Language)**를 사용하여 데이터베이스 구조를 정의합니다. 이는 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 생성, 수정, 삭제하는 명령어들입니다.
      • 예: CREATE TABLE, ALTER TABLE, DROP TABLE.
    2. 데이터 조작 (Data Manipulation)
      • **DML(Data Manipulation Language)**를 사용하여 데이터베이스 내의 데이터를 조작합니다. 이는 데이터를 삽입, 수정, 삭제, 조회하는 명령어들입니다.
      • 예: INSERT, UPDATE, DELETE, SELECT.
    3. 데이터 보안 (Data Security)
      • 데이터에 대한 접근 권한을 관리합니다. 이는 데이터의 기밀성을 유지하고, 허가되지 않은 접근을 방지하는 기능입니다.
      • 예: GRANT, REVOKE.
    4. 데이터 무결성 (Data Integrity)
      • 데이터의 정확성과 일관성을 유지합니다. 이는 데이터의 유효성을 보장하고 데이터베이스의 신뢰성을 유지하는 기능입니다.
      • 예: 기본 키, 외래 키, 유일성 제약 조건.
    5. 트랜잭션 관리 (Transaction Management)
      • 트랜잭션을 관리하여 데이터베이스의 일관성을 유지합니다. 트랜잭션은 데이터베이스의 상태를 변경하는 일련의 작업을 의미하며, 이 작업들이 모두 성공하거나 모두 실패해야 합니다.
      • 예: BEGIN TRANSACTION, COMMIT, ROLLBACK.
    6. 동시성 제어 (Concurrency Control)
      • 여러 사용자가 동시에 데이터베이스를 접근할 때 일관성과 무결성을 유지합니다. 이는 데이터의 동시 접근 시 발생할 수 있는 문제를 해결하는 기능입니다.
      • 예: 잠금(locking) 메커니즘.
    7. 백업 및 복구 (Backup and Recovery)
      • 데이터베이스의 데이터를 보호하기 위해 정기적으로 백업을 수행하고, 데이터 손실 시 복구할 수 있는 기능을 제공합니다.
      • 예: 데이터베이스 덤프, 로그 파일
  • DBMS의 유형
    1. 관계형 DBMS (RDBMS)
      • 데이터를 행과 열의 형태로 구성된 테이블로 관리합니다.
      • SQL을 사용하여 데이터를 조작합니다.
      • 예: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
    2. 객체지향 DBMS (OODBMS)
      • 객체지향 프로그래밍 언어의 객체를 데이터베이스로 관리합니다.
      • 객체와 클래스, 상속 등의 개념을 사용합니다.
      • 예: db4o, ObjectDB.
    3. 객체-관계형 DBMS (ORDBMS)
      • 관계형 데이터베이스와 객체지향 데이터베이스의 특성을 결합한 시스템입니다.
      • 예: PostgreSQL.
    4. NoSQL DBMS
      • 전통적인 관계형 데이터베이스와 다른 구조로 데이터를 관리합니다.
      • 문서, 그래프, 키-값 저장소 등 다양한 데이터 모델을 지원합니다.
      • 예: MongoDB, Cassandra, Redis, Neo4j.
    5. NewSQL DBMS
      • NoSQL의 확장성과 관계형 데이터베이스의 ACID 속성을 모두 제공하려는 시스템입니다.
      • 예: Google Spanner, VoltDB.
  • DBMS의 장점
    1. 데이터 중복 최소화
      • 데이터를 중앙 집중적으로 관리하여 중복을 최소화하고 일관성을 유지합니다.
    2. 데이터 독립성
      • 데이터베이스의 논리적 구조와 물리적 구조를 분리하여 데이터 독립성을 제공합니다.
    3. 데이터 무결성 유지
      • 데이터의 정확성과 일관성을 유지하는 무결성 제약 조건을 지원합니다.
    4. 데이터 보안 제공
      • 사용자 권한 관리와 암호화를 통해 데이터의 보안을 강화합니다.
    5. 효율적인 데이터 접근
      • 인덱스와 최적화된 쿼리 처리를 통해 데이터를 효율적으로 접근할 수 있습니다.
    6. 데이터 백업 및 복구
      • 데이터 손실에 대비한 백업 및 복구 기능을 제공합니다.
  • DBMS의 예시
    • MySQL: 오픈 소스 관계형 DBMS, 웹 애플리케이션에서 널리 사용됨.
    • PostgreSQL: 고급 기능을 갖춘 오픈 소스 관계형 DBMS.
    • Oracle Database: 엔터프라이즈급 상용 DBMS, 높은 성능과 안정성 제공.
    • Microsoft SQL Server: Microsoft가 개발한 관계형 DBMS, 기업 환경에서 널리 사용됨.
    • MongoDB: 오픈 소스 NoSQL DBMS, 문서 지향 데이터 모델을 사용.
    • Redis: 오픈 소스 인메모리 데이터 구조 저장소, 고속 데이터 접근을 지원.

10. 트랜잭션

  • 트랜잭션(Transaction)은 데이터베이스 관리 시스템(DBMS)에서 하나의 논리적 작업 단위를 의미합니다. 트랜잭션은 여러 데이터베이스 연산(읽기, 쓰기, 수정, 삭제)을 포함할 수 있으며, 이러한 연산들이 하나의 단위로 처리되어야 할 때 사용됩니다. 트랜잭션의 주요 목적은 데이터베이스의 일관성과 무결성을 유지하는 것입니다.
  • 트랜잭션은 ACID 속성을 준수해야 합니다. ACID는 다음 네 가지 특성을 나타냅니다:
    1. Atomicity (원자성)
      • 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함을 보장합니다. 즉, 트랜잭션이 성공적으로 완료되면 모든 연산이 반영되고, 중간에 실패하면 모든 연산이 취소되어 데이터베이스가 트랜잭션 이전 상태로 복구됩니다.
    2. Consistency (일관성)
      • 트랜잭션이 완료된 후 데이터베이스가 일관된 상태를 유지해야 함을 보장합니다. 이는 데이터베이스의 무결성 제약 조건을 만족시켜야 한다는 의미입니다.
    3. Isolation (고립성)
      • 하나의 트랜잭션이 다른 트랜잭션의 중간 결과를 볼 수 없도록 보장합니다. 즉, 트랜잭션들은 서로 독립적으로 수행되어야 하며, 동시에 여러 트랜잭션이 수행되더라도 결과는 트랜잭션들이 순차적으로 실행된 것과 같아야 합니다.
    4. Durability (지속성)
      • 트랜잭션이 성공적으로 완료된 후 그 결과는 영구적으로 반영되어야 함을 보장합니다. 시스템 오류가 발생하더라도 트랜잭션의 결과는 손실되지 않습니다.
  • 트랜잭션은 다음과 같은 상태를 가질 수 있습니다:
    1. Active (활성 상태)
      • 트랜잭션이 실행 중인 상태입니다.
    2. Partially Committed (부분 완료 상태)
      • 트랜잭션이 마지막 연산을 실행했지만 아직 모든 연산이 데이터베이스에 반영되지 않은 상태입니다.
    3. Committed (완료 상태)
      • 트랜잭션이 성공적으로 완료되어 모든 연산이 데이터베이스에 반영된 상태입니다.
    4. Failed (실패 상태)
      • 트랜잭션 실행 중 오류가 발생하여 더 이상 진행할 수 없는 상태입니다.
    5. Aborted (중단 상태)
      • 트랜잭션이 실패하여 실행한 모든 연산이 취소되고 데이터베이스가 트랜잭션 이전 상태로 복구된 상태입니다.

 

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

 

I/O System (입출력 시스템)

I/O 장치의 종류Storage (저장장치) : SSD, HDD, DVD-ROMTransmission (전송장치) : 네트워크 카드, 모뎀Human-Interface (사용자 인터페이스 장치) : 모니터, 키보드, 마우스I/O 장치와 컴퓨터 시스템 사이의 통신Por

velog.io

2) 트랜잭션 상세 : https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC