AWS
[Node.js, Redis] Nodejs AWS Elasticache Redis
점점 규격이 커지다 보니, 반복 요청 하는 구간이나, 계산이 많은 곳에서 부하가 조금씩 생겼다. 디비랑 서버에서 짱구를 아무리 굴려봐도 어쩔 수 없는 부분이 있었다. 그렇다. 이젠 캐시처리가 필요했다... 여러가지를 알아보다가, 엘라스틱캐시-레디스를 선택했다. EC2에 레디스를 직접 배포해서 할 수도 있었지만, 증설, 로그 등 관리에 용이했기 때문이다. elasticcache는 아마존에서 Redis로 만들면 된다. 셋팅은 생략한다. Nodejs에 연결하려 한다. 리더 엔드포인트는 읽기만 하는 용도고, 기본 엔드 포인트로 연결을 일단 해보자. 해당 사진은 ElasticCache 대시보드에 Redis에 있다. 여러 Npm이있는데, redis를 사용했다. 사람들의 인기도나, 속도, 쓰이는 함수, 업데이트 주기..
[Aws RDS Aurora Serverless MySQL] 외부 접속
새로 시작할 서비스의 DB용량을 정하는게 어려웠다. 예측불가능했기 때문이다. 새 서비스의 트래픽을 정확히 예측할 수 있으면 좋겠으나, 누가와도 정확히 예측하긴 어려울 것이다. 조금 비싸더라도 RDS를 사용하기로 결정은 했으나, 어느정도 감당될 지 감이 안왔다.. 경험부족이 크지 않을까. 여러 이유들로 DB단에서 Auto Scalling이되는 Serverless를 사용하기로 했다. 다만 레퍼런스가 부족하고, 외부 접속이 허용 안되는 문제점이 있었다. (특히 워크벤치 힝..) 안타깝게도 나는 워크벤치없인 살 수 없는 몸이 되어버린 찐따였다. 떄문에 외부접속을 허용시켜보기로 했다. 여러 방법이 있지만 그중 haproxy를 결정했다. haproxy는 기본적으로 Reverse Proxy형태로 동작하며, 서버 앞단..
AWS WAF Custom Rule 간단 예제
cors를 맞추다가 스트레스 받아서 기존의 waf에 cors과 관련된 것들을 처리할 수 있을 거라 생각했는데, 역시나 있었다. 우아한 형제들 기술 블로그를 참조해서 대강 설명을 읽고, 가볍게 작동만 시켰다. 내가 원하는 것은 특정 도메인이 아니면 요청을 없애고 싶었다. ALB에 WAF옵션을 붙여놨기 때문에 WAF 옵션만 설정해줬다. AWS WAF -> Web ACLs -> acl 선택 후에 커스텀 룰을 만든다. 룰 설정 header에 origin에는 도메인 주소가 실려있어서 활용했다. header에 origin에 프론트 도메인이 없으면 block시키는 조건이다. 이래도 되나 싶긴 하지만, 일단 원하는 것은 만들어 냈다. 추후 여러 조건들을 활용해서 커스텀 룰을 더 많이 만들고, 디테일한 설정도 가능할 것..
[MySQL] Full Text Search Aws Aurora
mysql에서 데이터를 검색해야하는 작업을 해야했다. like같은걸 쓸 수 있지만 양심상 패스했다. mysql full text search를 활용하여 검색을 하기로 결정했다. 후엔 시간이 나면 일라스턱 서치같은 검색엔진을 따로 적용해볼 예정이다. ALTER TABLE 테이블명 ADD FULLTEXT INDEX 키값(적용할 컬럼1, 적용할 컬럼2) WITH PARSER NGRAM; 이렇게 Ngram을 포함해서 검색하고자 하는 컬럼에 FULLTEXT INDEX를 걸어준다. 처음에 Ngram은 자동으로 포함된다고 들어서, 안했는데 aws aurora는 그딴게 없었다. Ngram은 단어단위로 쪼개서 인덱싱을 한다. 기본 사이즈는 ngram_token_size 2 라서 2글자를 쪼개서 저장한다. 여기서 생기는 ..
[Nodejs] blocked by CORS policy: No 'Access-Control-Allow-Origin' header is pres
작업을 하다가 프론트가 Form-data에 실어서 보내면 이상하게 Cors가 걸렸다. 설정은 다 마쳤는데.. 처음에 Nginx 셋팅이 이상한가 싶어서 용량도 모두 재셋팅했다. 대부분의 레퍼런스들은 서버내의 ngimx.config 파일에서 옵션을 추가해줘야 한다해서, 저기에 추가하고, 저기가 아닌가 싶어 nginx 폴더 내의 server 탭에는 모두 추가해봤는데도 안 됐다. 혹시 AWS 로드밸런서에 문제가 있나 싶어 검사하기로 했다. WAF에 들어가서 확인해보니 .... ....? action에 block이 있었다. ( 캡쳐에는 전부 ALLOW 지만..) WAF 옵션에서, common rules를 제거하니 정상작동 됐다.
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()..