spring boot

ssh로 서버에 접속해서 jar 파일 배포하기

원코드 2022. 11. 15. 18:11

대충 생각나는 대로 적어보자면...

인텔리제이에서 그레이들 빌드 후 jar 파일을 생성했고, 파일질라를 이용해서 배포 서버에 전송했다. 그리고 ssh로 서버에 접속해서 배포를 한거같은데..시키는 대로  하니 되긴 됐는데 뭐가 뭔지 어리둥절하다.

 

1. jar파일이란 뭔가?

JAR (Java Archive)

  • JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
  • Class (JAVA리소스, 속성 파일), 라이브러리 파일을 포함함
  • JRE(JAVA Runtime Environment)만 있어도 실행 가능함 (java -jar 프로젝트네임.jar)

검색해 보니 꼭 jar 파일로만 배포하는게 아니라 war 파일로 배포하는 경우도 있다.

 

2. 그럼 war는 뭔가?

WAR (Web Application Archive)

  • Servlet / Jsp 컨테이너에 배치할 수 있는 웹 애플리케이션(Web Application) 압축파일 포맷
  • 웹 관련 자원을 포함함 (JSP, Servlet, JAR, Class, XML, HTML, Javascript)
  • 사전 정의된 구조를 사용함 (WEB-INF, META-INF)
  • 별도의 웹서버(WEB) or 웹 컨테이너(WAS) 필요
  • 즉, JAR파일의 일종으로 웹 애플리케이션 전체를 패키징 하기 위한 JAR 파일이다.

3. 그럼 jar로 배포하는 것과 war로 배포하는것 중 어느것을 선택해야 하나?

나에게 있어 우선순위는 jar다. 왜냐하면 spring boot를 이용하는 경우 jar를 이용해야하기 때문이다.

jar와 war는 리소스를 패키징하는 방식에 차이가 있을 뿐이라고 한다. 하지만 jsp로 view를 만들거나 외장 was를 이용하는 경우 war 파일을 이용해야한다고 한다. (war 파일이 웹 관련 자원을 포함하니까)

spring boot에서 jar를 권장하는 이유는 아마도 내장 웹서버를 지원하기 때문이지 않을까 싶은데...

 

사족) 왜 스프링 부트는 jar를 권장하나? + 왜 jsp 사용을 권장하지 않는가?

- about JAR

모든 자바 클라우드 플랫폼들은 excutable JAR file을 실행하는 것이 가능하다. 그러므로,  'Spring Initalizer'는 별도의 요구가 없다면 JAR 패키징을 기본으로 만든다.

- about WAR

 

출처: https://www.geeksforgeeks.org/spring-boot-packaging/

 

Spring Boot - Packaging - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

출처: https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations

 

24. Developing web applications

The Spring Web MVC framework (often referred to as simply “Spring MVC”) is a rich “model view controller” web framework. Spring MVC lets you create special @Controller or @RestController beans to handle incoming HTTP requests. Methods in your contr

docs.spring.io

그러니까 자바 클라우드 플렛폼에 맞게 executable JAR 파일을 기본으로 패키징 하는데, 스프링 부트에 내장된 서버들(톰캣, 제티)은 '/WEB-INF./' 디렉토리 밑에서 jsp 파일들을 찾는다. 근데 이 '/WEB-INF./ 디렉토리는 WAR 파일로 패키징 했을때 생성되는 것이라, JAR 패키징이 기본인 Spring boot에서는 JSP를 권장하지 않는것같다. 따라서 exectable JAR 파일로 빌드하는 경우에는 타임리프, 머스티치, 프리마커 등에서 선택할 수 있지만 war 파일로 빌드하는 경우는 jsp로만 페이지를 만들 수 있다.

 

사족 끝

 

 

참고: https://velog.io/@mooh2jj/JAR-vs-WAR-%EB%B0%B0%ED%8F%AC%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

JAR vs WAR 배포의 차이

기본적으로 JAR, WAR 모두 Java의 jar 옵션 (java -jar)을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징 한 것입

velog.io

 

1. jar 파일 만들기

build.gradle 에서 version에 쓰여있는 것이 jar 이름에 들어간다.

우측에 Gradle > build > bootJar 더블클릭하면 jar 파일이 만들어지고,

만들어진 위치는 왼쪽 프로젝트에서 build > libs 폴더에 생성된다.

 

2. 파일질라로 jar 파일 전송

호스트: stf://[hostName]

사용자명: [userName]

 

3. ssh로 배포 서버 접속

> 터미널에 ssh [userName]@[hostName] -p[port] 입력 // 포트가 22일 경우 '-p[port]' 생략 가능

> password 입력

접속 성공했을 때 화면

2. 배포할 폴더로 이동

> cd [폴더 주소]

 

3. 현재 프로세스 확인 

> ps -ef

(필요하다면 프로세스 중지 ps - kill -9 [PID])

 

4. 현재 폴더의 파일 확인

리눅스, 유닉스는 Is, 윈도우는 dir

 

5. jar 파일 실행

> nohup java -jar [jar 파일 이름.jar] &

(nohup은 세션이 끊겨도 프로세스가 계속 진행되도록 하는 명령어, &는 해당 프로그램이 백그라운드에서 실행되도록 하는 명령어)

https://joonyon.tistory.com/entry/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%9C-nohup-%EA%B3%BC-%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95

 

쉽게 설명한 nohup 과 &(백그라운드) 명령어 사용법

안녕하세요. 린아저씨 입니다. 리눅스를 사용하다 보면 프로그램을 백그라운드에서 세션과의 연결이 끊어져도 돌려야할 일이 많이 발생합니다. 그럴때 주로 사용하는 명령어가 바로 nohup 과 &

joonyon.tistory.com

6. 종료

>exit

 

끝!