국비강의를 들었을 때 React 강의에서 nodejs를 사용해 본 적이 있었고
맛보기로 npm i 라던지...정말 기본적인 부분들만 알고 썼던 상태여서
기초부터 응용까지 학습하고 있었다.
오늘 AWS 세팅을 수월하게 마치고(과금위험 때문에 꼼꼼히 체크)
DB와 node.js 프로젝트를 연동하기 위한 세팅 후 npm start를 해보니
서버가 정상적으로 실행되다말고 에러를 마주하게 되었다.
이때부터 오랜만에 엄청난 삽질이 시작되었다.
에러 내용 :
Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
...
code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",
sqlState: '28000',
fatal: true


원인은 일단 pw가 없어서 권한이 거절되고 있는 상황이라고 나왔는데
애초에 ''로 username도 인식을 못하는 것 같았다.
뭔가 이상한데? 왜 공백이지?
권한부여도 mysql 8 버전부터 변경되었다고 해서
정상적으로 부여를 다 한 상태였는데..
MySQL 8이상 권한 부여 방식
GRANT ALL PRIVILEGES ON DB이름 TO 'username'@'localhost';
FLUSH PRIVILEGES;
기존 방식
GRANT ALL PRIVILEGES ON DB이름 TO 'username'@'localhost' IDENTIFIED BY 'password';
하지만 검색을 좀 더 해보니 dotenv(.env) 파일의 경로 설정도 중요한 부분이었던 것이다.
경로 설정 없이 app.js와 같은 형제 위치여서
별도로 세팅을 안한 config() 공백상태였는데 사실은 이게 문제였나보다.
해결 :
정말 허무하게도 MySQL, 터미털에서 열심히 삽질했지만
VScode에서 단 한줄 수정을 끝으로 해결했다.
app.js와 동일한 위치에 존재해서
'/'로 경로를 잡고 적는 것이 아닌 파일명 자체로 넣어줬다.

dotenv.config( {path: '.env} );
백, 프론트 모두 할 때 마다 느꼈던 건데
경로가 기본인 것 같지만 실수가 발생할 수 있는 부분인데
다른 경우에 비해 명확하게 에러가 나오지 않는 경우가 꽤 있어서
놓치지 않고 꼼꼼하게 봐야겠다고 또 한번 다짐하게 되었다.
연관 사이트
MySQL :: How to grant privileges to users in MySQL 8.0
How to grant privileges to users in MySQL 8.0 For this last technical post of the MySQL Community Advent Calendar 2022, I will explain how to grant privileges to users in MySQL 8.0. This is an important task for anyone who is responsible for managing a MyS
dev.mysql.com