터미널로 AWS EC2에 접속해서 서버 코드를 수정하려면 Nano나 Vim 등을 이용해야 한다. 익숙한 VSCode 환경이 아니기 때문에 오타가 발생할 가능성도 높고, 이 에디터들의 기본 설정은 Linter도 안되기 때문에 불편하다.

VSCode 확장 기능을 이용해 AWS EC2에 원격 접속한 후 VSCode에서 코드를 직접 수정할 수 있다.

VSCode에서 EC2 인스턴스 SSH 연결


  1. VSCode 확장기능 Remote SSH 설치 (링크)

  2. CMD SHIFT P 명령 커맨드 → Remote-SSH: Connect to HostConfigure SSH Hosts → 사용자 수준의 config 파일 클릭(/etc/ssh... 는 전역)

    Untitled

  3. SSH Config 파일 설정

    Host aws-ec2-seoul-private
      HostName *ec2-88-888-88-888.ap-northeast-2.compute.amazonaws.com*
      User ubuntu
      IdentityFile ~/Documents/cert/aws-ec2-seoul-key.pem
    
  4. CMD SHIFT P 명령 커맨드 → Remote-SSH: Connect to Host → 목록에서 Host 선택 후 연결

    Untitled

    좌측 하단 파란색 "원격 창 열기" 버튼을 눌러서 연결할 수도 있다

    좌측 하단 파란색 "원격 창 열기" 버튼을 눌러서 연결할 수도 있다

  5. 좌측 "탐색기" 메뉴 → "폴더 열기" 버튼 클릭 → 원하는 원격 폴더 선택 후 "확인"을 클릭하면 접속 완료

    Untitled

  6. 부가기능을 설치하면 생기는 좌측 메뉴의 "원격 탐색기" 목록에 접속했던 원격 폴더가 자동 추가된다. 다음부턴 목록에 마우스 커서를 올리면 나오는 폴더 버튼을 눌러서 바로 연결할 수 있다.

    Untitled

EC2 인스턴스 메모리 부족 해결


무료 EC2 프리티어는 메모리 1GB 용량을 제공한다(인스턴스 유형 t2.micro). 연습용으론 참 좋지만 VSCode 원격 연결 후 서버 파일을 열면 얼마 후 연결이 끊어지면서 서버가 다운되는 현상을 종종 볼 수 있다. 인스턴스의 메모리가 부족해서 생기는 문제다.

VSCode로 인스턴스에 연결한 후 서버 파일을 열기 전 아래 명령어를 터미널에 입력해본다. free는 시스템의 메모리 상태를 확인할 수 있는 명령어다. -h 옵션은 Gi(기가바이트), Mi(메가바이트) 등 읽기 편한 단위로 나오는 옵션이고 -s는 입력한 숫자(초) 간격 만큼 메모리 상태를 반복해서 출력해주는 옵션이다.

free -h -s 2

이제 서버 파일을 열어보면 메모리가 현저하게 줄어드는걸 실시간으로 확인할 수 있다. 메모리가 0이 되는 순간 서버가 죽는 것이다(이땐 EC2 웹에서 수동으로 재부팅해줘야 다시 살아난다).

가장 좋은 해결 방법은 메모리 증설이지만 별도 비용이 든다. 연습용 인스턴스에 돈을 쓰는게 애매하다면 SWAP 메모리를 지정하는 방법으로 이 문제를 해결할 수 있다. RAM이 부족할 때 HDD 공간을 RAM처럼 사용하는 기능이다. 물론 RAM 보단 느리지만, 서버의 가용성을 유지하고 시스템 과부하를 방지할 수 있다.

스왑 공간 계산

먼저 스왑 공간 크기를 계산해야 한다. 스왑 공간은 최소한 32MB를 넘어야 한다. EC2 프리티어의 기본 RAM이 1GB 이므로 2GB 정도의 스왑 공간이 적당하다.