
이제 데이터베이스의 데이터들을 CRUD 테스트를 진행 할 예정입니다.
MVC패턴으로 API를 구현해봐야죠
그럼 sql문을 작성하기 앞서
어떤 기능들을 만들어야할지 체크해봅니다.
sql문을 통해 가져올 때
이것이 변경해줘야할 값이다를 알려주기 위해
변수를 선언해서 작업해줄 예정입니다. - 참고한 블로그
SET과 @를 사용하여 데이터를 만들고
사용할 때는 @변수이름 으로 사용하면 됩니다.
ex)
SET @user_id = 'user1';
SET @user_pwd = 'password1';
select * from QB_USER where USER_ID=@user_id AND USER_PASSWD=@user_pwd;
데모 프로젝트 코드에 login 기능 코드를 추가하여 넣어봤습니다.
이때 ejs를 통해서 화면에 뿌려주는데 이 ejs를 지금 짤 수는 없으니
일단은 postman을 통해서 확인해보겠습니다.
확인해보려고 postman에서 get 요청을 보냈더니 오류가 나서 일단 db관련 오류가 뜨는 것 같습니다. 먼저 연결을 진행하고 host이름을 MySQL에서 보고 잘 작성한 뒤에
다시 요청을 날려보니까
Error: Unknown database 가 계속 뜹니다..
왜일까요...ㅠㅠ

설정을 들어가보니
내가 "Connection Name"을 "database 이름" 쓰는 란에다가 쓰고있었다.
그래서 Error: Unknown database 'question_bank_db' 라는 오류가 계속 떴었다.
제대로 쓰려면 이렇게 써야한다.

그리고 require를 하면서 자동으로 connection pool을 생성하는 것 같다.
이건 보안사항이 담겨있을 수 있으니 따로 정리하는 걸로 하고 넘어간다.
이제 다시 login함수 만들기를 진행해보려고한다.
그런데!
service함수 안에 있는 db 연결 함수 userCheck 함수가 자꾸 없다고 뜬다.
TypeError: userCheck is not a function
이유는

참조 글
require가 어떻게 이루어지는 지를 공부했고 - 참조
commonJS의 import 방법을 알아봤습니다. - 참조결론은
1. 여러 개의 객체를 내보낼 경우
exports를 사용, import 도 여러 개로 나눠받아 사용
2. 하나의 객체로 내보낼 경우
module.exports를 사용, import 도 하나의 객체로 받아 사용

이 코드는 이렇게 module.exports 변수 자체에 여러 함수를 모아 할당해주는 것이기 때문에 {} 괄호를 써줘야하는 것이었습니다.
이제 postman요청을 날렸을 때 뜨는 오류가 달라졌습니다.
SET @user_id = 'user1';
SET @user_pwd = 'password1';
select * from QB_USER where USER_ID=@user_id AND USER_PASSWD=@user_pwd;
제가 이런 쿼리를 담아서 날렸습니다.
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SET @user_pwd = 'password1';
그랬더니 이런 오류가 떴습니다.
SET을 쓰면 안 되는 건가 싶어서 SET 문법과 @문법을 지우고 날려봤습니다.
Error: Unknown column 'user1' in 'where clause'
이런 오류가 떠서 곰곰히 보는데
SELECT * FROM company_work_db.QB_USER WHERE user_id='user1' AND user_passwd='password1';
이 쿼리문은 MySQL문에서는 잘 동작하는데
SELECT * FROM company_work_db.QB_USER WHERE user_id=${user_id} AND user_passwd=${user_pw};
이 쿼리문은 잘 동작하지 않았습니다.
비교를 해보니
user_id 뒤에 쓰는 변수를 무조건 따옴표로 감싸줘야했습니다.
저는 변수가 들어가서 따옴표 없이 넣어줘도 된다고 생각했는데 아니었습니다.
추가 공부 포인트