
서버 개발을 하면서 여러 테스트 환경에서 작업을 진행하게 된다. 각 환경(개발, 스테이징, 프로덕션)마다 Redis 서버에 접속해 데이터를 처리하는 작업이 필수적인데 매번 각 환경에 맞는 SSH 포트 포워딩 명령어를 입력하여 Redis 서버에 접속하는 과정이 매우 번거롭다. SSH 설정 파일을 사용하여 각 환경별로 간편하게 Redis에 접속할 수 있도록 자동화하여 해결한 방법을 정리하고자 한다.
로컬 환경에서 각각의 환경에 맞는 포트를 사용하여 원격 Redis 서버에 연결한다. 기본적으로 로컬에서는 6379 포트를 사용하고, 개발, 스테이징, 그리고 프로덕션에서는 각각 6380, 6381, 6382 포트를 사용해 포트 충돌을 방지한다.
로컬 포트: 6380
SSH 명령어:
ssh -f -N -L 6379:블라인드처리:6379 ec2-user@블라인드처리 -i cashdoc-quiz.pem
로컬 포트: 6381
SSH 명령어:
ssh -f -N -L 6380:블라인드처리:6379 ec2-user@블라인드처리 -i cashdoc-quiz.pem
로컬 포트: 6382
SSH 명령어:
ssh -f -N -L 6381:블라인드처리:6379 ec2-user@블라인드처리 -i cashdoc-quiz.pem
이와 같이 각각의 환경에 맞는 포트를 설정하면 포트 충돌 없이 여러 환경에서 Redis 서버에 연결할 수 있다.
매번 SSH 포트 포워딩 명령어를 입력하는 것은 번거롭기 때문에 Mac OS에서는 ~/.ssh/config 파일을 수정하여 SSH 연결을 자동화할 수 있다.
터미널에서 SSH 설정 파일을 열어준다:
nano ~/.ssh/config
아래와 같이 개발, 스테이징, 프로덕션 환경에 맞는 설정을 추가한다:
Host redis-develop
HostName XX
User ec2-user
IdentityFile ~/path/to/cashdoc-quiz.pem
LocalForward 6380 XX:6380
ServerAliveInterval 60
Host redis-staging
HostName XX
User ec2-user
IdentityFile ~/path/to/cashdoc-quiz.pem
LocalForward 6381 블라인드처리:6381
ServerAliveInterval 60
Host redis-production
HostName XX
User ec2-user
IdentityFile ~/path/to/cashdoc-quiz.pem
LocalForward 6382 블라인드처리:6382
ServerAliveInterval 60
매번 긴 SSH 명령어를 입력할 필요 없이 간단하게 환경별로 SSH 연결을 실행할 수 있다.
ssh redis-develop
ssh redis-staging
ssh redis-production
-f 옵션은 SSH 프로세스를 백그라운드에서 실행하도록 한다. 일반적으로 SSH 연결을 하면 사용자가 직접 터미널에서 명령을 실행하는 대화형 세션이 열린다. 그러나 포트 포워딩과 같은 작업을 할 때는 굳이 이 대화형 세션이 필요 없으므로, SSH 세션을 백그라운드로 전환하여 사용자가 다른 작업을 할 수 있게 도와준다.
-N 옵션은 원격 명령 실행을 방지한다. 이 옵션은 SSH 연결을 통해 원격 명령을 실행하지 않고, 포트 포워딩과 같은 네트워크 터널링 작업만 수행할 때 사용된다.
대화형 명령 실행이 불필요한 상황에서, 원격에서 아무 작업도 하지 않고 포트 포워딩만 활성화하도록 해준다.
ssh -fN redis-develop
~/.ssh/config 파일에 있는 redis-develop 설정을 사용하여 원격 서버에 연결한다. 두 옵션을 함께 사용하면 SSH 세션이 백그라운드에서 실행되면서, 원격 서버에 명령을 실행하지 않고도 포트 포워딩과 같은 작업만 수행할 수 있다. 포트 포워딩을 통해 데이터를 주고받는 것이 목적이기 때문에 원격 명령 실행은 불필요하기 때문이다.