이번에 처음으로 SQL을 써보면서 알게 된 여러 경험들을 정리해본다. 사아아실 sql을 깊이 공부해본 적이 없어서 약간의 꼼수와 야매가 가득 섞여있다. 1. Select 절에서 서브쿼리 사용 const selectItemsByCount = async (connection, limit, offset) => { const selectItemsByCountQuery = ` SELECT (select count(*) from wish where wish.item_id = item.item_id) wish_count, item.item_id, item.title, item.price, item.safety_pay, item.location, item.created_at, image.image_path FROM i..
라이징캠프
nodejs에서 이미지 등의 파일을 멀티파트 형식으로 업로드할 때 multer 라는 패키지를 설치해서 미들웨어로 이용한다. npm i multer npm i multer-s3 aws-sdk s3.json { "accessKeyId": "AKIAVLEU2D2EIKMGBVQS", "secretAccessKey": "", "region": "ap-northeast-2" } 이전 포스팅에서 IAM을 설정하고 받은 어세스키와 시크릿키를 넣어둔다. 이 시크릿 키가 유출이 되면 청구서에 엄청난 액수가 찍히고 추운 겨울에 현관문 밖으로 내쫓길수도 있으니까 꼭꼭 주의한다. region에는 s3 버킷에 설정된 리전을 적는다. 서울이니까 보통은 ap-northeast-2 로 되어 있을걸. multer.js multer와 관..
이미지 업로드 기능을 nodejs로 구현 중이다. 이전에 처음 간단하게 했던 프로젝트에서는 단순히 서버의 로컬 디렉토리에 이미지 파일을 저장하고, 다시 불러올때는 이미지파일을 base64로 변환해 다시 넘겨주었다. 이번에는 아마존의 S3에 이미지를 업로드해보려고 한다. nodejs에서 S3 서비스를 이용하려면 먼저 S3 버킷을 생성하고, IAM에 새로운 사용자를 등록해 어세스 키를 만들어서 사용한다. 1. S3 버킷 S3 버킷 생성을 할 때는 모든 퍼블릭 액세스 차단을 풀고 넘어간다. 버킷을 생성한 다음에는 버킷 정책을 수정해주어야 한다. 버킷 이름 클릭 > 권한 > 버킷 정책 에서 볼 수 있다. 버킷 정책은 JSON 형식으로 되어 있는데, 정책 생성기를 이용해서 쉽게 만들 수 있다. 버킷 ARN을 클릭..
Node.js Express 서버를 AWS EC2 상에 배포를 해보자. EC2에 git, npm, node.js 설치 등의 사전 세팅은 생략하고 넘어간다. Node.js 파일들과 패키지를 모두 내려받은 후에 파일을 실행시키는 것으로 서버를 돌릴 수는 있다. node index.js 클라이언트에서 내 서버의 api로 요청을 보냈더니, 리액트 프론트가 배포된 url에는 HTTPS 보안이 되어 있지만, 요청을 보내는 내 서버의 url은 그렇지 않다. 반드시 HTTPS 걸린 주소로 요청을 보내야 한다. [Nginx] 도메인 연결, HTTPS 적용 (Let's Encrypt) 참고1 1. 도메인 연결 이전에 가비아에서 구매를 해놓고 안쓰는 도메인이 있어서, 그 도메인에 내 IP를 연결했다. 10분 정도 기다리면 ..
참고1 참고2 RDS는 EC2와 함께 사용하며 아마존에서 제공하는 기능을 편하게 이용할 수 있게 해주는 DB전용 서버이다. 1. RDS 생성 1) RDS 인스턴스를 생성하고 MySQL, 프리 티어를 선택한다. 2) 마스터 사용자 이름과 새 VPC 보안 그룹, 초기 데이터베이스 이름 등을 지정해준다. 3) 퍼블릭 액세스를 '예'로 설정한다. 설정을 모두 완료하고 '생성 중' 상태로 몇분 기다리면 RDS 생성이 완료된다. 2. EC2에서 RDS 접근 1) 인바운드 규칙을 수정한다. 사용하는 EC2 보안그룹의 그룹ID를 복사해서 넣는다. 처음엔 현재 접속한 IP만 열려있다. 2) EC2에서 다음의 명령어를 실행하여 RDS 인스턴스에 접근한다. sudo mysql -u [사용자 이름] -p -h [RDS인스턴스..
참고1 참고2 'dev.9yujin.shop' 그리고 'prod.9yujin.shop' 이렇게 두 개의 서브 도메인을 만들어보자. 1. 가비아 DNS 레코드 수정 가비아에서 먼저 CNAME으로 서버 도메인을 등록해준다. dev와 prod 두개를 생성한다. 2. 서브도메인 페이지 정적 파일 생성 1) 서브도메인으로 요청이 들어오면 보여줄 파일들을 넣어둘 디렉토리를 만든다. 기존 /var/www/html 에 추가로 /var/www/dev 과 /var/www/prod 디렉토리를 만들었다. 2) /var/www/dev에 html 파일을 임시로 작성해준다. hello dev-subdomain 3. Nginx 설정 1 1) /etc/nginx/sites-available 디렉토리에 서브도메인을 위한 설정 파일을 만..
참고1 1. 도메인 연결 이전에 가비아에서 구매를 해놓고 안쓰는 도메인이 있어서, 그 도메인에 내 IP를 연결했다. 10분 정도 기다리면 내 도메인과 IP가 매칭이 된다. 2. Certbot 설치 (Let's Encrypt) Let's Encrypt는 SSL 인증서를 무료로 발급해 HTTPS를 널리 보급하기 위해 시작된 비영리기관이다. 직접 PEM key들을 발급받아서 설정해주어도 되지만 많이 번거롭기 때문에, 웹서버에 쉽게 세팅할 수 있도록 도와주는 도구들이 있다. wget으로 Certbot-auto를 다운받아 설치하는 블로그들을 보고 따라했는데 해당 파일이 존재하지 않는다. 대신 snap으로 Certbot을 설치할 수 있다. apt와 비슷한(?) 패키지 관리 시스템이다. snap을 실행하기 위해 sn..
참고1 참고2 1. Nginx 설치 sudo apt install nginx sudo service nginx start 로 nginx를 실행한다. sudo service nginx status 로 실행이 잘 되고 있는지 확인할 수 있다. 2. Nginx 설정 nginx의 설정들은 모두 nginx.conf 에 있다. nginx.conf 의 http 블록에 include 되어 있는 파일들이다. include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; /conf.d : conf 저장 폴더. 자주 사용되는 설정은 conf.d 폴더 하위의 설정으로 빼서 include 해오는 방식으로 중복을 제거할 수 있다. /sites-enabled : 활성화..