분류 전체보기 1341

개발 환경 구성하기

OpenJdk 17 LTS https://adoptium.net/temurin/releases Latest Releases | Adoptium adoptium.net Jetbrains Toolbox(IntelliJ IDEA) https://www.jetbrains.com/toolbox-app JetBrains Toolbox App: Manage Your Tools with Ease Open any of your projects in any of the IDEs with one click. www.jetbrains.com 코틀린 플레이그라운드(간단한 코틀린 코드 실행기) https://play.kotlinlang.org Kotlin Playground: Edit, Run, Share Kotlin Code ..

몽구스 ODM

몽구스 : 몽고 디비 작업을 쉽게 할 수 있도록 도와주는 라이브러리 ODM: Object Document Mapping: 객체와 다큐먼트를 매핑(1대 1 짝지음) 몽고 디비에 없어 불편한 기능들을 몽구스가 보완했다. 테이블과 유사한 기능, JOIN 기능 추가했다. mongoDB 드라이버는 몽구스 내에 내장되어 있어 다운로드할 필요가 없다 몽고 디비 연결하기(schemas/index.js) const mongoose = require('mongoose'); const connect = () => { if (process.env.NODE_ENV !== 'production') { //production 일때 mongoose.set('debug', true); //debug 모드를 true로 한다 } //요청..

관계 쿼리

Join include로 JOIN과 비슷한 기능 수행 가능(관계있는 것 엮을 수 있음)하다. 지연 로딩 get+모델명으로 관계있는 데이터 로딩 가능하다. as로 모델명 변경이 가능하다. include나 관계 쿼리 메서드의 where나 attributes 연관관계가 있는 테이블에 where 조건을 줄 수 있다. 생성 쿼리 댓글을 먼저 생성했다가, 후에 user에 연결할 때 이렇게 사용한다. 생성이 먼저 되고, 후에 연관관계가 정해진다. add+객체명으로 추가한다 id를 추가해 주거나, 객체 자체를 넣어주면 된다 여러 개를 추가(배열) 여러 댓글을 생성하고, 추가할 때 배열로 넣어주면 된다. 수정은 set+모델명, 삭제는 remove+모델명 을 쓰면 된다. SQL 직접 사용 시퀄라이저가 아닌 그냥 SQL을 ..

쿼리 알아보기

Insert 쿼리 create를 사용하면, insert문을 자동으로 생성해 준다. findAll() : 전체 조회 findAll 메서드를 쓰면 전체 조회가 가능하다. attributes로 배열을 주면, 배열에 있는 컬럼만, 출력이 가능하다 Select Where 연산자 gt를 통해 크다를 표시 할 수 있고, lt를 작다를 표시할 수 있다. 작거나 같다(lte) , 크거나같다(gte)를 쓰면 된다. or를 사용해 또는의 표기 할 수 있다. 정렬, limit, offset Update 쿼리 Delete 쿼리

관계 정의하기

users 모델과 comments 모델 간의 관계를 정의 1:N 관계 (사용자 한 명이 댓글 여러 개 작성) 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글)) 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자)) belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼) user.js //... static associate(db) { db.User.hasMany(db.Comment, { foreignKey: "commenter", sourceKey: "id" }); } //... user에서 관계를 가질 경우 hasMany가 된다.(1:N) 반대 입장에서 belongsTo가 될 수 밖에 없다. belongsTo가 있는 테이블에 ..

모델 만들기

Model을 만드는 방법 SQL직접 적용(mysql에 접속) 워크벤치 툴을 사용 model 파일을 사용 시퀄라이즈에서는 자료형을 표현하는 방식에서 조금 차이가 있다. models/user.js const Sequelize = require("sequelize"); module.exports = class User extends Sequelize.Model { static init(sequelize) { return super.init( { name: { type: Sequelize.STRING(20), allowNull: false, unique: true }, age: { type: Sequelize.INTEGER.UNSIGNED, allowNull: false }, married: { type: Se..

시퀄라이즈

시퀄라이즈 : SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리 ORM: Object Relational Mapping: 객체와 데이터를 매핑(1대1 짝지음)한다 MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환된다 자바스크립트 문법으로 데이터베이스 조작 가능하다 시퀄라이즈 예제: https://github.com/zerocho/nodejs-book/tree/master/ch7/7.6/learn-sequelize GitHub - ZeroCho/nodejs-book Contribute to ZeroCho/nodejs-book development by creating an account on GitHub. github.com 프로젝트 세팅 후, 콘솔을 통해 ..

템플릿 엔진

템플릿 엔진: HTML의 정적인 단점을 개선 반복문, 조건문, 변수 등을 사용할 수 있다 동적인 페이지 작성 가능하다 PHP, JSP와 유사하다 Pug 문법이 Ruby와 비슷해 코드 양이 많이 줄어든다 HTML과 많이 달라 호불호가 갈린다 익스프레스에 app.set으로 퍼그 연결한다 HTML 표현 변수 파일 내 변수 반복문 조건문 include 헤더, 푸터, 내비게이션 등의 공통부분을 따로 관리할 수 있어 편리 include로 파일 경로 지정 extends/ block 공통되는 레이아웃을 따로 관리할 수 있어 좋음, include와도 같이 사용 넌적스 Pug의 문법에 적응되지 않는다면 넌적스를 사용하면 좋다 Pug를 지우고 Nunjucks 설치하자 확장자는 html 또는 njk(view engine을 n..

라우터 분리하기

Express.Router app.js가 길어지는 것을 막을 수 있다 userRouter의 get은 /user와 /가 합쳐져서 GET /user/가 된다 Route 매개변수 :id를 넣으면 req.params.id로 받을 수 있다 동적으로 변하는 부분을 라우트 매개변수로 만든다 일반 라우터보다 뒤에 위치해야 한다 404 미들웨어 요청과 일치하는 라우터가 없는 경우를 대비해 404 라우터를 만들 수 있다 이게 없으면 단순히 Cannot GET 주소라는 문자열이 표시된다 라우터 그룹화 하기 router.route로 묶는다 Req 객체 req.app: req 객체를 통해 app 객체에 접근할 수 있습니다. req.app.get('port')와 같은 식으로 사용할 수 있습니다. req.body: body-par..

dotenv 사용하기

.env 파일 COOKIE_SECRET=zerochopassword DB_PASSWORD=nodejsbook const dotenv = require("dotenv"); dotenv.config(); //.env 파일을 읽어서 설정한다. //.env 파일 같은 경우 git에 올리면 안된다 //... app.use(cookieParser(process.env.COOKIE_SECRET)); //키가 소스코드에 유출되면 안된다 app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, //쿠키를 서명하는 키, 이 키는 다른 사람에게 노출되서는 안된다 cookie: { httpOnly: true //자..