본문 바로가기

Backend

(112)
배포 전 안쓰는 migration 파일 삭제에 대하여 라이브 배포가 나가기 전에 migration 파일 점검을 해야 했다. 근데 내 로컬에서만 삭제하고, 삭제한 파일을 push 하지 않았던 문제가 있었다. 이 코드가 다른 곳에서 쓰이지는 않지만, 배포 나가기 전이라 안전한 방법으로 migration 파일 삭제하기 위한 방법을 알게 되었다.  1) Drop에 관한 migration 파일 작성 만약 내가 project_post 라는 테이블을 만들었다고 치자. 이런 상황에서 기존에 CreateProjectPost migration은 이미 다른 환경에서 돌아갔었을 것이므로, 이 project_post 라는 테이블을 삭제하는 migration 파일을 만들어야 한다.  기존 CreateProjectPost.ts migration 파일import { MigrationI..
클라이언트에서 영문 쿼리 백엔드단에서 한글로 받는 방법 클라이언트에서 영문으로 쿼리명을 넘겨주고, 서버단에서는 db에 해당 이름이 한글로 저장되어 있는 경우가 있었다. 이런 경우에는 서버에서 어떻게 처리하면 좋을까? 예를 들어 클라이언트에서 banana를 쿼리로 넘겨준다면, 서버단에서는 db에 해당 값이 한글로 저장되어 있으므로 한글로 변환이 필요하다. * 기존에는 서버단 > 클라이언트단으로 쿼리를 보낼 때 한글이름으로 보냈었는데, 클라이언트단에서 utf-8 인코딩 에러가 발생하는 바람에 쿼리에서 해당 단어가 깨져서 나오는 현상이 있었다. 일단 클라이언트에서 넘어오는 한글 이름을 enum으로 받자. export const GangVoteGradeToKo: { [index:string]: string } = { banana: '바나나', apple: '사과' ..
db migration 파일을 작업하면서 알게된 점 1. initial-data 파일 작성 > migration 파일 작성 순서 > migration:run 하거나 브랜치를 dev 등 환경에 배포 2. migration 파일은 한 번 돌고나면 다시 적용X이므로 내가 DB 테이블에서 initial data 파일에 작성한 내용을 직접 배포해야 함 3. typeorm migration:create ./libs/경로2/src/database/migration/파일명 과 같이 터미널 안에서 명령어로 작성 가능 4. 1709301133216과 같이 3번의 명령어로 마이그레이션 파일을 만들면 timestamp가 앞에 붙는데 여기서 ~216 ~217 처럼 시간 순서대로 마이그레이션 파일이 실행된다. 만약 순서가 어긋난 경우 직접 timestamp의 시간을 수정해서 파일..
nullable 에러 해결 -> ValueTransformer @Column({ nullable: true, transformer: new BcryptTransformer() }) ci: string; 위의 코드의 nullable에서 아래와 같은 에러가 계속 발생하였다. 왜일까? 내가 만든 BcryptTransformer에서 Partial로 ValueTransformer을 implements해서 사용하고 있어서 ValueTransformer 내부에 구현되어있던 from, to 메소드에서 to 메소드만 쓰고 싶었기에 Partial type 사용을 했었다. 근데 nullable에서 에러가 났다. 알고보니 Partial Type으로 ValueTransformer을 사용하더라도 그 안에 있는 형식은 맞춰서 써줘야 한다는 것이다. 그래서 from 메소드를 형식적으로 구현해주..
node 버전 업그레이드 node 버전을 업그레이드 해야 했는데 방황하다가 nvm을 이용해서 노드 버전을 바로 업그레이드 할 수 있었다. nvm install v20.11.1 처럼 특정 버전을 써주면 바로 업데이트가 된다. 그러고 node -v로 터미널에서 노드 버전 확인하면 v20.11.1로 바로 업데이트 된 것을 확인할 수 있다!
zero-length delimited identifier at or near ''" db 테이블에 id 컬럼에서 default 옵션으로 seq(시퀀스)를 설정해주는 부분이 있었는데, 계속해서 ('테이블 이름_id_seq'::regclass)를 설정하려고 하면 테이블 이름_id_seq 부분에서 빨간색으로 뜨며 인식이 되지 않으며 에러 메시지는 zero-length delimited identifier at or near ''"와 같은 에러가 뜨는 것이다. 이에 대해 알고보니, 내가 시퀀스를 만들어주지 않아서 발생하는 에러였다. 시퀀스 만드는 방법은 다음과 같다. 1) 해당 테이블의 DDL 접속 2) id 부분에서 serial 추가 id serial constraint project_activity_pk primary key, 3) 그러면 Default Expression에서 nextva..
2023-11-30과 같이 컬럼 내에서 Date가 나오게 하려면 entity 파일에서 Column을 다음과 같이 작성해주면 된다. (in postgreSQL) @Column({ type: 'date' }) @Trnasform(transformDate) date: Date; date와 관련해서 entity에서 어떻게 정의하고, post 요청을 날릴때 계속 date는 instance여야 한다고 하는데, 여간 고민이 많다.. ㅜㅜ
json 파일 import 하는법 팀원으로부터 json 파일을 받게 되었다. api 셋팅이 그대로 되어있다는데, 이를 포스트맨에서 사용하는 방법을 정리하고자 한다. 포스트맨 좌측에 보면 import 버튼이 있다. 이걸 누르고, 다운받은 json 파일을 끌어와서 사용하면, 그 파일 안에 있는 API 리스트를 읽어와서 어떤 API를 사용할 건지 check 해주고 사용하면 된다. 이 안에 GET,POST 등 API 리스트 목록이 함께 들어있다.
모니터링 시스템 구축을 위한 리서치 Index 0) 요구사항 우리팀 서버에 문제가 생겼을 때 알 수 있어야 한다. 현 시스템이 DB 로그에 보는 것에 익숙하지 않다. Kubernates에 접근하기 어려우며, 서버 배포 환경을 이해하기 어려운 구조이다. API Application 필터링 해서 로그를 봐야 한다. Kubernates는 로그를 보는데 가독성이 떨어진다. → 시각화의 필요성 Kubernates 인스턴스 모니터링 + 각각의 pod 요소들의 전반적인 메트릭은 Prometheus가 보기 편하다. 서버 모니터링과 서비스 모니터링의 차이점 서버 모니터링 : 여러대의 서버 중 1대라도 죽는 경우를 모니터링 서비스 모니터링 : 사용자 입장에서 서비스가 안되는 경우가 모니터링 *** 경고 시스템의 구성 요건** 우리 팀이 빠르게 이해할 수 있..
이미지 리소스 한 번에 교체 with SQL postgres DB에 테이블을 만들어서 image 리소스(url 주소)를 관리하고 있었다. -> API로 프론트엔드에 데이터를 내려주기 위해 해당 컬럼에 있는 이미지 url 주소를 SQL 명령어로 한 번에 교체할 수 있었는데, 다음과 같이 진행하였다. UPDATE DB 테이블 이름 SET 업데이트 하고자 하는 테이블의 컬럼 이름 = REPLACE(업데이트 하고자 하는 테이블의 컬럼 이름, '기존 이미지 URL 주소','바꾸고자 하는 이미지 URL 주소') 그리고 나서 db 테이블로 가서 새로고침을 해주니 해당 컬럼의 이미지 경로가 모두 변경되어 있었다. 명령어 한 번으로 컬럼 내부의 데이터를 한 번에 변경할 수 있는 SQL의 장점을 간단하게나마 느낄 수 있는 경험이었다.