분류 전체보기 187

[TypeORM] Migration으로 DB 변경하기

어쩌다 시작하게 되었는가? 서비스 중인 웹 서비스에 백엔드 관련 추가 개발 기능을 배포할 일이 생겼다. 추가 개발과 관련해서 DB 테이블에 스키마 변경이 있었다. 이전에 DB 스키마를 변경할 때, TypeORM 옵션에서 synchronize 옵션을 true로 바꿔 변경했다가 데이터가 날아간 경험이 있었다. TypeORM에서도 해당 방법으로 프로덕션 DB의 스키마를 변경하는 것을 추천하지 않는다. This option automatically syncs your database tables with the given entities each time you run this code. This option is perfect during development, but in production you may ..

Javasciprt/NestJS 2024.04.23

부호있는 16진수를 10진수로 변환

최근 바이트로 저장된 값을 10진수로 변환하여 DB에 저장하는 로직을 구현해야했다. 단순히 부호가 없는 경우 parseInt 내장함수를 사용해 10진수로 변환할 수 있다. const buf = 'a1d2'; const num = parseInt(buf, 16); console.log(num); // 41426부호가 있는 경우 맨 앞 자리의 숫자에 따라 음수, 양수로 나눠지며 계산하는 방법도 달라진다. 부호가 있는 16진수의 경우 앞자리가 07은 양수, 8F는 음수다. (2진수로 변환시 맨 앞 비트가 0이면 양수, 1이면 음수) 2진수로 변환 후 맨 앞 비트에 따라 부호를 판단하고, 1의 보수를 구해 10진수로 변환하고 음수 변환을 한다. function getDecimal(buf) { //..

Javasciprt 2024.03.02

[NestJS] TypeORM naming strategy

보통 Typescript로 코드를 작성할 땐, camelCase로 이름 규칙을 작성하는데, Database에선 snake_case로 이름 규칙을 작성하게 된다. 기존에는 TypeORM 데코레이터에서 name으로 이름을 작성했다. @Entity('users') export class UserEntity { @Column({ name: 'last\_name' }) lastName: string; } 코드도 길어지고, 가끔 이름을 빼먹는 경우도 발생하고 문제가 되었다. 찾아보니 typeorm-naming-strategies라는 라이브러리가 있었고, 조금 더 코드를 단순화 할 수 있었다. 사용 설치 npm i typeorm-naming-strategies typeorm module에..

Javasciprt/NestJS 2023.12.26

[NestJS] Request 객체에서 IP 정보 가져오기

Nestjs common 데코레이터 @Ip @nestjs/common 에 있는 @Ip 데코레이터를 통해 IP 정보를 가져오도록 코드를 구현했는데, 공인 IP 주소가 아닌 사설 IP 주소를 가져왔다. 어떤 네트워크에서 접근해도 같은 사설 IP로 기록되는 문제가 발생했다. nestjs-real-ip 라이브러리를 찾아 적용하게 되었다. 공인 IP를 가져오는 것을 확인할 수 있었다. 무엇이 다를까? 기본 데코레이터를 사용하면 Reqeust 객체에서 ip를 조회한다. nestjs-real-ip를 사용하면 내부적으로 request-ip를 사용하는데, 단순히 Request 객체에서 ip를 조회하는게 아니다. request-ip 코드에 getClientIp 함수를 사용하는데, Request Header 객체 내에 IP..

Javasciprt/NestJS 2023.07.28

[React MUI] TablePagination 사용 시, body에 right padding

MUI Table Pagination 간단하게 Pagination을 사용하기 위해 MUI의 TablePagination을 사용했다. ISSUE TablePagination에서 select 선택 시 body에 right padding이 추가되었다. Solve MUI Select 사용 시 같은 현상이 있는데, 와 같이 코드를 추가하면 해당 현상을 해결할 수 있다고 한다. 하지만 TablePagination엔 MenuProps가 없다. 찾아보니 SelectProps가 존재했다. 위와 같이 처리해주면 body에 right padding이 강제로 들어가는 현상을 막을 수 있다.

Javasciprt 2023.07.12

[CSS] CSS 속성 정리하기

CSS 속성 정리하기 box-sizing CSS를 적용하다보면 border를 적용했을 때, 부모 컨테이너 밖으로 빠져나가는 경우가 종종 발생한다. 이 때, box-sizing: border-box로 설정해주면 테두리와 안쪽 여백의 크기도 요소의 크기로 고려해 빠져나가지 않는다. 기본 값은 box-sizing: content-box이다. opacity 요소의 불투명도를 설정한다. 0에 가까울수록 투명해지고 1에 가까울수록 불투명하다. rgba() rgba는 색상을 표현할 때 사용한다. 4개의 인자를 갖는데, Red, Green, Blue, Alpha(투명도)를 갖는다. a는 생략 가능하다. 투명도는 opacity와 같다. box-shadow 요소의 테두리에 그림자효과를 줄 수 있다. x축 기준 거리, y축..

Anything 2021.10.29
반응형