전체 글
-
postgresql local 환경 설정Database/postgresql 2024. 5. 15. 12:35
npm init -y npm i sequelize pg sequelize-cli postgres 패키지 설치 후 sequelize init { "development": { "username": "jihoon", "password": "jihoon", "database": "instagram", "host": "127.0.0.1", "dialect": "postgres" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "postgres" }, "production": { "username..
-
moleculer 프레임워크 찍먹JaveScript/moleculer 2024. 5. 15. 10:24
molerculer는 kubernetes와 비슷하게 분산 시스템을 구축하고 관리하는 데 사용되는 도구이지만, 다른 목적과 영역에서 작동한다. Moleculer:Moleculer는 마이크로서비스 아키텍처를 구현하고 관리하는 데 사용되는 모듈러 서비스 프레임워크입니다.Node.js로 작성되었으며, 빠르고 확장 가능한 마이크로서비스 어플리케이션을 쉽게 개발할 수 있도록 지원합니다.서비스 간 통신, 분산 환경에서의 데이터 교환, 로드 밸런싱, 서비스 디스커버리 등의 기능을 제공하여 마이크로서비스 아키텍처를 구현하는 데 도움을 줍니다.Moleculer는 마이크로서비스 아키텍처를 구현하는 데 사용되는 프레임워크로, 애플리케이션의 내부 로직을 분리하여 서비스로 구성하고 관리할 수 있습니다.Kubernetes (K8s..
-
Github actions에서 Secrets로 환경변수 관리git 2024. 4. 18. 07:20
.env 파일과 달리 .json 파일은 github action에 변수로서 관리하기 까다롭다. json 파일의 내용을 base64로 인코딩하여 일련의 문자열로 치환하고, 이를 secrets에 저장한 뒤에, 워크플로에서 다시 decode하여 사용할 수 있다. 기존 .env - name: Setting .env file run: | echo "POSTGRESQL_DEV_HOST=${{ secrets.POSTGRESQL_DEV_HOST }}" >> .env echo "POSTGRESQL_PASSWORD=${{ secrets.POSTGRESQL_PASSWORD }}" >> .env echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> .env echo "A..
-
typeorm save -> insert 메서드로 변경JaveScript/ExpressJS 2024. 4. 17. 20:29
// AS-IS const dailyCalorieRepository = AppDataSource.getRepository(DailyCalorie); await transactionRunner(async (queryRunner) => { const bmiRepo = dailyCalorieRepository.create({ carbohydrate: carbohydrate, protein: protein, lipid: lipid, calorie: calorie, bmiId: foundBodyMassIndex.id, foods: foods, }); await queryRunner.manager.save(bmiRepo); }); //TO-BE await transactionRunner(async (queryRun..
-
redis connection timeout errorJaveScript/ExpressJS 2024. 4. 11. 09:06
문제 docker-compose로 로컬에서 한번에 띄우고 있는데 위같은 에러가 떴다. 서버가 띄워졌는데, app(express.js 로 이루어짐) 서버가 띄워지는데까지 너무 오래걸려서 redis 서버가 기다리다가 connection timeout을 내뱉은 것이다. 해결방법 1 import * as redis from 'redis'; const redisClient = redis.createClient({ legacyMode: true, username: selectedConfig.username, password: selectedConfig.password, socket: { host: selectedConfig.host, port: selectedConfig.port, connectTimeout: 50..
-
APM tool을 Expressjs에 연동하기JaveScript/ExpressJS 2024. 4. 10. 22:13
elasticsearch - kibana 연동해 apm tool로 사용하는 방법을 기록하고자 한다. 우선 첫번째로 elasticsearch를 local에서 사용하는 방법을 정리하고자 한다. 참고로 나의 아키텍쳐는 mac m1 arm64이다. 1. elasticsearch 설치 & 기본세팅 https://www.elastic.co/kr/downloads/past-releases Past Releases of Elastic Stack Software Looking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place.... w..
-
MaxListenersExceededWarningJaveScript/NodeJS 2024. 4. 7. 13:30
(node:31) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [Bus]. Use emitter.setMaxListeners() to increase limit 2023-12-20 20:05:28 (Use `node --trace-warnings ...` to show where the warning was created) 위같은 경고가 떴다. 원인 1. 메모리 관리를 못해서 필요하다는 경고 2. 외부 서비스 붙일 때, 이벤트 리스너를 추가하게 되는데 너무 많이 붙이면 경고 발생 가능함. Node.js에서 Redis, MySQL, RabbitMQ와 같은 외부 서비스를 사용..
-
async/await 를 Promise.allSetted로 리팩토링하기JaveScript/ExpressJS 2024. 3. 31. 12:10
코드를 작성한 것들 중에 async/await을 남발해서 동기적으로 작동하게 되어 코드가 비효율적으로 동작한다는 것을 알게되었다. 그래서 리팩토링 하고자 한다. 1. 기존코드 export const dailyCalorieService = async ({ foods, userId }: IUserDailyCalorieService) => { const userRepository = AppDataSource.getRepository(User); const foundUser = await userRepository.findOne({ where: { id: userId } }); const bodyMassIndexRepository = AppDataSource.getRepository(BodyMassIndex);..