[새싹 x 코딩온] 웹 풀스택 영등포 5기 24주차 회고 - 2

용가리🐉·2023년 12월 28일
0
post-thumbnail

📌 Dockerfile로 Spring Boot 프로젝트 배포하기

📣 Jar 파일 생성

  • 자바 애플리케이션을 실행하기 위해 하나의 파일로 압축한 파일 형식 → 배포용 소프트웨어 패키지 파일 포맷
  • Spring Boot 프로젝트 배포를 위해서 필요함
  • 확장자: .jar

🟠 bootJar 실행

  • Spring Boot 프로젝트를 빌드하여 jar 파일 생성 → bootJar 명령어 실행
  • Spring Boot 프로젝트에서 사용되는 모든 의존성을 포함해 jar 파일 생성
  • bootJar을 이용하면 프로젝트 쉽게 배포 가능

🟠 IntelliJ에서 bootJar 명령어 실행

  • 우측 네비게이션에서 Gradle 메뉴 → 프로젝트명 → build → bootJar를 차례대로 클릭하여 명령어 실행
  • 터미널에 위 사진과 같이 보여짐
  • bootJar 명령어를 통해 생성된 jar 파일은 build/libs 경로에 위치
    • <프로젝트 이름>-<버전>-SNAPSHOT.jar 형태로 파일이 생성됨

📣 Dockfile 작성

  • 프로젝트 루트 디렉토리Dockerfile 생성
FROM openjdk:17
ARG JAR_FILE=build/libs/\*-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM 명령어 : 자바 실행 이미지 지정
  • ARG 명령어 : JAR_FILE 환경 변수 정의
  • COPY 명령어 : JAR_FILE에 지정된 파일을 컨테이너로 복사
  • ENTRYPOINT 명령어 : 컨테이너가 시작되면 jar 파일 실행

📌 실습 중 발생했던 오류

(보안 상의 이유로 xx로 적어진 부분은 실제 값과 다릅니다)

# MySQL(공용 db)
#spring:
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://xxxxxxx:3306/xxx?characterEncoding=UTF-8
#    username: xxxx
#    password: xxxx

# MySQL(로컬 db)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xxx?characterEncoding=UTF-8
    username: xxxx
    password: xxxx

공용 DB로 boot.jar 파일을 생성하여 image → container 생성 시, exit(1) 에러 코드가 발생하면서 container가 즉시 종료되었다ㅠ

로그를 살펴보니 com.mysql.cj.jdbc.exceptions.communicationsexception: communications link failure 오류 발생,, 이건 JDBC와 MYSQL이 제대로 연결되지 않았다는 뜻..!
6시간을 붙잡고 이 코드 고쳐보고 저 코드 고쳐보고 하다가 실패하고, 다음 날 차분한 마음으로 다시 구글링을 시작했다.

application으로 돌릴 때는 문제 없이 잘 실행되는데, 위와 같이 localhost로 설정하면 container가 경로의 DB를 찾지 못한다는것을 알게되었다..! 그래서 url을 jdbc:mysql://host.docker.internal:3306/xxx?characterEncoding=UTF=8로 바꾸었더니

얏호!...

profile
자아를 찾아 떠나는 중,,,

0개의 댓글

관련 채용 정보