본문 바로가기

Development/TIL

(56)
Sequelize Sequelize란? Sequelize는 node.js에서 사용할 수 있는 ORM 라이브러리이다. ORM은 객체와 데이터베이스 간의 매핑을 자동으로 처리하여 개발자가 직접 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호 작용을 할 수 있게 해준다. Sequelize는 MySQL을 비롯한 다양한 데이터베이스 시스템을 지원하며 테이터베이스의 스키마를 자동으로 생성할 수 있다. 또한 Model 정의를 통해 데이터베이스와 객체 간의 매핑을 설정할 수 있으며, 쿼리 생성 및 실행, 트랜잭션 관리, 데이터 유효성 검사 등 다양한 기능을 제공한다. ORM (Object-Relation Mapping)이란? 객체와 관계형 데이터베이스 사이에 데이터를 변환하는 기술이다. ORM을 사용하면 객체와 관계형 데이터베이스 간..
JsonWebToken JWT가 무엇? 웹 어플리케이션에서 사용자 인증 정보를 안전하게 전송하기 위해 JSON 형식으로 만들어진 암호화된 문자열이다. 일반적으로 서버에서 클라이언트로 인증을 할 때 토큰 기반 인증 방식으로 많이 사용된다. JWT의 구조 Header.Payload.Signature 세 부분으로 이루어져있다. 따라서, JWT 형식으로 변환된 데이터는 항상 2개의 '.'이 포함된 데이터여야 한다. hearder에는 signature 데이터에 어떤 암호화를 사용했는지 표현한다. payload에는 우리가 원하는 데이터를 저장한다. signature는 이 토큰이 정상적인 토큰인지 확인할 수 있게 도와준다. JWT의 특성 비밀키를 모르더라도 복호화(decode)가 가능하다. 그래서 민감한 정보는 담지 않도록 해야한다. 특정..
내가 만든 Cookie 쿠키(cookie)란? 클라이언트가 서버로부터 set-cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보낸다. - 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약하다. - 쿠키는 문자열 형식으로 존재하며 쿠키 간에는 세미콜론으로 구분된다. 쿠키를 만들어보자 서버가 클라이언트의 요청(request)을 수신할 때, 서버는 응답(response)과 함께 set-cookie라는 헤더를 함께 전송할 수 있다. 그 후 쿠키는 해당 서버에 의해 만들어진 응답과 함께 cookie HTTP 헤더 안에 포함되어 전달 받는다. set-cookie를 이용해 쿠키 할당 app.get("/set-cookie", (req, res) => { let expire = new Date(); exp..
try catch를 이용한 예외 처리 node.js를 열심히 배우는 중에 문득 예외 처리를 왜 하는지에 대해 궁금해졌다. 그래서 기본적인 문법과 메커니즘을 정리하고 의의를 탐구해보겠다. try { // 예외가 발생할 수 있는 코드 } catch (error) { // 예외 처리 코드 } node.js의 try catch는 코드 실행 중에 예외 상황을 캐치하여 실행을 중단시키지 않고 에러 상황을 알려준다. try 블록 내에서 예외 상황이 발생하면 해당 예외는 catch 블록으로 전달된다. catch 블록에서 예외 객체를 인수로 전달받아 처리한다. 예시 코드 const fs = require('fs'); try { const data = fs.readFileSync('file.txt', 'utf8'); console.log(data); } ca..
schema.virtual mongoose에서는 mongodb 내부에는 특정 column이 존재하지 않지만, 데이터를 조회할 때 가상의 column을 추가하여 좀 더 편리하게 데이터를 가공하거나 사용할 수 있도록 도와준다. 즉, 실제 DB에 저장되지 않는 가상의 column을 만들어 편리하게 데이터를 가공 및 사용할 수 있게 한다는 것이다. 가상 속성을 정의할 때 schema.virtual() 메서드를 사용한다. 이 메서드는 두개의 인자를 받는데, 첫번째는 가상 속성의 이름이고 두번째는 객체이다. 객체의 get 메서드를 정의하여 가상 속성의 값을 계산하고 반환할 수 있다. set 메서드를 정의하여 가상 속성에 값을 설정할 수도 있다. mongoose 공식 가이드 예시 코드 1 const userSchema = new mongoos..
this에 대하여 문제 딱히 this 관련하여 문제는 없었다. 하지만 어제 objectId를 생성하는데 this가 관련이 있어서 이어서 정리해보려고 한다. 시도 일단 가볍게 훑어보자면, 자바스크립트에서 this는 실행 컨텍스트 내에서 현재 객체를 참조하는데 사용된다. 그리고 this가 가리키는 객체는 함수 호출 방식에 따라 결정된다. 1. 함수가 객체의 메서드로 호출되면, 'this'는 그 객체를 참조한다. 2. 함수가 일반적으로 호출되면, 'this'는 전역 객체를 참조한다. 3. 함수가 new 연산자와 함께 호출되면, this는 새로운 객체를 참조한다. 4. call, apply, bind 메서드를 사용하여 함수를 호출하면 첫번째 인수로 전달한 객체를 this로 참조한다. this가 가리키는 객체를 확실히 이해하면 메..
mongoose objectId와 new 키워드 문제 crud 게시판 서버 구현을 하는 중이다. 게시글 작성 API를 구현하는 중에 문제가 발생했다. 수정, 삭제하는데 필요한 게시글의 고유 아이디(postId)를 mongoose의 objectId를 가져와 사용하려고 하는데 정상적으로 생성이 안되는 것이다. 시도 const PostSchema = new Schema({ postId: { type: Schema.Types.ObjectId, // ObjectId로 변경 required: true, unique: true, default: () => mongoose.Types.ObjectId() // default 값으로 ObjectId 생성 }, 새로운 document가 생성될 때마다 positId에 mongoose의 objectId를 할당하기 위해 new..
TIL - Promise와 await 연산자 (feat. vs GPT) 문제 어제에 이어 자바스크립트의 비동기적 처리에 대해 정리해보려고 한다. 서버 개발 실습을 하는데 route에 async를 붙여 비동기적 처리를 하는 경우가 많더라. 아직까지 이게 서버 동작에 어떤 차이를 주는지 이해가 잘 안가서 더 공부가 필요하다. 시도 요즘 구글링보단 chat gpt를 사용하는 빈도가 늘었다. 검색을 하고 괜찮은 자료들을 찾는 수고를 조금이나마 덜어주는 것 같아서 좋다. promise에 대해 g선생이 설명한 내용을 정리하자면, Promise는 javascript에서 비동기 처리를 할 수 있게 해주는 객체이다. (객체는 모다? key : value 값을 갖는다. 일반적으로!) 예시 코드를 쓰자면, const getData = () => { return new Promise((resol..