Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

switch: 재룡 - 다솜 week2 Switch #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions week2/da-song/dasom/README-dasom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## JAVASCRIPT 동작

- 싱글스레드인 이유

- 웹에서 실행시키기 위해서 무거운 멀티 스레드 보다는 가벼운 싱글 스레드를 택하게 되었음
- 싱글스레드 인 대신 async await 비동기를 통해서 여러 일을 같이 실행 시킬 수 있도록 하고 있음

- 인터프리터

- 처음에는 인터프리터
- v8 엔진에서 컴파일하는 과정을 추가하게 됨
- -> 유사 인터프리터가 됨
- 과정 : 토큰화 > AST > 컴파일

- 콜스택 / 힙 / 태스크 큐
main.js

```js
var a = 1;
const b = 2;
let c = 3;

function plus(a, b) {
return a + b;
}

function func() {
return plus(1, 2);
}

const func2 = () => {
console.log("a");
};

func();
```

- 콜스택 : func / plus
- web API: setTimeout / setInterval

- javascript 로 document 조작
- React를 뺀 frontend
26 changes: 26 additions & 0 deletions week2/da-song/jasong/Dockerfile.step1
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 기본 Dockerfile 문법에 익숙해져 봅시다.
# https://hub.docker.com/_/gcc
# image-이름:image-tag

FROM gcc:latest

# COPY를 통해 원하는 파일을 image 내부에 복사할 수 있어요.
# COPY <호스트의 파일 경로> <이미지 내부의 파일 경로>

# 시작 위치를 /test로 설정하는 방법 (pwd: /test)
WORKDIR /test

# 현 위치 (dockerfile 위치)에 있는 test.c 파일을 /test/test.c로 복사해요.
COPY ./test.c ./test.c
# 여기까지는 "한 줄 한 줄이 Layer임"

# 컴파일 해야겠죠?
# cli로 치는 명령어들은 RUN으로 적어요.
# cli로 c파일을 컴파일 하려면 gcc <SRC> -o <TARGET>

RUN gcc test.c -o test


# 컨테이너가 시작되었을 때 실행할 명령어 (shell)
# /bin/bash ./test
ENTRYPOINT [ "./test" ]
31 changes: 31 additions & 0 deletions week2/da-song/jasong/Dockerfile.step2
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 기본 Dockerfile 문법에 익숙해져 봅시다.
# https://hub.docker.com/_/gcc
# image-이름:image-tag

FROM gcc:latest AS builder

# COPY를 통해 원하는 파일을 image 내부에 복사할 수 있어요.
# COPY <호스트의 파일 경로> <이미지 내부의 파일 경로>

# 시작 위치를 /test로 설정하는 방법 (pwd: /test)
WORKDIR /test

# 현 위치 (dockerfile 위치)에 있는 test.c 파일을 /test/test.c로 복사해요.
COPY ./test.c ./test.c
# 여기까지는 "한 줄 한 줄이 Layer임"

# 컴파일 해야겠죠?
# cli로 치는 명령어들은 RUN으로 적어요.
# cli로 c파일을 컴파일 하려면 gcc <SRC> -o <TARGET>

RUN gcc test.c -o test
# /test/test

# 컨테이너가 시작되었을 때 실행할 명령어 (shell)
# /bin/bash ./test
FROM busybox:latest

COPY --from=builder /test/test ./test
ENTRYPOINT [ "./test" ]

# 이 기법을 multi stage build
69 changes: 69 additions & 0 deletions week2/da-song/jasong/README-jasong.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Week 2

## 목표

- Docker를 이용해 FE (React)를 빌드 해본다.
- 기존에 있던 지식 + 새로운 지식

## Review

### Docker

Base Image를 만들어서, 그 위에 Layer를 쌓아서 Container를 만들었다.
ex) debian:slim => "데비안" 만 있는 이미지. 이 친구 위에 여러 Layer를 쌓아서, 우리가 원하는 image를 만들 수 있어요.

데비안 VM위에서 node를 설치한다.

```bash
apt install -y nodejs # debian linux file system위에 node가 설치된다.
```

=> 설치가 완료된 시점을 다시 image로 만들 수 있다.

node image
dockerfile node:18-slim :: Base Debian위에, node 18버전을 설치한 image

base image를 통해 특정한 image를 만들 수 있다.
"내가 build 하고자 하는 프레임워크 또는 언어에 맞춘 환경을 구성해놓은 image"를 base image로 써서 사용하면 => DevOps에서 build할때 일어나는 일.

근데 이거 전부 필요하나요? => 무슨소리냐.
build를 하기 위한 환경을 만들고, 그걸 활용하기는 해요.
근데, 결과물을 만들기 위해서 활용을 하죠?

결과물을 얻고 난 뒤에, 환경이 전부 필요한가요?
=> multi-stage build
결과물만 가지고 올 수 있어요.

왜 결과물만 가지고 오는게 좋을까?
-> 환경을 구축한다 === file system에서 용량을 차지한다 (Node 설치도 용량을 차지해요)
-> 우리가 원하는건 결과물이라서, 그 많은 환경 요소들은 필요가 없어짐
-> AWS 과금과 같은 부분에서는 트래픽에서 비롯된 요금이 발생할 수 있어요.
-> 많은 용량의 image를 올린다 => 많은 트래픽이 발생한다 => 비용이 발생한다. + 배포할때 결과물이 아닌 환경까지 포함된 image를 올리기에, 느려요
1G vs 100M

## Docker CLI

자주 쓰는 것들만 알려드림

- **docker build**
- 이미지를 만들때 사용합니다 (IMAGE : READ ONLY FILE)
- **docker run**
- 이미지를 실행해서 컨테이너를 만들때 사용합니다. (CONTAINER: 이미지가 실행된 것)
- docker exec
- 실행중인 컨테이너에 명령어를 실행할때 사용합니다.
- docker kill
- 실행중인 컨테이너를 강제 종료할때 사용합니다.
- docker stop
- 실행중인 컨테이너를 정지할때 사용합니다.
- docker restart
- 실행중인 컨테이너를 재시작할때 사용합니다.
- docker rmi ()
- 이미지 삭제
- docker rm
- 컨테이너 삭제
- **docker ps**
- 현재 실행중인 컨테이너를 확인 (옵션을 통해 종료된 컨테이너도 가능)
- docker images
- 현재 로컬에 있는 이미지를 확인
- docker pull
- image를 원격 저장소 (docker hub)에서부터 가져옴 (git pull과 비슷함)
6 changes: 6 additions & 0 deletions week2/da-song/jasong/test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include <stdio.h>

int main(void ) {
printf("Hello, World!\n");
return (0);
}