한동안 AWS를 사용하지 않고 있다가 이번에 새로 프리티어 계정을 팠는데, 한달 후 11.66 달러, 한화로 17,000원 정도가 결제됐었다. (달러가 많이 비싸지긴 했나보다...)
어찌된 영문이고 하니 public IPv4가 할당되어 있어 요금이 나간 것 같다.
프리티어에서 EC2
는 IPv4를 무료로 사용 가능하기 때문에 남은건 RDS
였다. 로컬 개발 환경에서 IntelliJ
의 DataGrip
으로 DB에 액세스 하기 위해 퍼블릭으로 돌려놨었는데 거기서 요금이 나간 것 같다.
해결 방법은 간단하다. 외부에서 RDS
에 접근하도록 해놔서 요금이 나간거니 퍼블릭 액세스를 막으면 된다.
이제 문제는 기존에 DataGrip
에서 사용하던 연결이 끊어진 것이다. RDS
가 퍼블릭 액세스를 막아두긴 했지만 EC2
와는 연결되어 있으므로 ssh
를 통해 접근할 수 있다.
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.AsyncTaskFrameData: 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 같은 파라미터도 재차 세팅해봤는데 해결되지 않았다. 구글링하거나 지피티에게 물어봐도 마찬가지였고...
그래서 일단 다른 일을 하다가 다음 날에 다시 해봤는데... 잘 됐다. 진짜 아무것도 건들이지 않았는데 갑자기 됐다. 컴퓨터를 껐다 킨 것도 아니고 절전 모드로 했었으니 아마 로컬쪽 설정 문제는 아닌 것 같고. 아마 네트워크 관련 문제이지 않을까 싶은데, 사실 잘 모르겠다. 재현도 안 되고...
일시적인 문제였다면 다행이겠지만 다음에 재발한다면 그 때는 제대로 알아봐야 할 것 같다.