MySQL를 고른 이유와 설명 CentOS 설치과정 MySQL 설치과정 MySQL 세팅 PuTTY 사용법 MySQL WorkBench 설치와 사용법

PuTTY


 MySQL 설치에 앞서 PuTTY를 설치하겠습니다. 저는 여러분들이 PuTTY에 익숙하기 바라기 때문에 그렇습니다. 지금 가상 머신에 서버가 있는 것처럼 로컬이 아닌 환경에서 서버에 접속할 일이 있을 것입니다. 그런 일을 대비하기 위해 PuTTY에 다뤄봐야한다고 생각합니다. PuTTY를 간단히 설명하자면 원격 터미널 접속 프로그램입니다. 용량도 적고 가볍기 때문에 특별히 설치과정이 없이 바로 실행이 가능합니다. 실행하면 아래와 같은 화면이 뜰 것입니다.

PuTTY

 위 Host Name 빈칸에 접속하고자 하는 서버의 아이피를 입력하여 Open할 것입니다.

CentOSNetSetting1

 서버 화면 우측 위에 보면 시간 옆에 아이콘들이 보입니다. 그걸 클릭하면 위 그림같이 뜹니다. 그 중 네트워크에 해당하는 부분을 클릭하면 상세메뉴가 펼쳐지는데 거기서 네트워크 설정을 열 수 있습니다. 열린 설정에서 유선 네트워크 환경설정 버튼을 눌러봅시다.

CentOSNetSetting2

 그러면 상세 환경 창이 뜨는데 거기서 서버가 할당된 IPv4 주소를 알 수 있습니다. 그럼 이제 PuTTY를 통해 서버에 접속할 수 있습니다.


MySQL의 설치


 접속했다면 우선 yum update를 입력해봅시다. 하지만 안될 것입니다. 관리자로 접속하지 않았기 때문입니다. root로 접속하기 위해서 su - 를 입력해봅시다. 설치과정에서 입력했던 비밀번호를 입력해 로그인 한 후에 방금 전 할려고 했던 것을 다시 하면 됩니다.

 왜 이 명령어를 먼저 입력하냐면 설치된 운영체제에서 사용하는 패키지들을 업데이트하기 위해서입니다. 간단히 생각하면 윈도우 업데이트 같은 것입니다. Complete!란 문장이 출력되면 업데이트가 끝난 것입니다. 그 다음 yum install mysql-server 명령어를 입력해봅시다. No package mysql-server available. Error: Nothing to do라는 에러가 뜰 텐데 yum에서 제공하지 않는 패키지이기에 다른 명령어를 입력해야 합니다. 입력 전에 설치를 위해 참고한 사이트 링크를 달아 두겠습니다.

 우선 rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm를 입력해보겠습니다. 그러면 yum repository에 MySQL 패키지가 추가됩니다. 그 다음 yum install -y mysql-server를 입력해 설치할 수 있습니다. 설치가 완료 되면 systemctl start mysqld를 입력하여 MySQL DB를 실행 시키면 mysql 명령어를 통해 접속할 수 있습니다.



MySQLInstallComplete

 설치가 완료 되었습니다. 하지만 이걸로는 터미널상에 표시되는 밋밋한 화면이 나올 뿐입니다. 그렇기에 DB를 좀 더 관리하기 쉽도록 해주는 도구가 MySQL WorkBench입니다.


MySQL 워크벤치


 MySQL 워크벤치는 DB관리를 위해 그래픽 유저 인터페이스(GUI)를 제공합니다. 다운로드 링크에서 다운받을 수 있습니다. 설치는 설명이 필요 없을 정도로 간단합니다.

MySQLWorkbench1

MySQLWorkbench2

 DB와 연결하기 위해 설정할려고 하면 Hostname은 PuTTY를 다룰 때 알았지만 username부터는 막막할 것입니다. 그렇기에 우리는 DB를 사용하기 위한 계정과 계정에 할당할 스키마를 만들 것입니다. 저는 이 사이트를 참고하여 진행하였습니다. 터미널에서 mysql -u root -p를 입력해 root로 접속해보겠습니다. 이 root의 권한으로 DB 계정을 하나 만들 것입니다.

mysql> create user centos@'%' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on testDB.* to centos@'%' identified by 'password' with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for centos@'%';
+-------------------------------------------------------------------------------------------------------+
| Grants for centos@%                                                                                   |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'centos'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `testDB`.* TO 'centos'@'%' WITH GRANT OPTION                                  |
+-------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)



 위 과정을 통해 외부 접근이 가능한 DB 계정을 만들었으며 이 계정은 testDB 스키마에만 접근 가능합니다. 이제 MySQL 워크벤치에 접속해 봅시다. 아직 되지 않을 것입니다. 왜냐하면 아직 방화벽 설정을 하지 않았기 때문에 방화벽에서 접근을 막는 것입니다.

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]#



 일시적으로 방화벽을 끄고 싶다면 stop, 앞으로 끄고 싶다면 disable을 이용하여 방화벽을 내리면 됩니다. 방화벽을 내리지 않고 허용하는 방법도 있으니 시간이 있다면 찾아서 해보길 바랍니다.

MySQLTestConnectionSuccess

MySQLTestConnectionSuccess2

 접속에 성공한다면 Test Connection시 위 사진와 같이 나올 것입니다. 드디어 MySQL을 사용할 서버 준비를 마쳤습니다. 원래라면 백엔드 서버 구현을 제대로 구현하기 위해 MySQL이 설치된 서버에서 어플을 실행하는 것이 맞지만 빠른 테스트를 위해 로컬에서 어플을 실행하도록 하고 후에 백엔드 서버에서 어플 실행이라는 주제로 포스트를 게시하도록 하겠습니다. 우선 어플에서 MySQL을 사용하기 위한 커넥터를 쓰기 위해 의존성을 추가해보겠습니다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	compileOnly 'org.projectlombok:lombok'
	// runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	
    compile 'mysql:mysql-connector-java'

	implementation 'org.springframework.boot:spring-boot-starter-security'
    compile 'io.jsonwebtoken:jjwt:0.9.0'
	compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}



 H2 DB를 사용하지 않기에 지금은 주석처리하였으나 저들이 후에 지우길 바랍니다. 앞으로 MySQL만 사용할 것입니다.

spring:
    datasource:
        url: jdbc:mysql://192.168.74.128:3306/testDB
        username: centos
        password: password
        initialization-mode: always
    jpa:
        properties:
            hibernate:
                dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        hibernate:
            ddl-auto: update   



 그리고 application.yml에서 설정했던 유저아이디와 패스워드 그리고 URL을 입력합니다.

2019-09-16 10:10:52.335  INFO 13828 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-09-16 10:10:53.709 ERROR 13828 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.



 그러면 연결을 시도하다가 위와 같은 에러로 연결이 되지 않을 것입니다. 검색해서 찾아보면 MySQL 커넥터가 일정 버전 이후로 타임존을 인식하지 못하기에 URL 타임존을 추가해야합니다. 자세한 내용은 링크를 걸어놓겠습니다. URL에 ?serverTimezone=UTC를 덧붙이고 어플을 실행해 보겠습니다. 콘솔상에 하이버네이트 로그가 찍히는 것을 확인한 후 MySQL WorkStation을 새로고침하면 필요로하는 테이블이 모두 생성되어 있을 것입니다.

HibernateCreateTable

 저의 기억으로는 선언된 RoleName이 Role을 구성하는 것으로 알았는데 지금 테스트를 위해 진행하면서 되지 않았습니다. 여러분들 중에 이같은 경우를 격고 있는 경우 Role을 아래와 같이 입력하길 바랍니다.



InsertRole

 그리고 나서 우선 포스트맨을 통해 저번 포스트에서 했던 Signup 요청을 보내면 아래와 같이 성공했다는 메세지를 받을 수 있을 것입니다. 나머지 DB의 테이블도 확인해 보길 바랍니다.

{
    "success": true,
    "message": "Account registered successfully"
}



 다음 포스트에서는 Vue App에서 미쳐 하지 못했던 로그인과 사인업 기능을 구현해볼 것입니다.