[부스트캠프 웹·모바일 8기] 챌린지 16-17일차 학습 정리

허지예·2023년 7월 31일
post-thumbnail

파일 시스템

모든 것이 파일(file)이다를 참고하여 작성함.

파일

파일이란 보조 저장 장치에 정보를 저장하는 단위이다.

파일을 하나의 책으로 생각하고, 파일이 저장되는 디스크 공간을 수 많은 책이 꽃힌 하나의 도서관이라고 생각해볼 수 있다.

파일 시스템

책을 마구 잡이로 쌓아두고, 어떤 책이 어디에 있는지 기록해두지 않는 등 책을 다루는 어떤 규칙을 만들지 않으면 도서관은 정신없는 아수라장이 될 것이다.

실제 도서관은 책에 관리 번호를 붙이고 주제별로 기록하고 어떤 위치에 책을 꽃을지 경정하는 규칙이 있다. 이런 체계 덕분에 수많은 책을 저장하고도 편리하게 정보를 꺼내 쓸 수 있다.

파일도 마찬가지로 파일을 관리하는 체계가 필요하다. 그걸 파일 시스템이라고 한다.

파일 시스템은 파일 이름과 파일 정보, 저장 공간을 관리하고 파일을 효율적으로 찾을 수 있도록 도와준다.

우리가 컴퓨터에서 파일을 열고 쓸 때마다, 운영체제는 파일 시스템을 사용한다.

파일 시스템이 하는 일

1. 파일의 메타데이터 관리

파일 시스템은 파일의 메타데이터를 관리한다.

파일 메타 데이터는 파일에 대한 데이터를 저장한다. 파일 시스템은 파일의 내용과 파일 메타 데이터를 따로 나눠서 저장한다.

  • 파일 크기
  • 만들어진 시각
  • 마지막 접근 시각
  • 변경된 시각
  • 파일 소유자
  • 파일 접근 모드
  • 어떤 블록에 저장되어있는지

2. 디렉토리와 계층 구조 관리

파일 시스템은 파일을 디렉토리 계층으로 구조화한다. 디렉토리는 파일의 링크를 저장한 특수한 파일이다. 파일 경로를 통해서 파일을 쉽게 찾을 수 있다.

디렉터리 안에 또 디렉터리를 넣을 수 있고, 하위 디렉터리에 파일을 넣어 구조화하는 방식을 '계층적 파일 시스템'이라고 한다.

그런데, 디렉터리도 결국 파일이다. 디렉터리는 하위 파일의 '링크'를 담고 있는 특수한 형태의 파일이다.

3. 디스크 주소와 블록 매칭

파일 시스템은 물리 섹터와 논리 블록을 매칭한다. 덕분에 더 빠르게 데이터를 읽고 쓸 수 있다.

4. 디스크 파편화

파일 시스템은 디스크 파편화를 자동으로 정리한다.

그 외

  • 파일 크기나 이름에 대한 규칙.
  • 파일에 대한 접근 권한 관리.
  • 디스크를 용도에 따라 나누는 파티션,
  • 파일 탐색용 소프트웨어 등등.

모든 것이 파일이다 (in Unix)

유닉스 계열 OS에서 특히 파일은 더 중요한 개념이다.

유닉스 시스템이 거의 모든 자원과 서비스를 파일 형태로 표현하고, 파일을 사용하는 방식으로 시스템 자원을 쓴다.

"유닉스에서 모든 것은 파일이다 (Everything is a file)"

일반적으로 파일은 '실행 프로그램'이나 '데이터'를 저장한다.

하지만 유닉스에선 '저장 장치', '입출력 장치', '네트워크 통신'도 모두 파일이다. 즉, 키보드, 마우스, 디스크, 디스플레이, 인터넷 소켓, 파이프... 다 파일이다.

그렇게 되면, 파일을 다루는 툴과 인터페이스로 다양한 시스템 자원을 다룰 수 있다.

+) 디렉터리 VS 폴더

디렉터리와 폴더 그리고 파일의 차이

디렉터리

디렉터리는 전화번호부와 유사하다. 전화번호부는 각 사람을 다른 이들과 구별할 수 있는 최소한의 일부 속성을 담고 있을 뿐 그 사람에 대한 상세한 데이터가 담겨 있지는 않다.

디렉터리도 실제 데이터가 있는 파일이 담겨져 있는 것이 아니라 하위 디렉터리나 파일의 구조화된 속성 정보 (위치 등)만을 담아 해당 하위 디렉터리 또는 파일을 연결해주는 매개체라고 보는 것이 정확하다.

디렉터리도 파일의 일종이다. 디렉터리는 파일일 뿐이다. 단 그 안에 담긴 정보가 우리가 흔히 생각할 수 있는 일반적인 데이터가 아니라 해당 디렉터리와 연결된 하위 디렉터리와 파일들의 포인터 정보인 것이다.

폴더

폴더는 GUI의 윈도우 계열 OS에서 도입된 개념이다. 많은 사람들이 폴더를 디렉터리와 유사한 개념으로 이해하지만 정확히는 그렇지 않다.

폴더는 디렉터리를 넘어서는 일종의 가상 분류 개념이다. 실제로 윈도우의 탐색기를 훑어보면 일반 폴더와 달리 제어판, 네트워크 환경, 프린터 등과 같은 다른 유형의 특수 폴더가 존재한다.
이것들은 OS 사용자가 각 개별 항목들의 절대 경로를 알 필요없이 유의미한 유개념별로 한데 모아 관리할 수 있는데 이것들을 폴더라는 이름으로 관리하는 것이다.

즉, 폴더는 특수 형태의 가상 폴더와 일반 폴더(=디렉터리)로 구성된다.

디렉터리가 절대 경로 중심의 수직적 구조라면 폴더는 단순한 파일이나 디렉터리 뿐만 아니라 파일에 해당하지 않는 Shell 네임 스페이스의 개체를 포함한 가상 분류 중심의 수평적 구조라고 볼 수 있다.

HTTP

HTTP란 무엇인가?을 참고해서 작성함

HTTP(HyperText Transfer Protocol)은 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.

클라이언트 즉, 사용자가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.

HTTP의 특징

  • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.
  • TCP/ IP를 이용하는 응용 프로토콜이다.
    (컴퓨터와 컴퓨터간에 데이터를 전송 할 수 있도록 하는 장치로 인터넷이라는 거대한 통신망을 통해 원하는 정보(데이터)를 주고 받는 기능을 이용하는 응용 프로토콜)
  • HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
    (이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.)
  • HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

Request

클라이언트가 서버에게 연락하는 것을 요청이라고 하며 요청을 보낼때는 요청에 대한 정보를 담아 서버로 보낸다.

Request Method (요청의 종류)

  • GET : 자료를 요청할 때 사용
  • POST : 자료의 생성을 요청할 때 사용
  • PUT : 자료의 수정을 요청할 때 사용
  • DELETE : 자료의 삭제를 요청할 때 사용

Request Message

GET https://velog.io/@heoze HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
Upgrade-Insecure-Requests: 1

요청 메세지는 세 가지 부분으로 이루어져 있다.

  • HTTP 프로토콜의 요청 라인
    - 요청 방식 (GET, POST, PUT, DELETE)
    - URL
  • Header
    - 요청에 대한 부가적인 정보
  • Body (본문)
    - POST, PUT 요청과 같이 요청과 함께 전달되는 데이터를 포함한다.
    - 요청과 함께 전달되는 데이터가 없을 경우 Body가 없을 수도 있다.

Response

서버가 요청에 대한 답변을 클라이언트에게 보내는 것을 응답이라고 한다.

Status Code

상태 코드에는 굉장히 많은 종류가 있다. 모두 숫자 세 자리로 이루어져 있으며, 아래와 같이 크게 다섯 부류로 나눌 수 있다.

  • 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
  • 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
  • 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
  • 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
  • 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.

Response Message

HTTP/1.1 200 OK												
Connection: keep-alive										
Content-Encoding: gzip									
Content-Length: 35653
Content-Type: text/html;

<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...

응답 메세지는 세 가지 부분으로 이루어져 있다.

  • HTTP 프로토콜의 상태 라인
    - 응답 상태 코드 (200)
    - 메세지
  • Header
    - 응답에 대한 부가적인 정보
  • Body (본문)
    - 서버에서 클라이언트로 전송되는 데이터

데이터베이스

데이터베이스를 한 마디로 정의하면 '데이터의 집합'이라고 할 수 있다.

데이터베이스를 ‘데이터의 집합’이라고 정의한다면, 이런 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)라고 한다.

DBMS

DBMS와 같은 소프트웨어는 특정 목적을 처리하기 위한 프로그램이다.

마찬가지로 데이터베이스를 사용하기 위해서도 소프트웨어, 즉 DBMS를 설치해야 하는데 대표적으로 MySQL, 오라클(Oracle), SQL 서버, MariaDB 등이 있다.
소프트웨어 각각의 사용 방법과 특징이 다르지만 특정 목적을 위해서는 어떤 것을 사용해도 무방하다.

1. 계층형 DBMS

계층형 DBMS(Hierarchical DBMS)는 처음으로 등장한 DBMS 개념이다.
위 그림과 같이 각 계층은 트리tree 형태를 가진다.

계층형 DBMS의 처음 구성을 완료한 후에 이를 변경하기가 상당히 까다로워 지금은 사용하지 않는 형태이다.

2. 망형 DBMS

망형 DBMS(Network DBMS)는 계층형 DBMS의 문제점을 개선하기 위해 등장했다.

위 그림을 보면 하위에 있는 구성원끼리도 연결된 유연한 구조다.

하지만 망형 DBMS를 잘 활용하려면 프로그래머가 모든 구조를 이해해야만 프로그램 작성이 가능하다는 단점이 있어, 역시 지금은 거의 사용하지 않는다.

3. 관계형 DBMS

관계형 DBMS(Relational DBMS)는 줄여서 RDBMS라고 부른다.

MySQL뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용된다.

RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있다.

SQL

SQL을 사용하면 관계형 데이터베이스에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있다.

관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다.

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.

데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다.

따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나다.

또한, 데이터의 중복을 피하기 위해 '관계'를 이용한다.

하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다.

NoSQL

말그대로 관계형 DB의 반대다.

스키마도 없고, 관계도 없다!

NoSQL에서는 레코드를 문서(documents)라고 부른다.

여기서 SQL과 핵심적인 차이가 있는데, SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했다. 하지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.

문서(documents)는 Json과 비슷한 형태로 가지고 있다. 관계형 데이터베이스처럼 여러 테이블에 나누어담지 않고, 관련 데이터를 동일한 '컬렉션'에 넣는다.

따라서 위 사진에 SQL에서 진행한 Orders, Users, Products 테이블로 나눈 것을 NoSQL에서는 Orders에 한꺼번에 포함해서 저장하게 된다.

따라서 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이 NoSQL이다. (NoSQL에는 조인이라는 개념이 존재하지 않음)

그러면 조인하고 싶을 때 NoSQL은 어떻게 할까?

컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.

하지만 이러면 데이터가 중복되어 서로 영향을 줄 위험이 있다. 따라서 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 NoSQL을 쓰면 상당히 효율적이다.

CSV 파일

📑 CSV 기초 정리

표 형태의 데이터를 저장하는 파일 형식이다. 한 줄이 한 개의 행에 해당하며, 열 사이에는 쉼표(,)를 넣어 구분한다.

사용 예시

이름생년국어 점수영어 점수수학 점수
홍길동1992년7월17일100점90점70점
희동이1992년4월3일90점100점100점

위에 표를 CSV 형태로 저장하면 아래와 같다.

이름,생년,월,일,국어 점수,영어 점수,수학 점수
홍길동,1992,7,17,100,90,70
희동이,1992,4,3,90,100,100

CSV 형식의 단점

반대로 xml이나 json에서는 간단하다는 점을 csv의 단점으로 꼽고 있기도 하다. 주로 아래와 같은 이유가 단점으로 꼽힌다.

  • 각 필드의 의미를 기술할 수 없다.
  • 복잡한 데이터의 다중 구조를 기술할 수 없다.
  • 데이터 형식에 대한 정보를 기술할 수 없다.

+) DB 인사이드 | MySQL Architecture

profile
대학생에서 취준생으로 진화했다가 지금은 풀스택 개발자로 2차 진화함

0개의 댓글