애플리케이션 실행 방법에는 인텔리제이 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번이 개인적으론 좀 신기했다.
근데 유용할지는 잘 모르겠다. 그냥 이런 게 있구나~ 하고 넘어가도 괜찮지 않을까?
'JAVA > JAVA | Spring 학습기록' 카테고리의 다른 글
[Spring Security] MockMvc에서 csrfToken을 이용해 403 Forbidden을 해결해보자 (0) | 2023.01.05 |
---|---|
[221231] 유스콘 2022 웨비나 컨퍼런스 후기 (8) | 2022.12.31 |
[Spring] MapStruct를 이용한 Entity <-> DTO 고찰 (2) (7) | 2022.12.10 |
[Spring] @Configuration vs @Component (2) | 2022.11.24 |
[Spring] REQUIRED, REQUIRES_NEW 옵션과 Try-Catch (4) | 2022.10.25 |