데이터베이스 정규화

 

- 관계형DB 설계에서 중복을 최소화하는 프로세스

(테이블 간의 중복을 막는 것)

 

- 정규화를 통해 이루고자 하는 것들

1. 저장 효율 개선 

2. 데이터 무결성 (데이터 수명주기 동안 정확성/일관성 유지하는 것)

3. 이상현상(갱신, 삽입, 삭제)

 

- 정규화 과정 간략하게 (제 1 ~ 제 3)

1. 테이블의 컬럼이 하나의 값(원자값)을 갖도록 테이블을 분해하는 것

예 : 학번(1) 이름(1) 수업(N)

 

2.완전 함수 종속을 만족하도록 테이블을 분해하는 것

(기본키의 부분집합이 결정자가 되어서는 안된다는 것)

예 : 학번 이름 수업 성적 강의실 / 학번이름수업 -> 성적 수업-> 강의실

 

3. 이행적 종속을 없애도록 테이블을 분해하는 것

예: 학번 수업 수강료 / 학번 -> 수업 수업 -> 수강료

 REST API란 무엇일까? 검색해보면 이에 대해 정의해 놓은 글과 관련된 자료들을 굉장히 많이 찾아볼 수 있어서 이걸 어떻게 설명해야 하지 할때마다 검색해보지만 머리에 잘 남지는 않았다... 그러다 오늘 한 유튜브영상을 통해 간단하게 특징을 얕게 정리할 수 있는 계기가 되어서 글로 남겨보고자 한다. 

 

 보통 입문자들을 위해 REST API를 설명할 때 식당 메뉴판이나 자판기를 예로 많이 드는데, 나에게는 '버튼마다 나오는 것이 일정하고 확실한 자판기'라는 비유가 와닿았다. REST API를 좀 더 구체적으로 설명해보면 '메소드 + URI(자원을 구조와 함께 나타내는 형태의 구분자)'를 조합해서 예측가능하고 일정한 정보와 작업을 요청하는 것이라 할 수 있는데, 마치 자판기의 특정한 버튼을 누르는 행위(어떤 버튼을 누름으로서 이 음료가 나오기를 원한다는 걸 알 수 있으니까!)처럼 REST API에 대한 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능한 것이 특징이다.

 

 GraphQL의 경우 예를 들어서 설명해보면... 국어강사가 학생들의 국어성적을 보고자 할 때 서버에 요청을 보냄으로서 받고자 하는 응답은 학번 / 이름 / 국어성적 을 포함하고 있다면 충분할 것이다. 그렇지만 REST API 형식으로 된 응답을 받게된다면 학번/이름/국어성적 외에 다른과목성적, 학생의 성별, 반 등등 필요로 하지 않는 정보들 까지 응답으로 받게 될 것이다. 물론 REST API의 경우에도 정보를 특정할 수 있지만 여러번의 요청 단계가 필요하게 된다. 반면에 GraphQL은 내가원하는 정보만 골라서 요청하기가 수월하다. 요청에 포함될 정보의 depth등에 크게 구애받지 않고 유도리 있는 요청을 보낼 수 있는 것이다.

 

 아직 GraphQL을 직접 다뤄본 적도 없고 RESTFUL하게 API를 만든다는 것도 나같은 초보 개발자에게는 너무 먼 이야기이지만  GraphQL의 특징에 대한 설명 영상을 보면서 내가 프로젝트 때 구현했던 응답들은 어떤 부분에서 REST API와 거리가 멀었는지 생각해 볼 수 있었고, 또 GraphQL과 같은 형식으로 응답을 하고자 억지로 노력했던 흔적들이 보여서 어떤 부분에서 GraphQL이 유용할 지에 대해서도 고민해 볼 수 있는 계기가 되었다.

 

한 줄로 요약해 보면! REST API는 요청은 단순 하지만 데이터는 복잡 / GraphQL은 요청은 복잡 하지만 데이터는 효율적

 

 

GraphQL 영상 주소 : https://www.youtube.com/watch?v=EkWI6Ru8lFQ

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

DB 정규화  (0) 2022.01.06
AWS S3를 활용한 파일 업로드 구현하기  (0) 2021.10.28
[Git] 특정 브랜치만 클론하기  (0) 2021.10.20
[Authorization] 인증/보안 방법들 그림으로 비교  (0) 2021.09.23
ORM이란?  (0) 2021.09.22

AWS-SDK 를 설치한 후 불러오고

AWS환경설정을 해준다.(여기서는 AWS cognito를 활용하여 자격증명)

인풋창의 onchange 이벤트핸들러함수의 모습.

 

 

자세한 내용은 다른 분의 블로그를 참조했다.

출처: https://merrily-code.tistory.com/143

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

DB 정규화  (0) 2022.01.06
REST API 와 GraphQL  (0) 2022.01.06
[Git] 특정 브랜치만 클론하기  (0) 2021.10.20
[Authorization] 인증/보안 방법들 그림으로 비교  (0) 2021.09.23
ORM이란?  (0) 2021.09.22

git clone -b {branch_name} --single-branch {저장소 URL}

 

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

REST API 와 GraphQL  (0) 2022.01.06
AWS S3를 활용한 파일 업로드 구현하기  (0) 2021.10.28
[Authorization] 인증/보안 방법들 그림으로 비교  (0) 2021.09.23
ORM이란?  (0) 2021.09.22
dotenv  (0) 2021.09.21

1. 세션기반 인증

세션기반 인증

 

2. 토큰기반 인증

토큰기반 인증

3. OAuth 소셜 인증

OAuth

 

출처: 코드스테이츠 Urclass 자료

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

AWS S3를 활용한 파일 업로드 구현하기  (0) 2021.10.28
[Git] 특정 브랜치만 클론하기  (0) 2021.10.20
ORM이란?  (0) 2021.09.22
dotenv  (0) 2021.09.21
[Axios] 서버요청  (0) 2021.09.08

ORM (Object Relational Mapping)

- ORM은 바로 Model을 기술하는 도구 (데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여준다.)

ORM을 이용하여 SQL문을 직접 작성하지 않고 엔티티를 객체로 표현가능

- 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용, 따라서 모델간의 불일치가 발생하는데 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결하는 것이 ORM이다.

- 더 쉽게 표현하자면 Object - DBdata 사이에서 매핑의 역할을 하는것이 ORM

 

 

- MVC (Model View Controller)

디자인 패턴(추후 내용 보충할 것) 

 

Sequelize (ORM의 일종)

- a promise-based Node.js ORM

 

 

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

[Git] 특정 브랜치만 클론하기  (0) 2021.10.20
[Authorization] 인증/보안 방법들 그림으로 비교  (0) 2021.09.23
dotenv  (0) 2021.09.21
[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08

npm 모듈인 dotenv를 사용하면, 자바스크립트에서 환경변수를 사용할 수 있다. 

 

- 기본적인 사용법 

새로운 폴더를 만들고 npm init을 입력 / npm i dotenv 를 입력해 모듈을 설치(생성된 폴더는 설치할 모듈과 이름이 같아서는 안됨) 

설치한 dotenv를 이용해 환경변수에 접근할 수 있다. (새로운 파일 index.js를 생성하고, process.env를 출력하면 export로 확인한 내용과 동일한 내용을 객체로 출력함 / process.env는 Node.js환경에서 조회가 가능 / dotenv는 .env파일을 환경변수로 사용할 수 있게 함)

 

- .env: Node.js에서 환경변수 영구 적용

명령어 export로 적용한 환경변수는 현재 사용 중인 터미널에서만 임시로 사용이 가능함. 환경변수를 Linux 운영체제에 저장하는 방법은 여러가지가 있지만, Node.js에서는 파일 .env를 만들어 저장하는 방법을 사용한다.

1. .env파일을 생성하고, 사용하고자 하는 환경변수를 입력한 뒤 저장한다.

모듈 dotenv를 이용한다면, 파일 .env에 저장한 환경변수를 조회할 수 있다.

결과는 kimcoding

환경변수를 이용해 API key, DB password와 같이 민감한 정보를 저장하고 관리할 수 있다. 그 뿐만 아니라 서로 다른 PC 또는 여러 .env파일에서, 같은 변수 이름에 다른 값을 할당할 수 있다.

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

[Authorization] 인증/보안 방법들 그림으로 비교  (0) 2021.09.23
ORM이란?  (0) 2021.09.22
[Axios] 서버요청  (0) 2021.09.08
[Express/미들웨어] cors  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
//설치방법

npm install axios

//기본적인 사용방법

const axios = require('axios');

axios.get('/user?ID=12345')
  .then((res) => {
    console.log(response);
  })
  .catch((err) => {
    console.log(err)
  })

// option사용

axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });

// 위의 인자자리를 고려하는 방식이 까다롭다면 아래와 같은 방식이 사용하기 더 편할 수 있다.

// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

// GET request for remote image in node.js
axios({
  method: 'get',
  url: 'http://bit.ly/2mTM3nY',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });

axios 공식문서(깃허브): https://github.com/axios/axios

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

ORM이란?  (0) 2021.09.22
dotenv  (0) 2021.09.21
[Express/미들웨어] cors  (0) 2021.09.08
Sequelize ORM 기본적인 cli사용법 정리  (0) 2021.09.02
[Node JS] require()와 module.exports  (0) 2021.08.30

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

+ Recent posts