본문 바로가기

BackEnd

(36)
[NaverCloud]젠킨스 도커에 설치 IF ) 이전에 생성된 파일이 있다면 삭제하는 방법CI/CD를 여러번 해보면서 파일들이 많이 생성되었는데 이 파일들때문에 에러가 나는것같았습니다.파일들을 지워보고 생성했던 코드를 적어보았습니다. 더보기# 경로에서 지울경우 rm -r 폴더명# docker_projects/폴더명/project안에 있는 파일 강제 삭제sudo rm -rf /docker_projects/폴더명/project# docker_projects/폴더명/project 디렉토리 생성sudo mkdir -p /docker_projects/폴더명/project# docker_projects/폴더명/project로 이동cd /docker_projects/폴더명/project​1. 젠킨스를 도커에 설치 (CI/CD)Jenkins의 기본 포트는 ..
[NaverCloud] 원격접속에서 도커 우분투에 설치 0.  네이버 클라우드로 서버 만들기공인 IP가 필요하기때문에 서버를 먼저 생성합니다.서버가 있다면 mac은 terminal로, window는 MobaXterm을 실행해줍니다.1.  ssh 원격 접속하기서버에 접속하기위해 네이버 클라우드에서 생성한 서버의 동적 IP 주소를 조회합니다. 2. 동적 IP 주소를 입력해서 서버에 접속합니다.# 띄어쓰기 주의하자! ex)ssh root@223.130.135.142ssh root@동적IP주소 더보기ssh root@IP주소The authenticity of host 'IP 주소 (IP 주소)' can't be established.ED25519 key fingerprint is SHA256:39bKpXlSglql3j2trisE9z2MiYo5484BFYCZ4c/uCf..
[NaverCloud] server 만들기 0. 모바엑스텀 설치하기window 운영체제의 경우 원격에 접속하기위해 mobaXterm이 필요합니다.아래의 주소에서 다운로드 후 설치해주세요.MobaXterm 다운로드2. 서버 생성하기네이버 클라우스 플랫폼의 serverserver를 만들기에 앞서 네트워크가 필요하기때문에 VPC를 먼저 설정해줍니다. 1) VPC 생성하기 VPC와 Subnet더보기vpc는 zone과 상관없이 생설할 수 있다.하지만 subnet은 zone 안에 생성되어야한다.subnet은 동일한 zone에 여러 subnet이 생성 가능하다. public subnet은 서버만 윈치시킬 수 있으면 서버에 공인 IP를 부여할 수 있다.private subnet은 서버 혹은 로드밸런서를 위치시킬 수 있다. VPC가 생성되면 subnet Mana..
querySelectAll로 리뷰 수정하기 각각의 리뷰별로 수정 삭제 버튼이 뜨게 만들기는 성공했다.삭제는 reviewId 만 넘겨주면 됬기에 쉬웠는데문제는.. 수정하기... 음 어렵다 어려워..정렬된 순서의 index를 사용해서 그 review를 수정되도록 하려고 했는데0번째 인덱스만 제대로 선택되고 나머지들은 알수없는 순서의 리뷰에 수정영역이 생성되는것을 확인했다. 0}" > BEST --> 수정 삭제 ..
API Documentation (+postman) API Docs에대해 처음 알았을때 swagger를 사용해서 만들었다.그런데 최근에 Postman으로도 가능하다는걸 알았다.어떻게 하는지 궁금해서 해봤다. PostmanAPI 개발 및 테스트를 위한 협업 도구로서, 주로 개발자들이 API를 효과적으로 테스트하고 관리하는 데 사용되는 도구이다.Postman을 사용하여 API 엔드포인트에 요청을 보내고 응답을 검사하여 API를 효과적으로 테스트할 수 있다.  API DocumentationAPI Documentation이란 백엔드에서 생성한 API의 구성요소들을 개발자들끼리 어떻게 주고받을지를 문서화한것을 말한다.API를 문서화하면 정보들을 효율적으로 공유할 수 있어 개발자가 직접적으로 소통해야하는 빈도를 줄이고, 일의 능률을 높일 수 있다.API 문서에는 ..
MongoDB 비밀번호 변경 흠.. git hub desktop으로 연결했다가 10k가떠서 폴더를 삭제했는데 바탕화면의 폴더까지 삭제되었다. 휴지통 비우기 전에 확인 해보고 비울껄.. .env파일에 뭐가 있었는지 기억나지않아서 걱정이였는데 다행히 config의 index에 적혀있었다. import dotenv from "dotenv"; dotenv.config(); export default { MONGODB_URI: process.env.MONGODB_URI, JWT_SECRET: process.env.JWT_SECRET, PORT: process.env.PORT, }; 문제는 MongoDB의 비밀번호가 기억나지 않는것;;ㅎ MongoDB Atlas로 다시 접속하자 MongoDB Cloud MongoDB Cloud is a uni..
MongoDB 클러스터 사용하여 연결하기 몽고디비클러스트를 활용하여 몽고디비에 연결해본다. MongoDB: 애플리케이션 데이터 플랫폼 업계 최고의 최신 데이터베이스를 토대로 구축된 애플리케이션 데이터 플랫폼을 사용해 아이디어를 더욱 빠르게 실현하세요. MongoDB는 데이터를 손쉽게 처리할 수 있도록 지원합니다. www.mongodb.com 클라우드에 아틀라스로 들어간다. try free를 클릭 위치는 서울이 있어서 서울로하고 생성하자. 이제 생성이 완료되었다. 생성 완료되면 Quick Strart라며 바로 네트워크 엑세스를 설정하게된다. quick start를 하지않았다면 화면 왼쪽 하단에 NetworkAccess에 설정하면된다. network access에서는 접속할 수 있는 IP를 설정할 수 있다. ADD IP ADDRESS 를 클릭하고 ..
JWT AccessToken 오류 서버를 켜니 아래와 같은 오류가 떴다. '분명 문자열로 리턴될텐데 왜 void 나 any를 하라고하지?' 생각하며 any로 바꿨다. 서버를 켜보니 오류는 사라졌는데 포스트맨으로 요청을 보내면 아무것도 반환되지않았다. 로그인 코드는 확실하게 작동하는것을 확인했으니 문제는 getAccessToken쪽인데 다시보니 return을 안썼었다.;;; 값이 리턴되는게 없으니 void를쓰라고 뜬거였고 string을 썼을때 에러가 났던것이였다. 아..이제 이런 실수는 하고싶지않은데 그래도 나중에 뭘 우선적으로 확인해야할지 더 빠르게 확인할수 있겠지? 이렇게 생각해본다. 이제 엑세스토큰 값 잘 받아온다.
create()와 save() mongoDB를 사용하다가 비슷한 기능을 하는 두 메소드를 발견했다. 어떤때에 create를 쓰고 어떤때에 save를 쓰는건지 궁금해져서 알아보았다. 1. 공통점 두 메서드 모두 데이터베이스에 새로운 데이터를 만드는 model 메서드이다. 2. 차이점 1. create() create() 메소드는 save()와 달리, 새로운 document를 만들어 데이베이스에 바로 저장한다. 모델 생성과 저장을 한 번에 처리할 수 있어, 코드를 간결하게 유지할 수 있다. create()를 호출할때 생성할 객체르 전달 하면 된다. //create() 사용 const Join = async (req, res) => { await User.create({ name, email, password }); } 2. save() ..
유저 프로필 이미지 업로드 만들기 1 input 만들기 2. multer middleware 사용하기 설치: $ npm install --save multer 파일을 업로드 할수 있게 해준다. multer를 사용하기위해서는 조건이 딱 1개 있는데 form에 multipart/form-data을 formd에 입력해야한다. multer는 multiple 이 아닌 form을 처리하지 않는다고 쓰여있다. form(method="POST", enctype="multipart/form-data") 이것은 form이 다르게 encode 되게하는것이다. 여기서 enctype은 백엔드로 보내기위해 필요한 encoding tyoe이다.. 2-1 multer middleware 만들기 공식 문서 예 const express = require('express..
유저 프로필 Post edit findByIdAndUpdate()는 update되기전의데이터를 return 해주고 한가지 옵션이 있는데 NEW: true를 주면 findByIdAndupdate가 업데이트된 데이터를 return 해 준다. 즉 mongoose에게 가장 최근에 업데이트된 object를 달라고 하는 것이다. 이렇게 해도 화면상의 값은 바뀌지를 않는데 막상 db에 들어가보면 바뀐것을 확인 할 수 있다. edit-profile.pug에서 loggednUser의 값을 입력하는데, 이값이 어디서 생성되었을까? 이값은 localsMiddleware에서 생성되었다. 여기서 loggedUser를 req.session.user이라고 정의하고 있다. 이 req.sessin.user은 로그인할 때 생성되므로 로그인하는 코드를 확인해보자. 하..
Github Oauth 사용하기 3 보호되어 있는 글입니다.
Github oauth 사용하기 2 깃헙에서 받은 토큰을 access 토큰으로 바꿔줘야한다. client_secret는 오로지 백엔드에서만 존재해야하는데 client_id는 URL에 보여지기 때문에 secret은 이름그래도 보여져서는 안된다.  깃헙에서 준코드를 사용하여 access토큰으로 바꿀수 있다.export const finishGithubLogin = async (req, res) => { const baseUrl = "https://github.com/login/oauth/access_token"; const config = { client_id: process.env.GH_CLIENT, //필요할때 아무곳에서나 쓰려고 .env에 적었다. client_secret: process.env.GH_SECRET, ..
Github Oauth 사용하기 깃허브 로그인을 만들기 위해서는 3 단계를 거쳐야한다.그래서 글을 단계별로 나누었다.자세한 방법은 Github Docs 에서 확인할 수 있다.Github Oauth 사용방법1. 사용자의 GitHub ID 요청사용자를 github으로 보내 로그인하게하면 깃허브에서 비밀번호,보안, 이메일 인증 등을처리해준다.2. 사용자를 GitHub가 다시 본래의 사이트로 돌려보내기(redirect)로그인이 승인되면 유저는 다시 깃헙에서 토큰을 받아서 웹사이트로 돌아온다.그 토큰을 이용하여 유저의 정보에 접근할 수 있다.3.3. 액세스 토큰을 사용하여 API에 접근하기우선 github application이 있어야한다.깃허브에 로그인해서 오른쪽 상단의 본인의 계정의 이미지를 누르면 setting이 있을것이다.세팅을 누르면 ..
mongoose 1. mongoose mongoose는 mongodb를 쓰는데 있어 필수적인 package로 nodejs와 mongoDB를 이어주는 다리역할을 한다. nodejs에서 javascript로 코드를 적을텐데 mongoose가 이 자바스크팁트형식의 코드르 mongoDB에 전달해 주기 때문이다. 2. 장점 1. schema 몽구스의 장점은 schema이다. MongDB같은 NoSQL에는 스키마에대한 메타데이터가 없어 도큐먼트에 무엇을 넣어도 에러가 발생하지 않는다. 하지만 실제로 사용해보면 에러가나는데, 이런 문제를 막기위해 몽구스는 스키마를 도입했다. Mongoose Schema 공식페이지 2. 다양한 모델 메소드 몽구스를 사용해보니 메소드가 확실히 편하다는 느낌을 받았다. find, findOne, find..
middle(soft)ware 운영체제와 실행되는 애플리케이션 사이에 존재하는 소프트웨어이다. 기본적으로 분산된 애플리케이션의 통신 및 데이터 관리를 가능하게 한다. 데이터와 데이터베이스가 "파이프" 사이를 쉽게 통과할 수 있도록 두 가지 애플리케이션을 함께 연결하기 때문에 배관이라고도하며, 미들웨어를 사용하면 사용자가 웹 브라우저에서 양식을 제출하거나 웹 서버가 사용자의 프로필을 기반으로 동적 웹 페이지를 반환하도록 요청할 수 있다. morgan? HTTP request loogr middleware for node.js morgan은 nodjs용 request logger middleware다. morgan 함수를 호출하면 내가 설정한대로 middleware를 return해 준다. 설치방법 npm i morgan morgan 함수..
서버만들기 0. 서버란? 서버는 항상 인터넷에 열결되어있는 컴퓨터로 사용자의 요청(request)를 상시 듣고(listening)있는 컴퓨터다. 요청(request)? 사용자가 브라우저를통해 무언가를 요청하는 것 ex) 로그인id,password를 입력한 로그인요청, 뉴스 제목을 누르면 뉴스자료를 달라는 요청 서버에 요청하는것은 나의 행동을 듣는 서버에만 요청을 보낼수있기때문에 우선 서버가 어떤 port번호를 들을지를 정해줘야한다. 1. 포트번호 지정하기 const PORT = 4000; app.listen(PORT); //위 아래 모두 4000을 사용한다 app.listen(4000); 서버는 모든 것을 감시할 수 없기때문에 특정 부분을 계속해서 감시하려면 port가 필요하다. port는 컴퓨터의 수많은 문중 하..
BABEL 과 nodemon 1. BABEL 이란? Babel은 자바스크립트 컴파일러이다. 무슨말이냐면, ES6 코드(최신js문법)을 babel이 nodejs가 자바스크립트를 이해할수 있도록 구버전의 코드로 변환(transpile)해주는 도구이다. 즉, 자바스크립트 최신문법을 쓰고 싶다면 babel을 사용하면 된다. (위에는 스터디때 공부한거 설명하려고 쓰려고 만든이미지) 2. 설치방법 BABEL 공식사이트 1) 설치 명령어 입력 입력코드: npm install @babel/core @babel/node --save-dev 위 코드를 입력하고 package.json파일을 보면 devDependencies가 생긴것을 확인 할 수 있다. --save-dev 만약 명령어에서 --save-dev를 빼고 npm을 실행한다면 "dependen..
package.json 처음 공부했을때는 npm init을 치고 그냥 시키는대로만 만들고 말았는데 혼자서 공부하다보니 package.json의 중요성을 느껴서 좀 더 공부해보았다. 1. package.json이란? nodejs로 서버를 만들때 가장 처음으로 만들어보는 파일. 이라고만하면 면접은 탈락이겠지.. package.json은 node의 프로젝트 루트에 존재하는 파일로 프로젝트와 관련된 메타데이터를 보유하고있는 문서파일이라고 보면된다. 2. package.json 만들기 package.json을 만드는 방법에는 두가지가 있다. (1) npm init / yarn init 이 방법을 사용하려면 npm이 필요한데 node를 설치하면 npm은 자동적으로 설치되기때문에 node가 시스템에 설치되어 있어야 한다. 위 방법은 컴퓨터..
초기설정(1) npm i index.js까지 만들었다면 이제 express를 설치해보자. 1.npm i /npm i express 입력코드: npm i(또는 install) express 57개의 패키지를 받았으며, package-lock.json파일과 node_modules폴더가 자동적으로 만들어졌다. (.gitignore는 내가 DS_Store를 git에 자주 올려서 미리 만들어둔것이다.) node_modules 란? npm으로 설치한 모든 패키지들이 저장되는 장소(폴더) 로 용량이 굉장히 크기도하고 package.json파일만 있어도 모듈들을 설치할 수 있어 gitignore해야하는 파일이다. github에 푸쉬하지 않도록 조심하자. package-lock 이란? package-lock은 나의 패키지 파일들을 안전하게 관리..
초기설정(0) 1. 프로젝트를 진행 할 폴더를 만든다 맥북: mkdir 폴더명 윈도우: 새폴더 2. github에 연결하기 1. 폴더 경로에 git init 입력. 2. 깃허브로 이동하여 새 레포지토리를 만든다. 3.만들어진 레포의 url을 복사. 4. git remote add origin [레퍼지토리 URL] 잘연결됬는지 확인하고 싶다면 git remote -v를 입력하면된다. 처음 폴더를 만들었을때 위 명령어를 입력하면 비어있으나 복사한 url을 연결하였다면 아래의 사진처럼 뜰 것이다. 3. package.json을 만들기 touch package.json으로 만들수도 있지만 수동으로 만들면 에러가 날 가능성이 높으므로 npm을 써서 만들자. json(JavaScript Obnect Notation)이란? 제이슨..
promise {pending} 오늘도 새로운 에러를 만났다.promise pending은 비동기함수가 처리 되지않고있는 상태라는것만 알고있는데 뭐가 문제인걸까?Promise는 3가지의 상태로 나뉜다.-pending(대기): 이행되지도 거부되지도 않은 상태-fulfilled(이행): 성공-rejected(거부): 실패 왜..왜 작동하지 않는거냐..const puppeteer = require("puppeteer");const cheerio = require("cheerio");let screenShotList = { tag: "", title: "", influencer: "",};const crawl = async (keyword) => { const browser = await puppeteer.launch({ headles..
axios와 cheerio 로 간단한 크롤링 만들어보기 회사에서 크롤링해서 원하는 데이터를 찾아 스크린샷을 찍고 원하는 데이터에 빨간 박스를 그려주고 저장하는 API를 만들어달라고 요청이 들어왔다. 일단 크롤링이 정확히 뭔지 몰라서 크롤링이 뭔지부터 찾아봤다. 웹 크롤링이란? 웹 크롤링(Web Crawling)은 웹 페이지를 주기적으로 탐색하고, 웹 페이지의 내용을 수집하는 자동화된 프로세스를 말한다. 크롤러 또는 스파이더라고 불리는 소프트웨어가 웹사이트를 방문하고 데이터를 수집하는데, 목적은 웹 페이지의 정보를 수집하여 분석하거나 저장하는 것이다. 이를 통해 특정 웹사이트의 콘텐츠, 가격 정보, 뉴스, 이미지 등 다양한 데이터를 수집할 수 있으며, 크롤링된 데이터는 후속 분석, 기계 학습 모델 학습, 비즈니스 인텔리전스 등에 활용될 수 있다. 크롤링 과정 ..
API Documentation (+ postman) API Docs에대해 처음 알았을때 swagger를 사용해서 만들었다. 그런데 최근에 Postman으로도 가능하다는걸 알았다. 어떻게 하는지 궁금해서 해봤다. Postman API 개발 및 테스트를 위한 협업 도구로서, 주로 개발자들이 API를 효과적으로 테스트하고 관리하는 데 사용되는 도구이다. Postman을 사용하여 API 엔드포인트에 요청을 보내고 응답을 검사하여 API를 효과적으로 테스트할 수 있다. API Documentation API Documentation이란 백엔드에서 생성한 API의 구성요소들을 개발자들끼리 어떻게 주고받을지를 문서화한것을 말한다. API를 문서화하면 정보들을 효율적으로 공유할 수 있어 개발자가 직접적으로 소통해야하는 빈도를 줄이고, 일의 능률을 높일 수 있다. API..