클라우드 서버의 인스턴스를 이용하다보면 ssh로 연결하여 사용을 하게되는데 ssh에 연결하여 명령어를 입력하고 창을 닫게되면 세션이 닫혀서 해당 작업이 종료되게 됩니다. 그렇기 때문에 screen을 활용하여 세션을 종료해도 서버가 계속 실행 유지하면서 작업을 수행할 수 있는 방법에 대해서 알아보겠습니다.
screen 명령어를 왜 사용해야할까?
SSH를 통해 서버에서 애플리케이션(예: React, Spring Boot 등)을 실행하면, SSH 세션이 끊어지는 순간 실행 중이던 프로세스도 함께 종료됩니다. 이를 방지하려면 백그라운드에서 세션을 유지할 수 있는 도구가 필요합니다. 여기서 screen
명령어가 빛을 발합니다. screen
은 가상 터미널을 생성해 세션을 관리하며, SSH 연결이 끊겨도 애플리케이션이 계속 실행되도록 보장합니다.
screen 명령어 사용법
먼저, 서버에 screen이 설치되어 있어야합니다.
screen 설치 (Ubuntu/Debian)
sudo apt install screen
설치가 완료되면 바로 사용할 수 있습니다.
새로운 screen 세션 생성 및 실행하기
아래의 예시로 screen을 사용해 가상 터미널을 만들고, 그 안에서 리액트 애플리케이션을 실행합니다.
screen -S mysession
npm start # React
또는 스프링 애플리케이션을 사용하고 싶다면 아래 명령어를 사용할 수 있습니다.
screen -S mysession
mvn spring-boot:run # Spring Boot
여기서 -S mysession
은 세션에 이름을 붙이는 옵션으로 원하는 이름을 지어서 나중에 쉽게 사용할 수 있습니다.
screen 세션 닫기 및 세션 재접속
애플리케이션을 실행한 상태에서 SSH를 종료하려면 screen 세션을 분리해야합니다.
세션 분리 : Ctrl + A
를 누른후 D
를 누르면 화면에 [detached] 메세지가 표시되면 ssh연결을 안전하게 종료할 수 있습니다.
세션 재접속 : 나중에 다시 접속하려면 screen -r mysession
명령어를 사용하여 연결할 수 있습니다.
현재 실행 중인 screen 세션 확인하기
여러 개의 세션을 관리 중이라면, 현재 실행중인 screen을 다음 명령어를 사용해 확인해 볼 수 있습니다.
screen -ls
출력 예시:
There are screens on:
12345.mysession (Detached)
67890.react (Detached)
2 Sockets in /run/screen/S-user.
이렇게 세션 이름과 상태를 확인할 수 있습니다.
모든 screen 세션 한 번에 삭제
모든 screen 세션을 강제로 종료하고 싶다면 아래 명령어를 사용할 수 있습니다.
pkill screen
이 명령어를 사용하면 세션 내부의 애플리케이션이 정상적으로 종료되지 않을 수 있기 때문에 세션내부에서 exit를 통해 세션을 완전히 종료하거나 중요한 작업중에는 사용을 피하세요.