데이터는 왜 초기화가 될까?
Ram
은 영구 저장 불가능, 따라서 영구 저장이 가능한 HDD/SSD
에 데이터를 저장Ram
에 있는 변수들은 Reset
Ram을 사용하는 이유
는 빠르기 때문에(캐싱, 가깝잖아!)
Ram(실행) + HDD/SSD(코드 저장)
따라서 HDD/SSD에 데이터는 프로그램 종료시 삭제되지 않게 영구저장
해야함
SELECT {column} FROM {table};
SELECT id, title FROM post;
UPDATE {table} SET {column} WHERE {condition};
UPDATE post SET likeCount = 0 WHERE id = 3;
DELETE FROM {table} WHERE {condition};
DELETE FROM post WHERE author = 'newjeans_official';
INSERT INTO {table} {column1, column2 ...} VALUES {value1, value2 ...};
INSERT INTO posts (id, author) VALUES (7, '코딩하는 코팩');
Docker 등장 이유
우리는 결국 다른 사람들과 협업을 하고 절대적으로 클라우드라는 서버를 사용하는 순간이 온다. 모든 프로그램은 모든 컴퓨터에서 구동이 되어야한다.
협업 시, 환경 때문에 생기는 이슈와 문제가 발생 -> Multi Platform
-> Windows, macOS, Linux
전부 어떤 프로그램을 설치 시, 환경이 다르다. 그리고 각 프로젝트 또는 프로그램을 실행 시, 가이드를 따라서 했다. 하지만 너무 귀찮음
Docker File의 등장
Multi Flatform 문제를 해결하기 위해서, Docker File을 어떤 가이드 처럼 작성 후, Docker에 먹이기만 하면 됨
어떤 OS에서든 동일하게
적용 가능node.js
는 cross-platform
이기 때문에 여러 OS서 사용이 가능하다. Docker Engine
Docker Engineer가 macOS, Windows, Linux 연결을 해주기 때문에, 개발자는 Docker File
을 사용해서 Docker Engine
과 연동만 해주면 된다. 즉 Docker File 작성 방법만 알면된다.
따라서 docker
는 어떤 OS에서든 같은 조건과 같은 환경에서 실행이 되도록 만들어 주는 것
VM과 docker의 차이점
Docker Engine
을 이용해서 Docker Container
를 띄운다.Host OS
Curnul과 통신하기 때문에 빠르고 효율적이다.Hypervisor
위에 각 프로그램을 위한 GuestOS
따로 설치해야 한다.특정 프로그램을 시작할 때 필요한 환경과 패키지 등을 하나의 컨테이너(Docker File)
로 묶어서 Docker만 설치되어 있으면, 똑같은 조건속에서 해당 컨테이너(Docker File)
를 실행하게 해주는 것
docker의 장점인 어디에서든 사용이 가능한 것(Cross-platform 및 공통 HostOS)
때문에 container를 많이 생성
각각의 컨테이너가 너무 많은데 어떻게 관리하지....?
container가 너무 많아지니까 관리 필요 -> docker-compose
, k8s
, docker-swam
K8S
docker-compose
즉, 여러 Docker container를 한번에 관리
하기 위해서 docker-compose를 사용
docker를 실행하고 있는 상태
docker --version // docker를 실행 후, 확인
// Docker version 24.0.6, build ed223bc
docker-compose.yaml 생성
services: # 어떤 정보를 정의할거니?
postgres: # postgres라는 서비스를 정의할게.
image: postgres:15 # postgres 15버전 이미지 사용할 것이다.
restart: always # 시작을 할때마다 재시작 해줘.
volumes: # 왼쪽(현재 데이터, Host OS의 위치) : 오른쪽(image안에 존재하는 폴더, 이 위치는 데이터들이 저장되는 위치) => (동기화시킨다)
- ./postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432" # Host OS의 port와 image 속의 port를 연동, 따라서 Host OS의 5432에 요청을 넣게 되면, 해당 요청은 image의 postgres:15의 이미지의 port 5432에 요청이 간다.
environment: # 데이터베이스에 관한 정보
POSTGRES_USER: postgres # image를 실행해서 postgres 이미지를 띄웠을 때, 기본 사용자의 이름은?
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres # 기본으로 사용 할 데이터베이스 이름
./postgres-data와 image속에있는 /var/lib/postgresql/data 폴더가 완벽한 동기화
docker-compose up // 실행
docker-compose down // 종료
VSC postgres 설치
현재 Localhost와 같음, 현재 컴퓨터의 IP
사용자 이름은?
비밀번호는?
포트는?
보안된 연결 사용? X
postgres 클릭
이름 뭐로 지을 거야?
확인