본문 바로가기

Backend

(114)
[MySQL] Incorrect table definition; there can be only one auto column and it must be defined as a key 테이블에 컬럼을 삽입하려고 보니, Incorrect table definition; there can be only one auto column and it must be defined as a key 와 같은 에러가 발생하였다. 왜 이런 에러가 발생하였을까? 원인은 아래와 같다. - PK가 2개 잡혀 있었음 좀 더 찾아보니 auto_column으로 설정된 컬럼이 KEY가 아니라서 위와 같은 오류가 발생할 수도 있다고 한다. MySQL에서는 PK에 auto_column을 설정하는 것이 일반적이니,, (추가적으로, MySQL에서 SQL문으로 auto_increment를 작성하고 싶다면 ALTER TABLE 구문을 사용하거나 CREATE TABLE 할 때 지정해줄수 있다)   에러 해결방법ALTER tabl..
Mac 터미널에서 Redis CLI 접속방법 Mac 터미널에서 Redis CLI를 접속하는 방법은 다음과 같다.  1) redis 설치 $ brew install redis 2) 설치된 redis server 버전 확인 $ redis-server --versionRedis server v=7.2.5 ~ 으로 시작되는 명령어가 출력될 것이다.  3) redis 서비스 시작$ brew services start redis Redis의 기본 포트 6379번으로 시작했다며 서비스 시작이 잘 되었다.  4) command+N으로 새 터미널 1개 더 열고 redis-cli 실행$ redis-cli 5) 위와 같이 6379 포트 번호로 redis-cli 접속이 잘 되었다는 것을 보여준다.
배포 전 안쓰는 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 리스트 목록이 함께 들어있다.