23일차

Kangdh·2026년 9월 14일

파이썬 교육

목록 보기
25/33

데이터베이스 / 스토리지

  • 액셀과 메모장 같은 파일로 수많은 정보를 저장하려하면 생기는 문제점
    • 중복데이터가 많아진다.
    • 불일치 : a파일에는 재고가 100, b파일에는 재고가 80..와 같은 문제가 생길수 있음
    • 검색의 비효율 : 많은 양의 데이터를 눈으로 찾기엔 힘듬
    • 동시 수정 문제 : 파일은 동시에 여러명이 수정하도록 설계되지 않았는데 동시간대 다른 유저끼리 파일을 수정한다면?
      등의 이유로 데이터가 쌓이는데 관리가 안되니 저장하는 방식을 새로 설계함
      -> 초기 형태의 DB
  • 계층형 데이터베이스

    데이터를 상위와 하위 관계인 트리 구조로 조직하여 관리하는 형태의 데이터베이스 모델
    특성으로는 루트,노드 / 부모 - 자식 관계 / 서브 트리 / 깊이와 높이 / 간선 이 있다

  • 루트,노드 : 트리는 하나의 특별한 노드인 루트를 포함할 수 있다. 루트는 트리의 최상단에 위치하며, 모든 간선은 직접적으로 루트에서 시작함.
  • 부모 - 자식 관계 : 하나의 부모 노드는 여러 자식 노드들을 가질 수 있지만, 자식 노드는 오직 하나의 부모 노드만 가질 수 있다.
  • 서브 트리 : 트리의 각 노드는 자신의 자식 노드들과 함계 서브트리를 이룰 수 있다.
  • 깊이와 높이
    • 깊이 : 루트에서 특정 노드까지 도달하기 위해 거쳐야 하는 간선의 수
      • 높이 : 특정 노드에서 가장 먼 리프 노드까지의 경로 길이
      • 트리의 높이는 루트 노드의 높이 또는 가장 깊은 노드의 깊이를 의미함.
  • 간선 : 노드 간의 연결을 나타내는 선을 간선(Edge)라고 한다.
  • 네트워크형 데이터베이스

    컴퓨팅에서 네트워크 모델 또는 망 모형은 객체와 그들 사이의 관계를 유연하게 표현하기 위해 고안된 데이터베이스 모델이다. 이 모델의 특징은 객체 유형을 노드로, 관계 유형을 아크로 보는 *데이터베이스 스키마 가 그래프 구조를 띠며, 계층형 모델이나 격자 그래프에 국한되지 않는다는 점이다.

  • 데이터베이스 스키마 : 일반적으로 관계형 데이터베이스 관리 시스템(RDBMS)이 지원하는 형식 언어로 기술된 데이터베이스의 구조를 의미한다. 스키마라는 용어는 DB가 구축되는 방식에 대한 청사진으로서 데이터의 조직화를 일컫는다.

MySql / PostgreSql

  • MySQL : 오픈 소스 관계형 데이터베이스 관리 시스템이다(RDBMS) 관계형 데이터베이스는 데이터를 하나 이상의 데이터 테이블로 정리하며, 여기서 데이터는 서로 연관될 수 있다. 이러한 관계는 데이터의 구조화를 돕는다.

  • PostgreSQL : 오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS)로, 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함.

MySQL 과 PostgreSQL의 공통점

  • 둘 다 구조화된 쿼리 언어(SQL)를 인터페이스로 사용하여 데이터를 읽고 편집 가능
  • 둘 다 오픈 소스이다
  • 둘 다 데이터 백업,복제 및 액세스 제어 기능이 내장되어 있음.

RDB(관계형 데이터베이스)

ACID

  • Atomicity(원자성) : All or Nothing / 트랜잭션은 모두 실행하거나 실행하지않음의 두가지 상태만
  • Consistency(일관성) : 트랜잭션 이전과 이후에 데이터베이스는 항상 일관적이여야 한다는 규칙
  • Isolation(고립성) : 여러 트랜잭션이 동시에 실행될 때에도, 혼자 실행되는 것처럼 동작하게 만들어야 한다.
  • Durability(영속성) : 커밋된 트랜잭션의 결과는 데이터베이스에 영구적으로 저장되어야 한다.

INDEX : 추가적인 쓰기 작업과 저장 공간을 활용하여 DB 테이블의 검색 속도를 향상시키기 위한 자료구조다. 우리가 뭔가를 찾기 위해 목차를 보는거같은 느낌이다.

RDB - 정확하게 처리는 해주지만 서버 1대에서 담당
RDB 문제점의 해결하는 방법으로는 수직 확장(Scale-up) : 서버를 더 좋은걸 사용하기 또는 수평 확장(Sclae-out) : 서버를 여러개 사용 해결방법이 존재했지만 그 중 RDB는 수평 확장이 어려운 문제점이 있었다. 그래서 NoSQL이 등장했다.

NoSQL

Not only SQL
-> SQL만 아니면 된다. / Document, key-value, graph

특징으로는

  • 스키마를 가지지 않는다(Schemaless).
  • 대규모 확대가 가능하도록 수평적 확장성(Scale-out)을 가져 대규모의 데이터를 유연하게 처리할 수 있다.
  • DB의 다양한 저장소를 사용 가능
  • Read/Write의 성능이 뛰어나다.
  • 빅데이터 처리에 특화되어 있다.

정확성을 어느정도 포기, 속도랑 확장성을 얻음, 표 형식을 버림, 각 서비스에 맞는 형태의 DB를 사용

MongoDB : 표 형태의 저장 X, 메모장처럼 저장함.
Redis : 빠른 임시 저장소 / 자주 읽는 데이터를 메모리에 올려놓고 바로 꺼내주는 역할
Cassandra : 많은 데이터에 특화 되어있음(여러 서버에 저장) / 쓰기 속도가 빠름

SQL은 정확성이 요구되는 분야에서 사용된다 (금융권)
NoSQL은 소셜서비스가 대표적이다.

클라우드 DB / 서버리스

여태까지는 전부 직접 설치하는 방법이였다 > 서버 역할을 하는 컴퓨터에 직접 MySQL이나 PostgreSQL을 설치해서 사용(설정 및 관리), 업데이트, 백업 / 용량이 부족할 경우는 증설 / DB 관리자의 역할

이런걸 대신해주는게 > AWS,RDS

Firebase > 설정도 거의 안하고 앱에서 바로 DB를 사용 가능하게 해줌

관리형 DB(Managed DB) / 서버리스가 핵심
서버리스는 실제로 서버는 있지만 사용자가 신경쓰지 않아도 됨
-> 서버롼리는 클라우드 업체가 해줌

이제 DB는 설치하는게 아닌 사용하는게 됨

Deploy

  • 배포 (Release / Deploy)

    보통 Release의 뜻과 Deploy의 뜻이 비슷해서 둘이 같은 의미로 사용하는줄 알았는데, 서로 다른 의미를 가지고 있다고 한다

  • Release(출시): 사용자에게 공개할 버전을 확정하는 과정 / 사용자가 서비스나 기능을 사용할 수 있게 하는 것

  • Deploy(배포) : 배포는 개발된 소프트웨어를 실제 운영 환경에 적용하는 과정을 말한다.

  • 웹서버

    • nginx

      nginx는 웹 서버 소프트웨어로, 웹 서버, 리버스 프록시 및 메일 프록시 기능을 포함한다.
      요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다.

    • docker

      *컨테이너를 활용하여 소프트웨어를 배포 및 구동하기 위한 오픈 소스 플랫폼이다.
      특징
      컨테이너 - 실행 중인 컴퓨터의 커널에 라이브러리, 실행파일을 격리하고, 이 공간 내에 독립된 프로세스 및 네트워크를 실행시키는 기수로가 이를 위한 소프트웨어 구성 일체를 이야기한다. 같은 버전 커널에서 동일한 동작으로 보장한다.

    • vercel

      클라우드 컴퓨팅 서비스지만 하나의 컴퓨터 구조를 가지는 인스턴스를 주 상품으로 제공하는 AWS와 다르게, Vercel은 정적(Static)사이트와 고수준의 서버리스 펑션을 제공한다. 특히나 모든 설정을 수동으로 할 필요 없이 사용하고 싶은 소스를 정하고 Deploy만 하면 나머지 빌드 과정이나 운영은 Vercel이 모두 처리한다. 따라서 웹 개발자에게 특히 친화적이다.

    • railway

      Railway은 코드 배포, 네트워킹, 데이터베이스 관리 등을 하나의 인터페이스에서 처리할 수 있는 올 인원 클라우드 배포 플랫폼이다. 주요 특징으로는 간편한 배포, 원클릭 DB,시각적 관리, 유휴 비용 절감 등이 있다.

    • 도메인

      컴퓨터나 서버가 서로를 찾기 위해 쓰는 복잡한 숫자 주소(IP) 대신, 사람이 기억하기 쉽도록 만든 문자 형태의 인터넷 주소

    • dns

      Domain Name System은 사용자에게 친숙한 도메인 이름을 컴퓨터가 네트워크에서 서로를 식별하는데 사용하는 인터넷 프로토콜(IP) 주소로 변환하는 인터넷 표준 프로토콜의 구성 요소이다.

0개의 댓글