IT 기초: 데이터베이스
4주 과정, 하루 1시간

IT 기초: 데이터베이스

엑셀과 무엇이 다른지부터 시작해, WSL에 PostgreSQL을 설치하고 작은 쇼핑몰 장부를 직접 만들어 SQL, 설계, 인덱스, 트랜잭션, 백업을 손으로 익힙니다. 마지막에는 구글 클라우드 데이터베이스를 고객에게 골라 줄 수 있게 됩니다. 위에서부터 하나씩 체크하세요.

다음 할 일

…

실습 방법 보기
전체 진행0 / 0
진행 상황: 이 브라우저에 저장

공부하는 방법

매일 1시간몰아서 8시간보다 매일 1시간이 오래 남습니다. 과제마다 예상 시간이 적혀 있습니다.
읽기 20%, 손 80%개념을 읽었으면 바로 psql에 직접 쳐 보고 결과를 눈으로 확인합니다.
일부러 부수기설정을 틀리게 바꾸고, 에러 메시지만 보고 원인을 찾습니다.
소리 내 설명하기단계 끝의 자가 점검에 답을 보지 않고 말해 봅니다. 막히면 그 과제로 돌아갑니다.
맥북에서 실습하기Windows에서 한다면 건너뛰세요

맥에서는 Ubuntu 가상 머신(VM)을 하나 띄워 그 안에서 실습합니다. 그러면 이 사이트의 명령을 Windows(WSL)와 똑같이 쓸 수 있습니다. 사이트에 "WSL Ubuntu 터미널"이라고 나오면 "VM 터미널"로 읽으세요.

  1. Homebrew 설치 (맥용 설치 관리자)회사 맥이면 설치 전에 IT팀 승인을 확인하세요.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Ubuntu 가상 머신 만들고 들어가기Multipass는 무료입니다. 이 VM이 Windows의 WSL 역할을 합니다.
    brew install --cask multipass                                  # 가상 머신 관리 도구 설치
    multipass launch --name ubuntu --cpus 2 --memory 4G --disk 20G  # Ubuntu VM 만들기 (쿠버네티스는 --memory 8G 권장)
    multipass shell ubuntu                                          # VM 터미널로 들어가기
    # 여기서부터 사이트의 "WSL Ubuntu 터미널" 명령을 그대로 실행
  3. 맥 브라우저에서 VM 안의 서비스 열기WSL과 달리 localhost가 자동으로 연결되지 않습니다.
    multipass info ubuntu | grep IPv4  # VM의 IP 확인 (예: 192.168.64.5)
    # 브라우저에서 localhost 대신 http://<VM IP>:<포트> 로 접속
    # kubectl port-forward 는 --address 0.0.0.0 을 붙여야 맥에서 열림
  4. 끝나면 정리VM은 켜 두면 맥의 메모리를 계속 씁니다.
    multipass stop ubuntu            # VM 끄기 (내용은 남음)
    multipass start ubuntu           # 다시 켜기
    multipass delete --purge ubuntu  # 완전히 삭제

Git과 Python은 VM 없이 맥에서 바로 해도 됩니다 (xcode-select --install, brew install python). 서버, 네트워크, DB처럼 리눅스 명령이 나오는 사이트는 VM에서 하세요.

WSL 설치, PowerShell 명령건너뜁니다. 위 2번 VM이 대신합니다.
Apple Silicon(M1 이후) 맥VM에서 uname -m이 aarch64면 다운로드 주소의 amd64를 arm64로 바꿉니다. arm64 버전이 없는 이미지는 exec format error가 날 수 있습니다.
Docker Desktop맥도 큰 회사는 유료입니다. VM 안의 Docker Engine을 쓰고, 맥에서 직접 쓰려면 무료인 Colima를 씁니다.
파일 주고받기multipass transfer 파일 ubuntu: 또는 multipass mount ~/study ubuntu:/home/ubuntu/study
브라우저로 열기localhost 대신 VM IP를 씁니다 (위 3번).

VM 없이 맥에서 바로 하고 싶다면 brew install kubectl kind helm colima docker 로 도구를 깔 수 있습니다. 단, 리눅스 내부(namespace, cgroup, systemd, iptables)를 들여다보는 실습은 VM에서만 됩니다.

처음 보는 용어

데이터베이스(DB)여러 사람과 프로그램이 함께 쓰도록 규칙에 맞게 정리해 저장한 데이터 모음입니다. 잘 정리된 장부입니다.
DBMS데이터베이스를 저장하고 SQL을 실행하며 권한, 동시 접근, 장애 복구를 관리하는 프로그램입니다. PostgreSQL, MySQL 등이 있습니다.
관계형 데이터베이스데이터를 행과 열로 된 테이블에 담고, 테이블끼리 키로 연결하는 데이터베이스입니다. SQL로 다룹니다.
SQL관계형 데이터베이스에 데이터를 묻고, 넣고, 바꾸고, 지우는 표준 언어입니다. 장부 관리인에게 건네는 주문서입니다.
스키마테이블, 열, 타입, 제약조건 같은 데이터베이스의 구조 설계입니다. PostgreSQL에서는 테이블을 묶는 이름 공간(public 등)을 뜻하기도 합니다.
기본키(Primary Key)테이블에서 각 행을 하나로 특정하는 열입니다. 중복과 빈 값이 허용되지 않는 주민등록번호입니다.
외래키(Foreign Key)다른 테이블의 기본키를 가리키는 열입니다. 가리키는 행이 없으면 저장을 거절합니다.
제약조건NOT NULL, UNIQUE, CHECK, FOREIGN KEY처럼 잘못된 값이 저장되지 않게 막는 규칙입니다.
JOIN두 테이블을 공통 번호로 맞춰 옆으로 붙이는 SQL 기능입니다. INNER, LEFT, RIGHT, FULL OUTER가 있습니다.
정규화같은 정보를 한 곳에만 저장하도록 테이블을 나누는 설계 방법입니다. 고칠 때 모순이 생기지 않게 합니다.
인덱스특정 열의 값을 정렬해 따로 저장한 책 뒤의 찾아보기입니다. PostgreSQL 기본은 B-tree이며, 읽기는 빨라지고 쓰기와 공간 비용이 듭니다.
실행 계획(EXPLAIN)DB가 쿼리를 어떤 순서와 방법(전부 훑기, 인덱스 사용 등)으로 처리할지 보여 주는 작업 계획서입니다.
트랜잭션여러 SQL 문장을 하나로 묶어 모두 성공하거나 모두 취소되게 하는 단위입니다. 계좌 이체와 같습니다.
ACID트랜잭션이 지켜야 할 네 성질입니다. 원자성, 일관성, 격리성, 지속성.
격리 수준동시에 실행되는 트랜잭션이 서로의 변경을 얼마나 보는지 정하는 설정입니다. PostgreSQL 기본은 Read Committed입니다.
교착 상태(Deadlock)두 트랜잭션이 서로 상대가 잠근 데이터를 기다려 멈춘 상태입니다. PostgreSQL이 감지해 한쪽을 취소합니다.
복제(Replication)원본 DB의 변경을 복제본이 실시간으로 따라 쓰는 것입니다. 읽기 분산과 고가용성에 쓰지만 백업을 대신하지는 못합니다.
커넥션 풀DB 연결을 미리 열어 두고 여러 요청이 돌려 쓰게 하는 방식입니다. 연결을 맺는 비용과 최대 연결 수 문제를 줄입니다.
NoSQL과 CAPNoSQL은 표가 아닌 키-값, 문서, 와이드 컬럼, 그래프, 검색 등의 DB입니다. CAP은 네트워크가 끊겼을 때 일관성과 가용성 중 하나를 골라야 한다는 원칙입니다.
OLTP와 OLAPOLTP는 주문처럼 짧은 읽기와 쓰기가 많은 일, OLAP는 대량 데이터를 모아 분석하는 일입니다. 계산대와 결산실입니다.

계속 쓰게 될 자료