Spring Boot 프로젝트를 AWS EC2에 Docker로 배포하면서 겪은 실제 에러들과 해결 과정을 중심으로 정리 해봤습니다.
.jar 빌드http://퍼블릭IP:8080)ssh -i ~/path/to/key.pem ubuntu@퍼블릭IP
# Docker 설치
sudo apt update
sudo apt install -y docker.io
# Docker Compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
.jar 파일 생성./gradlew clean build -x test
빌드 결과물 확인:
build/libs/your-app-name-0.0.1-SNAPSHOT.jar
.jar 전송scp -i ~/path/to/key.pem build/libs/*.jar ubuntu@퍼블릭IP:~/
FROM openjdk:21
COPY board-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
version: "3"
services:
spring:
container_name: spring
build: .
ports:
- "8080:8080"
depends_on:
- mariadb
networks:
- app-network
restart: always
mariadb:
container_name: mariadb
image: mariadb:10.5
ports:
- "3306:3306"
environment:
MARIADB_ROOT_PASSWORD: user
MARIADB_DATABASE: board
MARIADB_USER: user
MARIADB_PASSWORD: user
networks:
- app-network
restart: always
networks:
app-network:
driver: bridge
spring:
datasource:
url: jdbc:mariadb://mariadb:3306/board
username: user
password: user
driver-class-name: org.mariadb.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
server:
port: 8080
# 빌드 및 실행
docker-compose up --build -d
# 로그 확인
docker logs spring
# 컨테이너 확인
docker ps

ssh -i ~/path/to/key.pem ubuntu@퍼블릭IP


저는 localhost로 돌렸을 땐 스프링이 연결이 되고 , 원격 서버로 돌렸을 때는 계속 spring 연결이 실패되는 오류를 겪었습니다.

이 와 같이 java가 아닌 jshell을 인식을 하거나

Dockerfile의 경로를 잘못 설정하여 gradlew이 실패되는 오류도 겪었습니다.
| 에러 메시지 | 원인 | 해결 방법 |
|---|---|---|
Access denied for user 'root'@'172.xx.x.x' | DB 계정 권한 부족 | 컨테이너 내에서 GRANT ALL PRIVILEGES 수행 |
network app-network not found | 네트워크 이름 불일치 | docker network inspect로 확인 후 이름 일치시킴 |
Cannot remove container is running | 기존 컨테이너 종료 안됨 | docker rm -f mariadb spring 강제 제거 |
.jar 파일이 없어요 | 경로 또는 이름 불일치 | Dockerfile과 .jar 위치/이름 다시 확인 |
Unable to determine Dialect | DB 접속 실패 | JDBC URL 또는 자격정보 잘못됨 – 대부분 yml 설정 오타 |
사실 눈치 채셨을 지 모르겠지만 , 저는 결국 배포에 실패했습니다.



그리고 피해자까지 발생했습니다 ... 괴롭혀서 죄송합니다 ...
이렇게 피해자까지 발생시키면서 결국 끝내 배포에 성공하지 못했습니다.
아직 까지 해결하지 못한 원인은
Access denied for user 'root'@'172.19.0.3' (using password: YES)
즉, Spring이 DB에 연결할 때 사용하는 계정 root의 비밀번호가 실제 MariaDB 내부와 맞지 않는다는 것입니다...
제가 docker-compose.yml 과 application.yml에 설정해놨던 비밀번호가 실제 db에선 다르게 저장되어서 계속 비밀번호가 일치하지 않아서 mariaDB에서 spring 접근을 막고 있던 것 이였습니다 ...
어떤 문제가 발생하는 지 알면서도 이걸 고치지 못해서 정말 답답하고 서러웠습니다.
배포가 정말 어렵다고 듣긴 했는데 이렇게 시간과 살을 갉아먹을 줄은 몰랐습니다. 아마 처음에 ppt 파일의 내용들을 아무 생각없이 복사 붙혀넣기 했던게 계속 오류를 발생시키는 것 같습니다 .. 다들 저와 같은 실수를 하지 않으셨으면 좋겠습니다.
저를 가장 괴롭혔던 로그를 복기하며 ... 마치겠습니다
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _ | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.3)
2025-05-12T14:13:14.836Z INFO 1 --- [board] [ main] study.board.BoardApplication : Starting BoardApplication v0.0.1-SNAPSHOT using Java 21 with PID 1 (/app.jar started by root in /)
2025-05-12T14:13:14.847Z INFO 1 --- [board] [ main] study.board.BoardApplication : No active profile set, falling back to 1 default profile: "default"
2025-05-12T14:13:17.660Z INFO 1 --- [board] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-05-12T14:13:17.761Z INFO 1 --- [board] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 87 ms. Found 2 JPA repository interfaces.
2025-05-12T14:13:18.678Z INFO 1 --- [board] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-05-12T14:13:18.701Z INFO 1 --- [board] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-05-12T14:13:18.702Z INFO 1 --- [board] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.36]
2025-05-12T14:13:18.749Z INFO 1 --- [board] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-05-12T14:13:18.751Z INFO 1 --- [board] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3754 ms
2025-05-12T14:13:19.092Z INFO 1 --- [board] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-05-12T14:13:19.164Z INFO 1 --- [board] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.8.Final
2025-05-12T14:13:19.206Z INFO 1 --- [board] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2025-05-12T14:13:19.660Z INFO 1 --- [board] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2025-05-12T14:13:19.712Z INFO 1 --- [board] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-05-12T14:13:19.864Z WARN 1 --- [board] [ main] o.m.jdbc.message.server.ErrorPacket : Error: 1045-28000: Access denied for user 'root'@'172.19.0.3' (using password: YES)
2025-05-12T14:13:20.869Z WARN 1 --- [board] [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1045, SQLState: 28000
2025-05-12T14:13:20.869Z ERROR 1 --- [board] [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : (conn=3) Access denied for user 'root'@'172.19.0.3' (using password: YES)
2025-05-12T14:13:20.871Z WARN 1 --- [board] [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
org.hibernate.exception.GenericJDBCException: unable to obtain isolated JDBC connection [(conn=3) Access denied for user 'root'@'172.19.0.3' (using password: YES)] [n/a]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:63) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:320) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:129) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:81) ~[hibernate-core-6.6.8.Final.jar!/:6.6.8.Final] ```
고생했어요 열심히한 것이 잘 보입니다!