전체 글 57

PostgreSQL에 사용자와 권한 추가하기(CREATE USER, GRANT PERMISSIONS)

사용자 생성 내가 가장 많이 사용하는 사용자 생성 방법. CREATE USER [WITH [ENCRYPTED] PASSWORD ]; -- 예시 CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword'; superuser로 생성 잘 쓰지 않지만, 간혹 쓸 일이 있다. 사실상 localhost에서만 사용하는데, AWS같은 클라우드 DB 인스턴스에서 보통은 동작하지 않기 때문. CREATE USER WITH SUPERUSER PASSWORD ; -- 예시 CREATE USER myuser WITH SUPERUSER PASSWORD 'mypassword'; 권한 부여 특정 DB에 모든 권한 부여 아래와 같은 명령일 것 같지만, 아래 명령은 의도대로 동작하지 않는다. C..

IT 2023.01.28

Typia(이전 명칭: TSON) 사용 후기

삼촌samchon이라는 개발자가 만든 라이브러리를 알게 되었다. 정의된 타입을 기준으로 유효성검사가 끝난다니..! 이전엔 유효성검사를 위해 @IsIn 등의 class-validator 라이브러리 함수로 여기 저기를 장식해야했는데, 조금 더 짧은 코드를 작성할 수 있는 것인가...! 현실과 이상의 차이 삼촌께서는 nestia라는 명칭으로 플러그인과 함께 nestjs를 덮어썼는데, 새로운 장식(데코레이터)을 써야하는 것은 내게 불만이었다. 그런데 기존 코드까지 많은 변경이 필요하다면, 내 기준에선 도입할 이유가 없었다. 왜냐하면 나는 TS에서 디버깅하기 불편한 데코레이터라는 기능을 선호하지 않는데다가, JS는 성능보단 빠른 코드작성을 위해 사용하고 있다. node에서 유효성 검사를 몇 천배 더 빠르게 해봐야..

IT 2022.12.15

Node Engine 수정하기

배경: 나는 http/3를 쓰고 싶었다 나는 nestjs에서 http/3을 사용하고 싶었다. 하지만 현재 node에서 http/3를 지원하지 않으므로 express나 fastify 역시 http/3를 쓸 수 없다. 어쩔 수 없다. 현시점(2022.12.10) http/3를 원하는 경우, Nginx나 Netty외엔 선택지가 없다. 이 이슈가 해결이 된다면, node(express든 fastify든 어디서든)에서도 http/3를 사용할 수 있을 것이다. Node Engine Customization 실무에서 고작 http/3를 위해 node engine을 수정하고 있을 순 없다. 하지만 개인적으론 욕심이 났다. 나는 node에서 http/3를 쓰고 싶다. 이번에 http/3와 node engine에 대해 자..

IT 2022.12.10

Android emulator에서 Push notification이 수신되지 않을 때

문제 상황 Firebase cloud messaging(이하 FCM)을 이용하여 푸시 알림push notification을 구현하다보면, 가끔 정상 수신되지 않을 때가 있다. 해결 방법 일부 에뮬레이터는 푸시 알림을 기본적으로 거부한다. 이 설정을 변경해주면 보통 해결되었다. 푸시 알림 권한은 기기에 따라, Settings > Notifications 에 있을 수도 있고, Settings > Apps & Notifications 에 있을 수도 있다. 앱 알림 권한을 잘 찾아서 확인해보자. 아래는 예시 해결 방법이다.

IT 2022.12.04

[Refactoring 2판]에 대한 내 생각과 비판

이 책의 초판은 2012년 11월이고, 2020년에 2판이 나왔다. 2판은 ES6를 기준으로 작성되어있다. 코드 리팩터링의 기본 원칙에 대해 js로 풀어낸 것이므로, 객체지향 언어라면 대동소이하다. 사실 이 책에 나오는 내용 대부분은 학부 시절에 접할 수 있는 내용들이다. js로 작성되었다고해서 js 특성에 맞는 특별한 리팩터링 방법을 기대한다면 다른 책을 추천한다. 사실 ts가 나온 현 시점에서는 js라는 언어 자체가 리팩터링 대상이기 때문이다. 그냥 js가 대중적이니까 js판 리팩터링책을 만든 느낌이지, 다른 개발자들이 js쓰는 것을 보고 답답함을 느껴서 "야 너희들 js 리팩터링 그렇게 하는 거 아니야!"라는 느낌으로 책을 쓴 게 아니란 얘기다. 나는 사실 이 책의 작성 배경이 후자이길 바랐다. 만..

IT 2022.11.13

스벨트에서 readable만 노출하기(Svelte - writable to readable)

나는 특정 모듈에서 `store`의 `writable`은 이용하되, `readable`인터페이스만 노출하고 싶었다. 데이터 쓰기 인터페이스를 함수나 커맨드 형태(MVVM 패턴)로만 제공할 수 있어야, 프로젝트가 커졌을 때, 문제가 되지 않기 때문이다. # Example - convert `writeable` to `readable` import {writable} from 'svelte/store' // writable의 업데이트 기능은 이 모듈에서만 사용(export하지 않음) const _now = writable(Date.now()) // `export const 변수명 = readable(값)`과 같은 효과 export const now = {subscribe: _now.subscribe} // ..

IT 2022.10.10

NestJS로 쉽게 개발하는 방법

개요 NestJS는 express 혹은 fastify를 기반으로 하는 마이크로 웹프레임워크이다. 개발 언어는 Typescript이다. 마이크로 프레임워크이다보니, 풀스택 프레임워크에 비해 구조를 자유롭게 가져갈 수 있다. 근데 어느 정도의 컨벤션을 정하지 않으면, 오히려 그 자유가 큰 단점이 되버릴 수 있긴 하다. 하여 NestJS의 훌륭한 라이브러리 기반으로 쓸데없는 고민은 줄이고, 높은 생산성을 내는 방법에 대해 소개하고자 한다. 팁1: NestJS ^7.5 기왕이면 7.5 이상을 사용하는 것을 추천한다. 2020년 8월 23일 7.5가 릴리즈되었는데, NestJS CLI에 매우 강력한 기능이 추가되었다. Generate resource 추가된 커맨드는 다음과 같다. nest g res 기능 소개 m..

IT 2021.03.27

기술 스택 전면 교체와 고려해야 할 사항

교체 배경 현재 다니고 있는 회사에서 Django + React로 개발 중이던 프로젝트를 NestJS + Angular로 대체하는 경험을 했다. 참고로 인프라도 AWS + github에서 Azure Devops로 이전했다. 사실 상 처음부터 다시 만드는 결정을 한 셈인데, 이 변경 배경엔 시니어의 교체가 있었다. 참고로 당시 회사엔 주니어 레벨 개발자 3명과 백엔드 경력직 개발자 1명, 프론트엔드 경력직 개발자 1명, 주니어 퍼블리셔 1명으로 기술 스택과 밀접한 연관이 있는 사람은 6명 정도였다. 개발자들 사이에선 상당히 큰 반발이 있었지만, 경력직 개발자들이 교체가 됐고, 기술 스택도 자연스레 교체되었다. 어쩌면 기존 경력직들을 교체하기 위한 결정이었을 수도 있고, 순전 시니어의 개인 취향이 반영된 것..

IT 2020.08.01

DB의 중복 값 지우기

한 테이블에 유니크조건을 추가하고 싶은데, 기존 데이터가 유니크조건에 위배되어 줄 수 없는 상황이었다. 굳이 유니크조건을 주지 않고 처리하는 등 해결방법은 많았지만, 잘못된 설계로 id만 다른 값이 많이 들어가 있었으므로, 중복된 값을 제거해주는 방향을 택했다. 중복된 데이터 예시 my_table id col1 col2 col3 value 1 a 가 v1 100 2 a 가 v1 90 3 b 가 v1 100 4 b 가 v1 100 5 a 나 v1 100 6 a 나 v1 100 7 a 나 100 8 a 나 100 위 테이블을 보면 id만 다르고 똑같은 값이 두 개씩 들어있다. 요구사항 이를 다음과 같이 id가 큰 값만 남겨두고 중복되는 것은 모두 삭제하고 싶다. 반영된 요구사항 예시 my_table id c..

IT 2020.02.27

EC2 deploy server: 프로세스를 백그라운드에서 실행시키기

EC2에 원격 접속하여 sudo node app.js 등의 명령어로 서버를 켜둬봐야 원격접속을 끊는 순간 서버가 꺼지기 일쑤다. 어떻게 해결해야할까? node라면 pm2 등을 이용한다 node의 경우는 forever, pm2 등 다양한 패키지를 제공한다. 이를 사용하면 프로세스가 충돌나서 뒤져도 다시 실행시킬 수 있는 안정성을 보장 받기 때문에, 가장 올바른 방법이다. 해당 패키지들은 sudo npm install -g "패키지 이름"으로 설치가 가능하다. 해당 패키지로 앱을 실행시킨 뒤, exit 명령어를 입력해 원격접속을 종료하면 아마 프로세스가 계속 살아있을 것이다. 패키지 없이 실행하기 하지만 npm 업데이트 등의 이슈 발생 혹은 node가 아닌 다른 서버의 경우라면 어쩔텐가?(물론 버전 호환 문..

IT 2019.10.15