spring_2기[본캠프]/과제

[과제] Spring 플러스 프로젝트 Day 4

minwoo95 2026. 3. 13. 21:38

https://github.com/TheOne-team-1/TheOne-Bottle-Shop

 

GitHub - TheOne-team-1/TheOne-Bottle-Shop: 주류 커머스 플랫폼 백엔드 구현하기

주류 커머스 플랫폼 백엔드 구현하기. Contribute to TheOne-team-1/TheOne-Bottle-Shop development by creating an account on GitHub.

github.com

 

MySQL 연동 및 인증 방식 호환성 문제 해결
1. 문제 상황 (Problem)
현상: Spring Boot 애플리케이션 기동 시 BeanCreationException 발생 및 DB 연결 실패.

에러 로그 핵심 키워드:

Communications link failure (네트워크 연결 거부)

Plugin 'mysql_native_password' is not loaded (인증 플러그인 미로드)

2. 원인 분석 (Root Cause)
분석 결과, 두 가지 복합적인 원인이 발견

환경 변수 설정 오류: .env 파일 내에서 변수를 참조할 때 사용한 # 기호가 주석으로 처리되어 DB 계정 정보가 애플리케이션에 정상적으로 전달되지 않음.

MySQL 8.0+ 인증 방식 변경: MySQL 최신 버전은 보안 강화를 위해 caching_sha2_password를 기본 인증 방식으로 사용하나, 클라이언트 드라이버나 특정 설정에서는 이전 방식인 mysql_native_password를 요구하며 충돌 발생.

3. 해결 과정 (Action)
단계 1: 환경 설정 최적화
.env.dev 파일에서 모호한 변수 참조(주석 기호 사용)를 제거하고, 명확한 값으로 하드코딩하거나 올바른 변수 할당 형식을 사용하여 데이터 무결성을 확보함.

결과: localhost:3306으로의 네트워크 통신 성공.

단계 2: DB 사용자 인증 방식 변경
네트워크 연결 성공 후 발생한 인증 플러그인 에러를 해결하기 위해 MySQL 서버에 직접 접속하여 해당 사용자의 인증 방식을 현재 서버 환경에 맞게 조정함.

해결 쿼리:

SQL
ALTER USER 'theonedev'@'%' IDENTIFIED WITH caching_sha2_password BY '12345678';
FLUSH PRIVILEGES;
결과: Spring Boot의 HikariCP가 커넥션 풀을 정상적으로 생성하며 애플리케이션 기동 완료.

4. 결과 및 배운 점 (Retrospective)
환경 변수 관리의 중요성: .env 파일 작성 시 주석 기호(#)나 공백이 파싱 과정에서 예상치 못한 오류를 만들 수 있음을 인지함.

DB 보안 정책 변화 이해: MySQL 버전 업그레이드에 따른 인증 메커니즘(SHA-2 기반)의 변화를 학습하고, 서버와 클라이언트 간의 핸드셰이크 과정을 깊이 있게 이해하는 계기가 됨.

로깅 기반 트러블슈팅: 에러 로그의 하단(Caused by)부터 추적하여 네트워크 문제와 인증 문제를 단계적으로 분리해 해결하는 체계적 접근법을 실천함.

[한줄 요약]
"Docker 환경에서 MySQL 8.0 연동 시 발생하는 환경 변수 파싱 오류와 인증 플러그인 호환성 문제를 로그 기반의 단계적 추적을 통해 해결하며, 인프라 설정 및 DB 보안 메커니즘에 대한 실무적 이해도를 높였다."