HTTP Header 에는 많은 정보가 담겨져 있는데

통신 중에 전송 되는 데이터의 형태에 대한 정보가 담겨져 있는

Media Types 혹은 MIME(Multipurpose Internet Mail Extensions) 이라고도 알려져있는

Content-Type이 있다.

 

Content-Type

  • Body로  보낸 데이터의 타입을 나타내는 것
  • Boby로 보낸 데이터의 타입과
    Content-Type에서 표시하는 데이터의 타입이
    다르면 정삭적으로 작동을 하지 않는다.
  • Get 요청 시에는 나타나지 않음
  • 표시방법:  type/sub-type

데이터 타입의 종류 

 

참고자료

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Content-Type

Node.js , MySQL, Sequelize, Express

 

참고자료

간단한 방법

post.findAll({
  // pagination
  offset: 10,
  limit: 5
});
  • offset : 내가 검색 결과를 가져오기 전에 넘어갈 게시물의 수
  • limit : 페이지당 보여줄 게시물의 수

 

offset 을 보고 싶은 페이지에 맞춰서 설정하기

  • query 파라메터 이용 -> page, limit 을 입력
  • limit 을 입력하지 않아도 값을 받을 수 있도록 default value 설정
  • page 값을 기준으로 offset 설정
    • page = 4, limit =5 --> offset = 5*(4 -1)  : 총 15개의 게시물을 거르고 16번째부터 5개 수집
  • findAndCountAll 을 이용하여 query parameter에 있는 page 가 존재하는지 확인
router.get('/', async (req, res, next) =>{
  try{
    const page = req.query.page;
    const limit =  Number(req.query.limit) || 5;
    const offset = limit * (page - 1)

    const {count, rows} = await Post.findAndCountAll({
      order: [['id', 'DESC'], ['createdAt', 'DESC']],
      limit,
      offset,
    })

    if (rows.length === 0){
      throw new HttpException(400, "없는 페이지 입니다.");
      return;
    }

    const posts = await Post.findAll({
      order:[['id', 'DESC'], ['createdAt', 'DESC']],
      limit,
      offset,
    })
    res.status(200).send(posts);

  }catch(err){
    next(err)
  }
})

 

 

Swagger 작성시 참고 - query 가 여러개면 - in: query 여러개 작성

/posts/?limit=number&page=number:
...
parameter
  - in: query

 

1) 비활성화 기법

전력 소모 기준 디스크의 상태 분류

  • 활동(active) : 디스크 회전 O, 헤드가 데이터 읽기/쓰기 O
  • 공회전(idle) : 디스크 회전 O, 헤드가 데이터 읽기/쓰기 X
  • 준비(standby) : 디스크 회전 X, 인터페이스 활성화 O
  • 휴면 (sleep) : 디스크 회전 X, 인터페이스 활성화 X

활성상태  =  활동, 공회전

비활성상태 = 준비, 휴면

 

후속 요청까지의 시간 간격이 일정 시간(break-even time) 이상일 경우에만 디스크 회전 정지
-> 미래의 요청이 도착하는 시점과 간격을 정확히 예측하는 것이 중요

 

디스크 비활성화하는 시기를 결정하는 방법

  • 시간기반(timeout based) 기법
    디스크가 일정시간 이상 공회전이면 장치 정지 -> 요청이 오면 디스크 활성화
  • 예측기반(prediction based) 기법
    과거의 데이터를 기반으로 공회전 구간의 길이 예측 -> 디스크 비활성화시점 결정
  • 확률기반(stochastic based) 기법
    디바이스의 상태변경 시간간격을 구하기 위해 확률분포를 통해 요청을 모델링

2) 회전속도(Rotations Per Minute: RPM) 조절 기법

  • 하드웨어 + 운영체제
  • 워크로드 특성을  활용한 회전속도 조절
  • 멀티미디어 환경에서 주기성과 규칙성을 참조하여 미래를 예측
  • 실시간 응용프로그램의 재생률(bit-rate)과 버퍼 크기에 따라 디스크의 회전속도 조절

3) 디스크의 데이터 배치 기법

FS2 파일 시스템(free space file system) 제안 - > 응답시간과 전력소모량 절감
: 디스크 빈 공간 내에 데이터의 복제본을 많이 만들어 헤드위치에서 가까운 복제본에 접근하게 하는 방법

 

4)버퍼캐싱 및 사전 인출 기법

미래에 요청될 데이터를 미리알거나 예측하여 헤드 위치로부터 가까운 데이터를 사전 인출(prefetching)

+

긴급한 요청이 아닌경우 디스크의 활성 상태  여부에 따라 요청을 최대한 지연

이용

 

디스크가 저전력모드 일때 입출력 처리를 최대한 지연시켰다가 정상전력모드로 들어왔을때 사전인출을 공격적으로 하는 방식 

 

5) 쓰기전략을 통한 저전력 디스크 기법

  • write-back with eager updaters
    대상 디스크가 비활성 상태 -> 디스크 쓰기를 하지 않고 대기
    활성화 상태 -> 디스크 쓰기
  • write-through with deferred update
    대상 디스크가 비활성 상태 -> 블록들을 로그 디스크에 쓰기
    활성화 상태 -> 디스크에 쓰기연산을 수행

 

 


작업을 수행할 디스크를  선택하는 결정 +
하나의 디스크에서의 입출력 요청의 처리 순서 결정

 

(목표)

1. 많은 요청을 동시에 처리 할 수 있는 확장성있는 서비스

-> 각 디스크간의 부하균형(load balancing)을 이루는 것이 중요

2. 전력 소모를 줄이는 것

 

마치 그룹 엘레베이터 시스템 과 유사

-> 여러 대의 엘레베이터가 하나의 시스템에서 공동으로 운영

(목표) 다수의 승객이 오래 기다리지 않고 빠른 서비스를 받을 수 있도록하는 시스템의 확장성(scalability)

디스크에 대한 접근시간(access time)은 

  • 탐색시간(seek time) :  헤더가 실린더에 도착하기까지 걸리는 시간
  • 회전지연시간(rotational latency) : 섹터가 헤더에 도착하기까지 걸리는 시간
  • 전송시간(transfer time) : 섹터가 헤더에 도착 후 실제로 데이터가 읽고 쓰는데 걸리는 시간
  • 기타 등등

에 의하여 결정된다.

이 중에서 회전지연시간과 전송시간은 통제하기 힘든 부분이므로

 

운영체제는 탐색시간을 줄이기 위해 헤드의 움직임을 최소화 하는 스케줄링 작업을 함

 

1) FCFS(First Come First Service) 스케줄링

디스크에 먼저 들어온 요청을 먼저 처리 하는 방식 -> 비 효율적

( 이유 ) 입출력 요청이 디스크의 한쪽 끝을 처리한 후 반대쪽 끝을 처리해야 하는 경우 발생 -> 탐색시간이 비효율적으로 증가

 

2)SSTF(Shortest Seek Time First) 스케줄링

현재 위치로부터 가장 가까운 위치에 있는 요청을 먼저 처리

 

(+) 헤드의 이동거리 감소 -> 효율성 증가

(-) 기아현상(starvation)발생

--> 헤드의 이동거리 측면에서 가장 우수한 알고리즘은 아님

 

3)SCAN 알고리즘

헤드가 원판의 안쪽 끝과 바깥쪽 끝을 오가며 그 경로에 존재하는 모든 요청을 처리

버스가 일정한 경로를 따라 정류장을 도는 것과 유사한 방식

 

지그재그 방식 

 

(+) 효율성과 형편성을 만족시키는 알고리즘

(+) 한쪽 끝에서 다른쪽 끝으로 한번 이동으로 현재 큐에 있는 모든 요청 처리 가능

(+) 이동 거리측면에서 효율적

(+) 기아현상 발생 방지

(-) 공평성을 만족 시키지 못하는 알고리즘 - 실린더 위치의 기다리는 시간

 

4) C-SCAN(Circular-SCAN) 알고리즘

SCAN과 같은 방식으로 요청을 처리하는 알고리즘이지만 움직이는 방향이  다름

한쪽끝에서 다른쪽 끝으로 이동 후 다시 한쪽 끝에서 이동 시작

 

(+) 균일한 탐색시간 : 탐색시간의 편차가 줄어듬

(-) SCAN 보다 이동거리 증가

 

5) LOOK 과 C-LOOK 알고리즘

SCAN, C-SCAN 과 헤드의 이동방식이 유사한 알고리즘

이동방향: LOOK ( = SCAN), C-LOOK(= C-SCAN)

차이점:  가는 방향에 대기 중인 요청이 없으면 이동방향을 바꾼다는 점

 

--> 디스크 입/출력이 많은 시스템에서 언급한 기법들 중 가장 효율적인 방식

 

 

 

 

 

+ Recent posts