
프로젝트명: camp-health-app
의존성
implementation("io.awspring.cloud:spring-cloud-aws-starter-parameter-store:4.1.1")환경변수
application.propertiesspring.application.name=camp-health-app
server.port=8080
management.endpoints.web.exposure.include=health,info
application-prod.properties: ${APP_MESSAGE}는 AWS Parameter Store에서 받아올 것이다.spring.config.import=aws-parameterstore:/camp-health-app/prod/
management.endpoint.health.show-details=never
management.info.env.enabled=true
info.app.message=${APP_MESSAGE}
logging.level.root=INFO
# 프로젝트 디렉토리에서
./gradlew clean bootJar
# 빌드 결과 확인
ls -la build/libs/

8080 포트를 열어둬야 함# EC2에 SSH 접속 후
# dnf는 패키지 관리자
sudo dnf install java-21-amazon-corretto -y
# 설치 확인 (21버전인지)
java -version
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:GetParametersByPath"
],
"Resource": "arn:aws:ssm:ap-northeast-2:*:parameter/camp-health-app/*"
}
]
}
AmazonSSMReadOnlyAccess라는 이름으로 이미 정의되어 있음
AmazonSSMReadOnlyAccess 적용/camp-health-app/prod/APP_MESSAGEHello from Parameter Store
# 기본 형식
scp -i {키페어경로} {로컬파일} ec2-user@{EC2-IP}:~/app.jar

scp (Secure Copy)
SSH를 통해 파일을 복사하는 명령어
# 포그라운드 실행
java -jar ~/app.jar --spring.profiles.active=prod

prod 프로필로 실행된 것을 확인할 수 있음실행 결과
/actuator/health | /actuator/info |
|---|---|
![]() | ![]() |
포그라운드로 실행하면 앱을 실행하는 건 EC2 서버인데, 내 터미널이 끊어지면(SSH 연결이 끊어지면) 앱이 멈춘다.
nohup(No Hang Up)을 사용하면 백그라운드로 앱을 실행할 수 있고, 터미널 닫힘 등으로 전달되는SIGHUP신호를 무시하여 프로세스가 죽지 않도록 보호한다.
# (EC2에서) 백그라운드 실행
nohup java -jar ~/app.jar --spring.profiles.active=prod > ~/app.log 2>&1 &
실행 확인
# 프로세스 확인
ps aux | grep java
# 로그 확인
tail -f ~/app.log
# tail 상태는 Ctrl+C로 종료

그냥 뒤에
&만 붙여도 백그라운드로 실행이 되기는 한다. 다만 이 경우 로그가 남아 지저분하다. 또한,Ctrl+D를 통한 정상 종료에는 프로세스가 유지되지만, 프로세스가 열린 터미널 창 자체를 꺼버릴 경우에는 프로세스가 죽어버리는 것을 확인했다. 따라서,
