EC2 인스턴스에 MySQL Server를 설치하고 MySQLWorkbench에 연결
그리고 스프링 프로젝트와 연동해보도록 하겠습니다.
저는 AWS RDS로 연결을 해서 사용하고 있긴합니다만..
RDS MySQL 연결-(1)~(4)
개발자도구 -> Network에서
DB에 따른
Waiting for server response 시간 차이가 있는지 궁금했어요.
로컬환경에 비해서는 응답시간이 더 걸릴때가 간혹 있어서, 혹시 RDS 서버가 속도가 차이나는 원인인지 확인해보고자
EC2 인스턴스 서버로 연결을 해보게 되었습니다.
📌 결론적으로는 유의미한 차이는 없었습니다.
EC2 인스턴스에 MySQL 서버를 설치하는 경우 EC2 인스턴스의 성능에 따라 MySQL 서버의 성능이 달라지기도 하고,
RDS는 Amazon Web Services의 글로벌 네트워크를 사용하여 데이터를 처리해서 EC2 인스턴스에 MySQL 서버를 설치하는 것보다 일반적으로 성능이 더 좋다는 구글링 검색결과가 있긴했는데요..
환경을 똑같이 하고 각각 10회 이상 Waiting for server response 시간을 체크하고 평균을 구해봤는데 정말 간혹 느릴때가 있을때 말고는 모두 로컬환경과 비슷하게 나왔습니다.
📌 EC2 인스턴스 서버로 MySQL을 연결해 사용한다면, EC2에 문제가 생겼을때 데이터베이스에 접근하지 못하는 문제가 큰 단점이 아닐까 싶어요.
사이드 프로젝트를 진행할때는 거의 프리티어로 사용 중일텐데 그러면 서버가 다운될 때가 간혹 있어서.. 가급적이면 분리해서 사용(RDS)해야 좋을 거 같다는 생각도 많이 들었습니다..!
사용중인 인스턴스의 보안그룹으로 가서 인바운드 규칙 편집 클릭해주세요.
유형은 MYSQL/Aurora로 선택해주세요.
IP는 일단 다 열어주도록 했습니다. 자신의 IP로 해주셔도 됩니다.
차례대로 해주시면 됩니다.
서버와 연결된 상태라고 생각하고 진행하도록 하겠습니다.
MySQL 서버 설치
sudo apt install mysql-server
설치 확인
dpkg -l | grep mysql-server
MySQL 서버 실행
sudo systemctl start mysql.service
실행 확인
ps -ef | grep mysql
설정 파일을 실행하기 위해 경로로 이동하겠습니다.
경로이동
cd /etc/mysql/mysql.conf.d
파일 열기
sudo vi mysqld.cnf
bind-address 값을 0.0.0.0 으로 변경
권한 거부 당할 수 있으니 sudo su 입력 후 실행해주세요.
MySQL 실행
sudo su
mysql -u root -p
나오는 화면에서 EC2 서버 만들때 생성한 비밀번호 입력해주세요.
위의 화면이 잘 출력되신다면,
계정 생성 후 권한 부여를 해주도록 하겠습니다.
create user '사용할 아이디'@'%' identified by '사용할 비밀번호';
grant all privileges on . to '사용할 아이디'@'%' with grant option;
flush privileges;
차례로 실행해서 적용을 하겠습니다.
❗️❗️ 마지막으로
sudo service mysql restart
재실행 꼭 하기!! 안하시면 연결 안됩니다.... 무조건 해주세요.
안하면 MySQL Workbench에서 연결할때
Unable to connect to localhost 출력됩니다....
Connection Name : 원하는 이름 설정해주세요!
Connection Method : Standard (TCP/IP)
Hostname : EC2 인스턴스의 퍼블릭 IP
Username, Password : 바로 위의 EC2 MySQL에서 생성한 계정 아이디와 비밀번호 입력
Spring Legacy project 기준입니다!!
Spring boot 아닙니다..
자신의 root-context.xml 파일에서 DB연결 설정을 해주시면 됩니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="url" value="jdbc:log4jdbc:mysql://인스턴스 퍼블릭IP:3306/스키마이름?serverTimezone=UTC" />
<property name="username" value="계정이름"></property>
<property name="password" value="계정비밀번호"></property>
</bean>
url : EC2 인스턴스의 퍼블릭 IP
username과 password : EC2 MySQL에서 생성한 계정 아이디와 비밀번호 입력
다 위에서 설정한 내용이라 그대로 작성해주시면 됩니다!!
Mysql 이름의 클래스하나 만들겠습니다.
public class Mysql {
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch(Exception e) {
e.printStackTrace();
}
}
@Test
public void testConnection() {
try(Connection con =
DriverManager.getConnection(
"jdbc:mysql://퍼블릭IP/스키마이름?serverTimezone=UTC",
"계정이름",
"비밀번호")){
System.out.println(con);
} catch (Exception e) {
fail(e.getMessage());
}
}
}
Run As -> JUnit Test 실행
연결 객체의 고유한 식별자가 출력 되면 연결 성공입니다!