Oct 21, 2021

Sung Hyun Hong (Jenny)·2022년 1월 24일
0

이번 주차에 mysql의 방식으로 프로그램을 구현하면서, 알아야 할 것과 공부해야 할 분량이 많이 늘어났다. mysql의 설치부터 기본문법까지 익히느라 정신 없었지만, 내 분량이라도 끝내기 위해서 물어보고 또 물어보고 직접 해 보기까지 어려운 일들을 많이 겪었다. 다른 단어로 표현하자면, 내 파트만 끝내기 위해서 시간을 보냈기 때문에, 미처 다른 팀원들이 mysql의 방식으로 어떻게 프로그램을 짰는지, 이해도가 많이 부족하기도 했다. 그래서 오늘은 나중을 대비해서 sequelize 및 mysql에 대해 간략히 정리해보고자 한다.

내가 편하게 쓸려고 만드는 Sequelize

  • Sequelize 모듈 설치 `npm i sequelize mysql2 -S npm i sequelize-cli -D`
  • 사용준비 npx sequelize init
    • models 폴더 안 index.js 파일 생성
    • config/config.json 생성
    • 아이디 비밀번호는 development에 수정
  • db생성 npx sequelize db:create
  • 사용자 모델 생성 `//참고 한칸씩만 띄워서 사용하는데 dataType 설정할땐 다 붙혀서 해야됨 npx sequelize model:generate
    --name Post
    --attributes
    songName:string,
    userId:string,
    desc:string,
    singer:string,
    url:string,
    date:date,
    category1:string,
    category2:string,
    category3:string`

    name에 설정한 Post로 exports 하기때문에 저 이름으로 꼭 require로 할 수 있도록 참고 하자!!!

    • 추가 수정 사항
      • moduels의 기본값들 수정 할 부분 있으면 수정하고
      • migrations의 파일도 수정 해준다.
  • 테이블 생성 npx sequelize db:migrate
  • op 사용!
    • op를 사용하면 or 와 and 연산자를 중첩하여 사용해서 AND/OR 조건을 만들어 낼 수 있음.

      const { Op } = require("sequelize");

      MySQL 설치

      brew install mysql

      HomeBrew 패키지 관리자를 사용하지 않을 경우👇

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

      MySQL 설정

      mysql.server start
      mysql_secure_installation # 기본 설정 시작

      비밀번호 복잡도 검사 과정 No

      Securing the MySQL server deployment.
      Connecting to MySQL using a blank password.
      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve securitNy. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      Press y|Y for Yes, any other key for No:

      루트 비밀번호 설정

      Securing the MySQL server deployment.
      Connecting to MySQL using a blank password.
      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve securitNy. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      Press y|Y for Yes, any other key for No:

      익명 사용자 삭제 여부 Yes

      By default, a MySQL installation has an anonymous user,
      allowing anyone to log into MySQL without having to have
      a user account created for them. This is intended only for
      testing, and to make the installation go a bit smoother.
      You should remove them before moving into a production
      environment.
      Remove anonymous users? (Press y|Y for Yes, any other key for No) :

      test 데이터베이스 삭제 여부 No

      By default, MySQL comes with a database named 'test' that
      anyone can access. This is also intended only for testing,
      and should be removed before moving into a production
      environment.
      Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

      변경된 권한 테이블에 적용 Yes

      Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

      mysql 서버가 재부팅과 상관없이 켜져있도록

      brew services start mysql

      MySQL 사용

      mysql -u root -p

      • u 사용자 아이디 명시(여기서는 root 사용자)p 비밀번호를 직접 입력하겠다는 옵션
      # 비밀번호 변경
      mysql > use mysql;
      mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
      mysql > FLUSH PRIVILEGES;
      pip install mysqlclient # Django와 연결

      DATABASE 관련 명령어

      SHOW DATABASES;
      

      SHOW DATABASES를 통해 현재 mysql 서버에 있는 database 들을 볼 수 있습니다.


      USE [database_name];
      

      USE 명령어를 통해 사용할 데이터베이스를 지정할 수 있습니다.사용할 데이터베이스를 한 번 지정한 이후에 실행되는 모든 SQL문은 지정한 데이터베이스에서 실행됩니다.workbench에서는 명령어를 사용하는 대신 메인의 왼쪽 아래에 있는 schemas에 있는 데이터베이스를 더블클릭하여 선택할 수도 있습니다.


      SHOW TABLES;
      SHOW TABLE STATUS;
      

      SHOW TABLES를 통해서 현재 선택한 데이터베이스에 있는 table들을 조회할 수 있습니다.SHOW TABLE STATUS를 통해서 현재 선택한 데이터베이스의 있는 table들을 조회할 수 있고, 해당 table들과 관련한 상세 정보들을 함께 출력합니다.


      DESCRIBE [table_name];
      DESC [table_name];
      

      DESCRIBE 명령어를 통해서 해당 table이 가진 column들을 반환합니다. 열은 곧 테이블에서 속성 정보를 나타냅니다. 축약형으로 DESC라고 입력하여도 됩니다.


      SELECT

      SELECT ...
      
      SELECT * FROM [table_name] // 전체 열
      
      SELECT [column_name] FROM [table_name] // 특정 열
      SELECT [column_name],[column_name] FROM [table_name] // 복수의 열
      

      SELECT 명령어를 통해서 table에서 데이터를 가져올 수 있습니다. SELECT * FROM ...를 입력하면 from 이하에 있는 table에서 해당하는 모든 데이터를 가져와서 볼 수 있습니다.

      • 대신 컬럼명을 입력하여서 전체 데이터 대신 특정 컬럼의 데이터만 가져와서 볼 수 있습니다.

      WHERE

      ...
      WHERE ...
      
      SELECT * FROM Customers
      WHERE age > 20;
      

      WHERE 명령어를 통해 조회하는 데이터 결과에 특정 조건식을 적용하여 필터링할 수 있습니다. 테이블에서 가져온 전체 데이터 중에 WHERE 이하의 조건에 맞는 데이터들만 결과로 가져와서 출력하기 때문에, WHERE 조건문의 범위가 아주 넓거나 조건문 자체가 없으면, 데이터의 크기가 크면 클 수록 데이터를 찾아오는 데에 더 큰 노력과 시간이 소요됩니다.

      SELECT * FROM Customers
      WHERE age > 20;
      AND age < 50;
      
      SELECT * FROM cities
      WHERE country != South Korea
      OR country <> North Korea // <> === !=
      
      SELECT * FROM goods
      WHERE goods_id_number IN (12,56,235)
      

      위와 같이 WHERE는 여러가지 연산자들을 조합하여 다양한 조건식들을 만들어낼 수 있습니다. 적용할 수 있는 연산자는 아래와 같습니다.

      • OR 연산자와 AND 연산자
      • 조건연산자 (<,>,=, >=, <=, <> ,!= 등)
      • 관계 연산자 (NOT, OR, AND, IN)

      Sub-Query

      ...
      
      WHERE [something] = (	SELECT [something]
      			FROM [table_name]
      			WHERE ...          )
      
      SELECT * FROM City
      WHERE CountryCode = (	SELECT CountryCode
      			FROM City
                  		WHERE Name = 'Seoul' )
      

      Sub Query는 조건문 안에 조건문을 넣을 때에 사용하며, 위와 같은 방법으로 중복된 조건식을 사용할 수 있습니다. 첫 조건식 WHERE의 대상과 서브쿼리 내의 SELECT 대상은 같아야합니다.


      LIKE

      ... LIKE '[string]%'
      ... LIKE '[string]_'
      
      SHOW variables LIKE 'char%'
      
      SELECT * FROM City
      WHERE CountriesCode LIKE 'KO_'
      
      SELECT * FROM City
      WHERE Name LIKE 'Addis%'

      LIKE를 통해 문자열의 내용을 이용하여 검색할 수 있습니다. %와 _ 두 가지를 활용할 수 있습니다.

      • [string]% 는 [string] 이후에 어떠한 문자가 오든, 찾는 대상에 [string] 이 있는 값을 보여줍니다. % 이후에 어떠한 것이 오든 앞의 문자열만 만족한다면 결과로 출력합니다.
      • [string]_ 은 %와 비슷하지만, %와는 달리 length가 1, 즉 한 글자만 매치시키기 위해 사용합니다.

      DISTINCT

      SELECT DISTINCT CountryCode FROM City
      

      SELECT를 수행할 때 DISTINCT를 추가하면 결과에서 중복된 값들이 있다면 이들 중 1개만을 출력합니다. 결과로 받는 데이터가 중복되는 값이 많을 때나 데이터의 크기가 클 때에 유용합니다.


      ORDER BY

      ORDER BY [something] DESC||(ASC)
      
      SELECT * FROM Country
      ORDER BY Population DESC
      
      SELECT * FROM City
      ORDER BY Population ASC // default로 오름차순으로 설정되었기에 생략가능
      

      ORDER BY 를 통해 결과값을 특정 컬럼에 따라서 오름차순/내림차순으로 정렬하여 결과값이 나오는 순서를 조절할 수 있습니다. 기본적으로 오름차순으로 정렬되어 있으며, 따라서 오름차순 정렬 명령인 ASC를 생략할 수 있습니다. 내림차순으로 정렬할 시에는 DESC를 사용합니다.


      LIMIT

      LIMIT [number]
      
      SELECT * FROM UserData
      ORDER BY age
      LIMIT 100
      

      LIMIT 구문은 결과값의 상위 N 개 만을 한정하여 출력하고 싶을 때에 사용하며, 서버의 처리량을 많이 사용하는 쿼리문을 개선할 때에 많이 사용하는 구문입니다.

profile
오늘 하루도 열심히!

0개의 댓글