NestJS-SQL, Docker

jaegeunsong97·2023년 11월 14일
0

NestJS

목록 보기
7/37
post-thumbnail
post-custom-banner

🖊️SQL 이론

데이터는 왜 초기화가 될까?

  • Ram은 영구 저장 불가능, 따라서 영구 저장이 가능한 HDD/SSD에 데이터를 저장
    • 프로그램 재실행을 하면 Ram에 있는 변수들은 Reset
    • 그럼에도 Ram을 사용하는 이유빠르기 때문에(캐싱, 가깝잖아!)
    • 결론: Ram(실행) + HDD/SSD(코드 저장)

따라서 HDD/SSD에 데이터는 프로그램 종료시 삭제되지 않게 영구저장 해야함

  • SQL(Structured Query Language) 사용
    • SQL은 Table(정보를 담는 구조)로 구성
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 이론

Docker 등장 이유

우리는 결국 다른 사람들과 협업을 하고 절대적으로 클라우드라는 서버를 사용하는 순간이 온다. 모든 프로그램은 모든 컴퓨터에서 구동이 되어야한다.

협업 시, 환경 때문에 생기는 이슈와 문제가 발생 -> Multi Platform -> Windows, macOS, Linux

전부 어떤 프로그램을 설치 시, 환경이 다르다. 그리고 각 프로젝트 또는 프로그램을 실행 시, 가이드를 따라서 했다. 하지만 너무 귀찮음

Docker File의 등장

Multi Flatform 문제를 해결하기 위해서, Docker File을 어떤 가이드 처럼 작성 후, Docker에 먹이기만 하면 됨

  • 어떤 OS에서든 동일하게 적용 가능
    • 장점인 이유 : 매번 OS를 바꿔가며 사용하면 설치의 과정들이 귀찮으니까
      • 특히, node.jscross-platform이기 때문에 여러 OS서 사용이 가능하다.
      • 그래서 Docker를 사용하면 좋다.
      • 또한 K8S 또한 Docker를 기반으로 구동

Docker Engine

Docker Engineer가 macOS, Windows, Linux 연결을 해주기 때문에, 개발자는 Docker File을 사용해서 Docker Engine과 연동만 해주면 된다. 즉 Docker File 작성 방법만 알면된다.

  • 따라서 docker어떤 OS에서든 같은 조건과 같은 환경에서 실행이 되도록 만들어 주는 것

  • VM과 docker의 차이점

    • Docker: Docker Engine을 이용해서 Docker Container를 띄운다.
      • Docker는 native Host OS Curnul과 통신하기 때문에 빠르고 효율적이다.
    • VM: Hypervisor위에 각 프로그램을 위한 GuestOS 따로 설치해야 한다.

특정 프로그램을 시작할 때 필요한 환경과 패키지 등을 하나의 컨테이너(Docker File)로 묶어서 Docker만 설치되어 있으면, 똑같은 조건속에서 해당 컨테이너(Docker File)를 실행하게 해주는 것


🖊️Docker compose 이론

docker의 장점인 어디에서든 사용이 가능한 것(Cross-platform 및 공통 HostOS) 때문에 container를 많이 생성

각각의 컨테이너가 너무 많은데 어떻게 관리하지....?

container가 너무 많아지니까 관리 필요 -> docker-compose, k8s, docker-swam

  • K8S
    • N개의 기계(Production)에서 N개 기계에 돌리는 것에 최적화
    • 따라서 production에서 많이 사용
  • docker-compose
    • 1개의 기계(Local) N개 기계 돌리는 것에 최적화
    • 개발 local에서 많이 사용

즉, 여러 Docker container를 한번에 관리하기 위해서 docker-compose를 사용


🖊️Docker Compose file 작성

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 클릭

이름 뭐로 지을 거야?

확인

profile
블로그 이전 : https://medium.com/@jaegeunsong97
post-custom-banner

0개의 댓글