From 9fa1b7b0b8325ce6302e8b118be83cd8770303c3 Mon Sep 17 00:00:00 2001 From: jasong Date: Wed, 8 Jan 2025 01:23:25 +0900 Subject: [PATCH] =?UTF-8?q?switch:=20=EC=9E=AC=EB=A3=A1=20-=20=EB=8B=A4?= =?UTF-8?q?=EC=86=9C=20week2=20Switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week2/da-song/dasom/README-dasom.md | 42 ++++++++++++++++ week2/da-song/jasong/Dockerfile.step1 | 26 ++++++++++ week2/da-song/jasong/Dockerfile.step2 | 31 ++++++++++++ week2/da-song/jasong/README-jasong.md | 69 +++++++++++++++++++++++++++ week2/da-song/jasong/test.c | 6 +++ 5 files changed, 174 insertions(+) create mode 100644 week2/da-song/dasom/README-dasom.md create mode 100644 week2/da-song/jasong/Dockerfile.step1 create mode 100644 week2/da-song/jasong/Dockerfile.step2 create mode 100644 week2/da-song/jasong/README-jasong.md create mode 100644 week2/da-song/jasong/test.c diff --git a/week2/da-song/dasom/README-dasom.md b/week2/da-song/dasom/README-dasom.md new file mode 100644 index 0000000..b6db8bd --- /dev/null +++ b/week2/da-song/dasom/README-dasom.md @@ -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 diff --git a/week2/da-song/jasong/Dockerfile.step1 b/week2/da-song/jasong/Dockerfile.step1 new file mode 100644 index 0000000..06793c3 --- /dev/null +++ b/week2/da-song/jasong/Dockerfile.step1 @@ -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 -o + +RUN gcc test.c -o test + + +# 컨테이너가 시작되었을 때 실행할 명령어 (shell) +# /bin/bash ./test +ENTRYPOINT [ "./test" ] \ No newline at end of file diff --git a/week2/da-song/jasong/Dockerfile.step2 b/week2/da-song/jasong/Dockerfile.step2 new file mode 100644 index 0000000..db5f499 --- /dev/null +++ b/week2/da-song/jasong/Dockerfile.step2 @@ -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 -o + +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 \ No newline at end of file diff --git a/week2/da-song/jasong/README-jasong.md b/week2/da-song/jasong/README-jasong.md new file mode 100644 index 0000000..e2caed3 --- /dev/null +++ b/week2/da-song/jasong/README-jasong.md @@ -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과 비슷함) diff --git a/week2/da-song/jasong/test.c b/week2/da-song/jasong/test.c new file mode 100644 index 0000000..1846892 --- /dev/null +++ b/week2/da-song/jasong/test.c @@ -0,0 +1,6 @@ +#include + +int main(void ) { + printf("Hello, World!\n"); + return (0); +} \ No newline at end of file