• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

mariadb를 order-service의 application.yml에 등록하고 실행이 안됩니다.

22.09.02 23:28 작성 조회수 559

0

안녕하세요 강사님 강의 잘 듣고있습니다. 현재저는 windows 운영체제 환경입니다.

제가 orders Microservice수정 - mariadb 강의 부분을 듣다가

mariadb를 order-serviced의 application.yml에 설정하고

application.yml의 mariadb관련 설정은 다음과 같습니다. ( 참고로 저는 3307포트 사용합니다.)

datasource:
    url: jdbc:mariadb://localhost:3307/mydb
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: 123456

이상태에서 order-service를 실행시키니까 다음과 같은 에러가 발생했습니다.

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'

 

에러를 검색해보니까

계정에 대한 접근 권한이 제대로 설정되지 않은 경우로 보였습니다.

그래서 접근 권한을 변경해주려고 했습니다.

기존에

> show grants for root@localhost; ( show grants; ) 명령어를 입력하면 다음과 같았고

> show grants for root@'%'; 명령어를 입력하면 다음과 같았습니다.

그래서

grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와

grant all privileges on root.* to root@'%' identified by 'root'; 명령어를 입력해 보았다.

(사실 에러를 해결하려고 권한을 주려고한건데.. identified by '비밀번호' 로 설정되는걸 몰랐습니다..)

 

> grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어 입력후에

> show grants;  확인하면 빨간줄이 추가 됐습니다. 그리고 password도 변경됐습니다.

> grant all privileges on root.* to root@'%' identified by 'root';  명령어 입력후

> show grants for root@'%';  빨간줄이 추가됐습니다. 그리고 password도 변경됐습니다.

그리고 나서

유레카 서버를 실행시키고

주키퍼, 카프카 , 카프카커넥트 까지 실행시키고

apigateway 실행, config-service 실행 user-service 실행한 후

마지막으로 order-service를 실행시키니까 됩니다.

그런데 문제는

kafka 마지막 강의인 kafka를 활용한 데이터 동기화2 부분을 따라하는데

즉, orderservice를 2개 실행시키고 db에 등록이 잘 되나 확인하는 과정에서

주문 요청을 잘되는데

db에 등록이 안됩니다... 심지어 order-service#1, order-service#2

콘솔에 모두 번갈아가며 데이터가 들오는 것도 확인했습니다.

하지만 mariadb 에는 데이터가 들어가지 않습니다.

h2-console에서 확인한 mariadb와 명령프롬프트 창으로 킨 마리아db모두 데이터가 들어오지않습니다.

 

그러다가

grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와

grant all privileges on root.* to root@'%' identified by '123456';

이렇게 한번 바꾸고 다시

grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와

grant all privileges on root.* to root@'%' identified by 'root';

명령어를 치고 서버를 다시 실행시키니까 데이터가 아까 요청한게 전부 들어가 있습니다...

(근데 사실 mariadb의 mydb에는 postman에서 요청한

0eabbd2e-f8d3-448f-89c1-79642b7ea765 이런 형식의 userId가 없는데

 어떻게 데이터가 들어갔는지 의문이네요)

 

걸리는게

"my-source-connect", "my-sink-connect", "my-order-sink-connect"

이 3가지를 post 요청으로 등록할 때

"connection.password":root 가 아니라

"connection.password":123456 이었습니다. (히스토리 확인해보니까 확실히 맞습니다.)

 

또한 my-order-sink-connect를 등록할 때는 mariadb는

grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와

grant all privileges on root.* to root@'%' identified by '123456';

을 적용한 채로 커넥트를 등록한것 같았습니다.. (사실 계속 왔다갔다 해서 확실하지 않습니다.)

 

현재 기존에 order-service의 application.yml에 mariadb를 등록하기 전에

users/{userId} 으로 get 요청하는 것도

"orders": []

현재 orders의 정보가 나오지 않는 상황입니다..

 

결론은 현상황을 어떻게 해결해야할지 모르겠습니다..

일단 처음에러를 잘 대처한거부터가 맞는건지 모르겠습니다..

현상황을 해결할 수 있는 방법이 있는지

아니면 처음 에러가 발생했을 때 어떻게 해결을 해야할지 알려주시면 감사하겠습니다..

긴글 읽어주셔서 감사합니다..

 

마지막으로 현재 order-service의 jpa, datasource 관련 application.yml 설정은 다음과 같습니다.

  jpa:
    hibernate:
      ddl-auto: update  # 변경된 내용이 있을 경우에만 업데이트
    show-sql: true
    generate-ddl: true
  datasource:
    url: jdbc:mariadb://localhost:3307/mydb
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: root

 

답변 1

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

현재 발생한 문제를 잘 정리해 주셨네요. 올려주신 내용을 확인해 보면, 첫번째 에러 원인이 Access denied 에러라고 되어 있고, 작업하신 내용 중에 mariadb 콘솔에서 grant 명령어로 권한 관련 작업 및 비밀번호 변경작업을 하신걸로 보여집니다. 마지막으로 변경하신 비밀번호가 'root'로 설정된것 처럼 보여지네요. Spring boot에서 DB의 접속이 가능한지 확인해 보는 가능 간단한 방법은 별도이 DB 클라이언트 툴(Workbench, Heidi, Data Grid emd)해당 정보(URL, USERID, PASSWORD)를 가지고 접속해 보는 거라 생각됩니다. 먼저 DB 클라이언트 툴에서 같이 정보로 접속을 확인해 보시고, 이상이 없다면, 현재 사용하는 DB 말고 새로운 DB로 테스트 해 보면서 Spring Boot 쪽의 설정 및 라이브러리를 확인해 보시는 게 필요할 거 같습니다. Docker Desktop이 설치되어 있다면, Windows에 직접 설치한 DB말고 Docker 컨테이너로 Mariadb를 기동한 다음 테스트해 보시기 바랍니다. 아마 위 2가지 기본적인 방법으로 원인을 찾는데 도움이 되지 않을까 싶습니다. 혹시 모든 작업을 다 확인하셨는데도 동일한 문제가 발생하신다면, 아래 메일로 order-service 관련 코드를 그대로 압축하셔서 보내주시면, 제쪽에서도 확인해 보도록 하겠습니다.

감사합니다.