CORS란 Cross-Origin Resouce Sharing 의 약자로 도메인 또는 프로토콜, 포트가 다른 서버의 자원을 요청하는 메커니즘을 말한다.
요청이 갈 때, cross-origin HTTP에 의해 요청된다.
하지만 동일 출처 정책(same-origin policy)때문에 CORS같은 상황이 발생하면 외부 서버에 요청한 데이터를 브라우저에서 보안 목적으로 차단한다. 때문에 서버나 클라이언트에서 특정 도메인 혹은 모든 도메인을 허용하도록 설정하여 해결해야 한다.

응답헤더에 Acess-Control-Allow-Origin 을 추가하거나
Node.js Express CORS미들웨어를 사용함으로서 해결할 수 있다.

기본적인 cors 미들웨어 사용방법

// cors미들웨어 설치  
npm install cors

// 사용법  
const express = require('express');  
const cors = require('cors');  
const app = express();

app.use(cors());

//옵션 설정  
const options = {  
origin: '[http://example.com'](http://example.com'),  
credentials: true;  
optionsSuccessStatus: 200  
}

app.use(cors(options))

'기록남기기 > Backend' 카테고리의 다른 글

dotenv  (0) 2021.09.21
[Axios] 서버요청  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
[Node JS] require()와 module.exports  (0) 2021.08.30
환경변수  (0) 2021.08.23

Sequelize ORM의 기본적인 사용 방법을 정리(공식문서에서도 가장 기본적인 것만 발췌)

 

1. sequelize 설치 

npm install --save sequelize

 

2. sequelize-cli 설치 (마이그레이션을 할 수 있도록 돕는 툴, CLI에서 모델을 생성해 주거나, 스키마 적용을 할 수 있도록 돕는다.)

npm install --save-dev sequelize-cli

 

3. cli를 통해 ORM을 사용할 수 있도록 해주는 Bootstraping(프로젝트 초기 단계를 자동으로 설정할 수 있도록 도와주는 일)

npx sequelize-cli init

 

성공적으로 bootstraping이 끝나면 다음 파일 및 폴더들이 생성

 

config/config.json

models/

migrations/

seeders/

 

config/config.json에서 mysql의 username과 password등을 설정, database를 특정(필요하다면 db:create 커맨드를 통해 만들 수도 있다.)

 

4. 모델 생성

model:generate

이 명령어에는 두가지 옵션이 존재. (name: 모델의 이름 / attributes: 모델속성(컬럼)의 목록)

ex) npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string

 

*Note: Sequelize will only use Model files, it's the table representation. On the other hand, the migration file is a change in that model or more specifically that table, used by CLI. Treat migrations like a commit or a log for some change in database. (잘 읽어볼것!)

 

5. 마이그레이션 실행

npx sequelize-cli db:migrate

 

스키마 변경이 있을때마다 마이그레이션을 실행해줘야 한다.

This command will execute these steps:

  • Will ensure a table called SequelizeMeta in database. This table is used to record which migrations have run on the current database
  • Start looking for any migration files which haven't run yet. This is possible by checking SequelizeMeta table. In this case it will run XXXXXXXXXXXXXX-create-user.js migration, which we created in last step.
  • Creates a table called Users with all columns as specified in its migration file.

* 마이그레이션 실행 되돌리기 (가장 최근에 실행한 마이그레이션 실행을 되돌리기)

npx sequelize-cli db:migrate:undo

 

모든 마이그레이션을 다 되돌릴 경우에는 뒷부분을 db:migrate:undo:all 로 해준다.

 

6. SQL을 대신할 각종 Sequelize Query들

...

 

Sequelize 공식문서: https://sequelize.org/

 

'기록남기기 > Backend' 카테고리의 다른 글

[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08
[Node JS] require()와 module.exports  (0) 2021.08.30
환경변수  (0) 2021.08.23
Read, Write, Execution 권한  (0) 2021.08.23

모듈이란? 

프로그래밍에서 모듈(module)이라함은 외부에 영향을 받지 않는 독립된, 재사용 가능한 코드들의 묶음입니다. 모듈로 API를 묶어줌에 변수나 함수들의 name space를 보장해주고, 모듈화를 통한 기능적인 코딩이 가능해집니다. NodeJS에서 모듈은 1차적으로 파일로 구분됩니다. 즉, 코드가 작성된 파일이 같은지 다른지에 따라 모듈이 나눠지게 됩니다. 예를 들면, app.js에서 작성한 코드와 some.js에서 작성한 코드는 서로 다른 모듈에 존재하는 것으로 인식하게 됩니다.

 

require / module.exports

> 링크를 참조:  https://m.blog.naver.com/jdub7138/221022257248

 

[NodeJS] require()와 module.exports

모듈이란?프로그래밍에서 모듈(Module)이라함은 외부에 영향을 받지 않는 독립된, 재사용 가능한 코드들의...

blog.naver.com

 

** 내가 정리한 require에 대한 내용 

const *** = require(경로)  // 기본모양

const { *** } = require(경로) // 구조분해할당을 이용

// 

module.exports = *** // 변수, 함수, 객체 다양한 형태로 export가능

exports.*** = // 아래와같은 모양으로 작성해도 무방*.(축약버젼)

 

*exports를 사용할 때는 exports 객체에 프로퍼티를 추가한다.

module.exports를 사용할 때는 module.exports 변수에 아예 새로운 객체를 할당.

 

-> Node.js의 모듈 시스템에서 실제로 export되는 객체는 module.exports이고, exports는 이를 참조하는 변수에 불과하기 때문

(자세한 설명은 링크를 참조: http://happinessoncode.com/2018/05/20/nodejs-exports-and-module-exports/)

 

-> 중요 내용 요약:

1. Node.js에서 익스포트되는 객체는 module.exports이다.

2. module.exports는 빈 오브젝트({})로 초기화 되어있다.

3. exports는 module.exports를 참조하는 변수이다.

 

***설명: 요 이미지가 가장 명쾌하다!

차이점!

 

 

*require 함수를 호출하면서 경로를 지정할 때, 직접적인 파일명을 적어주지 않으면 (=폴더명 까지만 적으면) index.js 혹은 index.node라는 파일이 있는지 확인해서 가져온다. (둘다 없는 경우 오류를 낸다.)

'기록남기기 > Backend' 카테고리의 다른 글

[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
환경변수  (0) 2021.08.23
Read, Write, Execution 권한  (0) 2021.08.23

연산자들의 종류는 많지만 접한 연산자 중에서 익숙하지 않거나, 처음 발견하게 된 연산자들 위주로 내용을 정리하고자 함.

 

1. 할당 연산자 

할당 연산자는 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당.  기본적인 할당 연산자는 오른쪽의 피연산자 값을 왼쪽 피연산자 값에 할당하는 등호(=)로, x = y  y의 값을 x에 할당.

 

(복합 할당 연산자)

복합 할당 연산자

 

2. 산술 연산자

산술 연산자는 두 개의 숫자 값(리터럴 또는 변수)을 피연산자로 받아서 하나의 숫자 값을 반환합니다. 표준 산술 연산자는 더하기(+), 빼기(-), 곱하기(*), 나누기(/)입니다.

 

산술 연산자

 

'기록남기기 > JS' 카테고리의 다른 글

Promise (mdn 문서 내용 정리)  (0) 2021.12.02
JS ES6문법 / Coding Skill  (0) 2021.08.26
JS Arrow Function 화살표 함수  (0) 2021.08.15
JS Prototype  (0) 2021.08.14
객체지향 JavaScript  (0) 2021.08.14

export: 환경변수 확인하기 && 환경변수 임시 적용

 

dotenv: 자바스크립트에서 환경변수 사용하기

npm 모듈 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있습니다. npm 모듈을 설치하고 사용하기 위해서, 새로운 폴더를 만들고 npm init 을 입력합니다. 그리고 npm i dotenv 를 입력해 모듈을 설치합니다. 이때 생성된 폴더는 설치할 모듈과 이름이 같아서는 안됩니다.

'기록남기기 > Backend' 카테고리의 다른 글

[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
[Node JS] require()와 module.exports  (0) 2021.08.30
Read, Write, Execution 권한  (0) 2021.08.23

읽기, 쓰기, 실행 권한

CLI 환경에서 ls -l 명령어를 통해 디렉토리나 파일을 확인하면 위와같은 모양의 결과를 얻을 수 있다. 각 자리마다 의미하는 바를 파악하면 해당 파일이나 디렉토리가 어떤 유저에게 어떤 권한을 부여했는지 확인해 볼 수 있다. 

 

*chmod 명령어를 사용하면 어떤유저에게 어떤권한을 부여할지를 수정, 입력 할 수 있다. 명령어 chmod로 권한을 변경하는 방식은 2가지가 있다. (Symbolic Method, Absolute Method)

 

Symbolice Method 예시

 

Absolute Method 예시

 

'기록남기기 > Backend' 카테고리의 다른 글

[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
[Node JS] require()와 module.exports  (0) 2021.08.30
환경변수  (0) 2021.08.23

참고한 사이트 : https://ko.javascript.info/arrow-functions-basics

 

화살표 함수 기본

 

ko.javascript.info

화살표 함수는 그동안 꽤 잘 사용해 왔다고 생각했는데, 문법 관련하여 알게된 새로운 사실들이 있어서 정리해 놓고자 한다.

화살표 함수의 인자 / 괄호사용
화살표 함수 - 본문

요약하자면...

화살표 함수는 본문이 한 줄인 함수를 작성할 때 유용하다. 본문이 한 줄이 아니라면 다른 방법으로 화살표 함수를 작성해야 한다.

1. 중괄호 없이 작성 : (...args) => expression      화살표 오른쪽에 표현식을 둡니다. 함수는 이 표현식을 평가하고, 평가 결과를 반환.

2. 중괄호와 함께 작성 : (...args) => { body }      본문이 여러 줄로 구성되었다면 중괄호를 사용해야 한다. 이 경우는 반드시 return지시자를 사용해 반환 값을 명기해 주어야 한다.

'기록남기기 > JS' 카테고리의 다른 글

Promise (mdn 문서 내용 정리)  (0) 2021.12.02
JS ES6문법 / Coding Skill  (0) 2021.08.26
JS의 연산자  (0) 2021.08.24
JS Prototype  (0) 2021.08.14
객체지향 JavaScript  (0) 2021.08.14

class : 클래스를 만드는 문법 (ES6부터)

```

class Car {

  // 밑의 컨스트럭터는 생성자 함수라고 부른다.(리턴값을 만들지 않는다.) 속성, 메소드를 정의할 수 있다.

  constructor(brand, name, color) { 

    this.brand = brand;

    this.name = name;

    this.color = color;

 

    refuel() {

    }

  }

}

```

new : 인스턴스(객체)를 만들 때에 사용한다.

```

let avante = new Car('hyundai', 'avante', 'black);

avante.color; // 'black'

avante.refuel(); 

```

객체지향 JS

 

새로등장한 용어들 정리

prototype : 모델의 청사진을 만들 때 쓰는 원형 객체(original form)

constructor : 인스턴스가 초기화될 때 실행하는 생성자 함수

this : 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context (execution context). new 키워드로 인스턴스를 생성했을 때에는 해당 인스턴스가 바로 this의 값이 된다.

느슨한 결합(loose Coupling) : 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미.

 

객체지향 프로그래밍의 주요 컨셉

1. 캡슐화 : 데이터와 기능을 하나의 단위로 묶는 것, 은닉(구현은 숨기고, 동작은 노출), 느슨한 결합(loose Coupling)에 유리(언제든 구현을 수정할 수 있음)

2. 상속 : 부모 클래스의 특징을 자식 클래스(사실은 부모 자식보다는 기본클래스의 특징을 파생 클래스가 상속받는다 로 표현하는 것이 더 적합)가 물려받는 것

3. 추상화 : 내부 구현은 아주 복잡한지만, 실제로 노출되는 부분은 단순하게 만든다는 개념. 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있다.

4. 다형성 : 다양한 형태를 가질 수 있는 것을 의미(같은 이름을 가진 메소드라도 조금씩 다르게 작동하는 것 등등...)

5. 결론 : 캡슐화는 코드가 복잡하지 않게 만들고, 재사용성을 높입니다. 추상화는 마찬가지로 코드가 복잡하지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화합니다 상속 역시 불필요한 코드를 줄여 재사용성을 높입니다. 다형성으로 인해 동일한 메소드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다.

'기록남기기 > JS' 카테고리의 다른 글

Promise (mdn 문서 내용 정리)  (0) 2021.12.02
JS ES6문법 / Coding Skill  (0) 2021.08.26
JS의 연산자  (0) 2021.08.24
JS Arrow Function 화살표 함수  (0) 2021.08.15
JS Prototype  (0) 2021.08.14

+ Recent posts