저번 글에서는 facebook chatgpt인 wit.ai를 사용하다가 별로 인것 같아서 제거했다. 이번 글에서는 chatgpt를 연동해보고자 한다. 참고로 23년부터인가 무료 token이 만료되서 이제 api 호출을 하려면 카드 등록을 하고 5달러를 내야 테스트등 뭐를 할 수 있다. 그래서 mastercard, visa 등 되는 카드를 준비하길 바란다. 1편은 설정하기 및 입력값 넣기 2편은 출력된 코드 parsing하기 위처럼 글을 작성할 예정이므로 참고하시길 바란다. 1. 가입하기 로그인 - api 눌러서 소셜 로그인을 한다. 2.지불 방법 추가 최소 결제 금액은 5달러이고, 결제를 마치면 5달러가 충전되어있다.(수수료10%...) 3. playground 테스트 위처럼 훈련시킬 봇을 만들어서 훈련..
JaveScript/ExpressJS
유저 생성을 하는 도중, 닉네임을 서버에서 랜덤으로 만들어서 리턴해주고 싶었다. 회원가입은 최소한의 데이터만 입력받게 하고 싶었기 때문이다. 전화번호로 유니크키를 결정하니 닉네임은 겹쳐도 상관없어서 랜덤 제너레이터를 사용하기로 했다. 0. 패키지 설치 npm install unique-names-generator 위같은 패키지가 있어서 사용했다. 나는 첫문자가 대문자형식이길 원했다. 1. api 소개 1) 딕셔너리 This is an array of dictionaries. Each dictionary is an array of strings containing the words to use for generating the string. 글을 보니 이름에 포함될 것들을 넣으라고 한다. 2) 구분자 A ..
회사 프로젝트에서는 moment.js를 사용했는데, 오래된 패키지이기도 하고 날짜 변환이 잘 안되는 점이 있어서 개인 프로젝트에서는 day.js를 사용하고자 한다. 0. 패키지 설치 npm install dayjs 1. 전체코드 import dayjs from 'dayjs'; export const getCurrentAgeToNumber = (birth: string): number => { // 현재 날짜 구하기 const currentDate = dayjs(); // 입력된 생년월일 문자열을 날짜 객체로 변환 const birthDate = dayjs(birth, { format: 'YYYYMMDD' }); // 현재 나이 계산 const age = currentDate.year() - birthDa..
개인프로젝트를 하다가 유저 타입을 여러개 사용할 일이 있었는데, 유저 타입을 일일히 설정하고 싶지 않았다. 그래서 enum을 사용하려고 했다. enum에 대한 장단점은 이 블로그에 잘 나와있다. 위 블로그를 읽어보고 백엔드는 enum을 쓰는게 효율적이겠다 싶어서 사용하려고 했다. 그래서 typescripte에서 enum을 사용하려고 했더니, static 객체로 Enum을 다루기엔 기본 내장된 enum이 너무 별로라는 글을 보았다. 그래서 ts-jenum이라는 패키지를 설치해서 사용한다는 향로님 글을 보았다. # 활용 ## src/libs/util/enum.ts import { Enum, EnumType } from 'ts-jenum'; @Enum('code') export class UserType ex..
기존 회사에서는 expressjs + typeorm 0.2 버전을 쓰고있어서 프로젝트 중 세팅을 어떻게 해야하는지 몰랐다. 공식문서를 보고 참고해서 연결했던것 같다. 0. 패키지 설치 npm install reflect-metadata typeorm mysql2 나는 mysql, typeorm 0.3.17, expressjs, typescript, docker-compose 를 이용했다. 참고로 typeorm 0.3.11 버전은 오류가 있는듯 하니까 이 버전은 피하도록 한다. typescript, tsconfig-paths 설정들에 대한 이야기는 제외하고 설명하고자 한다. 그리고 mysql가 아니라 mysql2를 설치해야 정상적으로 사용할 수 있으므로 참고한다. 1. db config 설정 ## src/..
expressjs 프로젝트를 만드는데, 로그가 안남아서 무슨 에러인지 확인이 어려웠다. 그래서 서칭을 하던중 morgan이라는 것을 알게되었다. # 패키지 설치 $ npm install morgan # typescript 사용시 아래 패키지도 설치 $ npm install @types/morgan # app.ts에 세팅 나는 ECMAScript 모듈 스펙을 이용해서 패키지를 불러오겠다. import morgan from 'morgan'; // log setting // 로그 형식 정의 morgan.format('detailed', ':method :url :status :res[content-length] - :response-time ms :remote-addr - :remote-user :referr..
Node.js/Express 프로젝트의 구조를 일반적으로 한개의 레포지토리에서 관리하는 모노리포 구조로 작성했다. 모노리포와 멀티리포 비교는 아래 블로그를 참고하길 바란다. https://tech.buzzvil.com/handbook/multirepo-vs-monorepo/ 구조설명 src 디렉토리 내에 다양한 서브 프로젝트들이 위치하고 있으며, 각각의 서브 프로젝트들은 독립적인 기능을 가지고 있거나 연관된 기능들을 묶어놓은 구조이다. 아래는 간단한 예시를 작성했다. ├── package-lock.json ├── package.json ├── src │ ├── @types │ │ ├── api │ │ └── exception │ ├── bin │ ├── config │ ├── database │ │ ├─..
ExpressJS 프로젝트를 클론 받았다. 근데, 노드js 버전을 알아야 노드 package 들을 설치할 것이 아닌가? 노드 버전도 모르고 패키지를 막 설치하면 패키지 충돌은 자명해보였기 때문에, 노드 버전을 알고 싶어졌다. 보통 노드 버전은 package.json에서 engine 의 하부에 기재되어있다고 한다. 첫번째 방법 근데, package.json의 "engines" 필드에 nodejs 버전을 확인할 수 없었다...? 두번째 방법 그래서 Readme 파일을 확인해보기로 했다. 보통 Readme에 언어의 버전을 기재해놓는 것이 정상적이니까 난감했다. 왜 Readme 파일은 만들어진적이 없는건가 실제로 서비스되고 있는 프로젝트인데 이렇다는 생각에 더 황당했다. 유지보수는 어떻게 하고 있던거지...? ..