: 브라우저에서 백엔드 서버로 API 요청을 보내고 요청을 받은 백엔드가 DB로 데이터를 저장하거나, 가져오는 등의 행동을 하기 위해 ORM이나 ODM(Object-Document Mapper)을 사용
ORM(Object-Relational Mapper)
: 표(table)로 이루어진 데이터베이스를 다룰 때 사용하는 SQL을 다른 언어에서 쉽게 사용하도록 해주는 역할
- ORM의 종류 : sequalize, typeorm, prisma
ODM(Object-Document Mapper)
: 문서(document)와 collection으로 이루어진 NoSQL 데이터베이스를 다룰 수 있도록 해줍니다.
- ODM의 종류 : mongoose
표에 한줄 한줄(row) 쌓이는 형식(ORM : Object Relation Mapping )
RDB : 표 간에 관계가있는 관계형 DB
ex) Oracle, MySQL, Postgresql
하나하나의 document로 저장되어있으며 그 document는 객채형태로 저장되어있음
하나의 객체가 하나의 문서에 저장이되는 형식 (ODM : Object Document Mapping 객체를 문서로 맵핑해준다는 의미 )
SQL + 추가적 기능
ex) MongoDB
: 버전까지 맞춰서 설치를 했는데 안되면? 프로그램이 운영체제에 따라서 작동환경이 달라져서 -> 가상머신으로 설치가능(윈도우 컴퓨터 안에 가상머신으로 리눅스 설치하는것) -> 컴퓨터 안에 컴퓨터를 또 설치하니 속도가 느려짐 => 가벼운 Docker 가 나오게됨!
: 마우스, 키보드 등 불필요한 운영체제는 공유해서 같이 쓰고 필요한 운영체제들만 설치하는것! -> 부팅 등 운영체제의 핵심기능을 공유하는 가상머신 => 따라서 os 전체를 설치하지 않아도 되는것!
: 개발 환경 요소들이 설치된 모습을 이미지로 저장하고 저장한 이미지를 클라우드에 올려 이미지들이 서로 연결되서 동작하는 설정을 문서(Dockerfile)로 저장합니다. 새 컴퓨터에 가서 복사한 문서의 내용대로 이미지를 다운받아 설치할수있도록 해주는 기능
docker --version
명령어 입력 으로 확인 가능FROM node:16 WORKDIR /myfolder/ COPY . /myfolder/ CMD node index.js
- FROM node:16 → node, npm, yarn이 모두 깔린 리눅스 컴퓨터가 하나 생성되는것
- WORKDIR /myfolder/ → 작업폴더 생성 및 지정
- COPY . /myfolder/ → (. 은 내컴퓨터 /myfolder/ 는 도커컴퓨터) 내컴퓨터안에있는 모든 폴더를 myfolder 복사해달라는 의미
- CMD node index.js → 복사해서 넣은 파일을 도커 실행
즉, 실행시키게되면 node16버전이 깔려있는 리눅스 컴퓨터가 실행되고 그 안에 마이폴더라는 폴더가 있고 그 안에 index.js가 카피되어있는데 CMD node index.js 를 하면 자동으로 node index.js가 실행되는 원리
⇒ 이미지 빌드
이미지 빌드를 가지고 실행시킬것 📌 즉, 아직 실행이 된것아닌상태
: Dockerfile을 기반으로 이미지를 생성하는 작업
▶︎ docker build .
: 폴더 파일이 있는 위치에서 진행 -> 포장이 완료됨!(한줄씩 따로 포장이 진행) = 이미지(포장된 결과)가 구워진것(이미지가 생성된것)
▶︎ docker images.
: 이미지가 구워진것들 뭐가 있는지 확인(우리가 만든 이미지 확인 가능)
: 포장된 이미지를 가지로 하나의 컴퓨터를 실행시키는것 (컴퓨터를 새로 만드는것)
▶︎ docker run 이미지ID
: 이미지(도커) 실행
📌 docker 는 실행을하고나면 컴퓨터가 자동으로 종료가되므로 주의할것!
- api 서버를 만든다는것은 24시간 컴퓨터가 실행되야하므로 종료가 안되게 만들어야됨!
- 따라서, 안쪽에서 while(true)/ for() / express.listen(3000) 등으로 무한반복되게 반복문등 작성해줘야됨
▶︎ docker ps
: 현재 실행중이거나 있는 가상 컴퓨터(도커) 확인(종료됬는지 확인가능) 방법
▶︎ docker ps -a
: 종료된 컴퓨터까지 모두 보여주는 실행키
언제 종료되었는지도 알수있음
종료된것 계속 보관할 필요없기에 삭제해줘도됨.
docker ps -a 를 실행하면 실행된 이미지 앞에 실행된 컨테이너 즉 새로운 컴퓨터 아이디가 나타나는것 확인 가능
docker ps -a 하면 컨테이너는 삭제되었지만 이미지는 삭제되지 않는것!!! (docker images 로 이미지 확인해보면 알수있음)
▶︎ docker stop 컨테이너아이디
: 실행중인 컨테이너 중지 명령어
▶︎ docker rm 컨테이너 아이디
: 종료된 컴퓨터 삭제
▶︎ docker rmi 이미지 아이디
: 도커 이미지 삭제
▶︎ docker rmi ``docker images -a -q`` (백틱으로감싸서)
: 모든도커 이미지 삭제
: 실행중인 도커 터미널은 그대로 둔 상태에서 새로운 터미널에서 진행
▶︎ docker exec -it 컨테이너아이디 /bin/bash
: 도커에서 돌아가고 있는 가상 컴퓨터의 터미널로 들어온 것
- 도커로 실행하는데 -i (수정할수있겠금 권함을 줘 standard input (stdin)약자)
- t(컨테이너 터미널에 접속한다) bin/bash 쉘이 도커 컴퓨터 안에 열림
- => codecamp-backend-01에서 root@37df2a7659d3: 로 위치가 바뀌는것 확인(root@37df2a7659d3: => 다른쉘 즉 다른 컴퓨터로 들어온것! = 도커 컴퓨터!)
root@37df2a7659d3:/myfolder# => myfolder 에 현재 들어와있는것 (WORKDIR /myfolder/ 작업디렉토리를 마이폴더로 했기에!) -> ls (마이폴더안에 모두 카피된것 보임!- node modules가 설치된것도 확인가능! 분명 폴더 목록에는 없는데 ls안에 보면 있으니!) -> 상위폴더로 올라가서 ls 로 확인해보면 내가 만든 마이폴더도 확인가능
▶︎ mkder aaa : aaa 폴더 생성 -> 다시 ls 로 보면 aaa 폴더 생성 확인 가능
▶︎ top : 현재 실행되고있는 프로그램 목록들 나옴(command탭 보면 node도 실행되고있는것 확인가능)