JAVA/JAVA | Spring 학습기록

[Spring] 여러 포트에서 동일 애플리케이션 실행하기(Gradle, Maven)

kth990303 2022. 12. 22. 17:08
반응형

애플리케이션 실행 방법에는 인텔리제이 IDE, 터미널, jar파일 직접 실행과 같이 다양한 방법이 존재한다.

프로세스 여러 개를 띄울 경우, 포트 충돌 이슈를 겪을 수 있기 때문에 random port로 설정해주거나 별도로 포트 세팅을 해줄 수 있다. Spring, IntelliJ 환경에서 어떻게 여러 애플리케이션을 띄울 수 있는지 여러 방법들을 기록해보려 한다.

 

환경

Spring Boot 2.x

IntelliJ(인텔리제이)

Gradle 또는 Maven


1. 인텔리제이 edit configurations 에서 application 추가 후 VM options에서 port 변경

위 사진처럼 우측 상단에 보이는 스프링 애플리케이션 실행 부분을 클릭하면 Edit Configurations... 가 보인다.

빨간 박스로 표시한 부분을 클릭하여 실행하려는 애플리케이션 환경을 복사해주자.

복사한 환경의 VM Options에 -Dserver.port={server.port}로 설정할 포트를 겹치지 않게 추가해주자.


2. 터미널에서 애플리케이션 실행

Gradle 환경

터미널에 아래 명령어를 입력해주면 된다.

 ./gradlew bootRun --args='--server.port={server.port}'

잘 실행이 됨을 확인할 수 있다.


 

만약 위 명령어가 길어서 귀찮다면 별도로 build.gradle을 커스텀하여 시스템 변수를 세팅하는 방식으로도 진행이 가능하다.

애플리케이션 실행 시에 시스템 변수(ex. port)를 커스텀할 수 있도록 build.gradle에 아래 설정을 추가해준다. 

 

build.gradle

1
2
3
4
5
bootRun {
    // gradle terminal 실행 시 server port 설정 가능
    systemProperty "server.port", findProperty("server.port")
}
 
cs

terminal

./gradlew bootRun -Pserver.port={server.port}

./gradlew bootRun -Pserver.port=9001	// 예시

-D가 아니고 -P임에 주의하자.

저 명령어를 입력해주고 엔터를 누르면 애플리케이션이 실행된다. 

애플리케이션 종료 방법은 control(^) + C를 눌러주면 된다.


Maven 환경

Maven은 별도로 pom.xml을 수정할 필요 없이 터미널에 아래 명령어를 입력해주면 된다.

mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9001'

3. jar 파일 직접 실행

Gradle 환경

아래 명령어를 입력하여 jar 파일을 생성해주자.

./gradlew clean bootJar

그럼 자동으로 빌드 및 테스트가 진행되면서 위처럼 jar파일이 /build/libs 폴더 내에 생성될 것이다.

java -jar -Dserver.port={server.port} {jar 파일명}

이제 터미널에서 build/libs가 존재하는 폴더에 위 명령어를 입력해주자. jar 파일을 실행하는 명령어이다.

 

위와 같이 Spring Boot가 실행되는 것을 확인할 수 있다.


Maven 환경

Gradle 환경과 실행 방법은 동일하나, jar 파일 위치가 /build/libs 가 아닌, /target 에 존재한다.

이 점만 유의해주면 된다.

 

규모가 크다면 보통 Jenkins, Github Actions 등을 이용한 CD (CI/CD할 때 그 CD이다. 콤팩트 디스크 CD 아님..!) 툴로 자동 배포 및 실행시킬 것이다.


4. spring에서 제공하는 random port 이용

매번 port를 세팅해주는 작업이 번거로울 때 유용한 방법이다.

 

application.yml에서 아래와 같이 설정해주자.

server:
  port: 0 # random port

8080, 9000과 같은 값이 아닌 0으로 설정해주면 스프링에서 랜덤한 포트로 지정해준다.

이 때, edit configurations... 에서 VM options로 port를 커스터마이징했다면 지워주도록 하자.

현재 접속한 인스턴스의 포트가 58328로 랜덤하게 잡혀있는 것을 확인할 수 있다.

이렇게 포트 충돌을 막으면서 여러 애플리케이션을 실행할 수 있다.


 

4번이 개인적으론 좀 신기했다.

근데 유용할지는 잘 모르겠다. 그냥 이런 게 있구나~ 하고 넘어가도 괜찮지 않을까?

반응형