02-7 디지털 시대, 데이터와 데이터베이스의 이해
데이터와 데이터베이스
- 데이터: 어떤 의미나 목적 없이 단순히 수집된 순수한 '자료'
- 정보: 데이터가 모여서 의도나 목적에 따라 분석되어 의미가 부여된 것
- 데이터베이스
- 데이터(data)의 기지(base)
- 전산 상에 저장되는 구조화된 정보 또는 조직화된 데이터 모음
- 소프트웨어를 통해 데이터를 저장하고 읽고 수정하거나 삭제할 수 있는 형태의 데이터 집합
- 하나의 데이터베이스는 여러 프로그램에서 활용. 특정 프로그램에 종속되지 않은 독립된 소프트웨어로 구축
DBMS (DataBase Management System)
- DBMS의 기능
- 데이터 저장, 조회, 삭제, 수정
- 데이터 중복 및 잘못된 형식으로 저장되는 것 방지
- 외부 접근 통제
- 사용자 권한 지정을 통한 보안 유지
- DBMS 예: 오라클, MySQL, MongoDB, 레디스 등
관계형 데이터베이스
- RDBMS (Relational Database Management System)
- 가장 오래된 형태의 데이터베이스, 여전히 대세
- 테이블에 데이터를 저장
- 컬럼마다 데이터형식 미리 설정 -> 잘못된 데이터 입력 방지
- join 기능: 각각 나누어진 테이블을 열의 관계에 따라 하나로 합쳐서 조회 -> 데이터를 효율적이고 안정적으로 관리하는 동시에 편리하게 활용
- 오라클, MySQL, MSSQL, PostgreSQL, MariaDB, SQLite
SQL
- SQL (구조화 질의 언어, Structured Query Language)
NoSQL
- 관계형 데이터베이스를 제외한 DBMS
- SQL을 사용하지 않는다
- 문서 데이터베이스
- 각 데이터를 XML이나 JSON고 비슷한 형태의 문서로 저장
- 데이터마다 동일한 항목을 가질 필요가 없다
- 일관성이 필요한 종류의 데이터에는 부적합하지만 유연성이 강점
- MongoDB, CouchDB 등
- 키-값 데이터베이스
- 키와 값의 쌍만을 저장하는 데이터베이스
- 한정된 기능. 빠른 속도. 용량 부족시 다른 서버와 분담이 용이한 수평 확장성.
- 레디스, 아마존 다이아모 DB, 맵캐시드 등
- 그래프 데이터베이스
- 노드와 엣지로 구성된 자료 구조
- Neo4J, JanusGraph
02-8 개발자들은 왜 리눅스를 좋아하나요?
운영체제
- CPU, 메모리, 그래픽 카드 등의 기기들을 가동하고 제어해서 사용자가 컴퓨터로 각종 작업을 할 수 있는 환경 마련
- 하드웨어 기기와 사용자를 연결하고 중재하는 역할
- 하드웨어 자원을 쓸 수 있게 해줄 뿐 아니라 안정적이고 효율적으로 작동하도록 제어
- PC용 운영체제: MS 윈도우, 애플 맥OS, 리눅스
- 모바일 운영체제: 구글 안드로이드, 애플 iOS
GUI vs CLI
- 인터페이스: 두 개 이상의 시스템이나 장치가 상호 작용할 수 있는 접점.
- 사용자 인터페이스: 사람과 사물 또는 프로그램 사이에서 의사소통할 수 있도록 돕는 것
- GUI (Graphic User Interface)
- 그래픽 요소들을 사용해서 사용자와 상호 작용하는 것
- CLI (Command Line Interpreter)
- 명령줄에 텍스트를 입력함으로써 컴퓨터에 일을 시키는 환경
- CLI를 사용하는 이유
- CLI 환경이 컴퓨터 자원을 덜 소모한다.
- CLI 환경이 간편하고 정확
- 네트워크 환경에서는 GUI보다 CLI가 더 적합
리눅스
- 리눅스
- 오픈 소스
- 다양한 개량버전 : 리눅스 배포판
- 안드로이드도 리눅스를 모바일용으로 개조한 운영체제
- 우분투
- 현재 가장 많이 사용되는 리눅스 버전
- 우분투 데스크탑: GUI탑재한 클라이언트용
- 우분투 서버용: CLI로 작동
- 레드햇 엔터프라이즈 리눅스
- 센트OS와 로키 리눅스
- 레드햇 리눅스를 기술 지원 없이 무료로 배포한 버전
- 지원 종료됨
- 기타: 리눅스 민트, 라즈베리 파이, 만자로 리눅스
커널
- 커널(kernel, 중심부): 운영체제의 핵심
- 하드웨어와 응용 프로그램 사이에서 작동하며 컴퓨터에서 일어나는 모든 일을 통제
- SW, HW를 인터페이스로 연결
- 작업 간 우선순위 정해서 컴퓨터 자원을 효율적으로 분배
- 메모리가 어떤 작업에 얼마나 할당되는지
- 어떤 프로그램이 CPU를 오래 점유하는지 등을 끊임없이 추적하며 컴퓨터가 안정적으로 작동할 수 있도록 관리
- 하드웨어 - 커널 - 사용자 인터페이스 - 응용프로그램
- 쉘 (Shell): 커널과 사용자 사이의 인터페이스
오픈 소스
- 누구나 프로그램의 소스 코드를 살펴볼 수 있으며, 오류를 찾아 수정하거나 새로운 기능을 제안하는 방식으로 개발에 참여할 수 있다.
주피터에서 kernel과 shell을 보며.. 관심을 가져본적이 없는데... kernel은 하드웨어와 연결되어있는 핵심 / shell은 나(사용자)와 연결된 인터페이스구나...
챗지피티한테 물어보기...
주피터 노트북(Jupyter Notebook)에서 "커널"은 프로그래밍 언어를 실행하고 코드를 처리하는 백엔드 프로세스를 의미
주피터 노트북 커널은 주피터 서버와 연결되어 있습니다. 주피터 서버는 사용자의 브라우저와 커널 간의 중개 역할을 하며, 노트북 인터페이스를 제공
주피터 커널 - 주피터 서버 - cell (shell은 없다)