Django로 서버를 개발하다 보면, 로컬 환경과 달리 원격 서버에 SSH로 연결하여 개발하는 경우가 많다. 하지만 SSH 세션의 특성상 일정 시간이 지나면 자동으로 연결이 끊기는 일이 빈번히 발생하는데, 이런 경우 개발 서버가 중단되어 다시 연결하고 서버를 재가동해야 하는 번거로움이 생긴다. 여기서는 SSH 세션을 유지하면서도 Django 개발 서버가 중단되지 않도록 해결한 경험을 공유하고자 한다.
문제점: SSH 세션 자동 종료
원격 서버에 SSH로 연결한 상태에서 작업을 진행할 때, 오랜 시간 작업이 이루어지지 않으면 자동으로 세션이 종료된다. 이는 SSH 설정에서 일정 시간 네트워크 트래픽이 없을 때 연결을 끊는 방식으로 보안상 유용하지만, 개발자 입장에서는 불편할 수밖에 없다.
해결 방법: SSH 설정, tmux, systemd 활용
이 문제를 해결하기 위해 세 가지 방법을 적용했다.
1. SSH 설정 수정
SSH 클라이언트에서 ~/.ssh/config
파일을 설정해 일정 시간마다 keep-alive 패킷을 보내도록 했다. 이렇게 설정하면 SSH 연결이 일정 시간마다 패킷을 보내면서 세션을 유지할 수 있다.
Host *
ServerAliveInterval 60
ServerAliveCountMax 5
여기서 ServerAliveInterval
은 클라이언트가 서버에 패킷을 보내는 간격(초 단위)을, ServerAliveCountMax
는 실패 시도 횟수를 의미한다. 이 설정을 통해 세션 연결이 끊기지 않도록 유지할 수 있다.
2. tmux 또는 screen 활용
SSH 세션이 끊겨도 Django 개발 서버가 중단되지 않도록 tmux
나 screen
같은 터미널 멀티플렉서 프로그램을 사용했다. tmux
를 사용해 Django 서버를 가동하면 SSH 세션이 종료되더라도 서버가 계속 실행된다. 예를 들어, tmux
를 통해 Django 서버를 실행하는 과정은 다음과 같다.
# tmux 세션 생성
tmux new -s django_session
# Django 개발 서버 실행
python manage.py runserver
이렇게 Django 서버를 가동한 후, SSH 세션이 종료되더라도 tmux
세션 내에서 서버가 유지되므로 재연결 시 tmux attach -t django_session
으로 세션에 다시 연결할 수 있다.
3. systemd를 통한 백그라운드 서비스로 설정
세 가지 방법 중 가장 만족스러웠던 방법은 Django 서버를 systemd로 관리하는 서비스로 만드는 것이다. systemd를 사용하면 개발 중인 애플리케이션을 항상 백그라운드에서 실행할 수 있으며, SSH 세션과 상관없이 서버가 안정적으로 유지된다. 또한, 배포 환경과 거의 동일한 상태에서 개발 및 테스트를 진행할 수 있다는 점에서 장점이 크다. systemd를 이용해 Django 애플리케이션을 서비스로 설정하는 방법은 다음과 같다.
먼저, /etc/systemd/system/my_django_app.service
파일을 생성하고 아래와 같은 내용을 입력한다.
[Unit]
Description=My Django Application
After=network.target
[Service]
User=myuser
Group=mygroup
WorkingDirectory=/path/to/my/django/project
ExecStart=/path/to/my/venv/bin/python manage.py runserver 0.0.0.0:8000
Restart=always
[Install]
WantedBy=multi-user.target
이와 같이 설정한 뒤, systemctl start my_django_app
명령으로 서비스를 시작하고 systemctl enable my_django_app
으로 서버 재부팅 시 자동으로 실행되도록 설정할 수 있다. 코드 변경 후에는 systemctl restart my_django_app
으로 서비스를 재시작하여 변경 사항을 반영한다. 무엇보다 한 번 설정해 놓으면 특별한 일이 없는 한 서버를 수동으로 가동할 필요가 없어지는 것이 큰 장점이다.
실제 배포 환경처럼 구축해놓고 테스트하는 느낌을 받을 수 있을 뿐만 아니라, 설정 후에는 지속적으로 서버를 관리할 필요가 없어 효율적이다. 한 번도 이 방식을 시도해본 적이 없다면, 꼭 시도해 보기를 권한다.
마무리
위와 같은 방법을 통해 SSH 세션 종료 문제를 해결하면서 Django 개발 서버를 안정적으로 운영할 수 있었다. 특히 systemd를 통해 백그라운드에서 서비스로 실행함으로써 실제 배포 환경에 가까운 상태에서 개발 및 점검이 가능해져 작업 효율성이 크게 향상되었다. 원격 개발 환경에서 작업 중이라면 유용한 팁이 될 것이다.
댓글이 없습니다.