오늘은 DB 실습을 진행했다. 스키마를 만들고 NodeJS에서 MySQL 연결하고 간단한 SQL문을 보내봤다. 내용이 짧으면서 강렬했다. 스키마를 만들 때는 확장성을 고려하고 Join Table을 만들어야 되는 항목에 대해서 고민했다. NodeJS와 MySQL은 연결 파트는 미리 작성되어 있었으나 인증 이슈로 인하여 삽질을 조금 했다. 문제를 검색하고 문제를 해결하는 과정은 모든 IT 분야에서 있는 과정이다.
인스타그램의 스키마를 구성해보는 실습을 진행했다. 어떻게 만들지 고민하면서 구성에 대해서 생각했다. 이렇게 생각해볼 수 있는 기회만으로 DB와 조금 친숙해진 기분이 들었다. 지금 만들고 보니 Post와 Hashtag 사이에 Join Table을 만들었으면 어땠을까. 아쉬움이 남는다. 조금 더 고민해볼걸 그랬나?
이 부분은 안해도 될 삽질을 했다. .env
파일에 접속 정보를 입력하고 테스트를 실행했는데 넘어가질 않는다. 에러 메세지도 자세하게 안나온다. 우선 DB 접속 코드 Error Catch 부분에 console.log를 넣었다.
return new Promise((resolve, reject) => {
this.connection.connect((err) => {
if (err) {
// ! Error message 출력
console.log(err.message);
reject(err.message);
}
resolve('ok');
});
});
그 이후 발생하는 메세지는 간결했으나 구글링 돌리기엔 충분했다.
'Client does not support authentication protocol requested by server; consider upgrading MySQL client'
찾아보니 좋은 블로그에서 답을 찾았다. 인증 플러그인을 변경하여 해결했다.
caching_sha2_password -> mysql_native_password
이 문제는 클라이언트 프로그램에서 mysql 패스워드 플러그인 "caching_sha2_password"을 소화하지 못해서 생기는 오류입니다. 클라이언트 프로그램에서 사용할 수 있도록 유저의 패스워드 Plusin을 바꿔줍시다.
상태 확인 :SELECT Host,User,plugin,authentication_string FROM mysql.user;
적용 : ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOURPASSWORD'