Back
[Node.js] express 폴더 구조 변경
Nestjs로 파일을 짜다보니 기존 express 파일 구조에 대해서 다시 한번 생각하게 되었다. express의 자유로움이 오히려 단점으로 느껴졌다. 지금은 관련 개발을 내 혼자 도맡아 하다보니, 크게 문제 되는 부분은 없지만, 좋은 코드는 누가봐도 한 눈에 알 수 있고, 유지보수하기 좋아야 한다고 생각한다. nestjs의 구조를 100% 차용하는 것은 현실적으로 무리가 있을 것이라 판단했다. 이걸 바꾼다고, 현재 회사 비즈니스에 크게 영향을 주는 것도 아니고, 공수에 비해 사업적으로 얻는 이득은 크게 없을 것이라 생각했기 때문이다. 훗날 더 원활한 유지보수를 위해 nest의 방식을 일부분 차용하기로 했다. 기존 기존의 router는 이런 식으로 쪼갰다. index에는 엔드포인트가 있고, control..
AWS RDS AURORA + NODEJS
AWS의 Aurora DB를 선택하고, Node에 붙여 넣었다. Aurora는 프리티어가 없고, 제일 싼게 한달 3만원정도니 이용할 때 주의해야한다. 현재 회사에서 Cafe24에 있는 mySql을 AWS RDS로 환경이전을 하려고 준비 중이다. 개발관련 인력이 별로 없기에 내가 다 의사결정을 하고 있긴 하지만.. AWS RDS가 유지보수나 속도 측면에서 나을거라 판단했다. 다만 가격이 좀 있기에 오버스펙이지 않을까 하는 고민은 아직도 있다. 이건 프로젝트가 정확히 나와봐야 알 것 같고, RDS를 실제 프로젝트에서 처음 써보는거라 어떤 식으로 운용해야 효율적일진 고민해봐야겠다. 모델구성 const mysql = require('mysql2/promise'); require('dotenv').config()..
몽고DB 아틀라스 연결
맨처음 DB를 할 때 NoSql을 쓰고, Nosql 찬양을 하다가.. SQL을 제대로 쓰고 나서 NoSql의 한계를 느끼고, 안쓴지 꽤 됐는데, 안쓰다보니까 기억이 가물가물해서 오랜만에 공부겸 테스트겸 몽고db로 구축을 하려한다. 일단 아틀라스 들어가기~ 새로운 프로젝트를 프리티어로 만든다. SECURITY를 설정한다. Database Access, Network Access를 설정해준다. 실제 프로젝트에 쓸게 아니라 그냥 All Access로 모두 허용으로 해줬다. 클러스터에 들어가서 어디에 연결할건지 정한다. 어디에 사용할건지 정한다. 나는 몽고DB compass에서 보려고했기 떄문에 Compass를 선택했다. 그 후 password 자리에 처음에 Database Access에서 설정한 비밀번호를 넣..
AWS 로드밸런스 ACL 적용 EC2 WAF, ACL
이번 프로젝트에서 보안과 악의적 중복 요청 방지에 대해 고민하다 WAF를 선택했다. 물론 악성 쿼리나 중복 방지등등 여러 예외처리도 프론트와 백단에서 처리해야겠지만, 아무리 신경쓴다고 해도, 현재의 상황에선 한계점이 있을 것이라 생각했다. AWS에서 규칙을 제공한다는 이야기를 듣고 도입해보기로 했다. 적용할 때 레퍼런스가 딱히 없어서 AWS 공식 문서를 보고 적용했다. 기본 정의 AWS WAF는 가용성에 영향을 주거나, 보안을 위협하거나, 리소스를 과도하게 사용하는 일반적인 웹 공격으로부터 웹 애플리케이션이나 API를 보호하는 데 도움이 되는 웹 애플리케이션 방화벽입니다. AWS WAF에서는 SQL 주입 또는 사이트 간 스크립팅과 같은 일반적인 공격 패턴을 차단하는 보안 규칙 및 사용자가 정의한 특정 트..
AWS EC2 HTTPS
잘되던 소셜로그인이 안된다는 이야기를 듣고 수정을 하는데 원인을 알 수 없었다. 가만 뒤져보니 이거 콜백url이 이상하게 https에 빨간줄이 그어져 있는게 아닌가.. https를 파이썬에서 90일마다 갱신시켜주는 것으로 붙여놨는데, 얼마전에 무슨 일이 있던건지 빨간줄이 그이며 모두 http로 바뀌었다. 나만 이런게 아니라 유명한 사이트들도 빨간줄이 그인 것을 보고, 구글 정책이 바뀌지 않았나 예상해본다. 그래서 AWS내에 있는 Certificate Manager, Route53, Load Balancer 를 이용하여 HTTPS를 붙이기로 했다. Route 53에 들어간다. 호스팅영역 & 등록된 도메인 둘 중 하나 선택 2-1. 이미 도메인을 가지고 있다면 호스팅 영역에 도메인을 입력하고 퍼블릭 호스팅 ..
Nodejs Excel Mysql
엑셀 파일을 넣었을 때 엑셀 양식에 맞춰 DB에 다 넣어야하는 경우가 생겼다. 엑셀은 처음 다뤄보는거라 난감했는데, 직접 작업을 해보니 엑셀보단 DB에 효율적으로 넣는게 좀 더 까다로웠다. 설치 npm -g install xlsx const excelProducts = xlsx.utils.sheet_to_json(excelFile.Sheets["Sheet1"], { raw: false, header: 1, dateNF: 'yyyy-mm-dd', blankrows: false, }) 엑셀파일의 Sheet1번을 읽어 온다. Node내에서 엑셀을 읽을 때는 엑셀 파일을 읽어야 하는데, 1. 엑셀 파일을 서버 file에 저장한다. 2. file에 저장된 엑셀을 읽고, 필요없어진 엑셀 파일은 바로 삭제 한다. 이..
Node.js Slack Error Logging slack-node (노드JS 슬랙 에러 로깅)
winston과 morgan등을 통해 log를 저장했으나, 해당 log들을 제때제때 확인하고 싶었고, 프론트 화면으로 보여주기엔 공수가 너무 많이 들어갔다. 슬렉으로 오류 메시지를 받기로 했다. slack-node는 마지막 업데이트가 5년전이라 사용하기 좀 뭐했는데, 거창한 기능을 사용할게 아니라서, 그냥 사용했다. 다른 slack npm도 써봤는데, 인증키도 받아야하고, 귀찮은 작업이 많았다. 물론 POST같은 요청도 처리할 수 있어서 나중에 slack을 이용해서 뭔가 만든다고 하면, 유용하게 사용할 수 있겠지만 지금 프로젝트에선 필요도 없고, 당장 쓰기도 복잡해보여서, 선택 안했다. slack-node는 웹훅의 url만으로도 메시지를 가볍게 보낼 수 있다. 1. Slack APP을 생성한다. http..
Nodejs Redis 활용
Nodejs Redis 활용 사용한 예시 exports.diaryMainWeightUpdate = async (req, res, next) => { try { const member = res.locals.member; const { weight, created_at } = req.body; const monthFirstDay = moment(created_at).startOf('month').format('YYYY-MM-DD'); const connection = await mySqlDbRds.getConnection(async conn => conn); const [weightUpdate] = await connection.query(query.weightUpdate, [weight, member.m..