
이 글에서는 Spring Boot 애플리케이션을 Docker 컨테이너로 만들고, Render를 이용해 자동 배포하는 전체 과정을 정리했습니다.
프로젝트 초기 세팅부터 Dockerfile 작성, Render 환경 변수 설정, 그리고 Git 연동을 통한 자동 배포까지 단계별로 다룹니다.
특히, 실제 배포 과정에서 마주쳤던 문제와 해결 방법도 함께 기록하여, 처음 Render 배포를 시도하는 분들이 시행착오를 줄일 수 있도록 구성했습니다.
이번 프로젝트는 Spring Boot 애플리케이션을 Docker로 컨테이너화하고,
Render를 통해 자동 배포하는 것을 목표로 합니다.
먼저 Spring Initializr를 이용해 기본 프로젝트를 생성했습니다.

프로젝트를 생성한 직후, IDE에서 바로 실행해 보고
Spring Boot 로고와 함께 Started Application 로그가 나오면 성공입니다.
이 단계에서 실행이 안 되면 Gradle 설정이나 JDK 경로부터 점검해야 합니다.
이번 예제에서는 개발 단계에서만 H2 Database를 사용합니다.
H2는 가볍고 메모리 모드 지원 덕분에 빠른 테스트에 유리합니다.
runtimeOnly 'com.h2database:h2'
위 위치에 test.mv.db 파일을 생성한 뒤 접속하면 정상적으로 접근됩니다.
H2 콘솔 접속 후 테스트용 테이블을 만들어 확인합니다.
테스트용 데이터베이스를 메모리에만 유지하려면 아래와 같이 설정합니다.
이 경우 애플리케이션이 종료되면 데이터는 사라집니다.
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
username: sa
password:
Spring Boot의 기본 로깅 레벨은 INFO입니다.
전체 로그를 보고 싶다면 application.yml에 다음과 같이 설정합니다.
logging:
level:
root: INFO
MyBatis를 사용해 DB와 연동하기 위한 기본 설정입니다.
mybatis:
mapper-locations: classpath:/mapper/**/*.xml
type-aliases-package: com.ccp.simple.domain
configuration:
map-underscore-to-camel-case: true
아래는 지금까지의 설정을 합친 application.yml 예시입니다.
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
sql:
init:
schema-locations: classpath:schema.sql
data-locations: classpath:data.sql
mode: always
mybatis:
mapper-locations: classpath:/mapper/**/*.xml
type-aliases-package: com.ccp.simple.domain
configuration:
map-underscore-to-camel-case: true
logging:
level:
root: INFO


bbs 테이블은 생성하지 않음@RestController
@RequiredArgsConstructor
@RequestMapping("user")
public class UserController {
private final UserService userService;
@GetMapping()
public List<User> getUsers() {
return userService.getUsers();
}
}

datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
username: sa
password:
datasource:
url: jdbc:h2:file:./data/testdb;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
./gradlew clean build
build/libs/ 폴더 내 yourprojectname-version.jar 생성됨docker --version으로 설치 확인wsl --update 실패 시 해결책 링크build.gradle 위치)에 생성FROM openjdk:17-jdk-slim
WORKDIR /app
COPY build/libs/simple-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
docker build -t simple-app .
docker images

docker run -d -p 8080:8080 --name simple-container simple-app
docker ps

| 방법 | 설명 | 자동화 수준 | 설정 난이도 | 비용 |
|---|---|---|---|---|
| ✅ Render 사용 | GitHub Push 시 Docker 빌드 + 실행 자동화 | ⭐ 완전 자동 | 매우 쉬움 | 무료 플랜 있음 |
| ✅ GitHub Actions + AWS EC2 | GitHub Push → EC2에서 Docker 자동 실행 | ⭐⭐ 유연함 | 약간 어려움 | AWS 비용 발생 |


error: failed to solve: failed to compute cache key: failed to calculate checksum of ref ... no such file or directory
원인: Render가 Dockerfile만 보고 빌드 시도하는데, 빌드된 Jar가 없어 실패
해결법
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY build/libs/simple-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
# Build stage
FROM gradle:8.5-jdk17 AS builder
COPY --chown=gradle:gradle . /home/gradle/project
WORKDIR /home/gradle/project
RUN gradle build --no-daemon
# Run stage
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

