공부한 내용 적기(NodeJS & AWS)-2

박경현·2022년 7월 23일
0
post-thumbnail

매일 3시간 이상 공부하는걸 지금 4일째 하고 있는데 더 공부가 하고 싶어져서
3시간 30이상 꾸준히 하는걸로 늘리려고 한다 ㅎㅎ -> (공부에 이제서야 재미 붙임)

클론코딩이 아닌 깊이있게 이걸 왜 써야하고 어떨때 써야하는지 공부하니 훨씬 재미있다

NodeJS

어제 오늘 해서 노드JS의 핵심인 스트림과
제일 자주 사용되는 프레임워크인 express에 대해 간단하게 배웠다

stream

큰 파일이나 네트워크, 데이터를 처리할때 한번에 가져와서 처리하는 것이 아닌
청크(chunk)라고 해서 덩어리를 쪼개서 메모리 용량을 적게해서 올린다!

스스로가 생각했을때 스트림이 필요한 이유는 메모리 최적화와 시간 단축때문이라 생각한다.

파일이나 네트워크의 경우, 워커스레드를 통해서 비동기로 들어오는데 이게 너무 큰 파일로 들어오면 메인에서 처리하기 난감해질것이다. 그걸 방지 하기 위해서 스트림을 적용한다!

스트림의 종류

  1. Readable
    스트림으로부터 읽는거! - 서버의 http요청,클라이언트의 http응답
    ex) fs.createReadStream, process.stdin

  2. Writable - 출력스트림
    -> 서버의 http응답,클라이언트의 http요청,
    ex) process.stdout,fs.WriteStream

  3. Duplex
    입력 출력 둘 다 가능 -> tcpSockets(네트워크를 통해 입력이나 출력가능),
    zlib streams(압축할 대상을 보내고 받는거), crypto streams
    // Transform - 입력받은 스트림을 변환해새로운 스트림으로 만듬 - zlib streams,crypto streams

express

대표적인 노드 기반의 프레임워크!
미니멀하고 유연하며 퍼포먼스도 좋다!

미들웨어

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}`)
})

AWS

가상화

단일 컴퓨터의 하드웨어요소를 일반적으로 가상머신이라고 하는
다수의 가상컴퓨터로 분할할 수 있도록 해주는 기술

운영체제: 시스텀하드웨어 자원과 소프트위어 자원을 운영관리하는 프로그램 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를 사용할때 많이 보임

EC2의 특성

  1. 초 단위 온디맨드 가격모델 - 서비스 요금을 미리 약정하거나 선입금 필요없음
  2. 빠른 구축속도와 확장성 - 인스턴스 수백여대를 구축가능
  3. 댜양한 구성방법 지원 - 원하는 대로 머신러닝 웹서버 등 최적화된 서버 구성 가능
  4. 여러 aws 서비스들과 연동 - 오토 스케일링 ELB, CloudWatch등

EC2의 구성

인스턴스 : 클라우드에서 사용하는 가상 서버로 CPU,메모리 그래픽카드 등 연산을 위한 하드위어를 담당
EBS: Elastic block storage의 줄임말로 클라우드에서 사용하는 가상 하드디스크
AMI: Ec2인스턴스를 실행하기 위한 정보를 담고 있는 이미지
보안그룹 : 가상의 방화벽

EC2의 가격 모델!!!

4가지가 있음!
1. On-Demand: 수요에 반응, 약정은 필요없음, 한번 서보고 싶을때, 초당 혹은 시간단위로 지불, 유연한 Ec2를 쓰고 싶을때

  1. Spot instance - 경매형식으로 시장에 남는 인스턴스를 저렴하게 구매 90프로 저렴
    언제 도로 내주어야할지모름@!@@@@, 시작종료가 자유롭거나 추가적인 컴퓨팅파워가 필요한 경우

경매형식-> 수요에 따라 스팟인스턴스의 가격은 계속변동! , 내가 지정한 값보다 높아지면 반환!!
인스턴스가 확보되고 종료되는것을 반복해도 문제없는 분산 아키텍쳐 필요
주로 빅데이터처리 , 머신러닝등 많은 인스턴스가 필요한 작업에 사용!

  1. 예약 인스턴스(RI) - 미리 일정기간(1,3년)약정해서 쓰는방식
    최대75프로 저렴 수요예축이 확실할때 총비용을 절감하기 위해 어느정도 기간의 약정이 가능한 사용자. 큰기업

  2. 전용호스트(Dedicated) - 실제 물리적인 서버를 임대하는 방식, 라이선스 이유(윈도우서버등) 규정,보안에 따라 필요한경우, 퍼포먼스이슈등(cpu steal- 옆에 있는 가상화 컴퓨터가 다른애꺼 cpu를 뺏어감!) ->> 이런거 없이 cpu정확하게 유지 위해 사용

가격순서

스팟인스턴스 < 예약 < 온디맨드 < 전용

Ec2가격 모델은 EBS와는 별도 - ebs는 사용한 만큼 지불
기타 데이터통신등의 비용은 별도로 청구!!!! -> aws는 aws바깥으로 나가는 트래픽에 대해서만 부과!!

EC2의 라이프사이클

피드백

백준 깃허브익스텐션을 쓰니까 풀자마자 바로 깃헙에 올라가서 편하네 ㅎㅎ
AWS쪽 EC2와 노드JS 프로젝트를 다음주까지 끝내고 수업 들어가보자!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글