지난 글에 이어서 mysql을 쓰게 되었다.

모든 테이블에서 특정 값으로 조건에 맞는 데이터를 찾는 것인데

sql 잘하시는 분들이 쓰신 여러 글을 볼 수 있었지만 따라하기 무서웠다

겉핥기 중인데다가 js로 하고 있어서 좋지 않은 방법인지는 모르겠지만 쉽게 할 수 있길래 공유한다

export const getDbDistribute = async (root, args) => {
    try {
    // 스키마에서 모든 테이블 이름 배열로 저장하기
      const [tables] = await db.query(`
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'sports_db';
      `);
      let result = [];
 
    // 배열 반복문으로 조건 찾아서 리턴 배열에 저장하기
     await Promise.all(tables.map(async (table) => {
        const [rows] = await db.query(`
        SELECT *
        FROM sports_db.${table.TABLE_NAME}
        WHERE year = ?
        `, [args])
        result.push(...rows);
      }))
      console.log(result)
      return result;
    } catch (error) {
      console.error("쿼리 실행 중 오류:", error);
      throw error;
    }
};

 

쿼리 비동기식이랑 args 쿼리 변수로 사용하는 방법이나 좋은 공부가 되었다.

혼자 해보고 싶은 사이드 프로젝트를 만들다가 처음엔 firebase로 데이터 베이스를 사용하려고 했으나
내가 제공하고자 하는 데이터 양이 너무 많은데 firebase 데이터를 캐싱하는게 쉽지 않았다...

 

내가 개발하면서 하루 사용량 초과하니 말 다했지..

그래서 결국 실질 데이터는 따로 db를 사용하고
계정관리나 게시글 관리 정도만 firebase로 하기로 하고 데이터를 이전하기로 결정했다.

우선 나는 choco를 사용하기 때문에
choco install mysql
로 가볍게 설치해주고(관리자 권한 실행) 

mysql_secure_installation
명령어로 설정을 한다 -> 첫번째만 N / 비밀번호 / 그 후 전부 Y

이렇게 하면 비밀번호 설정도 끝났고 워크벤치까지 choco로 설치
choco install mysql.workbench

2. 워크벤치에서 json 파일 업로드하기

choco로 설치할 경우 root로 이미 하나가 생성되어 있을 수 있다.

가볍게 지워주고(우클릭 delete connection)

워크벤치 메인 이미지
워크벤치 메인 이미지

 

더하기 버튼을 클릭하면 새로운 connection을 생성할 수 있다.

커넥션 생성 창
커넥션 생성 창

 

위에 이름을 써주고 store in vault...를 누르면 비밀번호 입력하는 창이 뜬다
처음에 설정한 비밀번호 입력 후 ok 옆에 Test Connection을 누르면

테스트 연결 성공 화면
테스트 연결 성공 화면


에러난 거 같지만 성공이다 그 후 ok를 눌러주면 생성 끝

데이터베이스 생성 후 첫 화면
데이터베이스 생성 후 첫 화면


다음 더블클릭으로 들어오면 초기화면이 나온다
위에 아이콘이나 스키마 영역 우클릭으로 스키마 생성 후 우클릭 하고 
Table Data Import Wizard 클릭

스키마 우클릭 후 Table Data Import Wizard 클릭
스키마 우클릭 후 Table Data Import Wizard 클릭

 


위치 경로 설정으로 json 파일 선택
그 다음 설정이 몇가지 있지만 기본적으로 next 하면 추가가 완료된다.

import 데이터 확인
import 데이터 확인


테이블로 잘 들어갔다!

'DATABASE' 카테고리의 다른 글

[mysql & js] npm mysql2 모든 테이블에서 특정 값 찾기  (0) 2024.01.19

오늘 글은 객체(Object)에 키 : [배열] 값으로 저장하고 그것을 변수로 불러와 보는 방법이다.
업무중에 배열로 리스트를 뽑아내는 작업이 있었는데

중복으로 리스트를 뽑아내는 경우를 방지하기 위해 배열을 초기화 시켜주다보니

한 페이지에 여러 리스트가 있는 경우 고정된 값만 사용되게 되었다.

그것을 막기 위해 객체에 키 : [array]로 값을 키 값을 가져와서 리스트를 여는 방법을 찾았다. 

 

기존에 업무에서 쓰던 코드와는 다르지만 예시로 설명하기 위해 코드를 조금 수정했다.

예시 html 코드
예시 html 코드

 

div를 클릭했을때 div의 속성 중 하나를 매개변수로(예시에서는 id) 객체에서 키 값을 찾아주는게 목적이다

(실제 업무 형식과 동일)

 

예시 main.js
예시 main.js


우선 빈 객체를 만들어주고 키 값으로 사용할 변수를 만든다.

그 후 변수로 키 : 값을 넣어주기 위해선 [ ] 괄호가 필요하다

객체이름[변수이름] = 값

ex)
list_result[list_id] = split_list;

객체를 써본 사람들은 .변수이름 이렇게 찾거나 만드는게 익숙할텐데

변수를 사용하려면 중괄호가 필요하더라

(중괄호가 없으면 변수가 아닌 그냥 키로 사용해버림)

다음은 쉽게 매개변수로 키 값으로 배열을 불러와 사용이 가능하다

결과 콘솔 창
결과 콘솔 창

 

Easy~

오늘은 접속자 로그 같은걸 쌓아야 할때 사용하는 쿠키 값 생성하기를 소개합니다.

(내가 만든 쿠키~) ???

 

쿠키 값 생성 코드
쿠키 값 생성 코드

 

지금 보여드리는 코드는 하루에 한번씩 초기화되는 // 로그중복 어뷰징 방지

그리고 쿠키를 삭제하는 deleteCookie() 함수가 포함된 코드입니다.

 

복붙용 코드

//접속 로그
fnGenerateUid = function(){
  return  '' + Math.random().toString(36).substring(2, 11) + Date.now().toString().substring(0,10);
}

setCookie = function (name, value, day){
  var date = new Date();
  date.setTime(date.getTime() + day * 60 * 60 * 24 * 1000);
  document.cookie = name + '=' + value + ';expires=' + date.toUTCString() + ';path=/';
}
deleteCookie = function(name){
  var date = new Date();
  document.cookie = name + "= " + "; expires=" + date.toUTCString() + "; path=/";
}
getCookie = function(name) {
  var value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
  return value? value[2] : null;
}

if(!getCookie('COOKID')){
   setCookie('COOKID', fnGenerateUid(), 1);
}

var cooKid= getCookie('COOKID');
console.log(cooKid);

 

fnGenerateUid를 통해 쿠키의 문자열을 생성하고

접속할 때 COOKID라는 쿠키 값이 없으면

setCookie() 함수를 사용하여 24시간 유지되는 쿠키 값을 생성합니다.

 

쿠키 값 확인 방법
쿠키 값 확인 방법

 

쿠키가 제대로 생성했는지 확인하기 위해서 f12를 누른 개발자 도구창에서

애플리케이션 쿠키를 확인하면 COOKID가 제대로 생성된 것을 확인할 수 있습니다

 

그리고 삭제하는 것도 확인해보면...

 

deleteCookie
deleteCookie

 

애플리케이션 쿠키에서 삭제된 것을 확인할 수 있습니다.

(정확하게는 유지시간을 현재시로 맞춰서 만료시켜버림)

삭제된 쿠키 값
삭제된 쿠키 값

 

 

+ Recent posts