카테고리 없음

[Spring_4기 본캠프] Spring 플러스 - 배포하기 세션 | Day 59

austindynasty 2025. 1. 16. 20:27

1. 배포 방법

[출처] 나의 손 (피그잼)

 

1) ./gradlew build : gradle 과 maven 을 활용해 애플리케이션을 빌드할 수 있다. /build/libs 경로에 빌드파일이 생성된다.

2) 빌드파일 종류 

- SNAPSHOT.jar : 배포용

- SNAPSHOT-plain.jar : 라이브러리용

# 라이브러리로 활용하는 예시
implementation files('SNAPSHOT-plain.jar')

 

3) 빌드 파일 실행 

// 터미널 명령어
java -jar <빌드파일이름>
java -jar build/libs/baisc-0.0.1-SNAPSHOT.jar

 

4) 배포 환경 

[출처] 나의 손 (피그잼)

- 로컬(local) : 개발자 개인 컴퓨터 환경

- 개발(dev) : 팀 내 통합된 코드의 기능을 확인하기 위한 환경

- 스테이지(stage) : 운영 환경과 동일한 인프라, QA 팀에서 테스트를 진행하는 환경

- 운영(prod) : 실제 운영 환경 

 

5) 환경별 설정 파일 - Profiles

[출처] 나의 손 (피그잼)
[출처] 나의 손 (피그잼)

- 공용 설정 파일 : application.yml

# 기본 활성화 프로파일 설정
spring:
  profiles:
    active: local

 

- Local 설정 파일 : application-local.yml

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/데이터베이스명
    username: root
    password: Test1234!
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true

 

- Prod 설정 파일 : application-prod.yml

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/prod_db
    username: root
    password: Test1234!
  jpa:
    hibernate:
      ddl-auto: none # 운영 환경에서는 스키마 변경 금지
    show-sql: false  # 운영 환경에서는 SQL 출력 비활성화
server:
  port: 8000

 

※ 설정 적용 우선순위 : 명령어(환경변수) > application-{환경}.yml > application.yml

 

6) 프로파일을 활용한 배포 방법 (터미널 명령어)

java -jar <파일이름> --spring.profiles.active=local
java -jar build/libs/baisc-0.0.1-SNAPSHOT.jar --spring.profiles.active=local

 

2. 배포 실습 - 트러블 슈팅

< 문제 상황 >

 /.gradlew build 를 한 후 로컬 프로파일을 활용해 배포를 시도했으나 APPLICATION FAILED TO START

< 문제 원인 >

port란?

- TCP나 UDP에서 어플리케이션이 상호구분을 위해 사용하는 번호로, IP 내에서 프로세스 구분을 하기 위해 사용한다.

즉, 프로토콜의 데이터가 통하는 논리적 통로이다. 이 port number는 한 번에 하나의 서버만 이용할 수 있으며 중복될 수 없다.

 

포트 넘버는 중복되면 안된다는 것을 까먹고 프로파일 설정 파일 세 개 모두 서버를 8080이라고 지정해놨다. 인텔리제이 어플리케이션이 실행 중이어서 8080 서버는 이미 내 컴퓨터에선 사용중이었는데, 다른 서버도 8080을 사용하려고 하니 에러가 난 것이었다.

 

< 문제 해결 >

인텔리제이 실행을 중단하고, 서버를 모두 다른 포트로 지정해주니 정상적으로 작동되는 것을 확인할 수 있었다.

 

 

 

 

 

Opinion

실제 서버를 배포하기도 전부터 에러가 나서 굉장히 당황했지만.. 내가 백엔드를 배우고 나서 실제로 내 코드로 만든 무언가가 배포된다는 것이 설레기도 했다. 네트워크 관련으로 습득해야 하는 지식이 너무나도 방대해서 겁이 나지만 늘 처음엔 내가 여기까지 해낼 수 있을 줄 모르고, 겁먹었어도 해냈던 것을 기억하면 이번에도 자신감을 얻을 수 있다!