09
01

키보드가 고장났어요. 저는 이유를 모르겠읍니다.

1. sql 파일의 스키마 적용

  • 아직 mysql을 실행 하기 전이다 => mysql -u root -p < sql파일의 경로 -D 데이터 베이스 이름
  • 물론, 상대 경로를 적절히 이용해도 된다.
  • mysql을 실행 중이다 => source sql 파일의 경로
  • 경로를 잘 못 찾겠다면 VS code의 왼쪽 파일 목록에서 sql 파일에 오른쪽 마우스를 누르면 Copy path(경로 복사)가 있다.

2. env 파일 설정

  • env파일에는 mysql과 연결하기 위한 환경변수가 들어있다.
  • DATABASE_SPRINT_PASSWORD=이전에 정한 mysql 비밀번호를 입력해서 파일을 저장해 둔다.
  • 비밀번호의 앞, 뒤 어디든 따옴표는 필요 없다. 딱! 비밀번호만 적어줘라. 아니면 에러 난다!
  • 당연히, 당신의 mysql 비밀번호를 모두에게 공개할 필요는 없다. github에 공유하기 전에 gitignore파일 안에 같이 레파지토리에 업로드하지 않을 파일들을 정해서 env 파일까지 같이 공유하는 경우를 막자.

3. js 파일에서 작성한 쿼리의 형태

  • 대부분의 쿼리를 날리는 형태는 정해져 있다.
items: {
    get: (callback) => {
      const query = `SELECT * FROM items`;
      db.query(query, (err, result) => {
        callback(err, result);
      });
    },
  },
  • 위와 같은 형태로 get 요청을 보낼 수 있다.
  • 보다시피, items에 있는 모든 정보를 가지고 오게 될 것이다.
  • 요청으로 받아오는 인자를 사용할 수 도 있다.
  • 한번 쿼리를 전송한 후, 받은 결과를 이용해 다음 쿼리를 보내고, 이후 원하는 결과를 얻도록 연속해서 쿼리를 보낼 수 도 있다.
  • post: (id, name, totalNum, callback) => {
          const query = `INSERT INTO average (name_id, totalNum) VALUES (?, ?)`;
          const params = [id, totalNum];
          database.query(query, params, (err, result) => {
            if (result) {
              const query = `INSERT INTO order_items (school_id, classes_id, student_quantity) VALUES ?`;
              const params = average.map((el) => [result.insertId, el.id, el.quantity]);
              db.query(query, [params], (err, result) => {
                callback(err, result);
              });
            }
          });
        },
  • 위의 예시는 먼저 쿼리를 보내서 가져온 데이터를 다시 쿼리를 보낼때 사용한다.
  • 'params'로 데이터를 한거번에 넣을 수 있다. '?' 부분에 params가 들어가게 되며, 형태는 INSERT INTO를 쓸 때처럼 똑같이 순서만 맞추어 주면 된다.
  • 'result.insertId'로 지금의 post요청으로 삽입된 id를 가져올 수 있다.  나머지 형태는 이렇게 된다.
  • {
      fieldCount: 필드의 갯수,
      affectedRows: 영향을 받고 있는 행,
      insertId: 삽입된 ID,
      serverStatus: 서버의 상태,
      warningCount: 경고의 수,
      message: 메시지,
      protocol41: (true or false)
      changedRows: 변경된 행
    }

4. 구조를 이해해 보자.

  • 위의 파일은 '모델' 폴더 안에 있는 서버로 요청을 보내는 함수가 들어있는 파일이다.
  • 이는 데이터 베이스 폴더 안의 연결부로 인해 전송됨을 알 수 있다.
  • app.js 파일에서 전체적인 구조를 파악하는 것이 가장 기초이다. 최상단의 연결부로 모두 가보자.
  •  그리고 config 파일은 각 데이터 베이스에 맞게 서버를 열어주고 있을 것이다.
  • spec 에서 어떤 데이터가 어떤 요청으로 들어오게 되는지 확인이 가능하다. 잘 보면 모든 구조를 파악하기 쉽다.
  • controllers 에서는 서버로 html 요청을 보내고 있다. 어떤 데이터를 어떤 서버 상태로 보내주는지 확인할 수 있다.
  • 이렇게 글로만 보면 잘 이해가 되지 않는다. 직접 파일을 구해서 최상단의 참고로 하고 있는 경로들을 하나씩 들어가 보면서 어떤 역할을 하고 있는지 공부해 보자.
COMMENT