codestates / codestates/withpuppy

[✍️ Dev Log] 최우철 / 2021-12-09

Open
#63 0 comments 0 reactions 1 assignee Claimed by @chltjdrhd777 View on GitHub
Dev-Log
Dominant language
JavaScript
Stars
0
Forks
3
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

#### Cron문법과 node-schedule
- Cron이란 Cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 스케줄러이다.

- 즉, Cron은 현재 내 컴퓨터 내에 탑재되어 있는 시간 시스템의 기반이고, 이것은 자신만의 특수한 문법을 가지고 시간에 대한 여러 기능을 조절한다
- node-schedule은 이 Cron 문법을 이용하여 특정 시간대에 원하는 행위(Job)을 실행시키도록 만들 수가 있다
- setInterval과 비교해서 node-schedule이 가지는 강점은, setInterval은 시간지정을 ms 단위로 하기 때문에 계산에 불편함도 있기도 하고, 원하는 시간대, 원하는 날짜 등등 특정 조건별로 스케듈링을 하기에는 몹시 불편하기 때문이다

- Cron 문법은 다음과 같다
![다운로드](https://user-images.githubusercontent.com/58500558/145293260-29d72be9-adb3-4b7e-abaf-71f731765940.png)

- 참고로, 가장 첫번째 optional로 되어있는 second에 아무생각 없이 1 * * * * * 라고 설정해준다고 1초마다 무언가를 실행해주지 않는다
- n 초마다 <--- 라는 시간초별 주기적인 상황을 만들고 싶다면 */초 * * * * * 라고 설정해야 한다

---

#### Sequelize 조건식

- sequelize는 특정 조건에 따른 문법을 위한 구문을 Op라고 하는 심볼시스템으로 저장해놓고 있다.

>심볼이란 ?
변경 불가능한 원시 타입의 데이터이다.
이 값은 노출되지 않으며 충돌될 위험이 없기 때문에 객체의 유일한 프로퍼티 키를 만드는데 사용된다
```js
const testSymbol = Symbol()
conosle.log(testSymbol) = Symbol() // 원시값인데 값이 아니라 그냥 이 함수의 생성자 타입을 말해주고 있다

** 참고로, new를 통해 객체를 만들고 있는 것이 아니라 그냥 Symbol은 함수이며 심볼을 생성하기만 할 뿐이다
** Symbol(심볼설명) 으로는 변경 불가능한 원시 심볼값을 생성하고,
** Symbol.for(심볼설명) 으로는 전역 심볼 레지스트리라고 하는 심볼 저장소에 해당 심볼을 저장한다.
** Symbol.for(심볼설명) 으로 저장한 값은 Symbol.keyFor(심볼값을 참조하는 식별자) 를 통해 조회가 가능하다. (조회시 심볼설명이 리턴됨)
** 같은 심볼설명이어도 생성을 따로한다면 서로 다른 심볼값이다(객체 리터럴을 생성시 서로가 다른것과 같다. 저장된 메모리 주소가 다르기 때문)

심볼을 사용하는 가장 최적화된 방식 => 객체에 대한 값이 필요한 것이 아니라 객체의 키의 의미자체가 필요하고, 유일무이한 객체 키 형성을 보장해야 할 때

즉, sequelize를 예시로 들면

Sequelize.Op = {
lt : Symbol("lt"),
lte : Symbol("lte")
}

와 같은 느낌인 것이고, 내부 로직에 따라

db.findOne({
where: {
[Op.lt] : 10
}
})

이라고 하면 이를 해석할 때에

const optionKey = Object.keys(where)[0];

if(optionKey === Op.lt){
...... mysql 구현로직
}

와 같은 형태로 되어있을 것이다 ( 아마 코드 전체를 까보면 많이 다르겠지만 로직처리의 분위기가 이렇다는 것이다)
```

위의 예시를 통해 느낄 수 있는 것은, Symbol을 객체형태로 저장을 할 경우, 그 객체 자체가 해시테이블과 같은 비슷한 역할을 한다는 점이다.

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- 무엇이 부족해서 어려움을 겪었습니다
- 무엇이 힘들어서 잘 안됬습니다

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.