
// resources/application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/aibe2?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=DB아이디
spring.datasource.password=비밀번호

useSSL=false : SSL 없이 접속하겠다는 의미 (기본값은 true). 인증서 없이 접속할 때 오류 방지serverTimezone=UTC : serverTimezone은 서버 시간대가 뭔지 명확히 알려주는 옵션으로 MySQL 서버 시간대를 UTC로 명시적으로 지정해 타임존 경고 방지allowPublicKeyRetrieval=true : 서버의 RSA 공개키를 클라이언트가 요청할 수 있게 허용 (MySQL 8 이상에서 필요)MySQL 8.x 이상에서는 보안 강화를 위해 기본 SSL 연결 및 공개키 요구 사항이 생겼다.
명시적으로 옵션을 주지 않으면 JDBC 드라이버가 경고 또는 예외를 던질 수 있다.
MySQL과 Java(Spring Boot) 사이의 타임존(Timezone) 불일치를 방지
MySQL은 내부적으로 타임존 정보를 저장하고, JDBC 드라이버는 자바의 타임존과 비교하려 한다. 하지만 MYSQL 서버 설정에 타임존이 명확하지 않으면
The server time zone value 'KST' is unrecognized or represents more than one time zone.
같은 경고나 에러가 뜰 수 있다.
spring.datasource.url=jdbc:mysql://localhost:3306/aibe2?serverTimezone=UTC
JDBC가 MySQL 서버의 타임존을 UTC(세계 표준시)로 간주하도록 명시하게 된다.
비대칭 암호화 알고리즘 중 하나로, 두 개의 키(열쇠)를 사용한다.
| 키 종류 | 설명 |
|---|---|
| 🔓 공개키 (Public Key) | 누구나 볼 수 있음 |
| 🔐 개인키 (Private Key) | 오직 서버만 가짐 (비밀!) |
MySQL 8부터는 기본 인증 방식이 caching_sha2_password로 바뀌었다.
이 인증 방식은 비밀번호를 안전하게 전송하기 위해 RSA 공개키를 사용해 암호화한다. 하지만 클라이언트(JDBC)는 이 공개키를 서버에서 직접 받아와야만 비밀번호 암호화해 전송할 수 있다.
기본설정에서는 서버가 클라이언트에게 공개키를 넘겨주는 걸 허용하지 않아
allowPublicKeyRetrieval=true 설정이 필요하다.
데이터를 암호화해서 안전하게 통신하는 기술
https://로 접속할 때 자동으로 SSL을 사용한다.
주소창의 🔒 자물쇠 표시 = SSL 적용됨
| 구분 | SSL | RSA 공개키 |
|---|---|---|
| 목적 | 통신 전체를 암호화 | 특정 데이터(예: 비밀번호)만 암호화 |
| 범위 | 전체 트래픽 | 제한된 정보 (로그인 등) |
| 사용 방식 | 인증서 기반 | 공개키 기반 |
| MySQL에서 | useSSL=true로 설정 | allowPublicKeyRetrieval=true로 공개키 요청 가능 |

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql=trace
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.show_sql=true
실행되는 SQL 쿼리를 콘설에 출력한다.
운영 환경에서는 보안과 성능을 위해 꺼두는 것이 좋다.
spring.jpa.properties.hibernate.format_sql=true
출력되는 SQL을 보기 좋게 포맷한다. (show_sql=true필수)
logging.level.org.hibernate.type.descriptor.sql=trace
Hibernate가 SQL에 바인딩하는 파라미터 값까지 로그에 출력한다.
예시 로그 : binding parameter [1] as [VARCHAR] - [abc123]
spring.jpa.hibernate.ddl-auto=update
애플리케이션 시작 시, DB 테이블을 자동 생성하거나 변경한다.
설정 값
| 설정 값 | 설명 |
|---|---|
none | 아무 작업도 하지 않음 |
create | 기존 테이블 삭제 후 새로 생성 |
create-drop | 애플리케이션 종료 시 테이블 삭제 |
update | 변경된 부분만 반영 (개발 환경에서 많이 사용) |
validate | 스키마 일치 여부만 검증, 변경은 하지 않음 |
spring.jpa.database-platform=org.hibernate.dialect.MySQL8DialectMySQL8Dialect는 MySQL 8 버전에 최적화된 SQL문법이다. 
spring.servlet.multipart.maxFileSize=20MB
spring.servlet.multipart.maxRequestSize=100MB
itemImgLocation=D:/shop/item
uploadPath=file:///D:/shop/
maxFileSize=20MBmaxRequestSize=100MBitemImgLocation @Value("${itemImgLocation}") 같은 식으로 서비스 클래스에서 주입받아 사용한다.uploadPath수업 시간에 만들었던 프로젝트를 복습하며 직접 다시 구현해보려 한다.
그에 앞서, 프로젝트의 기본 설정들을 다시 한 번 점검하고 정리해보았다.