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 요청을 보내고 있다. 어떤 데이터를 어떤 서버 상태로 보내주는지 확인할 수 있다.
- 이렇게 글로만 보면 잘 이해가 되지 않는다. 직접 파일을 구해서 최상단의 참고로 하고 있는 경로들을 하나씩 들어가 보면서 어떤 역할을 하고 있는지 공부해 보자.
'Coding > Today I Learned' 카테고리의 다른 글
2021.09.03(Fri.) <SQL vs NoSQL와 MongoDB의 간단한 공략> (0) | 2021.09.03 |
---|---|
2021.09.01(Wen.) <MVC Design> (0) | 2021.09.01 |
2021.08.30(Mon.) <Database JOIN을 알아보자> (0) | 2021.08.30 |
2021.08.26(Thu.) <SQL의 첫걸음> (0) | 2021.08.26 |
2021.08.25(Wed) <다이나믹 프로그래밍(Dynamic Programming)> (0) | 2021.08.25 |