매일 3시간 이상 공부하는걸 지금 4일째 하고 있는데 더 공부가 하고 싶어져서
3시간 30이상 꾸준히 하는걸로 늘리려고 한다 ㅎㅎ -> (공부에 이제서야 재미 붙임)
클론코딩이 아닌 깊이있게 이걸 왜 써야하고 어떨때 써야하는지 공부하니 훨씬 재미있다
어제 오늘 해서 노드JS의 핵심인 스트림과
제일 자주 사용되는 프레임워크인 express에 대해 간단하게 배웠다
큰 파일이나 네트워크, 데이터를 처리할때 한번에 가져와서 처리하는 것이 아닌
청크(chunk)라고 해서 덩어리를 쪼개서 메모리 용량을 적게해서 올린다!
스스로가 생각했을때 스트림이 필요한 이유는 메모리 최적화와 시간 단축때문이라 생각한다.
파일이나 네트워크의 경우, 워커스레드를 통해서 비동기로 들어오는데 이게 너무 큰 파일로 들어오면 메인에서 처리하기 난감해질것이다. 그걸 방지 하기 위해서 스트림을 적용한다!
스트림의 종류
Readable
스트림으로부터 읽는거! - 서버의 http요청,클라이언트의 http응답
ex) fs.createReadStream, process.stdin
Writable - 출력스트림
-> 서버의 http응답,클라이언트의 http요청,
ex) process.stdout,fs.WriteStream
Duplex
입력 출력 둘 다 가능 -> tcpSockets(네트워크를 통해 입력이나 출력가능),
zlib streams(압축할 대상을 보내고 받는거), crypto streams
// Transform - 입력받은 스트림을 변환해새로운 스트림으로 만듬 - zlib streams,crypto streams
대표적인 노드 기반의 프레임워크!
미니멀하고 유연하며 퍼포먼스도 좋다!
express가 실행되면서 하나의 요청되는 리퀘스트가 거치는 모든 함수를 뜻함
//각함수 하나하나가 미들웨어임!
app.use('/', async (req,res,next) => {
const requestedAt = new Date()
console.log("middleware1")
const fileContent = await fs.promises.readFile('.gitignore', 'utf-8')
// @ts-ignore -> 타입 오류를 잠깐 무시
req.requestedAt = requestedAt
// @ts-ignore -> 타입 오류를 잠깐 무시
req.fileContent = fileContent
next()
// path 즉 어떤 경로로 이동했을때 응답뭘 줄지 req,res,next
// 노드는 대부분의 경우 비동기로 처리 -> 이때 끝났다는것을 알려주는게 next!
// 미들웨어는 코드에서 위에서 아래로 실행!1
//
})
/* 수많은 미들웨어 */
app.use( (req,res) => {
console.log("middleware2")
// path 즉 어떤 경로로 이동했을때 응답뭘 줄지
// @ts-ignore
res.send(`Hello, express ${req.requestedAt},${req.fileContent}`)
})
단일 컴퓨터의 하드웨어요소를 일반적으로 가상머신이라고 하는
다수의 가상컴퓨터로 분할할 수 있도록 해주는 기술
운영체제: 시스텀하드웨어 자원과 소프트위어 자원을 운영관리하는 프로그램 window linux
특권명령(privileged instruction): 시스템요소들과 소통할수있는 명령 - os만 가능
os는 특권명령때문에 하나의 하드웨어 시스템당 하나밖에 못돌아다닌다
일반프로그램은 특권명령이 필요없기 때문에 많은 프로그램을 동시에 수행가능!
(노래들으면서 게임)
가상화가 나타나기 전까지는 하나의 하드웨어 시스텀은 하나의 OS만 실행이 가능
- Bare-metal상태로만 운영가능
1세대 개상화 (Fully Emulated)
CPU 하드디스크 마더보드등 모든 요소를 에물레이터(다 프로그램)로 구현하여 os와 연동
엄청 느림
APP1 - (App-OS-Hardware)이게 하나 통째로 어플로 올라가져있다!!
2세대 paravirtualization
Guest OS는 하이퍼바이저와 통신
하이퍼바이저 : OS와 하드웨어 사이에 존재하는 일종의 가상화 매니저
속도 향상 그러나 여전히 에뮬리에터 몇몇 요소들은 필요 = 느림
3세대: Hardware virtual machine(HVM)
하드웨어에서 직접 가상화를 지원!
직접 게스트os가 하드웨어와 통신 - 빠른 속도 near -bare-metal
EC2를 사용할때 많이 보임
인스턴스 : 클라우드에서 사용하는 가상 서버로 CPU,메모리 그래픽카드 등 연산을 위한 하드위어를 담당
EBS: Elastic block storage의 줄임말로 클라우드에서 사용하는 가상 하드디스크
AMI: Ec2인스턴스를 실행하기 위한 정보를 담고 있는 이미지
보안그룹 : 가상의 방화벽
4가지가 있음!
1. On-Demand: 수요에 반응, 약정은 필요없음, 한번 서보고 싶을때, 초당 혹은 시간단위로 지불, 유연한 Ec2를 쓰고 싶을때
경매형식-> 수요에 따라 스팟인스턴스의 가격은 계속변동! , 내가 지정한 값보다 높아지면 반환!!
인스턴스가 확보되고 종료되는것을 반복해도 문제없는 분산 아키텍쳐 필요
주로 빅데이터처리 , 머신러닝등 많은 인스턴스가 필요한 작업에 사용!
예약 인스턴스(RI) - 미리 일정기간(1,3년)약정해서 쓰는방식
최대75프로 저렴 수요예축이 확실할때 총비용을 절감하기 위해 어느정도 기간의 약정이 가능한 사용자. 큰기업
전용호스트(Dedicated) - 실제 물리적인 서버를 임대하는 방식, 라이선스 이유(윈도우서버등) 규정,보안에 따라 필요한경우, 퍼포먼스이슈등(cpu steal- 옆에 있는 가상화 컴퓨터가 다른애꺼 cpu를 뺏어감!) ->> 이런거 없이 cpu정확하게 유지 위해 사용
가격순서
스팟인스턴스 < 예약 < 온디맨드 < 전용
Ec2가격 모델은 EBS와는 별도 - ebs는 사용한 만큼 지불
기타 데이터통신등의 비용은 별도로 청구!!!! -> aws는 aws바깥으로 나가는 트래픽에 대해서만 부과!!
백준 깃허브익스텐션을 쓰니까 풀자마자 바로 깃헙에 올라가서 편하네 ㅎㅎ
AWS쪽 EC2와 노드JS 프로젝트를 다음주까지 끝내고 수업 들어가보자!!