CRA 란?

Create React App 의 약자로 리액트 앱을 설치해주는 뜻으로

npx create-react-app 프로젝트명 의 명령어로 설치를 할 수 있다.

 

CRA 구성

public : 정적 파일들을 모아 놓는 폴더

src : 소스코드를 모아두는 폴더 (동적인 파일도 포함) | src/index.js : react의 루트 파일

 

테스트 환경 실행

npm start : 메모리 상에 빌드 내용을 가지고 기본적으로 3000번 포트에 테스트환경을 구축한다.

 

빌드 운영 배포

npm run build

 

src/index.js

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

 

React.StricMode : 로그 조사 엄격 모드

목차

1. Webpack

2. JSX 없이 React 구현 (코드 설명)

 

 

 

1. Webpack

Webpack(웹팩)이란 모듈 번들러라고 할 수 있다. 모듈 번들러라는 것은 "여러 개로 나누어져 있는 파일들을 하나의 파일로 묶어준다."는 개념이다. 그럼 이 webpack(모듈 번들러)이 왜 필요한것일까?

 

- webpack(모듈 번들러)이 필요한 이유

위에서 webpack이 파일들을 합쳐준다는 것을 명시했다. 이것을 왜 사용할까?

1. 하나의 파일만 받으면 되기 떄문에 반응속도가 빨라질 수 있다.

2. 모듈 단위의 코딩이 가능하여 가독성 및 유지보수에 용이하다.

3. ES6 버전 이상의 스크립트를 사용할 수 있다. (Webpack의 Babel-loader 사용시 ES5 문법으로 바꿔주기 때문에 브라우저가 호환이 가능하다.)

 

 

Webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  name: 'myapp',
  mode: 'development',
  devtool: 'inline-source-map',
  entry: path.resolve('src', 'index.js'),
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  plugins: [new HtmlWebpackPlugin({
    template: './src/index.html',
    filename: 'index.html'
  })]
}

 

 

Entry : 번들화에 필요한 진입점

Output 

 - path : 번들화 후 보낼 파일 경로 설정

 - filename : 번들화 할 파일 이름 설정

Plugins : 사용할 플러그인

 ex) html-webpack-plugin : HTML 파일을 자동으로 생성해주는 Webpack 플러그인

(template : 웹팩이 사용할 HTML 템플리 파일의 경로 / filename : 지정한 이름으로 파일 생성)

 

- Webpack으로 번들화를 하게되면 index.html 아래와 같이 나온다

(원래의 index.js는 bundle.js를 사용하지 않지만 웹팩을 거치고 script영역과 같이 bundle.js 사용할수 있게 생긴다.)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
<script defer src="bundle.js"></script></head>
<body>
  <div id="root"></div>
</body>
</html>

 

 

2. JSX 없이 React 구현 (ES6 문법)

import React from 'react';
import ReactDOM from 'react-dom';

const e = React.createElement;

class App extends React.Component {
  render(){
    return e(
      'button',
      {
        id: 'f',
        onClick: () => this.setState({ liked: true })
      },
      'Like'
    );
  }
}

const domContainer = document.querySelector('#root');
const root = ReactDOM.createRoot(domContainer);

root.render(e(App));

 

위의 코드는 React의 가상DOM을 간단하게 만들어 보는 예제다

React.createElement(dom스타일, props, 자식요소) 를 매개변수로 하는 React에서 제공하는 함수.

 

여기서 잠깐
Props(Properties : 속성)
부모 요소가 자식 컴포넌트에게 전달하는 속성(데이터)라고 생각하면 편하다. React는 컴포넌트라는 것을 사용하는데 컴포넌트는 HTML태그 처럼 사용하는 일종의 '함수'이다. 즉 React는 함수 안에 함수가 있는 형태를 띄고 있는데 이러한 특성 때문에 React의 데이터 전달은 단방향으로 흘러가는 형태를 가지고 있다.

 

 

App은 React.Component 를 상속받아서 render라는 함수를 호출하며 return 값으로 DOM을 그려준다.

위와 같은 코드는 ES6 문법인데 가독성이 떨어지고 알아보기 어렵다. 

 

 

그래서 사용하는 것이 JSX 문법이다. 브라우저에서 호환이 되지 않기 ES6 문법에서
ES5로 바꿔주는 과정이 필요하다. 그러기 위해 바벨이 필요하다.
이런 이유로 React에서 Webpack(웹팩)과 Babel(바벨)은 뗄레야 뗄 수 없는 관계다.

<바닐라 자바스크립트로 React 구현하기>

 

 

1. React CDN

바닐라 자바스크립트로 리액트를 사용하기 위해서는 CDN 링크가 필요하다.

<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

 

출처 : https://ko.legacy.reactjs.org/docs/cdn-links.html

 

CDN 링크 – React

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

 

세번째 줄은 바벨(Babel)을 포함하고 있다. 바벨의 역할은 자바스크립트 ES6 문법으로 ES5 문법으로 트랜스파일 해주는 중요한 역할을 한다. 바벨과 웹팩(Webpack)은 리액트에서 중요한 역할을 담당하고 있다. 다음에 한번 포스팅할 예정이다.

 

 

2. HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>리액트 라이브러리</title>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> 
  <!-- es6 -> es5 트랜스파일 === babel1 -->

</head>
<body>
  <div id="root"></div>
</body>
</html>

 

 

3. Javascript

<script type="text/babel">
  // type="text/babel" 스트립트의 내용을 babel로 트랜스 파일 하겠다. -->
  class LoginBtn extends React.Component {
    // class 컴포넌트
    // 컴포넌트로 생성할 클래스에 상속
    constructor(props){
      // 부모 생성자 호출
      super(props);
      
      // state 키값을 정해진 이름으로 사용해야한다. (state는 컴포넌트의 상태값이며 바뀌면 리렌더링이 된다.)
      this.state = {
        isLogin: false;
      }
    }
    // jsx 문법에서 html 영역에 {} 중괄호 사용하면 javascript를 이용할 수 있다.
    // HTML 문법과 달리 ReactDOM은 onClick (on 뒤에 대문자를 넣어)
    // onClick 이벤트에는 {} 안에 실행식을 넣으면 반환값이 할당되는 것이다. (한번 호출됨)
    // onClick (클릭이 될 때마다) 호출해야하니 함수의 값이 들어가야한다.
    
    // state는 이전 내용이 보관되어 있고 다시 리렌더링 할 때 이전 값을 가져와서 할당해준다.
    
    render(){
      let a = 1;
      return (
        <div>
          <div>
            <button onClick={() => {this.setState({isLogin: !this.state.isLogin})}}>{this.state.isLogin ? "LogOut" : "Login"}</button>
          </div>
          이건 일반 변수 : {a}
          <button onClick={() => {a++; console.log(a)}}>증가</button>
        </div>
      )
    }
  }
  
  // createRoot 브라우저 DOM 노드 안에 리액트 컴포넌트들을 보여주도록 하기위해서 root를 만들수 있도록 한다
  const root = ReactDOM.createDOM(document.querySelector("#root"));
  
  // 리액트 root의 브라우저 DOM 노드 안에 JSX를 보여지도록 하기위해서 root.render 호출
  // root 안에서 LoginBtn 컴포넌트를 보여지도록 하고, 이 안에서 DOM을 조작할 것이다.
  root.render(
    <LoginBtn />
  )
</script>

 

여기서 주의!
React는 상태(State)가 변해야 리렌더링을 해준다. 위 코드에서 첫번째 Button에서는 onClick 했을 때 setState함수로 state 값을 변경했기 때문에 클릭하면 Login과 Logout이 번갈아 나오는 것을 확인할 수 있다. 그러나 두번째 button에서 onClick에서는 상태값이 변하지는 않고 a라는 변수의 값만 변하기 때문에 console창에서 1씩 증가하는 것을 볼 수 있지만 리렌더링이 되지 않기 때문에 증가하지 않음을 확인할수 있다.

목차

1. React란?

2. 탄생 배경

3. React의 특징

4. 가상 돔(Virtual DOM), props, state, JSX

 

1. React란?

React는 프론트 엔드 라이브러리

잠깐 프렘임워크와 라이브러리의 차이를 간단하게 알아보자.
프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜서 넣으며,
라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있다. 
(프레임 워크 : 디렉터리 구성이 있음 / 라이브러리 : 디렉터리 구성 없음)

 

2. React 탄생배경

SPA(Single Page Application)
앱을 사용하는 것같은 사용감이 있는 웹페이지

 

SPA(Single Page Application)의 이전 세대에는 자바스크립트의 DOM 제어를 할 때 제이쿼리를 사용했었다.  제이쿼리의 편리성 때문에 막 쓰기 시작하면서 가독성이 떨어지고 최적화가 안되서 프로젝트가 무거워졌다.  초기 시절에는 인기가 많았었다. 그리고 SPA의 등장을 했는데 Google의 Gmail 에서 인기가 좋았다. Backbone, AngularJS를 사용한 SPA 환경을 구축했고 DOM을 다루는 방식은 제이쿼리였다. 이런 배경에 React가 탄생했고 많은 개발자들 사이에서 자연스럽게 생태계가 커지게 됬다. 제이쿼리의 DOM 제어를 사용할 필요가 없어졌고 React의 가상 DOM을 사용해서 제어가 가능해졌다. 웹페이지는 수정하면 처음부터 다시 랜더링을 해야하는데 React는 부분만 랜더링이 가능하다.

 

3. React의 특징

React는 다음과 같은 특징을 가지고 있다.

데이터의 흐름 / 컴포넌트의 구조 / 가상DOM (Virtual DOM) / props와 state / JSX

 

1) 데이터의 흐름

부모 -> 자식

Vue, Angular는 양방향 데이터의 바인딩을 가지고 있는 반면에 React는 단방향 데이터의 흐름이다. 단방향의 장점으로는 개발하고 있는 프로젝트가 커져도 데이터의 흘듬을 유추하기가 어렵지 않다.

 

2) 컴포넌트와 컴포넌트의 구조

컴포넌트는 하나의 객체 하나의 페이지의 구성 요소의 하나의 UI 단위, UI 여러개로 나누어 놓은 것.

 

3) 가상DOM (Virtual DOM)

DOM은 HTML과 CSS의 내용을 트리구조를 가지고 있고 브라우저는 DOM이 변경되면 화면을 다시 그린다. DOM이 변경되고 난뒤의 동작이 무겁고 비용이 많이 든다. 가상DOM을 이용하면 DOM이 변경이 되도 비용이 최소화 된다. 예를 들면 DOM이 1000번 리렌더링을 해야 하는 경우가 발생할 수 있다. 가상DOM을 이용하면 작업을 모아서 처리를 한번에 해준다.

 

4) props & state

props 

- 데이터 전달이 목적이다.

- 함수의 변수처럼 사용하는 느낌

- 부모 컴포넌트가 자식 컴포넌트에게 전달한 값

- props 전달할 때 "props 드릴링"을 피해서 잘 작성해야한다.

 

state

- 상태를 관리하기 위한 값

- 관리할 데이터를 유지시키는 것이 목적이다.

- 컴포넌트(UI를 나누어 놓은 단위 객체)의 내부에 값을 선언하고 페이지가 동작하는 동안 유지되고 변경될 데이터

- 리액트는 상태값을 주시하고 있다가 상태가 변경되면 반응한다.

 

5) JSX (Javascript XML)

JS 내에서 HTML과 유사한 코드를 작성할 수 있다.

const a = () => {
  return (
    <div>
      // react의 컴포넌트에서 그려주는 UI
    </div>
  )
}

- 코드를 실행할 때는 트랜스파일해서 변경된 파일을 실행해서 사용한다.

- JSX 파일은 => Javascript 로 변환된다.

 

React를 사용할 떄 사용할 새로운 문법
Html 파일과 구문의 가독성을 높이고 내용을 줄여서 사용할 수 있다.
Webpack : JSX 문법으로 작성한 파일을 js로 변환하고 번들링도 하기위한 속성을 관리한다.
!! 다음에는 Webpack과 Babel에 대해서 포스팅 할 예정이다.

목차

1. MySql 모듈

2. mysql 모듈 설치

3. mysql 모듈 사용

 

1. MySql 모듈

MySql 은 NodeJs의 외장 모듈을 통해 이용할 수 있으며 MySql 자체는 아니다.

NodeJs와 이어주는 역할, 쉽게 말해 드라이버라 생각하면 된다.

 

특징

- MySql 콜백방식

- MySql2 Promise 기반으로 사용

- MySql2 공식문서에서도 권장하는 모듈

 

2. MySql 모듈 설치

npm i mysql2

 

3. MySql 모듈 사용

- require로 MySql2 외장 모듈 가져오기

const mysql = require("mysql2");

 

- createConnection : 연결 요청을 보내고 반환받은 객체를 통해 쿼리문을 요청할 수 있는 메서드를 제공한다.

- user : 유저 이름

- password : 유저의 비밀번호 (mysql 비밀번호)

- database : 데이터베이스 이름

- multipleStatements : 다중 쿼리를 실행할 수 있다

const mysqlConnect = mysql.createConnection({
  user : "root",
  password : "1234",
  database : "database1",
  multipleStatements : true
});

 

- query 사용

- query 메서드 : 쿼리문을 매개변수로 전달하면 실행결과를 받을 수 있다.

 

테이블을 생성하는 구문

mysqlConnect.query("SELECT * FROM products", (err, res) => {
  if(err) {
    console.log("테이블이 없어");
    const sql = "CREATE TABLE products(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10), number INT)";
    mysqlConnect.query(sql);
    console.log("테이블이 없어서 생성");
  } else {
    console.log("테이블이 있어");
  }
});

 

데이터 추가

VALUES (?, ?) ?에 쿼리문을 전달할 수 있다.

const createSql = "INSERT INTO products (name, number) VALUES (?, ?)";
mysqlConnect.query(createSql, ["jaka2", "123"], (err) => {
  if(err) 
    console.log(err);
  console.log("글이 추가됬어");
});

 

데이터 삭제

const deleteSql = "DELETE FROM products WHERE id =?;";
mysqlConnect.query(deleteSql, [1], (err) => {
  if(err)
    console.log("삭제할 데이터를 못 찾았어");
  console.log("정상적으로 삭제 완료");
});

 

데이터 수정

const updateSql = "UPDATE products SET name = ?, number = ?, WHERE id = ?";
mysqlConnect.query(updateSql, ["jaka123", "456", "3"], (err) => {
  if(err)
    console.log(err);
  console.log("데이터 수정 완료");
});

'BackEnd > NodeJs' 카테고리의 다른 글

[NodeJs] http 모듈 : 응답 요청  (0) 2025.02.22
[NodeJs] 템플릿 엔진 EJS 에 대해서  (0) 2024.06.29
NodeJs fs 모듈 (파일 시스템)  (0) 2024.06.18
3-way-handshake 코드 구현  (0) 2024.06.18
스트림(Stream) 사용 예제  (0) 2024.06.12

1. Database(데이터베이스) 생성

-- 기본 인코딩 방식은 utfmb4
-- mb4 : most bytes 4 : 4byte씩 사용하는 utf8 문자 집합으로 유니코 문자를 지원하겠다.
-- utfmb4 : 4byte씩 사용하는 utf8 문자 집합으로 유니코드 문자를 지원하겠다. (전세계 문자  + 이모티콘 사용 가능)
-- general : 비교 정렬 규칙을 정의
-- ci : 대소문자 구분 안함.
-- JAKA 라는 이름의 데이터베이스를 만들겠다

CREATE DATABASE JAKA DEFAUTL CHARACTER SET utfmb4 COLLATE utf8mb4_general_ci;

 

2. Database 보기

SHOW DATABASES;

 

3. Database 삭제

-- JAKA 라는 이름의 데이터베이스 삭제
DROP DATABASE JAKA;

 

4. Database 사용

-- JAKA 라는 데이터베이스를 사용하겠다.
USE JAKA;

 

5. 현재 사용중인 데이터베이스의 테이블 내용을 확인

SHOW TABLES;

 

6. 테이블 생성

-- CREATE TABLE 테이블 이름 (컬럼이름 데이터타입 옵션)
-- AUTO_INCREMENT : 자동으로 증가한다. (인덱스 형태를 의미)
-- 테이블에 열이 하나씩 추가될 때마다 증가
-- PRIMARY KEY : 고유한 키 하나만 존재할 수 있다
-- VARCHAR : 256Byte의 가변 데이터 (우리가 20자까지 사용을 안하면 알아서 맞춘다.)
CREATE TABLE store(id INT AUTO_INCREMENT PRIMARY KEY, tel VARCHAR(20));

 

7. 테이블의 필드명 확인

-- store라는 테이블의 필드를 보여준다
DESC store;

 

8. 테이블 값 추가

-- NOT_NULL : NULL 값이 들어갈 수 없다. 즉, 빈 값을 넣을 수 없다는 의미다
-- DEFAULT : 입력을 안하면 남자로 기본값이 들어간다

CREATE TABLE user(
  user_id VARCHAR(20) PRIMARY KEY,
  user_pw VARCHAR(20) NOT_NULL,
  user_name VARChAR(10) NOT_NULL,
  gender CHAR(4) DEFAULT '남자',
  date DATETIME DEFAULT now()
);


-- 괄호의 순서대로 값을 할당하겠다.
-- VALUES(추가할 데이터 내용들)
-- PRIMARY KEY는 같은 값이 포함되면 데이터가 들어가지 않는다.
INSERT INTO user(user_id, user_pw, user_name) VALUES ('userid0', '123', 'jaka1');

 

9. 조회

-- * : 모든 필드를 의미
-- user : 조회하고 싶은 테이블
SELECT * FROM user;

-- 조회를 할 때 원하는 필드의 내용을 찾아서 조회
-- WHERE 조회할 속성을 정해줄 수 있다.
-- user_id가 userid0 인 값의 모든 필드명 조회
SELECT * FROM user WHERE user_id = 'userid0';

-- user_id, user_name 필드명을 user_name이 jaka1에서 조회
SELECT user_id, user_name FROM user WHERE user_name = 'jaka1;

-- 테이블의 값 오름차순 내림차순 조회
-- DESC : 필드명 기준 내림차순 / ASC : 필드명 기준 오름차순
SELECT * FROM 이름 ORDER BY 필드이름 DESC/ASC;

-- 테이블의 값을 조회할 때 시작 데이터 조회
-- A로 시작하는 데이터를 가지고 있는 row 들을 조회
SELECT * FROM 테이블이름 WHERE 필드 LIKE 'A%';

-- A로 끝나는 데이터를 가지고 있는 row들을 조회
SELECT * FROM 테이블이름 WHERE 필드 LIKE '%A';

 

10. 값 수정

-- UPDATE 테이블명 SET 변경할필드='값' WHERE 필드명='필드ID';
UPDATE user SET gender='남자', user_name='jakas' WHERE user_id='userid0';

 

11. 테이블 삭제

-- user 테이블에서 user_id가 userid0 인 값을 삭제
DELETE FROM user WHERE user_id='userid0';

 

12. 테이블 이름 바꾸기

ALTER TABLE 테이블이름 RENAME 변경이름;

 

13. 컬럼의 이름, 데이터 타입 바꾸기

ALTER TABLE 이름 CHANGE 기존컬럼이름 새로운컬럼이름 데이터타입;

 

14. 컬럼의 타입만 변경

ALTER TABLE 테이블명 MODIFY 컬럼의이름 수정할데이터타입;

 

15. 필드를 제거

ALTER TABLE 테이블이름 DROP 필드이름;

 

16. 필드 추가

-- 필드 추가
-- 필드 맨뒤로 추가
ALTER TABLE 이름 ADD 필드이름 데이터타입

-- 필드 맨앞 추가
ALTER TABLE 이름 ADD 필드이름 데이터타입 first;

'Database > MySql' 카테고리의 다른 글

SQL 첫 시작 (MySql의 시작)  (0) 2024.06.30
Database(데이터베이스)에 대하여 짧게 알아보자  (0) 2024.06.29

목차

1.   SQL이란?

2.  SQL의 개요 (DDL,  DML, DCL)

3.  데이터 타입

(문자형, 숫자형,  날짜형)

 

 

 

1. SQL 이란?

SQL은 'Structured Query Language'의 약자로, 데이터베이스에서 데이터를 충출하고 조작하는 데 사용하는 데이터 처리 언어이다.

쉽게 표현해서 데이터를 보관할 공간을 만들거나 데이터를 저장 삭제 조회를 할 수 있게 해준다.

 

2. SQL의 개요

SQL 의 명령어는 크게 3가지로 나눌 수 있는데 다음과 같다. DDL (데이터의 정의어), DML (데이터의 조작어), DCL (데이터의 제어어) 가 있다. 각각의 명령어에 대해서 간략하게 알아 보자.

 

- DDL (데이터의 정의어)

테이블이나 단계의 구조를 생성하는데 사용하는 구문

(1) CREATE  (2) SHOW (3) DROP (4) ALTER

 

- DML (데이터의 조작어)

테이블의 데이터 검색, 작성, 수정, 삭제 등을 하는 구문 (CRUD를 생각하면 편하다)

자주 사용할 구문이니 잘 알아둘 필요가 있다.

(1) SELECT  (2) INSERT (3) UPDATE (4) DELETE

 

- DCL (데이터의 제어어)

데이터의 사용 권한을 관리하는데 사용하는 구문

(1) GRANT (2) REVOKE

 

3. 데이터 타입

1) 문자형

- VARCHAR :  가변 길이 문자형으로 VARCHAR(문자의 길이)로 정의한다.

가령 문자의 길이를 5로 정의를 했다 가정고 실제 입력한 문자가 3개를 입력하면 입력한 3개의 문자열만 저장한다.

저장의 최대값은 64Kb 다

 

- CHAR

고정 길이 문자형으로 CHAR(문자의 길이)로 정의한다.

가령 문자의 길이를 5로 정의하고 3개만 입력하면 나머지는 공백문자로 채워진다. (VARCHAR의 차이점)

문자 갯수는 255개까지 가능하다.

 

- TEXT : VARCHAR보다 더 큰 무자의 값을 저장할 때 사용

(TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT)

TINYTEXT : 255byte ( 255개의 문자)

TEXT : 64kb(65,535 개 문자)

MEDIUMTEXT : 64mb

LONGTEXT : 4gb

 

- BLOB : 이미지처럼 크기가 큰 문자열의 데이터를 저장할 때 사용 (데이터가 비효율적이여서 요즘에는 사용하지 않는 것을 권장한다.)

 

2) 숫자형 (정수형 / 실수형)

옵션

1. UNSIGNED : 0보다 큰수만 입력할 수 있는 옵션 (양수)

2. ZEROFULL : 빈자리를 0으로 채워주겠다. 선언된 크기의 값에서 입력한 숫자의 자리를 제외한 나머지를 0으로 처리

 

정수형

1. TINYINT : TINYINT(숫자의 길이) -128 ~ 127 사이의 정수를 표현할 수 있는 데이터 타입 (숫자의 길이) 여기부분은 생략가능

UNSIGNED : 0 ~ 255

 

2. SMALLINT : SMALLINT() -32,768 ~ 32,767까지의 정수를 저장할 수 있는 데이터 타입

UNSIGNED : 0 ~ 65,535

 

3. MEDIUMINT : -8,388,608 ~ 8,388,607까지 저장할 수 잇는 데이터 타입

UNSIGNED : 0 ~ 16,777,215

 

4. INT : -2,147,483,648 ~ 2,147,483,647 까지 저장할 수 있는 데이터 타입 / INTEGER와 같은 데이터 타입

UNSIGNED : 0 ~ 4,297,967,295

 

5. BIGINT : 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

실수형

- DECIMAL : 고정 소수 실수형 DECIMAL(갯수, 소수점 자리수) 최대 65 자리 소수점 자리를 안 쓰면 10으로 기본 적용.

소수점은 30자리까지 지정 가능.

 

- DOUBLE : 부동 소수 실수 DECIMAL과 다르게 근사값을 저장한다. 10자리를 주고 10 자리가 넘어가면 정확하지 않은 값이 저장될 수 있다. (FLOAT는 DOUBLE보다 작은 데이터 타입이다.)

 

3) 날짜형

- DATE : 1000-01-01 ~ 9999-12-31까지의 날짜를 저장할 수 있는 데이터 타입.

MySql에서 기본으로 제공하는 형식은 yyyy-mm-dd 형식을 사용한다. (오늘 날짜 기준 2024-06-30)

 

- DATETIME : 날짜랑 시간까지 포함해서 저장한다. (2024-06-30 11:36:45)

- TIME : 시간만 표시 / YEAR : 년도만 표시

 

'Database > MySql' 카테고리의 다른 글

MySql2 명령어 모음  (0) 2024.06.30
Database(데이터베이스)에 대하여 짧게 알아보자  (0) 2024.06.29

목차

1. Database (데이터베이스)란

2. DBMS (Database Management System)

4. RDBMS (관계형)

 

 

1. Database (데이터베이스)란?

데이터베이스는 정보를 저장하는 공간으로

데이터의 집합이라고 생각하면 된다.

 

2. DBMS (Database Management System)

데이터베이스라는 말이 정보를 저장하는 공간이라고 표현한다면 DBMS(Database Management System)는 데이터를 관리하고 운영하는 소프트 웨어를 의미한다.

 

3. RDBMS (관계형)

대부분의 DBMS는 RDBMS (=관계형 DBMS)의 형태로 사용된다. RDBMS의 데이터베이스는 테이블(table)이라는 단위로 구성되며 이 테이블은 열(Row)과 행(Column)으로 이루어져 있다.

테이블 예시

앞으로 우리가 다룰 MySql도 대표적인 RDBMS 중 하나다.

 

비관계형은 거의 쓰지 않기 때문에 블로그에서는 따로 언급하거나 다루지 않을 예정이다.

 

'Database > MySql' 카테고리의 다른 글

MySql2 명령어 모음  (0) 2024.06.30
SQL 첫 시작 (MySql의 시작)  (0) 2024.06.30

목차

1. 템플릿 엔진 (EJS)

2. EJS 설치 및 사용 방법

1. 템플릿 엔진

우리가 많이 쓰는 HTML은 정적인 언어다. 정적인 페이지는 주어진 기능만 사용할 수 있는 한계가 있고

직접 기능을 추가할 수 없다. (자바스크립트를 사용해야만 한다.)

 

반면에 템플릿 엔진은 자바스크립트를 사용하여 HTML을 렌더링 할 수 있다.

HTML 과 문법이 거의 흡사하지만 자바스크립트의 문법이 들어갈 수 있다는 특징이 있다.

(서버측에서 html을 만들어서 응답해주는 것이다.)

 

템플릿 엔진에는 여러가지가 있는데 우리가 알아볼 것은 그 중 EJS다.

 

2. EJS 설치 및 사용 방법

ejs 설치

npm i ejs

 

문법은 다음과 같다.

<% JS 코드 %>
<%= 변수의 내용 %>

 

문법이 다소 난해하다. 밑에서 어떻게 사용하는지 예를 들어보자

 

 

server.js

// ejs를 require 하는 구문이 있어서 설치를 해야한다.
const express = require('express');
const app = express();
const path = require('path');

// set : server 객체 안에 있는 내용을 수정하겠다.
// view engine을 ejs를 사용하겠다.
app.set('view engine', 'ejs');

// Template가 있는 디렉토리
app.set('views', path.join(__dirname, 'views'));

const boardList = [
  {id : 1, name : "jaka"},
  {id : 2, name : "jaka2"},
  {id : 3, name : "jaka3"},
  {id : 4, name : "jaka4"}
]

const title = '페이지 제목';

app.get('/', (req, res) => {
  // 페이지에서 변수를 사용해서 html 페이지를 완성시켜서 보여줄 것
  // 문자열 파싱을 해서 스크립트 변수 내용을 포함한 완성된 html을 응답해준다
  // render : view enigine ejs를 사용할 때 페이지를 완성시켜서 응답
  // 문자열을 파싱해서 html을 완성시켜서 최종적으로 만들어진 html을 응답해줌
  
  res.render('main', {boardList, title});
});

app.listen(3000, () => {
  consoloe.log('server on~');
});

 

main.ejs

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><%= title %></title>
</head>
<body>
  <div>
    메인페이지
    <% boardList.forEach((el, index) => { %>
      <div><%= el.id %> <%= el.name %></div>
    <% }); %>
  </div>
</body>
</html>

 

HTML 출력

'BackEnd > NodeJs' 카테고리의 다른 글

[NodeJs] http 모듈 : 응답 요청  (0) 2025.02.22
NodeJs에서 MySql 외장 모듈 설치 사용  (0) 2024.07.06
NodeJs fs 모듈 (파일 시스템)  (0) 2024.06.18
3-way-handshake 코드 구현  (0) 2024.06.18
스트림(Stream) 사용 예제  (0) 2024.06.12

목차

1. Express란?

2. Express 설치

3. Express 사용

 

1. Express란?

NodeJs의 프레임워크로써 http net으로 구현 가능한 네트워크 TCP를 모던한

느낌으로 외장모듈로 라이브러리를 구현한것이다.

NodeJs로만 사용하여 라우팅을 처리하려면 상당히 번거로운 작업을 해야했다.

Express를 사용하면 HTTP 모듈 기능 외에도 다양한 기능이 포함되어 있어서 유용하게 쓸 수 있다

 

1) 라우팅

HTTP 모듈을 사용할 때는 if 문이나 switch 문으로 요청 메서드나 요청 URL에 따라 라우팅 해야했다.

 

2) 미들웨어

Express에는 미들웨어라는 개념이 있어서 요청과 응답 사이에서 여러가지 기능을 실행할 수 있다.

(미들웨어가 많아서 가져와서 사용이 가능)

 

3) 템플릿 엔진

HTML 페이지는 기본적으로 정적이지만 서버와 함께 사용해서 동적인 HTML 페이지를 만들 수 있다.

(애플리케이션에셔 View를 담당)

 

4) 정적인 파일 지원

Express에서 동적인 파일만 생성하는 것은 아니다. CSS, JS, 이미지처럼 동적인 파일을 쉽게 서비스 할 수 있음

 

 

2. Express 설치

npm init -y

 

package.json 초기화를 해준다.

 

npm i expresss

 

Express의 최신 버전이 설치된다.

(협업할 때  팀원들 간의 express의 버전이 같지 않을 경우 호환성 문제 발생할 수 있어서 같은 버전을 사용해야한다.

package-lock.json 실제 버전 설치된 내용의 json 파일이 있으면 버전이 문제가 없다.)

 

3. Express 사용

// 외장 라이브러리
const express = require('express');

// 서버 객체 생성
const app = express();

 

app에는 express()의 리턴값이 들어가 있다.

express() 리턴값으로는 Application이라는 객체를 반환하는데, Application이라는 객체는 여러 메서드를 가지고 있다.

그 중 하나가 대표적으로 get, post 가 있다.

// 미들웨어
// express.json body의 내용을 파싱해서 객체로 변환
app.use(express.json());

// 쿼리스트링 파싱, form의 내용을 파싱
// 깊은 객체까지 사용 여부
app.use(express.urlencoded({ extended : true }));

 

미들웨어 : 요청을 보내고 응답을 하기 전에 처리할 내용

// 메서드로 라우팅
// get, post, put, delete

app.get('/', (req, res) => {
  console.log(req.query)
  // req.query : 쿼리스트링 객체로 파싱
  
  console.log(req.body);
  // req.body : 전달한 본문의 내용을 body에 객체 파싱
  
  res.send(`
  <html>
        <title>응답 페이지</title>
        <body>
            <form method="post" action="/postContent">
             <input type="text" name="test2">
             <button>확인</button>
            </form>
        </body>
    </html>
  `)
  // 응답 메시지 응답 종료
});

app.post('/postContent', (req, res) => {
  console.log(req.body);
  
  //redirect : 해당 경로로 다시 요청을 보냄
  res.redirect('/');
});

app.listen(3000, () => {
  console.log('서버 대기 상태');
})

+ Recent posts