728x90
반응형

Node.js 에서 DB에 현재 시간으로 업데이트하는 작업을 하는 도중에, 시간이 한국시간이 아닌 9시간 늦게 삽입되는 것을 확인하였다.

위 사진은 DB에 삽입된 시간이고, 실제 작업 시간은 2023-03-23 00:15:44 였다.

한국 시간대로 처리되도록 하기위해 다음 세 가지 과정을 거쳤다.
급하면 3번만 확인해서 적용하면 됨!

 

1. OS 시간 대 확인

터미널에 date를 입력하면 OS에서 안내하는 현재 시간을 알 수 있다. 한국시간과 같았으므로 한국 시간을 사용하는 것을 확인했다.

2. MySQL 시간 대 확인

SELECT NOW()

SELECT @@global.time_zone, @@session.time_zone;

NOW를 사용해서 현재 시간과 비교해도 되고, 
아래 사진처럼 DB가 어느 시간대를 따르는지 확인하는 방법도 있다.

 

 

3. Date 객체 사용 시 9시간 더하여 한국시간으로 맞춰 사용

프로젝트를 작업하는 OS는 한국시간, MySQL도 운영체제를 따라서 한국시간을 사용하고 있다.

const now = new Date();

Node.js에서 현재 시간을 이용할 때 위과 같이 Date 객체를 이용하는데 이는 한국시간이 아니라서 한국시간으로 변환해주어야 한다.

// 방법 1
const now = new Date();
now.setHours(now.getHours() + 9);

// 방법 1
const now = new Date().toLocaleString("ko-KR", {timeZone: "Asia/Seoul"});

 

 

사실 Date 객체로 시간을 생성해서 삽입하는거라 1,2번 절차 무시하고 3번 방법으로 바로 고칠 수 있지만, 혹시 OS나 MySQL시간대도 다를까봐 이번 기회에 확인하는 과정을 가졌다!

728x90
반응형

'IT > Javascript' 카테고리의 다른 글

Javascript 'let' declarations can only be declared inside a block. 오류 해결  (0) 2023.03.20
Javascript Immutability  (0) 2022.10.27
process.argv  (0) 2022.10.05
728x90
반응형

위와 같이 한줄 if문 내에서 let 선언을 하면 오류가 발생한다.

 

let은 블럭 안에서만 선언할 수 있다는 오류다.

let으로 선언된 변수는 자신이 정의된 블록을 범위로 가지므로 위와 같이 사용이 불가하다. 어차피 블럭 안에서만 기능을 하기때문에 한줄 if에서 선언해도 소용없긴하다 😅

때문에 아래처럼 블럭 안에 꼭 감싸서 사용해야한다. 

if (name) {
    let number = 1;
    ...
}

 

728x90
반응형

'IT > Javascript' 카테고리의 다른 글

js 한국 시간 적용(OS, MYSQL 시간대 확인하는 방법)  (0) 2023.03.23
Javascript Immutability  (0) 2022.10.27
process.argv  (0) 2022.10.05
728x90
반응형
  • mutability : 변화 가능함(정보의 원본이 변경될 수 있음)
  • Immutability : 변화 불가능함(불변함)

자바스크립트의 Immutability는 데이터의 변화, 즉 데이터 원본의 훼손을 막는 것

 

데이터는 결국 CRUD 의 작업으로 이루어진다. 중요한 것은 CREATE, READ. 생성이 아니면 읽을 수 없고 읽을게 아니면 생성할 필요가 없기 때문. 그 원본은 origin

파일을 자유롭게 쓰고 지우기위해 컴퓨터가 활성화되었지만 너무 자유도가 높아졌기 때문에 데이터의 불변함을 지킬 중요도가 커졌다!

 

  1. 이름에 대한 불변함
    1. var : 가변 변수. 값을 바꿀 수 있음.
    2. const : 상수 변수. 값을 바꿀 수 없음.
  2. 변수 할당 방식
    1. Primitive : 원시 데이터 타입. 더이상 쪼갤 수 없는 데이터 타입. 같은 값이면 ===으로 비교했을때 참이다.
      1. Number, String, Boolean, Null, Undefined, Symbol
    2. Object : 객체. 데이터의 집합. 같은 값이면 ===으로 비교했을때 거짓이다. 내부 프로퍼티가 달라질 수 있기때문.
      1. Object, Array, Function
      2. a 객체를 복제할 때 객체의 불변함을 유지하는법. 
        1. var b = a -> a객체의 위치를 가리키기 때문에 b의 값을 바꾸면 a의 값이 바뀐다
        2. var b = Object.assign({}, a) => 빈 객체에 a객체에 있는 것을 병합해서 새로운 객체를 만들기 때문에 a와 별개로 따로 존재한다.
      3. Nested Object : 중첩된 객체. 객체 안에 객체가 있는 상태
        1. var a = {name:'wish', score:[1,2]}
          1. 객체 안의 객체인 score의 배열은 별도의 공간에 저장이 되고 score의 값은 배열의 위치를 저장.
        2. var b= Object.assign({}, a) 일 경우 b의 score는 a의 score의 위치를 복제하기때문에 b.score를 변경하면 a.score에 영향이 미친다
        3. b.score = b.score.concat() 2번의 상황을 방지하기 위해서 복제한다.
      4. 객체의 프로퍼티를 다루는 함수에서 발생할 수 있는 일이기 때문에, 인자를 객체로 받는 함수의 경우 Object.assign을 이용해 인자를 복제해서 사용!
      5. 객체의 프로퍼티를 불변하게 만드는 방법 : Object.freeze
        1. 얼리기만 가능. 해동 불가.
        2. 객체 내 프로퍼티는 얼려져서 불변할 수 있지만, 객체 내 객체는 변경이 가능하다. 객체 내 객체의 데이터는 다른곳에 저장되었고 프로퍼티는 위치(레퍼런스)만 저장되어있기 때문에.
      6. const VS Object.freeze
        1. const : 이름을 규제
          1. const a  = {name:'wish'}일 경우 a = b 가 안되게 통제
        2. freeze : 값을 규제
          1. const a  = {name:'wish'}일 경우 a.name = 'sowon' 가 안되게 통제

Immutability 을 유지하기 위한 Immer, mori라는 라이브러리들도 있으니 활용하는 것도 좋다

728x90
반응형
728x90
반응형

process.argv를 출력하는 프로그램을 돌리면

$ node conditional.js sowon
[
  'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\sowon\\study\\nodejs\\syntax\\conditional.js',
  'sowon'
]

와 같은 결과가 나온다

  • 첫번째 정보는 node js 의 런타임이 어디에 위치하고 있는 정보
  • 두번째 정보 파일을 실행시킨 위치
  • 세번째 정보는 내가 입력한 입력값을 준다

입력값만을 원할 때에는 아래와 같이 배열의 2 인덱스 값을 가져온다

var args = process.argv.slice(2);
728x90
반응형

'IT > Javascript' 카테고리의 다른 글

Javascript Immutability  (0) 2022.10.27
[비교연산자] == 와 ===의 차이  (1) 2022.10.05
Node.js  (1) 2022.09.29
728x90
반응형

== : Equal Operator

=== : Strict Equal Operator 

 

==, === 모두 좌항과 우항을 비교하지만 ===이 더 엄격하게 검사한다.

여기서 더 엄격하게란, 내용과 데이터 형식 모두 검사한다는 뜻

 

1과 '1'를 비교할 때 

  • ==는 값이 같으니 true가 나온다
  • ===는 data type 이 다르기 때문에 false 가 나온다

이 결과는 true 와 1, none 과 null 에도 동일하게 작용한다

 

그러나 배열을 비교할 땐 변수는 각 메모리의 주소를 참조하기 때문에

var a = [1,2,3];
var b = [1,2,3];

console.log(a == b);
console.log(a === b);

으로 a과 b가 데이터 형식과 내용이 같더라도 ==, === 모두 false 가 나온다

 

 

728x90
반응형

'IT > Javascript' 카테고리의 다른 글

process.argv  (0) 2022.10.05
Node.js  (1) 2022.09.29
자바스크립트 localStorage  (0) 2022.09.21
728x90
반응형
  • Node JS : 자바스크립트를 실행시키는 런타임 환경
    • 초기에는 브라우저만이 유일한 자바스크립트 런타임 환경
    • 비동기 이벤트 주도 javascript 런타임으로써 Node.js 는 확장성 있는 네트워크 애플리케이션을 만들 수 있도록 설계됨
  • 특징
    • 비동기 이벤트 주도
      • Async(callback)

 

출처 : 우아한 테크톡

728x90
반응형

'IT > Javascript' 카테고리의 다른 글

[비교연산자] == 와 ===의 차이  (1) 2022.10.05
자바스크립트 localStorage  (0) 2022.09.21
자바스크립트의 HTML 다루기, 이벤트  (2) 2022.09.21

+ 최근 게시글