Development (135) 썸네일형 리스트형 MongoDB와 MySQL 항해99 주특기 주차 Lv3 과제는 CRUD 게시판의 데이터 베이스를 MongoDB에서 MySQL로 바꾸는 것이었다. 따라서 사용하는 라이브러리도 mongoose에서 sequelize로 바뀌었다. 일단 두가지 DB를 사용해서 프로젝트를 진행해본 결과 mongoose가 더 편리했다. schema를 언제든지 변경할 수 있고 변경하는 것에 따라 별다른 조작 없이 DB에 저장이 되었기 때문이다. 반면, sequelize는 하나의 스키마에 migration과 model 두개의 파일이 필요했고 구조가 변경될 때마다 거쳐야하는 과정들이 굉장히 번거롭게 다가왔다. 그런 과정들이 데이터가 일관성과 무결성을 획득하기 위해 필요하겠지만 아직 대규모 데이터 처리를 해본 경험이 없어서 딱히 중요성을 체감하지 못한 상태다. 아무.. Sequelize 탐구 Migration이란? Migration은 DB 테이블 생성, 삭제, 수정을 수행한다. Migration 파일은 테이블의 구조와 필드 등을 정의하고 이를 통해 Sequelize가 DB를 관리할 수 있다. Sequelize에서 Migration 파일은 up, down 함수를 가지고 있다. up 함수는 새로운 변경을 적용하고 down 함수는 변경을 취소한다. Migration 파일은 버전 관리가 가능하며 변경 이력을 추적할 수 있다. 예시 코드 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('users', { id: { allowNull: false, autoI.. Sequelize Sequelize란? Sequelize는 node.js에서 사용할 수 있는 ORM 라이브러리이다. ORM은 객체와 데이터베이스 간의 매핑을 자동으로 처리하여 개발자가 직접 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호 작용을 할 수 있게 해준다. Sequelize는 MySQL을 비롯한 다양한 데이터베이스 시스템을 지원하며 테이터베이스의 스키마를 자동으로 생성할 수 있다. 또한 Model 정의를 통해 데이터베이스와 객체 간의 매핑을 설정할 수 있으며, 쿼리 생성 및 실행, 트랜잭션 관리, 데이터 유효성 검사 등 다양한 기능을 제공한다. ORM (Object-Relation Mapping)이란? 객체와 관계형 데이터베이스 사이에 데이터를 변환하는 기술이다. ORM을 사용하면 객체와 관계형 데이터베이스 간.. WIL_RESTful API, package json RESTful API는 HTTP 프로토콜을 기반으로 서버를 설계할 때 많이 사용되는 스타일이다. 클라이언트는 URI를 사용해 서버에서 제공하는 리소스를 식별하고, HTTP 메서드를 사용하여 해당 리소스에 대한 작업을 지정한다. 서버는 클라이언트 요청에 따라 적절한 응답을 반환한다. package.json은 node.js에서 사용되는 파일이다. 이 파일은 프로젝트에 사용된 라이브러리와 버전을 기록한다. 그래서 협업과 배포에 유용하게 사용된다. 그래서 프로젝트를 관리할 때 필수적이며 npm을 사용하여 해당 라이브러리들을 설치할 수 있다. 이번주 회고 이번주 학습 시간은 약 89시간이다. 목표로 했던 100시간에 한참 못미치는 수치이다. 4월이 한 주밖에 남지 않았다. 남은 일주일동안 꼭 100시간을 달성해봐.. 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.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 17 다음