작성
·
424
0
안녕하세요 강사님 강의 잘 보고 있습니다.
https://www.inflearn.com/questions/641464
제가 예전에 위에 링크로 질문을 했었는데.. 아직까지도 해결이 되지 않아서 다시 메일을 보냅니다.
지금은 전에 질문 했던 것 과 조금 다른 상황이라 위에 링크는 잊으셔도 됩니다.
현재 데이터 동기화를 위한 Apache Kafka의 활용 ②
Orders Microservice 수정 - MariaDB 부분을 수강중입니다.
현재 mariadb를 연결시키면 order-service가 실행 안되는 문제입니다.
당연히 콘솔과 heidisql에서 mariadb 접속이 아주 잘됩니다.
문제는
order-service에 mariadb 를 설정하고 실행시켰는데 다음과 같은 에러가 발생하면서 실행이 안됩니다.
java.sql.SQLInvalidAuthorizationSpecException: Could not connect to address=(host=localhost)(port=3307)(type=master) : (conn=3) Access denied for user 'root'@'localhost' (using password: YES)
Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding'
그래서
grant all privileges on root.* to root@'localhost' identified by '비밀번호입력';
grant all privileges on root.* to root@'%' identified by '비민번호입력';
해서 다음과 같은 상태를 만들었습니다.
그럼에도 불구하고 order-service를 실행시키면 실행이 되지 않습니다..
분명히 명령프롬프트 창으로도 heidisql 같은 툴로도 접속이 아주 잘됩니다.
해결책은 에러 검색해보면 나오는 해결책은 제가 적용한 해결책하고 동일합니다..
전에 안되면 order-service 압축파일을 메일로 보내다랄고 하셔서
도저히 해결이 안되서 메일 한번 보내봅니다..
메일 한번 확인해 주시면 감사하겠습니다.
답변 1
0
안녕하세요, 이도원입니다.
mariadb와 order-service 모두 Docekr 컨테이너로 기동하여 사용할 경우, order-service에서 localhost로 mariadb에 접속하는 문제로 보여집니다. mariadb에서 localhost로 접속에 대한 권한을 추가하였다 하여도, order-service에서는 mariadb 접속 시 localhost로 접속하게 되면, order-service 자신의 mariadb에 접속하려고 합니다. Host PC에서는 Docker engine이 설치 되어 있기 때문에, localhost로 접속하여도, Docker mariadb로 연결되지만, order-service에서는 그렇지 않습니다.
order-service에서 접속할 때는, Docker mariadb의 IP를 직접 입력(172.17.x.x 등)하시거나, Docker container명을 입력하실 수 있는데, Docker container 명으로 접속하실 때는 order-service와 mariadb가 모두 같은 Docker network에 기동되어야 합니다. 따라서, docker network create my-network 등으로 Docker network를 생성한 다음, 컨테이너 실행 시 docker run --network my-network ~ 이와 같이 network 옵션을 추가하여 같은 네트워크에서 실행되게 하면, order-service에서 mariadb로 접속 시 컨테이너 명으로 접속 할 수 있습니다.
제가 질문을 잘못 이해 했다면 다시 글 남겨 주세요. 그리고 보내주신 이메일을 확인하지 못했습니다. 죄송하지만, 위와 같은 방법으로 해결되지 않을 경우, 한번더 메일 보내주실 수 있을까요?
감사합니다.
친절한 답변 감사합니다.
일단 저는 도커를 모르기 때문에 Docker를 사용한적이 없습니다.
답변해주신 부분이 도커 기준으로만 말씀해주셔서..
결론은 도커를 공부해서 사용해야만 하는 것으로 들립니다..
그리고 답변해 주신 부분에서
"mariadb에서 localhost로 접속에 대한 권한을 추가하였다 하여도, order-service에서는 mariadb 접속 시 localhost로 접속하게 되면, order-service 자신의 mariadb에 접속하려고 합니다." 라는 부분이 확실하지는 않지만 제 상황에도 해당하는 느낌입니다.
결론은 Docker를 사용해서 mariadb를 다운받고 진행해야 하는건가요?
Docker를 사용해서 적용하는 가이드 라인이 없어서 그냥 검색하면서 해봐야할 것 같습니다.
그렇다면 기존에 있던 mariadb는 삭제하고 docker로 다시 받아야겠군요