마이바티스란?
애플리케이션의 기능이 복잡해지면 해당 기능과 관련된 SQL문의 길이가 보통 몇 십 줄씩이 됩니다.
그런데 길이가 긴 SQL문을 다시 문자열로 만들어 사용한다면 상당히 불편할 뿐만 아니라
SQL문 실행 시 오류도 많이 발생하고 유지보수에도 문제가 많이 발생하게 됩니다.
하지만 마이바티스를 사용하게 되면 복잡한 SQL문이라도 SQL Developer와 같은 도구에서 SQL문을 사용하는 것처럼
표준화된 방법으로 사용할 수 있습니다. 개발자가 작성하기 쉽고 코드 가독성도 좋다는 장점이 있습니다.
마이바티스는 이러한 이점을 가진 데이터베이스 연동 프레임워크입니다.
STS 환경에서 마이바티스 사용하기
저번 글 #0 개발 환경 설정1 에서 메이븐과 STS를 설치했었습니다.
이번에는 STS환경에서 마이바티스를 사용하는 방법에 대해 알아보겠습니다.
우선 오라클은 오픈 소스가 아니므로 드라이버를 직접 다운로드해서 설치해야 합니다.
제가 찍은 위 사진과 같이 WEB-INF에 lib 폴더를 생성한 후,
버전에 맞는 오라클 드라이버를 lib 폴더에 복사해서 넣으면 됩니다.
여기서 중요한 것이 있는데, 자바 버전과 오라클 드라이버의 버전이 호환이 되어야 합니다.
오라클 데이터베이스와 오라클 드라이버와 자바 버전이 호환되어야 작동합니다.
저의 경우 오라클 데이터베이스 19c에 자바는 11버전이기 때문에 ojdbc8.jar를 사용하였습니다.
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
오라클 드라이버는 위 사이트에서 회원가입하고 다운받을 수 있습니다.
이렇게 드라이버를 프로젝트에 설치하였다면
다음엔 pom.xml에 다음과 같은 코드를 작성하면 자동으로 라이브러리를 추가해줍니다.
<!-- 데이터소스 관련 라이브러리를 설정합니다. -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
<!-- 마이바티스 관련 라이브러리를 설정합니다. -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.0</version>
</dependency>
<!-- 로컬에 설치된 오라클 드라이버 라이브러리를 설정합니다. -->
<dependency>
<groupId>jdbc.oracle</groupId>
<artifactId>OracleDriver</artifactId>
<version>19.3.0.0.0</version> <!-- 수정 전 12.1.0.2.0 -->
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/ojdbc8.jar</systemPath>
</dependency>
pom.xml에서 위와 같이 코드를 작성하면 됩니다.
주석에 있는 대로 데이터 소스 관련 라이브러리와 마이바티스 관련 라이브러리를 설정합니다.
마지막으로 오라클 드라이버는 오픈 소스가 아니기 때문에 위 코드처럼 pom.xml에서 경로를 설정해야 합니다.
그런데 코드를 작성했는데 위와 같이 빨간색 줄이 그일 수 있는데, 신경안써도 됩니다.
오라클 작동 잘 되는거 직접 확인했습니다.
그리고 이제 마이바티스 관련 XML 파일을 추가해주면 됩니다.
이후 과정들은 스프링 학습 이전에 회원 관리 기능을 구현했던 파일들을 재사용하고 수정해서
데이터베이스와 연동시켜 잘 동작하는지 확인하는 과정입니다.
각 파일들에 어떤 기능을 하는 소스 코드가 작성되어 있는지만 설명하면서 넘어가겠습니다.
jdbc.properties는 키와 값의 쌍으로 JDBC 연결 정보를 담고 있는 파일입니다.
스프링에서는 마이바티스 관련 클래스들을 설정 파일에서 설정하여 빈들을 자동으로 생성합니다.
action-mybatis.xml에서는 스프링의 sqlSessionFactoryBean 클래스 빈을 생성하며
매퍼 파일인 member.xml과 빈 생성 설정 파일은 modelConfig.xml을 읽어 들입니다.
root-context.xml은 view와 관련되지 않은 객체를 정의합니다.
Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정을 해줍니다.
member.xml은 회원 기능과 관련된 SQL문을 설정합니다.
modelConfig.xml에서는 <typeAlias> 태그를 이용해 매퍼 파일에서
긴 이름의 클래스를 별칭으로 사용할 수 있게 설정합니다.
listMembers.jsp에서는 조회한 회원 정보를 표시해줍니다.
memberForm.jsp에서는 회원 가입창에서 회원 정보를 입력하고 action 속성에서
/member/addMember.do로 요청합니다.
modMember.jsp에서는 수정할 회원 정보를 입력하고
action 값으로 updateMember를 설정하여 서블릿으로 전달합니다.
지금까지의 절차는 마이바티스와 연동해 오라클 데이터베이스에 존재하는 회원 정보 테이블을
가져오는 것입니다. 가져오고자 하는 데이터베이스 테이블은 다음과 같이 생성하면 됩니다.
Oracle SQL Developer에서 우선 회원 테이블을 생성합니다.
그리고 다음처럼 id pwd name email joinDate를 차례로 입력한 회원 정보를 추가합니다.
하지만 ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다. 오류가 발생할 수도 있습니다.
이 오류를 해결하기 위해선 위의 스크린샷처럼 명령 프롬프트를 관리자 권한으로 실행 후,
sqlplus로 접속, 사용자명과 비밀번호를 입력해 로그인하고
alter user 아이디 default tablespace USERS quota unlimited on USERS;
를 입력해주시면 권한을 가지게 되어 회원 정보를 오류없이 추가할 수 있게 됩니다.
혹시 사용자명이나 비밀번호가 맞지 않아 접속이 불가능하다면
사용자명에 sys as sysdba를 입력하고 비밀번호는 입력하지 않고 엔터로 넘기면 로그인이 됩니다.
그리고 alter user 사용자명 identified by 비밀번호; 명령어를 입력해서
비밀번호를 변경하면 됩니다.
회원가입 구현, 데이터베이스와 연동 확인
이렇게 오라클에서 테이블을 생성 및 추가 하였으니 이제 잘 작동하는지 실행해보겠습니다.
잘 작동하는 것을 확인할 수 있습니다.
과연 회원가입 기능도 데이터베이스와 연동해 잘 동작하는지 실험해보겠습니다.
일단 회원 가입창은 아주 정상적으로 뜹니다.
핑크빈을 회원가입 시키겠습니다.
헉...
핑크빈이 박살나버렸습니다..
여기서 당장 떠오르는 것은 memberForm.jsp 파일이였습니다.
하지만 깔끔하게 utf-8처리가 되어있었습니다..
그래서 30분간 열심히 구글링을 해본 결과 원인을 찾았습니다.
스프링에서 한글이 깨질 때 많은 경우 web.xml 소스 코드에 필터를 추가해서 깨짐을 막을 수 있다고 합니다.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml에 이렇게 필터를 적용해주면
이 필터가 POST로 오는 요청에 대해 인코딩을 수행하여 깨짐을 막아준다고 합니다.
GET에 관한 필터도 있던데 저는 POST로 오는 요청이라 그건 생략하겠습니다.
이제 성공적으로 핑크빈이 회원이 되었습니다!
데이터 베이스에도 제대로 핑크빈이 추가되었는지 확인해보겠습니다.
깔끔하게 추가되었습니다.
삭제 역시 잘 적용되는 것을 확인할 수 있습니다.
여기까지 스프링으로 데이터베이스와 연동시켜
간단하게 회원가입을 구현해보고 동작이 잘 되는 것을 확인했습니다.
다음에는 회원가입 기능을 더욱 심화시키고 JWT 이용한 로그인 기능을 구현하겠습니다.
참고자료 : 자바 웹을 다루는 기술
http://www.yes24.com/Product/Goods/68371015
'자바 스프링 > 스프링 게시판 프로젝트' 카테고리의 다른 글
#4 계정(시큐리티 적용)과 게시판 CRUD 구현 (0) | 2022.05.28 |
---|---|
#3 로그인 구현, ajax 이용해 실시간 아이디 중복검사 구현 (0) | 2022.04.12 |
#2 jQuery와 Bootstrap 디자인 구현, ui를 이용한 애니메이션 구현 (0) | 2022.04.08 |
#0 개발 환경 세팅1 (0) | 2022.03.29 |
자바 스프링을 이용한 게시판 + 채팅창 (0) | 2022.03.28 |