안녕하세요, 전날까지 사용하던 MariaDB가 갑자기 아래 처럼 접근 거부 에러를 발생 시켰습니다.

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


제가 말씀 드리는 부분은 오직 '잘 되던 MariaDB' 문제고, 비밀번호를 잊어버리신 분은 다른 포스트를 참고 해주세요! 

 

1. 실행 창 (CTRL + R) 

2. services.msc 검색

3. 3306 포트를 사용 하는 2개 이상의 DB 시작 유형이 '자동'이라면 다른 DB가 3306포트를 우선 사용 할 수 있습니다.

  저는 MariaDB를 사용 하는데 MySQL57이 실행 중일 때 접근 거부 에러가 발생 했습니다.

4. 사용하지 않는 DB 우클릭 -> 시작 유형을 '수동' or '사용하지 않음'으로 해주세요

스프링 프로젝트와 연동을 하기 위해 MariaDB를 설치 하려고 합니다.

아래 링크에서 들어가고, 원하는 버전을 선택해주세요. 저는 Window x86_64버전을 다운 받았습니다.

https://downloads.mariadb.org/mariadb/10.3.15/

 

MariaDB 10.3.15 Stable - MariaDB

 

downloads.mariadb.org

 

 

 

설치가 완료 후 cmd창에서 설치된 MariaDB 디렉토리에 접근합니다. 그리고 'mysql --version'을 입력하시면 됩니다.

 

그러면 설치된 MariaDB 버전을 확인 하실 수 있습니다.

그 다음 'mysql -u root -p' 를 입력 하시면 password를 입력 할 수 있고, 원하시는 비밀번호를 입력하면

해당 비밀번호가 root 계정의 비밀번호로 초기화됩니다.

 

개인 프로젝트를 진행하기 위해서 DB를 구축해야 할 필요성을 느꼈습니다.

어떤 DB를 사용할지 고민을 하다가 개인 프로젝트에는 mariaDB 가 가장 적합하다 생각했습니다.

mariaDB는 Mysql 의 제작자들이 해당 DB를 기반으로 새로운 DBMS를 개발 하였습니다. 

보통 mariaDB를 Mysql의 자매품이라고 부르는데, 그만큼 호환성이 좋고 Mysql 기능들을 mariaDB에서 사용할 수 있습니다. 


설치 작업을 진행 하겠습니다. 아래 url에서 필요하신 버전을 선택 하시고 설치 파일을 다운로드 해주시기 바랍니다.


https://downloads.mariadb.org/






























우선 DB root권한 접근에 사용될 비밀번호를 입력 해주세요.

그리고 저는 개인 프로젝트를 진행할 때 DB서버를 구축해놓고 원격으로 관리를 하려고 합니다. 

그래서 'Enable access from remote machines for 'root' user' 를 체크 하였습니다.

그리고 서버에서도 default Encoding을 UTF-8로 사용할 예정이기 때문에 'Use UTF8 as default server's character set'도 체크 하였습니다.

























설치가 종료된 후 잘 완료 되었는지 확인 하기위해 mariaDB에 직접 접근 해보려고 합니다.

파일 검색에서 'MySQL Client (MariaDB 10.3(x64)) 를 실행 해주세요.









아래처럼 비밀번호 입력 하라는 콘솔을 뜨면, 설치 당시 입력 하셨던 비밀번호를 입력 해주시면 됩니다.







비밀번호를 올바르게 입력하시면 로칼 DB 서버에 접속하게 됩니다.












스프링 프로젝트에 MariaDB 와 Mybatis를 연동 후 테스트 까지 해보겠습니다.

테스트 진행은 Maria DB의 테이블 및 테스트 칼럼이 샘플이 존재해야 합니다.

* 저는 testdb 테이블에 age 란 int형 칼럼이 존재 합니다.


첫 번째로, pom.xml 에 아래 dependency를 복사 및 붙여넣기 하세요.


*Mysql 과 Maria DB의 차이 ↓

http://gabrielyj.tistory.com/119?category=732269


		
		
			org.mariadb.jdbc
			mariadb-java-client
			1.1.7
		

		
		
			org.mybatis
			mybatis
			3.3.1
		

		
		
			org.mybatis
			mybatis-spring
			1.2.4
		

		
		
			org.springframework
			spring-jdbc
			${org.springframework-version}
		



그 다음 WEB-INF폴더 -> spring폴더 -> root-context.xml 파일을 열어준뒤,

Namespace 메뉴를 클릭합니다.

(아래를 참고하고 aop, context, jdbc, mybatis-spring을 추가해주세요)






Namespaces에서 추가가 완료되면,

아래 내용을 root-context.xml 에 추가 해주세요.

url 의 jdbc:mysql:// 이후로는 사용하시는 IP와 포트 번호를 입력 해주시고,

username 과 password 는 각각 ID와 PW를 입력 해주시면 됩니다.

* 로컬 DB를 사용하시는분은 (jdbc:mysql://localhost:8080/DB이름) 을 입력 하시면 됩니다. 

* 혹시 localhost 인데 포트번호가 8080 아니면 해당되는 포트번호를 꼭 입력 하셔야 합니다.



   
   
      
      
      
      
      
   

   
   
  



그 다음 Java Resources 폴더-> src/main/resources 폴더 내부에

mappers 패키지 생성 후 그 안에 testMapper.xml 을 생성하고,

그 외부에 mybatis-config.xml 파일을 추가로 생성합니다.






testMapper.xml (DB 쿼리문을 작성하는 부분입니다.)








	


mybatis-config.xml (이 부분은 테스트 하는 동안 수정할 필요 없습니다.입력만 잘해주세요.)










그 다음 추가로 Java Resources 폴더-> src/main/resources 폴더 내부에

mybatisUtil 이란 패키지를 생성하고,

인터페이스 TService 와 클래스 TServiceImpl를 생성해줍니다.

이 부분은 컨트롤러와 mapper 사이를 연결해주는 부분입니다.


SqlSession을 Inject 해주고,

namespace 에는 *Mapper.xml 내에서 사용하는 이름과 똑같아야 합니다.




인터페이스 TService (in mybatisUtil package)

package mybatisUtil;
public interface TService {
	public int test();
}


클래스 TServiceImpl (in mybatisUtil package)

package mybatisUtil; import javax.inject.Inject; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Service; @Service public class TServiceImpl implements TService { @Inject private SqlSession sqlSession; private static final String namespace = "my.mappers.testMapper"; @Override public int test() { return sqlSession.selectOne(namespace + ".selectTest"); } }




이제 다시 root-context.xml 로 돌아가서 아까 입력 안한 2, 3번째 부분을 완성니다.

주의할 점은, mapperLocations 부분 부터

Mapper, Service, ServiceImpl 이 일치하지 않으면, 404에러 발생합니다.

404에러가 발생하면 꼭 *Mapper.xml 부터 절차적으로 확인 해보세요!




   
   
      
      
      
   

   
   

      
   

   




이렇게 DB연동 작업은 끝났습니다.

마지막으로 controller 에서 실행을 하면 됩니다.


Service 부분을 @Autowired 어노태이션을 입력 하여 TService 를 등록 해주시고,

ModelAndView형 메소드를 만들어 그 안에 test() 메소드를 실행 해줍니다.

*저는 바로 int 형으로 반환을 받고 뿌려주기 위해 int 형으로 선언 하였습니다.

그리고 addObject 메소드를 이용하여 mav 객체에 담아주고,

setViewName 메소드를 이용해 호출되는 페이지명도 담아줍니다.

* test.jsp 를 불러올것이기 때문에 test를 담았습니다.




package controller;

import javax.servlet.ServletException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import mybatisUtil.TService;

@Controller
public class TestController {
	
	@Autowired
	private TService tDAO;
	
	@RequestMapping(value = "/test.do")
	public ModelAndView portList(ModelAndView mav) throws ServletException {
		
		int test = tDAO.test();
		
		mav.addObject("test", test);
		mav.setViewName("test");
		return mav;
	}
}



마지막으로 아래를 참고하여 test.jsp 를 생성해줍니다.

그 다음 EL문을 이용하여 ${test}를 입력 합니다

* 위에서 addObject 할 때 이름을 'test'로 했기 때문에 ${test}


그리고 !!!


http://localhost:8080/프로젝트명/test.do   <- 접속하세요

이 부분이 말끔히 실행되려면, servlet-context.xml 부분의

preffix="/" suffix=".jsp" 입니다.

그래서 위에 setViewName 으로 넘어온 test가 /test.jsp 가 됩니다.


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	${test}






최종 결과 : 저는 DB에 입력된 age 값이 '10' 이였습니다.

 





테이블에 자동 인덱스값을 주기 위해선 AUTO_INCREMENT 사용하면 됩니다.

NOT NULL에 사용 했는데 저는 안 되더라구요... 그래서 저는 PK 를 줬습니다.

혹시 왜 안되는지 아시는분은 꼭 좀 알려주세요!!


id INT PRIMARY KEY AUTO_INCREMENT


04번에 이어 Mybatis 까지 설정하고, 테스트 해보는 부분입니다.

<MariaDB 7가지의 테이블과 필드가 존재한다는 가정하에 진행합니다>


우선 pom.xml 에 부분에 해당 dependency 를 추가 해줍니다.

그러면 자동으로 라이브러리를 추가 해줍니다.

 

                 
		
			org.mybatis
			mybatis
			3.3.1
		

		
		
			org.mybatis
			mybatis-spring
			1.2.4
		

		
		
			org.springframework
			spring-jdbc
			${org.springframework-version}
		

		
			org.springframework
			spring-test
			${org.springframework-version}
		

 

 그리고 Mybatis 의 Dependency 도 추가 해줍니다.



 

   

** 환영합니다 !!! _ MVC_Member Test **

[ memberList ]



	

** memberList [MVC_model2] **

id pw name email phoneNumber joinDate userLevel
${member.id} ${member.pw} ${member.name} ${member.email} ${member.phoneNumber} ${member.joinDate} ${member.userLevel}




MariaDB 는 Mysql 의 제작자들이 해당 DB의 기반으로 새로운 DBMS를 개발 하였습니다.

보통 MariaDB를 Mysql 의 자매품이라고 부르는데, 그만큼 호환성이 좋고 Mysql 에서 사용할 수 있는 많은 내용들을 MariaDB 에서 사용할 수 있습니다.


 그래서 MariaDB를 사용할 때 Mysql의 JDBC를 사용할 수 있는데, 그래도 MariaDB의 JDBC가 

존재하니, 굳이 전자를 사용할 필요 없다고 생각 합니다 ㅎㅎ


필요하신 분은 아래 링크에서 JDBC 를 해주시면 됩니다.


1. MySQL JDBC 다운로드 링크

https://dev.mysql.com/downloads/connector/j/


2. MariaDB JDBC 다운로드 링크

https://downloads.mariadb.org/connector-java/

+ Recent posts