AWS 11

[Redis] AWS ElasticCache Redis 사용하기 - Node JS, EC2, RDS(mysql), Lambda

지금까지는 항상 DB에서 조회한 데이터를 사용했다. 하지만 캐싱을 적절히 사용한다면 실시간으로 데이터를 업데이트 해줄 수 있고 속도도 향상시킬 수 있기 때문에 캐시를 사용하려고 한다. 지금 AWS로 서비스를 하고 있기 때문에 Elastic Cache의 Redis를 처음 도입하고 사용하는 것까지 다뤄보려 한다. 1. Redis 나는 간단하게 '캐싱용 DB'라고 이해했다. 데이터베이스에 저장된 데이터를 메모리 캐시로 임시로 저장하는 것이다. 메모리로만 데이터를 처리하기 때문에 데이터 저장 및 검색 속도가 매우 빠르다는 장점이 있다. Redis를 왜 써야 하고, 무슨 이정이 있는지는 참고자료나 다른 블로그를 보는 게 더 좋을 것 같다. 2. 클러스터 생성 AWS 콘솔에서 Elastic Cache에 접속해주고 ..

AWS 2022.09.19

[Redis] 전송 중 데이터 암호화가 활성화된 레디스 연결 시 에러 - jemalloc/jemalloc.h, openssl/ssl.h

zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory sentinel.c:34:10: fatal error: openssl/ssl.h: no such file or directory 1. 독스를 제대로 따랐는지 확인하기 sudo yum -y install openssl-devel gcc wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make distclean make redis-cli BUILD_TLS=yes sudo install -m 755 src/redis-cli /usr/local/bin/ 출..

AWS 2022.09.19

[Serverless] WARNING: Could not determine version of module ~ 문제

옛날부터 아래와 같은 경고문이 떴다. Serverless: WARNING: Could not determine version of module aws-sdk serverless로 deploy 할 때 나던 경고문이다. 딱히 크게 문제될 게 없어서 그냥 넘겼는데 갑자기 거슬려서 해결하기로 했다. 해결 방법: webpack과 serverless-webpack의 버전을 올려준다. 간단하게 버전 번호 앞에 '^' 만 붙여주고 다시 install 하면 끝!

AWS 2022.08.17

[AWS] ERROR LOG가 찍히지 않는데 502 Internal server error가 뜰 때 - CloudWatch, Lambda, APIGateway

서버로 request를 보내면 502 에러가 뜨는데 CloudWatch에서는 정상적으로 로그가 찍혀서 뭐가 문젤까 디버깅을 하는 중이었다. 우선 502 ERROR는 시간 초과 문제다. API Gateway 테스트로 찍어보면 request와 response의 헤더 전체를 볼 수 있으니 디버깅할 때 유용하게 쓸 수 있는데, 여기에서도 time out이 떴다. 이전까지만 해도 잘만 작동하던 함수가 이렇게 time out이 뜨는 이유가 뭘까... 며칠을 디버깅하며 보냈다. 동일한 API 스택에 있는 다른 함수는 잘 동작을 했고, 문제의 lambda 함수도 잘 동작을 했으니 각각이 문제는 아니라 생각했다. 그렇다면 API Gateway와 Lambda가 연결되는 과정에서 시간 초과가 난 건데. 이전까지는 시간 초과..

AWS 2022.08.12

[AWS] Lambda로 CloudFront 무효화 기록 - S3 트리거, 와일드카드

CF를 본격적으로 사용하기 시작하면서 문제가 생겼다. 바로 캐싱된 이미지가 24시간 동안 유지된다는 것이었다. 내가 개발하는 어플은, 유저가 이미지를 수정할 수 있다. 그래서 새로 이미지를 수정할 때엔 똑같은 key로 버킷에 업로드하며 overwrite하였다. (S3는 기본적은 동일한 key에 대해 overwrite 한다.) 하지만, 이렇게 하면 S3에서 원본 이미지는 바뀌었지만 CF의 캐시 이미지는 그대로 있다는 것이다. 이런 문제를 해결하기 위해 AWS가 방법 2가지를 제공해주고 있다. 1.key 자체에 버전을 명시해 관리하기 ex) image_20220804 등 key에 시간/uid 등을 붙여 관리 2. CF 무효화 기능 사용하기 AWS에서도 1번을 추천하고 있고, 나도 관리 면에서는 1번이 좋은 ..

AWS 2022.08.04

[AWS] 이미지 업로드/읽기 속도 향상기 - Signed URL, Lambda@Edge, Cloud Front

항상 어플의 속도에서 문제되던 것이 있다. 바로 이미지 로딩 속도. 이미지 로딩이 느리니 아무리 API가 빨리 돌아가도 그냥 느려보이는 것이었다. 항상 방법을 찾아야지 찾아야지 하다가 그냥 개발에 급급해 미뤄두던 문제를... 드디어 해결하려 한다. * 기존의 이미지 업로드/쓰기 방식 먼저 Client에서 서버로 form-data에 이미지 파일을 바이너리로 보낸다. 서버는 busboy module로 이미지를 받고 S3에 직접 PUT한다. 또 Jimp 모듈을 이용해 이미지를 리사이징해, 원본이미지와 썸네일 이미지를 모두 저장한다. 그리고 이 이미지 URL을 DB에 저장한다. 이때 S3 버킷을 퍼블릭으로 권한을 설정해 두어 이미지 URL로 바로 Client가 읽을 수 있도록 하는 게 기존의 방식이었다. 위의 ..

AWS 2022.07.26

[AWS] Access denied for user 'id'@'ip' (using password: YES)" 해결 방법

좀 더 자세한 에러 로그는 Access denied for user '[user]'@'ec2-...-...-.[region].compute.amazonaws.com' (using password: YES)" 였다. AWS에서 RDS를 이용하고 있었고 암호를 이용해 인증하고 있었다. 최근에 비밀번호를 바꾼 후로 나던 오류라 관련되어서 뭔가 문제가 있겠거니 했는데, 그 문제가 뭔질 모른다는 게 더 문제였다...^...; workbench는 잘 연결 되는데 server 상으로 연결이 안 됐다. select host, user from mysql.user; 이런 sql 문을 이용해도 host는 '%'로 잘 나왔고... 해결 방법은 다시 비밀번호를 바꾼 거였다. https://stackoverflow.com/qu..

AWS 2022.04.17

[AWS] User is not authorized to access this resource 에러 해결 방법

aws serverless 를 쓰다가 User is not authorized to access this resource 이런 에러 로그를 받았다. 구글링 해도 방법은 많이 나온다. 이 해결 방법은 AWS Console -> API Gateway -> 문제 되는 api -> 권한 부여자 로 들어가면 이런 화면이 뜬다 저기 권한 부여 캐싱이 문제가 되는 것인데. 편집을 눌러서 권환 부여 캐싱 활성 버튼은 비활성화 하면 된다. 그리고 다 저장하고 꼭 console에서 배포를 해주자! 당연한 건데, 난 이걸 안 해서 다 했는데 왜 안 되지 이러고 있었다ㅋㅋㅋㅋ...ㅜ API 배포 꼭 눌러주기! 그럼 해결됨!

AWS 2022.02.14

[AWS] serverless webSocket을 이용해 DM 앱 만들기 - 2

고생고생하던 채팅앱을 드디어 완성했다. 에러가 나던 부분들은 보통 권한 문제였어서 코드 상으로는 크게 고칠 게 없었다. 1. 코드 수정 부분 (1편에서 유튜브 동영상을 보면 예제 코드가 있습니다. 아래는 그 코드에서 수정한 부분들입니다.) * const result = await docClient.query(params).promise(); if (result.Items) { ... } 이 부분에서 if 부분이 작동이 안 됐다. 왜인지는 모르겠으나 변수에 잘 저장이 안 된 것으로 판단하고 docClient.query(params, async function (err, data) { ... } 이렇게 바로 처리해주었다. result를 data로 바꾸기만 하면 된다. * 위 문제처럼 try { await a..

AWS 2022.01.03

[AWS] serverless webSocket을 이용해 DM 앱 만들기 - 1

디엠 기능을 만들어야 하는 상황이 생겼다. 보통 채팅 기능이라고들 한다. 나는 DM이라는 말이 더 편해서 DM으로 사용 중. 처음엔 nodejs의 socket 통신을 이용하려고 했는데 aws를 쓰고 있는만큼 aws를 이용해서 소켓통신을 하는 게 좋을 것 같아 aws에 관해 계속 서칭을 했다... 이게 얼마나 삽질이 될지는 몰랐다... nodejs socket은 자료가 매우 많아서 비슷하겠거니 했는데, aws는 자료가 엄청 없다. 특히 한국어 자료는. 또 어떻게 채팅을 구현하냐도 천차만별이라서, 내가 원하는 기능 찾기가 매우매우 힘들었다. 지금 아직 완벽하게 진행은 못했지만, 우선 한 만큼만 공유해보려 한다. 먼저 저에게 많은 도움을 주신 유튜브 영상을 소개합니다. 이 영상을 보고 98%정도 따라했다. 2..

AWS 2021.12.27