[AWS] RDS 퍼블릭 접근 제한 + DataGrip 연결

NCOOKIE·2025년 3월 6일
0

AWS 공짜로 사용하기

목록 보기
13/14
post-thumbnail

개요

한동안 AWS를 사용하지 않고 있다가 이번에 새로 프리티어 계정을 팠는데, 한달 후 11.66 달러, 한화로 17,000원 정도가 결제됐었다. (달러가 많이 비싸지긴 했나보다...)

원인

어찌된 영문이고 하니 public IPv4가 할당되어 있어 요금이 나간 것 같다.

공지 – AWS Public IPv4 주소 요금 변경 및 Public IP Insights 기능 출시

프리티어에서 EC2는 IPv4를 무료로 사용 가능하기 때문에 남은건 RDS였다. 로컬 개발 환경에서 IntelliJDataGrip으로 DB에 액세스 하기 위해 퍼블릭으로 돌려놨었는데 거기서 요금이 나간 것 같다.

해결

해결 방법은 간단하다. 외부에서 RDS에 접근하도록 해놔서 요금이 나간거니 퍼블릭 액세스를 막으면 된다.

이제 문제는 기존에 DataGrip에서 사용하던 연결이 끊어진 것이다. RDS가 퍼블릭 액세스를 막아두긴 했지만 EC2와는 연결되어 있으므로 ssh를 통해 접근할 수 있다.

DataGrip 연결

ssh 터널링을 통해 RDS에 연결하기 위해서 먼저 EC2의 ssh 정보를 등록해야 한다. EC2 인스턴스 생성 시 받았던 pem 파일을 사용한다. Host는 EC2 인스턴스의 호스트 주소 또는 퍼블릭 IP를 사용한다. Test Connection 버튼을 눌렀을 때 Successfully connected!라고 뜨면 잘 연결 된 것이다.

이후 이전처럼 RDS의 연결 정보를 넣고 Test Connection을 해보면...!

잘 된다.

에러 발생 및 해결... 그런데 원인은 모른다?

java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) at com.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:537) at com.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:425) at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1426) at com.mysql.cj.NativeSession.connect(NativeSession.java:133) at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:935) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:805) at com.mysql.cj.jdbc.ConnectionImpl. (ConnectionImpl.java:438) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:189) in JdbcHelperImpl.connect(JdbcHelperImpl.java:790) Suppressed: com.intellij.database.util.AsyncTaskCompanionCompanionFrameData: Async frame data: Submit -> Connecting to database… -> Prepare connection -> Establish database connection -> Get database credentials -> Perform database connection

보통은 여기까지 하면 연결 잘 되는데 나는 Test Connection이 아니라 실제 데이터를 받으려고 하니 이런 에러가 발생했다. EC2, RDS 연결 설정도 다시 확인해봤고, DB connection 개수 제한이나 wait time 같은 파라미터도 재차 세팅해봤는데 해결되지 않았다. 구글링하거나 지피티에게 물어봐도 마찬가지였고...

그래서 일단 다른 일을 하다가 다음 날에 다시 해봤는데... 잘 됐다. 진짜 아무것도 건들이지 않았는데 갑자기 됐다. 컴퓨터를 껐다 킨 것도 아니고 절전 모드로 했었으니 아마 로컬쪽 설정 문제는 아닌 것 같고. 아마 네트워크 관련 문제이지 않을까 싶은데, 사실 잘 모르겠다. 재현도 안 되고...

일시적인 문제였다면 다행이겠지만 다음에 재발한다면 그 때는 제대로 알아봐야 할 것 같다.

참고

profile
일단 해보자

0개의 댓글