스프링

[스프링] Oracle 연동 기본설정

TheChok 2022. 9. 29. 05:19

스프링 레거시 프로젝트로 MVC를 설정한 뒤

프로젝트와 Oracle 데이터베이스를 연동하는 과정에서 에러가 발생했습니다.

사실 학원에서 국비수강할때 연동 한 번 해보고 프로젝트 이후로는 따로 건드려보질 않아서

에러메시지를 보면서 급 멘붕에 빠졌습니다. 하하하... -_-

 

이것저것 해보며 알게 된건 jdbc6, 7은 pom.xml에 추가해서 사용할 수 없다는 점이었는데

블로그를 검색해봐도 대부분 lib 폴더를 만들어서 사용하거나 프로젝트 속성에 들어가서

외부 라이브러리로 지정하는 방식으로 적혀져 있어서

jdbc 파일을 별도로 다운받아야 하는 번거로움이 있었습니다.

검색을 좀 더 해보니 jdbc8은 pom.xml에 추가해서 사용할 수 있다고 하네요. 이걸로 진행하겠습니다.

 

 

오라클을 pom.xml에 추가하기 전에

먼저 새로 만든 프로젝트의 pom.xml에 있는 기본 설정들을 수정합니다.

 

 

자바 11을 기준으로 만들려고 했기 때문에 자바 버전은 11로 수정했습니다.

springframework는 메이븐 레포지토리 사이트에서 조회수가 많은 것을 기준으로 

5.2.22로 수정했습니다.

 

 

 

Project Facets에서 자바 11로 수정해주고 Java Compiler에서도 버전을 11로 수정했습니다.

pom.xml에 있는 컴파일러 플러그인도 메이븐 레포지토리 사이트 다운로드 수를 기준으로 버전을 변경했습니다.

 

 

 

spring-test는 메이븐 레포지토리 사이트에서 검색 후 새로 추가해줬고

junit은 버전만 변경했습니다.

 

 

스프링과 오라클 데이터베이스를 연결하기 위해서는 드라이버가 필요한데

설정 당시에는 ojdbc8 을 추가했습니다.

후에 알게 된 사실인데 ojdbc10 도 있어서 이거를 써도 됐지만

ojdbc10이 JDK10, 11을 지원하고

ojdbc8이 JDK8, 9, 10, 11을 지원하고 있어서 

둘 다 JDK11을 지원하기 때문에 굳이 변경하지 않고 ojdbc8을 그대로 사용했습니다.

 

 

 

 

데이터베이스를 사용하기 위해서는 제법 많은 라이브러리가 필요합니다.

우선 기본적인 ojdbc8은 오라클 서버와 연결하기 위한 라이브러리 입니다.

 

 

 

ojdbc8을 추가한 후에 테스트 클래스를 만듭니다.

try 안에는 연결할 오라클 링크와 db 계정 및 비밀번호를 입력하고 연동 테스트를 해봅니다.

 

그 후엔 mybatis 설정을 할건데

mybatis는 SQL문을 관리하는 방법 중 하나입니다.

JPA나 ORM으로 작성하는 방법도 있다고 하는데 이건 지금 당장은 모르지만 차후 공부 할 예정입니다.

 

아무튼 데이터베이스를 연결해주는 기술이 ibatis라고 있었는데 이게 mybatis로 이름이 바뀝니다.

그리고 이 mybatis와 스프링을 연결해주는 라이브러리가 spring-mybatis입니다.

스프링과 데이터베이스 사이를 spring-mybatis와 mybatis가 이어주는 역할을 하게 되고

spring-jdbc는 오라클에 접속할때마다 Connection을 자동으로 열고 닫아주는 역할을 합니다.

Statement 준비와 닫기, Exception 처리와 반환, Transaction 처리 등도 해줍니다.

Transaction 처리를 위해서 spring-tx도 추가해줍니다.

db 처리에서 커넥션풀 기능을 수행하기 위한 commons-dbcp도 추가해줍니다.

 

결론적으로 mybatis 기능을 이용해서 db 처리를 하기 위해서는

spring-jdbc, spring-tx, spring-mybatis, mybatis, commons-dbcp가 필요합니다.

트랜잭션과 커넥션풀에 필요한 라이브러리는 다른 것을 사용하셔도 됩니다.

버전은 그때그때 다르니 메이븐 레포지토리에서 검색 후 마음에 드는 걸로 추가하시면 됩니다.

저는 다운로드 수를 기준으로 정하였습니다.

 

 

mybatis 기능을 위한 라이브러리를 pom.xml에 추가했다면

연결이 정상적으로 되는지 확인이 필요합니다.

처음 보면 복잡해보이지만 db 연결을 하기 위한 양식입니다.

보면서 익숙해지면 됩니다. 저 양식에서 값만 바꿔서 쓸겁니다.

name이 url, username, password 이 3개의 value만 바꿀겁니다.

 

오라클 11g 기준이라 1521: 뒤에 XE를 썼습니다. 버전마다 다르니 확인이 필요합니다.

username은 계정명, password는 계정 비밀번호를 씁니다.

실습을 하면서 scott 계정을 자주 썼기 때문에 이번에도 scott 계정에서 작업을 할 겁니다.

태그를 보시면 id가 datasource라고 되어 있을 겁니다.

 

작성된 태그 밑에는 id가 sqlSessionFactory인 태그가 있고

프로퍼티 이름이 dataSource인 태그가 위에서 작성된 datasource를 참조(referance)하고 있습니다.

 

밑에 있는 sqlSession 빈도 위에서 작성한 sqlSessionFactory를 참조하고 있습니다.

코드가 길어보이는데 크게 묶어서 A가 작성된 후 B의 값으로 들어가고,

B가 C의 값으로 들어간다고 이해하시면 됩니다.

 

 

추가로 sqlSessionFactory 하위 프로퍼티 중 mapperLocations를 주석 처리했는데

Mapper.xml 파일은 만들지 않은 상태에서 서버를 구동시키면 에러창이 떠서 잠시 막아놓은 겁니다.

dao와 mapper를 연결 할 때 잊지 말고 rootContext.xml에서 주석을 해제합시다.

 

 

그 후에 테스트 클래스를 만들어서 연동이 잘 되는지 확인해봅니다.

아마 잘 될겁니다.

안 된다면 에러 메시지를 확인해봅시다.

 

 

 

프로젝트 작업 전에 servlet 라이브러리도 최신화를 해줄건데

기존에 만들어진 2.5 버전은 삭제하거나 주석 처리를 합시다.

톰캣 같은 was는 멀티스레드 방식으로 작동을 하는데

그 작업 단위를 servletContainer라고 하고 servletContext가 작업을 수행합니다.

여하튼 serlvet 안에는 우리가 알고 있는 http 전송 인터페이스가 들어있습니다.

처음 프로젝트를 만들면 2.5 버전으로 설정되는데 최신 기능이 수행이 안 되는 경우가 있어서

이 역시 메이븐 레포지토리에서 검색 후 맘에 드는 걸로 바꾸시면 됩니다.

@GetMapping, @PostMapping이 임포트 안 되고 빨간 줄이 떠서 당황한 적이 있었습니다.

 

 

 

root-context에서 하단부 Namespace 클릭 후 체크박스를 체크해줍니다.