MySQL DataType

▶️ DATE vs DATETIME vs TIMESTAMP

DATEDATETIMETIMESTAMP
날짜 포함날짜, 시간 모두 포함날짜, 시간 모두 포함
YYYY-MM-DDYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS
'1000-01-01' ~ '9999-12-31''1000-01-01 00:00:00' ~ '9999-12-31 23:59:59''1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'

▶️ DATETIME vs TIMESTAMP

DATETIMETIMESTAMP
문자형숫자형
8바이트4바이트
시스템의 타임존이 변경되어도 변경되지 않음시스템의 타임존이 변경되면 적용됨.

▶️ int() - zerofill

  • INTEGER타입에 숫자를 정의해두면 그 자리수대로 데이터가 입력된다.
    ex. int(3)의 경우 데이터가 1, 2, 3 이런 형식이 아닌 001, 002, 003의 형식으로 된다.
    : 하지만 zerofill 옵션이 있다면, 001, 011, 111가 1, 11, 111의 형식을 가진다.

▶️ int의 종류

tinyintsmallintintbigint
0 to 255-32,768 to 32,767-2,147,483,648 to 2,147,483,647-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
1 Byte2 Byte4 Byte8 Byte

개인 과제 피드백

https://github.com/kinnjoo/PROJECT_Blog_LV5/issues/1

https://github.com/kinnjoo/PROJECT_Blog_LV5/blob/72a6fc931b60056ed8c0337e15d7501b0d95f154/services/users.service.js#L15C1-L65C9

  • 유효성 체크 로직은 별도 메소드 (함수) 로 분리 해 보는것?
    : signupUser 함수 안에 create User 작업과 nicknam과 password 유효성 검증이 같이 이뤄지고 있다.
    : 이 함수를 signupUser와 validationSignup 함수로 따로 나눠 한가지의 함수에서 한가지의 일만 수행하도록 로직을 짜는 것이 좋다.

https://github.com/kinnjoo/PROJECT_Blog_LV5/blob/72a6fc931b60056ed8c0337e15d7501b0d95f154/services/users.service.js#L71C1-L73C8

  • findOneByUser의 where절에 id, nickname 등 어떤 조건을 넣어서 사용할 수 있기 때문에 함수에 대한 정의가 너무 모호하다. 때문에 findOneByUser보다는 findUserByCondition이 더 적절한 함수명일 수 있다.
  • 레파지토리 레이어에서 너무 유연하게 코드를 사용할 수 있도록 매개변수를 설정해두었기 때문에 나중에 내가 원래 정의한 의도와는 다르게 이 함수가 쓰일 수도 있다. 때문에 where절 조건을 서비스 레이어가 아닌 레파지토리 레이어에 두고, where절에 들어오는 매개변수에 대한 정의만 따로 해두는 것이 좋다.
  • js 자체에서는 유연하게 사용하는게 크게 문제가 되지 않지만 ts나 다른 언어를 배우게 되면 데이터의 타입까지 정의가 되어 있기 때문에 지금처럼 유연하게 사용하는 것보다 좀 더 명확하게 사용하는 쪽으로 연습을 해보자는 의미도 있었다.
findUserByCondition = async (condition) =>
    await Users.findOne({ where: condition });
profile
꾸준히 하자

0개의 댓글