Spring과 로컬 DB 연결 시 application.properties의 변수의 값을 할당할 때 따옴표(quote) 작성 시 주의할 점

2024. 2. 14. 17:53· 개발 일지/Spring
목차
  1. [개요]
  2. [본문]
  3. [결론]

[개요]

Spring을 통해 프로젝트를 진행하기 위해 로컬 DB인 MySQL을 연결하려 한다. Spring은 내부적으로 자체적인 DB 관련 애플리케이션이 존재한다. 그래서 미리 정의된 변수에 올바른 값만 넣어준다면 쉽게 DB와 연결할 수 있다. 해당 변수는 src/main/resources/application.properties 파일에서 할당할 수 있다. 그런데 값을 할당하는 과정에서 제대로 된 값을 넣었는데 연결을 실패하는 경우가 있다. 이들의 공통점을 분석해보고, 어떻게 하면 문제가 생기지 않을지 정리해보겠다.

[본문]

# MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testDb
spring.datasource.username=test
spring.datasource.password=test

위는 정상적으로 동작하는 application.properties 파일이다.

# MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testDb
spring.datasource.username='test'
spring.datasource.password='test'

그러나 이를 위와 같이 single quote를 붙이고 실행하면 다음과 같은 에러가 발생한다.

2024-02-14T17:23:29.185+09:00 ERROR 65057 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

java.sql.SQLException: Access denied for user 'spring'@'localhost' (using password: YES)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:438) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:189) ~[mysql-connector-j-8.3.0.jar:8.3.0]
	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-5.0.1.jar:na]

분명 아이디와 비밀번호는 올바르게 입력했는데 왜 에러가 발생하나 싶었다. 그래서 현재 root는 비밀번호가 설정 되어 있지 않아 password를 없애고 spring.datasource.username='root'로 변경하여 실행해보았다. 이렇게 하니 정상적으로 연결이 되는 것이다. 이로써 MySQL에 등록한 test라는 유저의 권한이 이상이 있을 것 같아 예전에 추가해둔 권한을 확인해보았다.

mysql> show grants for test@localhost;
+--------------------------------------------------------------+
| Grants for test@localhost                                  |
+--------------------------------------------------------------+
| GRANT SELECT ON *.* TO `test`@`localhost`                  |
| GRANT ALL PRIVILEGES ON `testDb`.* TO `test`@`localhost` |
+--------------------------------------------------------------+
2 rows in set (0.05 sec)

이미 test라는 유저는 testDb라는 데이터베이스에 대해 모든 권한을 가지고 있다. 그렇기 때문에 권한 문제는 아니라 생각했다. 이로써 현재 상황을 정리하면 다음과 같다.

  • username='test', password='test'로 하면 실패한다.
  • 'test'는 testDb 데이터베이스의 테이블에 대한 모든 권한을 갖고 있다.
  • username='root'로 하면 성공한다.

위 사실을 갖고 혹시 비밀번호가 잘못 되었나 싶어서 single quote를 제거하여 password=spring이라 해봤다. 이렇게 하자 바로 성공하게 되었다. password는 따옴표가 포함 되지 않은 상태로 해야 정상적으로 읽어갈 수 있는 것 같다. 

[결론]

이후 실험을 더 해보니 아래와 같은 결과가 나왔다.

  • username, password 둘 다 double quote는 지원하지 않는다.
  • username만 single quote를 문자열을 감싸는 용도로 지원한다. password는 별도의 문자로 인식한다.
  • 둘 다 따옴표를 사용하지 않아도 가능하다.

앞으로 application.properties 파일을 작성할 때 따옴표를 굳이 따로 붙이지 않아도 될 것 같다.

'개발 일지 > Spring' 카테고리의 다른 글

cascade = CascadeType.ALL과 orphanRemoval = true 차이  (0) 2024.02.27
Spring security architecture 해석 part1  (0) 2024.02.25
[Spring security] 인가 - 특정 리소스 마다 권한 설정하기  (0) 2024.02.13
중첩 클래스(Nested class)와 이를 정의한 클래스의 메서드(non-static)에서 사용할 때 왜 오류가 발생하는가?  (0) 2024.01.28
단위 테스트와 통합 테스트  (0) 2024.01.25
  1. [개요]
  2. [본문]
  3. [결론]
'개발 일지/Spring' 카테고리의 다른 글
  • cascade = CascadeType.ALL과 orphanRemoval = true 차이
  • Spring security architecture 해석 part1
  • [Spring security] 인가 - 특정 리소스 마다 권한 설정하기
  • 중첩 클래스(Nested class)와 이를 정의한 클래스의 메서드(non-static)에서 사용할 때 왜 오류가 발생하는가?
jayoon
jayoon
하고 싶은 것들을 하며 성공하기
jayoon
자윤 블로그
jayoon
전체
오늘
어제
  • 분류 전체보기 (72)
    • 개발 일지 (68)
      • GitHub, Git, Source Tree (4)
      • AWS(Amazon Web Service) (4)
      • Spring (7)
      • 알고리즘 (4)
      • 프로그래밍 언어(Java, C, SQL) (33)
    • 일상 (4)
      • 일상 관리 밴드 (1)
      • 내가 읽은 책! (1)

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리 페이지
hELLO · Designed By 정상우.v4.2.2
jayoon
Spring과 로컬 DB 연결 시 application.properties의 변수의 값을 할당할 때 따옴표(quote) 작성 시 주의할 점
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.