오늘도 회의가 있었지만 피그마 관련 대화와
api에 관련된 태그설정을 어떻게 할지에 대한 이야기를 진행했다.
서점도 아니고 굳이 모든 태그를 띄울 필요는 없어 보이고
학습용이기 때문에 일단 대표 태그 몇개를 띄우는 방식으로 할 것 같은데
태그들을 받아서 검색가능한 드롭다운 형태로 표기해도 괜찮을 것 같다는 생각은 들었다.
이 부분은 개선하면 되는 부분이고 주 학습목적과는 다르기 때문에 넘어갔다.
어떻게 설계해야 하는지에 대한 논의로 넘어가서
DB쪽을 하시는 동안 CSS를 먼저 잡아두고
DB를 마무리하면 각자 기능구현쪽으로 넘어가자는 방향으로 정리되었다.
내일까지 유튜브 TS강의를 마무리하고
Next에 대한 학습을 진행하던지
아니면 이전 프로젝트에 ts를 입혀보던지 하는 방향으로 학습해야겠다.
1.props를 받을 때는 해당 props의 type를 지정하는 것도 나쁘진 않지만
객체 형태로 관리하게 될 경우 alias 또는 interface 등으로
type 객체를 선언해 사용하는 것이 좋다.
type BookData = {
author : string;
title : string;
publicationDate : Date;
price : number;
}
export const BookList = (props : BookData) =>{
return(<div></div>)
}
2.객체 내부에 객체가 담긴 배열(일반적 JSON data)이 오는 경우 아래와 같이 처리한다.
type BookListData = {
totalResults : number;
startIndex : number;
itemsPerPage : number;
item : {
title : string;
cover : string;
price : number;
}[]
}
3.내부 컴포넌트를 지정하는 것?은 React.ReactNode로 type설정을 할 수 있다.
ReactNode는 아래와 같은 타입 특징을 가지고 있다.
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
타입별 범위는 ReactNode > ReactChild > ReactElement 순으로 작아진다.
4.값이 비어있을 경우가 있다면 아래와 같이 ?를 붙이면 된다.
또는 Partial 선언을 통해서도 해결할 수 있다.
type BookData = {
author : string;
title : string;
publicationDate? : Date;
price : number;
}
type BookData = {
author : string;
title : string;
publicationDate : Date;
price : number;
}
type BookPrice = Partial<BookData>//Partial 후 아래처럼 타입 부분이용이 가능하다.
const price : BookPrice = { title : 'How can fly', price : 15000}
const bookTitle : BookPrice = { title : 'How can fly', author : 'Wing Man'}
const noData : BookPrice = {}
또한 데이터가 없는 경우를 대비해 아래처럼 값을 미리 할당할 수 있으며
const {price = 15000} = BookTitle
옵셔널 체이닝과 null 병합을 통한 처리도 가능하다.
DataList?.BookTitle?.price ?? 15000
5.CPU Scheduling은 CPU의 프로세스를 관리하는 것이라고 볼 수 있다.
프로세스의 상태는 생성, 준비, 작동, 대기, 저장, 종료로 구분되는데
생성된 프로세스는 자연스럽게 준비 상태로 넘어가며
준비중인 프로세스를 작동시키고
이전에 학습한 인터럽트에 의해
동작중인 프로세스가 중지 및 블록에 저장되며
입출력 및 이벤트를 위한 대기와 프로세스의 종료가 있다.
여기서 인터럽트에 의한 중단은 중지 -> 저장 -> 재개의 형태라면
입출력 및 이벤트 대기는 대기상태로
이벤트 또는 입출력을 통해 준비상태로 변경되어야 작업할 수 있다.
6.CPU Scheduling에는 선점 스케쥴링과 비선점 스케쥴링이 있는데
비선점 스케쥴링은 정규직처럼 한번 cpu를 실행할 경우
반납 전까지는 작업 실행을 보장하지만
선점 스케쥴링은 일용직 아르바이트처럼 일감이 떨어지거나
우수한 인력(우선순위 작업)이 들어올 경우 강제로 해고(회수)된다.
비선점 스케쥴링은 무능력자(오래걸리는 비중요 작업)로 회사를 가득 채워버리면 우수한 신입사원(우선순위 작업)등을 받기 어렵지만 안정적이고
선점 스케쥴링은 계속해서 우수 인력이 들어올 경우 잦은 교체로 작업이 되지 않을 수 있다.(오버헤드)
비선점 스케쥴링은 작업속도 차이가 크지 않고 급하지 않은 작업에 사용되며
선점 실시간으로 빠르게 작업을 처리해야 할 경우 우선순위에 따라 작업하는 상황에 사용된다.
7.비선점 알고리즘에는 FCFS(First Come First Served), SJF(Shortest Job First), HRN(Hightest Response-ratio Next) 등이 있으며 선점 알고리즘에는 Priority Scheduling, Round Robin, Multilevel-Queue 등이 있다.
FCFS - 축약어의 의미처럼 큐 형식처럼 입력순으로 처리한다.
정보가 없을 경우 사용되며 짧은 작업도 후순위에서 길게 대기할 수 있다는 단점이 있다.
SJF - 이 또한 축약어처럼 짧은 작업을 우선적으로 처리한다.
최적의 처리속도를 보장하지만 짧은 작업을 판별하기 어렵다는 단점이 있다.
HRN - SJF의 점유 불평등을 우선순위를 통해 개선한 방식으로
우선순위는 (대기시간+실행시간)/(실행시간)의 값을 가진다.
하지만 이 또한 단기 스케쥴링에서는 실행시간을 미리 알기 어렵다는 단점이 있다.
Priority Scheduling - 일반적 선점 알고리즘으로 우선순위에 따라 처리
우선순위가 낮은 경우 대기열에 밀려 실행되지 못할 수 있다.
Round Robin - 시분할 작업방식과 유사하다고 생각했지만
반대로 시분할 시스템을 위해 설계된 스케쥴링이라고 한다.
모든 작업이 순서대로 특정 시간만큼 분배받아 그 시간만큼의 작업을 처리한다.
문제는 우선순위를 중요하게 잡은 것이 아닌 짧은 데이터의 빠른 처리를
위한 것이기 때문에 우선순위가 아주 높은 큰 작업의 경우 마지막에
완료될 수 있다.
또한 각각의 시간 배분 범위를 크게 잡으면 선점 스케쥴링(FCFS)과
차이가 없을 수 있다는 특징이 있다.
Multilevel-Queue - Round Robin에서 언급한 우선순위 문제를 해결했다.
우선순위(기능 등)를 구한 다음 우선순위마다의 큐를 진행하는 것으로
높은 우선순위들이 들어있는 큐부터 처리한다.
또한 각각의 큐는 개별적 스케쥴링 기법(선점/비선점)을 사용할 수 있다는 특징이 있다.
(1).백준 4504번 배수 찾기 문제는 숫자들을 받아 첫번째 숫자의 배수여부를 판단하는 문제였다.
문자열 사이사이에 변수들이 들어가야 해서 백틱을 사용했고
조건마다 출력 내용도 달라지기 때문에 삼항연산자를 추가했다.
처음에 틀려서 뭐가 문제인가 보니 console을 추가로 찍어서 0%컷이 났었다..
let input = `5
1
7
99
321
777
0`.split('\n').map(Number)
let result = []
for(let i = 1 ; i < input.length-1 ; i++){
result.push(`${input[i]} is ${input[i] % input[0] ? 'NOT ':''}a multiple of ${input[0]}.`)
}
console.log(result.join('\n'))

'회고' 카테고리의 다른 글
| [취업준비일지] - 42 - 스터디 프로젝트 4일차 (0) | 2022.12.01 |
|---|---|
| [취업준비일지] - 41 - 스터디 프로젝트 3일차 (3) | 2022.11.30 |
| [취업준비일지] - 39 - 스터디 프로젝트 1일차 (0) | 2022.11.28 |
| [취업준비일지] - 38 (0) | 2022.11.27 |
| [취업준비일지] - 37 (0) | 2022.11.26 |
