aws -> 동아리컴으로 express 서버 옮기기

서주·2023년 11월 30일
post-thumbnail

앱서비스를 위해 aws ELB + ec2 + rds를 사용중인데 얼마전에 프리티어가 끝나 혼자 사용하는데도 월 10달러가 과금돼 정신이 확 들었다.

그러던 도중 학교 컴공 과동아리 서버를 사용할 수 있다는 희소식을 접했다.
rds는 그대로 두고 ec2인스턴스를 과동아리서버에서 돌리기로 했다.
동아리 서버 내 계정이 생성되어 전달받았고, 내가 사용할 포트(3000)를 외부 5032포트에 포트포워딩을 했다.

그리고 서버는 pm2 백그라운드로 정상적으로 실행되었다.
클라이언트가 동아리서버ip:5032로 request - 3000번 포트로 매핑 - 서버에서 response

그러던 중 첫 번째 문제가 발생했다.
서버에서 aws rds의 데이터베이스에 접근할 수 없었다.

현재 상황

  • 내 컴퓨터에서 mysql명령어 쓰면 rds 접속됨
  • ec2인스턴스에서 같은 명령어 써도 rds 접속됨
  • 서버컴에서 같은 명령어 쓰면 접속 안됨 !?!?!?

Can't connect to MySQL server on ~~

서버컴에서 rds에 연결하려고 할 때 이 에러가 났다.
이 오류에 대한 일반적인 해결방법을 다음 세가지이다.

여기 참고함

  1. rds 퍼블릭 엑세스 비활성화
    => rds를 생성할 때부터 퍼블릭엑세스를 활성화했었다.

  2. 보안그룹
    => 인바운드 아웃바운드 둘 다 모든 트래픽, 0.0.0.0으로 설정했었다.

  3. VPC 라우팅 설정
    => 서브넷을 public으로 설정해줘야 한다는데 이미 public인 상태이다.

하지만 이 방법은 통하지 않았다.

이후 데이서베이스를 새로 생성해보기도 하고, 서버에서 다른 도메인으로 ping찍어보기도 하고, 서버의 mysql을 다시 설치해보기도 하고 , ..

좌절하고 있던 도중,
학교 도서관에서 rds에 접속이 안됐던 것이 생각났다.

학교 네트워크에서 mysql 기본포트 3306번을 막아놓지 않았을까 하는 생각에 rds 포트를 3307로 바꾼 결과

해결했다 ~!

서버 작동 테스트하던 도중 서버의 외부 3000 내부 3000포트가 이미 포트포워딩되어있던 걸 발견했다. 내부 3000포트가 겹쳐서 express 포트를 변경하기로 했다.

/bin/www의 포트 번호를 5032로 수정하고 포트포워딩도 외부 5032 내부 5032로 바꿔줬지만 클라이언트측에서 :5032로 연결이 안됐다.

포트를 변경하니까 연결 안됨

  1. express 포트 변경하는 방법을 다시 찾아봤다.
    포트 변경방법에는 문제가 없었다.

  2. express서버를 내 컴에서 돌리고 클라이언트(리액트 네이티브)에서 내 컴 주소:5032로 연결해보았다.
    잘 작동했다.

  3. 아래 링크로 서버 포트포워딩이 잘 됐는지 확인했다.
    포트포워딩 잘 됐는지 확인
    외부 5032 - 내부 3000, express 3000으로 한 상태에서 잘 연결이 된다고 뜨지만 내부 포트를 변경하면 연결이 안된다고 나왔다.

서버의 문제라는 생각이 들었다.

  1. 서버 방화벽 관련 글을 찾았다.
    리눅스 포트/방화벽 확인
    글에 나온대로 iptables -nL을 썼더니 3000번이 포트가 나오고 5032포트는 보이지 않았다.

5032번으로 tcp udp 둘 다 내부->외부, 외부->내부 뚫어줬다

해결했다 ~!

중간에 생략된 부분들이 많은데 기억이 안남

0개의 댓글