본문 바로가기
SpringBoot Server

서버배포 1단계) FileZilla, 터미널을 이용한 자바 서버 배포 ABC

by ssury94 2025. 1. 13.
 
 

목차 △닫기

지금까지는 로컬호스트에서 API서버를 돌려보았는데요.

이제 완성된 서버를 EC2서버로 배포해보겠습니다.

 

http:// 80번 포트

https:// 443번 보안적용 포트

 

80포트로 서버 배포해보겠습니다.

 

준비작업은 세가지!

  1. 배포서버 .jar파일 빌드 및 전송 (Maven과 FileZilla 이용)
  2. 80포트 사용을 위한 EC2서버 방화벽 열어주기
  3. EC2서버 JDK 환경 구축

 

배포서버 .jar파일 빌드 및 전송

JAR(Java ARchive) 파일이란?

자바 프로젝트의 압축 파일 형식

  • 여러 자바 클래스 파일과 관련 리소스를 하나의 파일로 패키징합니다.
  • JDK에 포함된 jar 명령어로 실행할 수 있습니다.
  • zip 파일 압축 알고리즘을 기반으로 하여 일반 압축 프로그램과 호환됩니다.
  • 독립적인 Java 애플리케이션을 패키징하는 데 적합합니다.
  • JVM(Java Virtual Machine)에서 직접 실행 가능하며, 별도의 웹 컨테이너나 서버가 필요하지 않습니다.

 

 

Maven 프로젝트에서 파일 빌드하기

application 설정

application 파일은 항상 개발용, 배포용, 기본용 3개 준비하기

 

설정은 사용하는 의존성에서 요구하는 사항과 필요성에 맞게 구성

spring:
  profiles:
    active: dev

naver:
  api:
    client-id: 
    client-secret: 
    url: https://openapi.naver.com/v1/search/news.json

 

application-prod.yml - 포트 80 사용

server:
    port: 80

 

로컬에서 테스트 먼저, 정상작동하면 깃허브에 커밋과 푸시!

 

Clean

 

이전 빌드 과정에서 생성된 모든 파일과 디렉토리를 삭제합니다. 주로 target 폴더의 내용을 모두 지웁니다.
기존의 빌드 결과물을 제거하고 새로운 빌드를 수행하여 최신의 안정적인 배포 파일을 생성하기 위함!

 

Package

 

자바 프로젝트를 패키징합니다.

패키지(app.jar)는 target 폴더에 생성됩니다.

 

FileZilla 로 EC2서버에 jar파일 업로드

파일질라 다운로드

https://filezilla-project.org/

 

 

 

EC2와 연결하여 

/home/ec2-user 에 jar파일을 전송합니다.

 

 

80포트 사용을 위한 EC2서버 방화벽 열어주기

AWS- EC2 콘솔 접속

 

보안 클릭

launch-wizard-2 에 추가로 80 포트를 열어주겠습니다.

 

launch-wizard-2 보안그룹 프로필 > 인바운드 규칙 편집

규칙 추가 - HTTP, 80 포트 선택

80포트 준비 완료!

* 22포트- SSH (Secure Shell) 프로토콜에 사용되는 포트

 

EC2서버 JDK 환경 구축하기

저는 Java 개발환경으로 JDK 17을 선택하여 Ec2에서도 17버전으로 설치하겠습니다.

EC2서버는 리눅스환경으로, 설치와 세팅을 위해서는 터미널 접속이 필요합니다.

 

터미널 실행 후 ec2서버로 이동합니다.

ssh -i ~/Documents/ssh키.pem ec2서버 유저네임 @ 퍼블릭 호스트

 

 

리눅스 기본 명령어

명령어 목록
  1. ls: 디렉토리 내용을 나열합니다.
    • ls -l: 자세한 목록을 표시합니다.
  2. cd: 디렉토리를 이동합니다.
    • 예: cd ~(홈 디렉토리로 이동)
  3. pwd: 현재 작업 디렉토리의 경로를 표시합니다.
  4. mkdir: 새 디렉토리를 만듭니다.
  5. rm: 파일이나 디렉토리를 삭제합니다.
    • rm -r: 디렉토리와 그 안의 모든 내용을 삭제합니다.
  6. cp: 파일이나 디렉토리를 복사합니다.
  7. mv: 파일이나 디렉토리를 이동하거나 이름을 바꿉니다.
  8. cat: 파일의 내용을 화면에 보여줍니다.
  9. grep: 파일에서 특정 문자열 패턴을 찾습니다.
  10. chmod: 파일이나 디렉토리의 권한을 수정합니다.
  11. top: 실행 중인 프로세스를 실시간으로 모니터링합니다.
  12. ps: 실행 중인 프로세스 목록을 보여줍니다.
  13. kill: 실행 중인 프로세스를 종료합니다.
  14. df: 디스크 공간 사용량을 확인합니다.
  15. du: 디렉토리의 용량을 확인합니다.
  16. man: 명령어의 사용법을 확인합니다.

슈퍼 유저 권한으로 시스템 업데이트- $ sudo yum update
Amazon Corretto JDK 17 설치- $ sudo yum install java-17amazon-corretto

 

자바가 설치되었는지 확인 $ java -version

 

 

서버 실행하기

$ sudo java -jar -Dspring.profiles.active=prod app.jar - Jar 파일 실행 
application에서는 기본 환경을 dev으로 세팅했지만, 서버를 배포하기위해 prod로 돌아가도록 Dspring.profiles.active=prod으로 명령어를 추가합니다. 

 

 

 

호스트 서버에서도 API 리스폰스가 되는걸 확인했습니다!

 


하지만 이 방법은 터미널을 종료시키면 서버도 함께 종료됩니다.

 

서버를 백그라운드로 실행하기

$ sudo nohup java -jar -Dspring.profiles.active=prod app.jar &

nohup 노 행업 - 내려놓지마라

& 백그라운드에서 돌아라

 

이제부터는 터미널을 종료해도 백그라운드에서 서버가 계속 실행됩니다.

 

 

서버 종료하기

백그라운드에서 돌고있는 서버 프로세스를 찾습니다.

$ ps -ef - 모든 프로세스를 보여달라



프로세스 확인이 어려우면 특정 프로세스만도 찾을 수 있습니다.

 $ ps -ef | grep app.jar

 



명령어로 돌고있는 jar 프로세스를 확인하여 종료시킵니다.

 

$ sudo kill -9 1710753

kill 종료 , -9 강제종료

 

 

 

파일질라를 이용하여 Jar파일을 ec2에 옮기고, 터미널로 실행해보았는데요.

1인 개발이라면 문제 없겠지만, 보통의 개발환경은 다른 개발자들과 협업을 통해 작업이 이루어집니다.

서버에 변경사항이 생겼다고 위 방법처럼 jar파일을 다시 올리게된다면

다른 개발자들은 업데이트를 당장 알 수 없어 문제가 생기게 됩니다.

이를 방지하기위해 Git을 활용하여 서버를 구동하는 법을 다음 포스트에서 다뤄보겠습니다.