coding 97

Sequelize Op like - 검색 기능

프로젝트를 하면서 검색 기능을 만들 기회가 생겼다. 전에 특정한 카테고리를 중심으로 필터 기능을 만들었는데 그때는 findAll을 통해서 where(조건)에 해당 카테고리를 넣어 찾아주면서 필터 기능을 사용하였다. 카테고리별 조건에 맞는 데이터 찾기 router.get("/category/:category", async (req, res) => { try { const { category } = req.params; const datas = await Posts.findAll({ where: { category }, include: { model: Users, attributes: ["loginId"], }, }); res.status(200).json({ ok: true, result: datas.ma..

coding/Node.js 2022.08.23

페이지네이션

페이지 네이션이란 책 페이지처럼 데이터를 묶음으로 분리하는 과정이다. 모든 데이터를 한 번에 가져오는 게 아니라 필요한 개수를 지정하고 특정한 정렬 기준에 따라 상황에 맞춰 조건을 맞춰서 데이터를 분할해서 가져오는 것이다. 대표적인 방법 오프셋 기반 페이지 네이션 : DB의 offset 쿼리를 사용하여 '페이지' 단위로 구분하여 요청/응답하게 구현 커서 기반 페이지 네이션 : 클라이언트가 가져간 마지막 row의 순서상 다음 row들을 n개 요청/응답하게 구현 오프셋 기반 페이지 네이션 가장 일반적인 방법(난이도가 쉽고, 편리한 방법) 데이터를 가져올 때 LIMIT을 사용해서 필요한 만큼만 가져오고 다음에는 offset을 사용해서 가져온 만큼을 건너뛰고 필요한 만큼씩 가져오는 방법 ex) 100개의 데이터..

coding/Node.js 2022.08.23

express HTTPS 설정

1. express를 이용해 서버를 배포하고, 인스턴스 환경에 접속한다. 2. 포트 포워딩(80 => 3000) sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000 3. pm2 설치 npm install -g pm2 4. 인증서 설치 준비 app.js가 설치된 디렉터리로 이동(같은 위치) // 인증서 설치 sudo apt-get install letsencrypt 4.2 인증서를 받을 폴더 생성 // 폴더 생성 mkdir public mkdir -p .well-known/acme-challenge 5. app.js 수정 // 코드 추가 app.use(express.static('public')); 6..

coding/Node.js 2022.08.20

인스턴스 접속 에러

프로젝트를 하면서 인스턴스에 접속을 할 수 없는 에러를 만났다. 배포 직전에 https를 구현하기 위해 이것저것 자료를 찾아보고 적용하면서 여러 패키지들을 설치하는 과정에서 설정을 건드린 것이 문제인 것 같은데 아직까지도 왜 인스턴스에 접속할 수 없었는지에 대한 이유는 찾지 못했다. 우분투 환경에 yum을 설치하고, 설정을 수정하고, git을 설치하고 정신 차려보니 터미널에서 ssh로 연결하는 과정에서 이러한 에러와 마주쳤다.(예시 이미지임) 내 인스턴스 환경에 연결이 거절되었다? 포트가 문제인가 보안규칙도 보고 했지만, 원인을 몰랐다. 뭐가 문제지.. 하면서 오류를 검색해도 원인을 찾지 못해서 인스턴스 중지(일시정지)를 했다가 다시 시작해서 연결을 시도했다. 그러고 나니 이제는 이런 에러로 바뀌었다. ..

coding/Error 2022.08.19

http https

프론트와 협업을 하면서 백앤드는 익스프레스로 http 환경의 서버를 띄우고 프론트는 버셀?이라는 것을 사용해서 서버를 띄우면 https의 환경이 만들어진다. 하지만, 두 서버가 api 통신을 할 경우 http 환경이 달라서 통신을 할 수가 없다. 그렇기 때문에 프론트에서 S3로 http환경을 구축하여 통신하거나 서버에서 https 환경을 만들어 통신해야 한다. 백앤드가 배포를 중점으로 하진 않지만, 그래도 프론트보다 배포에 조금 더 관여를 하고 있기 때문에 서버에서 https 환경을 구축하는 게 맞다고 생각한다. 또한 http와 https의 보안 차이도 크기 때문에 보안을 강화해서 통신을 하는 것이 좋을 것 같다. http란 기본적으로 클라이언트와 서버 사이에서 데이터를 주고받는 통신 프로토콜이다. 주고..

coding/IT, CS 2022.08.19

비밀번호 암호화 - bcrypt

백앤드 서버 개발자라면 중요한 정보(비밀번호 등)를 DB에 저장할 때 입력받은 값 그대로 저장해서는 안된다. 만약 db서버가 탈취당하게 된다면, 사용자들의 정보나 중요한 내용들이 해커 손에 들어가기 때문이다. 서버의 보안이 뚫리지 않는 것이 가장 이상적인 상황이지만, 보안은 언제든 뚫릴 수 있고, 항상 강화를 해야 한다. 이때 비밀번호를 암호화하여 저장을 했다면, 탈취당하더라도, 사용자들의 정보를 조금이라도 지킬 수 있기 때문에 보험처럼 항상 암호화를 실시하여 저장을 해주어야 한다. 또한, 관리자가 사용자의 개인정보를 저장을 하지만, 비밀번호 같은 더 중요한 내용을 그대로 보거나, 저장하면 안 되기 때문에, 암화화를 하는 이유도 있다. 단방향 / 양방향 암호화 - 단방향 암호화 암호화는 할 수 있어도, ..

coding/Node.js 2022.08.17

swagger 설치 및 설정 기본 사용법

swagger란 API 명세를 설계하고 문서화를 해주는데 도움을 주는 기술(협업할 때 유용) Open API Specification(OAS)를 위한 프레임워크 간단한 설정으로 프로젝트에서 지정한 URL들을 HTML 화면으로 확인할 수 있게 해주는 프로젝트 api명세가 필요한 이유 - 협업을 진행하거나 이미 만들어져 있는 프로젝트에 대해 유지보수를 진행하기 위해서 구축되어 있는 API가 어떤 스펙을 갖고 있는지 알아야 한다. - API 명세서가 없다면, 코드를 전부 확인하는 과정에서 개발 시간이 너무 오래 걸린다. - 프론트는 백앤드에게 API가 어떻게 동작하는지 물어보면서 개발해야 한다. - 개발할 때는 시간이 적게 걸릴 수 있지만, 유지 보수를 할 때, 시간이 상당히 오래 걸린다. api 명세를 작성..

coding/Node.js 2022.08.17

CORS 사용방법

cors란 Cross Origin Resource Sharing의 약자 클라이언트와 다른 origin을 가진 서버가 서로 통신할 수 있도록 허용하는 프로토콜이다. 자신이 속하지 않는 다른 도메인, 다른 프로토콜, 다른 포트에 있는 리소스를 요청하는 cross-origin HTTP 요청 방식이다. 기본적으로 도메인 혹은 포트가 다른 클라이언트가 서버에 api요청을 보냈을 때, 브라우저가 보안상의 이유로 api를 차단한다. 이를 cors를 통해 허용하여 정상적인 api요청을 주고받을 수 있도록 한다. 즉, cors를 설정하지 않으면 기본적으로 허용하지 않은 다른 도메인, 다른 포트로부터의 api요청은 받을 수 없다. 왜냐하면, 특정 서버 리소스에 다른 임의의 웹 사이트들이 api 요청을 보내서 악의적으로 특..

coding/Node.js 2022.08.14

외래키 설정

씨퀄라이즈로 관계형 DB를 만들어 사용하는데 마이그레이션으로 테이블을 만들고, 관계를 설정해주고, 모델을 기준으로 디비에 접근해서 데이터를 사용하는 것이라고 대략 개념을 잡았다. 관계 설정을 해줬으니 디비를 사용하면 바로 관계 맺은 데이터를 사용할 수 있는 줄 알았는데 데이터에 접근해보니 라는 오류가 생겼었다. 나는 userId라는 칼럼을 만들어서 외래 키로 사용하려고 했는데 쿼리문을 보니 UserUserId라는 칼럼을 찾을 수가 없다는 오류가 생겼다. 처음엔 뭐지.. 했는데 전에 비슷한 오류를 본 사람이 말해주기를 외래 키의 이름? 을 설정해주지 않으면 참조해주는 테이블과 칼럼을 토대로 임의로 이름을 지어주기 때문에 생기는 오류라고 했다. 그래서 모델에서 hasmany, belongsto 같이 관계 맺..

coding/Error 2022.08.14

Sequelize 시작, migrate 사용 관계 설정

Sequelize 사용법 1. 설치 npm i sequelize mysql2 -S npm i sequelize-cli -D sequelize는 Node.js 코드에서 sequelize를 사용 mysql2는 node.js에서 Sequelize를 이용해 MySQL을 더욱 쉽게 조작할 수 도록 도와주는 패키지 sequelize-cli는 우리가 Sequelize를 조금 더 쉽게 사용하도록 도와주는 도구를 설치하는 명령어 2. Sequelize 사용 전 설정 npx sequelize init 위와 같이 폴더와 파일들이 생성 index.js : 구현할 sequelize 모델을 편리하게 사용할 수 있게 해주는 파일 config.json : 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어가 있음(DB..

coding/Node.js 2022.08.13