본문 바로가기
코딩

2022.03.22_30일차_spring(5)

by 흥뷰자 2022. 3. 24.

30일차 학습내용

db세팅 - spring과 oracle DB연동

 


jdbc연결 드라이버 연동 필요

1) 라이브러리 배치 

라이브러리 관리_ ojdbc 메이븐에서 추가

들어왔나 왼쪽에서 폴더 내부 확인~~~

 

복사해서 붙여서 버전을 자동으로 연동되게 이름 바꿈

 

트랜젝션 관련된거 이미 추가 (처리단위 - 쿼리 하나 또는 여러개가 될수도 있음). 트랜젝션 처리는 서비스단. 

송금이라는 기능 하나에 요청 여러개를 패키지로 담고 있는 역할을 함. 돈이 빠지면 내 계좌 업데이트 되고 상대방도 업데이트가 되어야 함. 쿼리문이 따로 두번 실행되어야 함. 이게 하나의 송금 단위 한 트랜젝션. 트랜젝션이 다 처리되지 않았다면 취소해야하는데 이게 어노테이션으로 되돌리는것(롤백)도 자동으로 처리하는거 . 정상적으로 처리가 완료가 되면서 서비스단에서 트랜젝션이 종료가 되면서 DB에 비로소 Commit이 올라가게 됨 (jdbc쓰니까  자동으로 되어있어서 추가할필요없음)

 

2)

커넥션풀 스프링에 등록해서 사용 - 사용자가 여럿. 하나씩 풀 빌려다 쓰고 반납하고 꺼내다 쓰고 반납 해야. 효율적으로 빨리 돌아갈 수 있음

 

 

 

* HikariCP : 데이터페이스 커넥션풀을 관리해주는 라이브러리

커넥션풀을 관리 안하면 서버 다운됨...커넥션 작업은 복잡한 원리일뿐만 아니라 컴퓨터 자원을 많이 소모. 

정해놓은 풀 만들어놓고 히카리가 풀내에서 있는걸 연결해줌. 히카리가 다른것보다 속도 빠르고 경량

 

 

 

버전은 더 높은거 써도되고... 

 

pom.xml저장 후 뜨는지 눈으로 왼쪽까지 확인해야 함(가끔안됨)

 

 

DB관련된거 세팅정보 설정

커넥션풀이용할 때

 

스프링 웹 전체는 web.xml db관련 등은 다 xml 내부적 빈등록 

서블릿은 각자  - mvc패턴관련된거 = 요청 . 컨트롤러에서 뷰까지 이동하는것들. 

루트가 전체에서 사용할거 = db관련 적용 

 

root-context.xml DB관련 세팅하자~~~ MyBatis쓸거야

그 전에 

패키지 정리

패키지 
1) 3영역의 명명규칙 
    화면에 보이는 Presentation tier = JSP
    고객의 요청에 응답하는 로직 처리하는 부분 Business tier = 모든 처리 컨트롤러 아니고 메서드호출등을 보낼거야여기로 
    데이터를 보관, 사용에 대한 설계 네트워크호출 원격호출 기술도 들어가는 부분 Persistence tier = DB관련, Mybatis DAO를 이용할거야 


우리 스프링 쓸 때-  스프링 MVC기반으로 돌아감 (servlet-context.xml 설정하는 부분=서블릿MVC세팅하는 부분)
Spring-core (root-context.xml 코어 설정하는 부분) 따로 돌아감 <-- spring-mybatis를 이 안에 넣어놓으면됨 . 그럼 이걸 통해 
MyBatis프레임워크-DB접근이 가능


설정 각각 안에 추가 (xml파일)로 추가~~

DB관련 세팅 root-context.xml안에

 

com.xxx.persistence

해당 클래스의 JUnit test case 만들기 (관련 파일은 여기에 추가해보자)

제대로 가져오는지 초기화블럭으로 확인

db는 자바가 아니고 외부접속하는 거라서 항상 예외처리를 해주어야 한다.

fail은 org.junit.Assert(자동임포트되어있음) 안에 있는 메서드.

연결메서드 안에 들어가는 값(문자열:포트번호:S아이디 외부에서 DB로 접속할 수 있는 url경로. DB경로.

사용자 이름

사용자 비밀번호

)

 

 

 

테스트

콘솔창에 아래처럼 오라클드라이버 클래스 정보 뜨면 커넥션은 잘 작동하는 것.

 

 


 

pom.xml 에 디펜던시 추가

 

 

 

 


데이터 보낸거 잘 됏나 로그 찍히는것도 쿼리문 로그로 찍히는 라이브러리도 추가~~

 

쿼리문 실행 잘 됐는지 로그로 확인 안되니까 

물음표 날리고 바인딩도 잘댔고 테이블결과 어떻게 가져오는지 로그로도 확인할 수 있게~~

log4jdbc-log4j2-jdbc4

 

 

로그파일 설정 

로그설정파일 추가

.프로퍼티스 확장자

한글은 유니코드라 안대고  영문 숫자만. 

공백 불가

주석은 #

이 파일은 설정파일중 하나.  로그관련 ~~~~~~~~~

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

띄어쓰기 하면 클래스 로딩 안댐. 공백까지 처리해서 그 파일을 찾아서..

문자열로 내부에서 세팅. 실제 이경로에 있는 클래스를 찾아서 이름에 추가~~~

java.util패키지 내 properties내부 있는거 클래스 만들거로 등록하는거.

커넥션풀 세팅 마이바티스 라이브러리 배치 = root-context.xml에 디비관련 세팅ㅇ

이제 진짜 루트에 세팅~~~~ root-contexst.xml 

HikariConfig타입의 id=hikariConfig 객체생성 (property값을 채워주면서)

DB설정 관련 커넥션 풀 만들기 위한 설정 정보만 세팅하는것. 

hikari 커텍션풀 이용해서 커넥션 할 설정정보를 세팅. 

HikariConfig클래스 안에 있는 변수들의 정보들(property) 값을 던져줌. property 생성자 정보~~

 HikariDataSource타입으로 또 객체생성 클래스 객체 등록(객체생성)  = 데이터 소스 만들기 = 커넥션 맺을 때 사용하는 클래스 등록~~

destory-method 데이터 소스가 커넥션 맺어서 데이터 다 썼으면 destroy-method호출해서 닫아줘라~~

constructor-arg 생성자 매개변수 주는 것. 데이터소스로 커넥션을 맺을 때 필요한 등록정보 빈을 매개변수값으로 추가. id가 hikariConfig인거 (ref=참조형, 위에서 등록한 hikariConfig객체) 생성자를 호출하면서 

 

커넥션 풀 역할 해줄 빈 등록

<property name= : 겟메서드 해주는 것 . 해당 클래스 안에 있는 변수를 가져와 그 안에 ref를 넣어줄거다~~빈이니까 속성 ref로 넣어줌

session == 마이바티스의 세션은 자바에서 커넥션이라는 것과 동일

세션팩토리는 즉 커넥션 풀이 된다. 여기서 커넥션을 얻어다 쓰면 된다

 

만들어서 첨부하고

그걸 다시 첨부하고

실제로 얻어다 써야되는 애들만들기는 담에하고

 

<마이바티스 관련 설정 정보의 패키지>를 스캔해라~~

<마이바티스 관련 설정 정보의 패키지>를 하나 만들어야하는데 생략하고

 

메타들.. 

sql문들을 작성해놓을 파일과 폴더들 만들고 (META-INF)

sql문과 같이 써야하는 매퍼들도 따로 만들고 (인터페이스와 클래스) 

이 인터페이스를 통해서 불려질 sql문을 main/resource >...> .xml에 작성할 것.

main/java 하부의 com.test.mapper 패키지 경로랑 동일하게 

main/resource 에 com>test>mapper > .xml 폴더와 파일들 만들것. (패키지로 바로 만들면 접근이 불가할 때가 있어서 폴더를 따로 만들것)  xml은 마이바티스써용

 

여기까지 데이터소스 잘가져오는지 테스트 

jdbc:log4jdbc:oracle적어주면 DataSourceTests.java에 커넥션이 잘 됨. 로그까지 잘 찍히게 할거면 사이에 써넣어주고 driverClassName도 써주고. 

문제해결 버전문제
구버전에서는 driverClassName 적어줬어야했는데 로그 읽으려면 없어야 가능(jdbc:oracle:thin:드라이버라고 했을 때 프로퍼티가 드라이버클래스 네임을 삭제를 해주는게 낫고)
jdbc:log4jdbc:oracle적어주면 DataSourceTests.java에 커넥션이 잘 됨. 로그까지 잘 찍히게 할거면 사이에 써넣어주고 그러면 driverClassName도 써줄수 있고. 


 

마이바티스야 com.test.mapper 패키지 스캔떠라~~, 읽어들여라~~~ = 마이바티스 연결

마이바티스에도 컴포넌트스캔이 있는데 그걸 하려면 스키마로케이션을 추가해야함 

 

 

이러면 매퍼에 있는 파일들을 마이바티스 스프링에서 스캔해서 DB로 연결됨

mapper : 실행할 sql문들이 저장되어있는 곳.

매퍼를 만들 때 xml파일도 필요하고 interface도 같이 혼용해서 쓸 것. 

어노테이션같은거 안쓰고 xml로만 쓸거라면 이건 안해도 되는거. 이거 안하면 마이바티스 못쓰는거지

대신 설정해주는 xml파일 하나 추가 

root-context.xml 에  세셕팩토리에 설정xml파일 경로명도 써줘야 .. 설정 방법이 약간 달라짐 . (회사마다다름)

기본설정 끝


마이바티쓰 쓰는 방법 여러가지. 

편한 작업을 위해 SQL어떻게 처리할지 별도의 설정을 분리 - 자동으로 처리되도록.

이를 위해 Mybatis의 Mapper를 작성해야 함. : SQL과 그에 대한 처리를 지정 . = 쿼리문을 작성하는 부분

Mybatis-spirng 이용하는 경우 Mapper를 XML, 아니면 인터페이스+어노테이션 형태로 작성 하는 방법이 있다.

방법1. xml 파일만 이용 : 복잡한 쿼리문 필요시. 사용하는 게 좋다. 
방법2. 인터페이스(.java) + java annotaion을 이용하는 것 : 간단한 쿼리문만 작성할 때
(방법3.) 인터페이스(.java) + xml을 섞은 방식(.xml) : 복잡한 쿼리문도, 간단한 쿼리는 어노테이션만도 사용 가능///xml을 사용하니까 복잡한 쿼라도 가능 (우리가 쓸 방식) 인터페이스도 쓰는데 기본적으로는 xml  /// 
혼용해서 쓸 때 패키지 경로가 중요해. 인터페이스 패키지 경로 = 매퍼 내에 인터페이스 패키지 네임스페이스 추가 일치되게 해야 ~~~  

 

 아까 위에 방법2 간단하게 해보자 - 현재시각 가져오는 쿼리문 실행 

 

main/java에 인터페이스(.java) -

main/source에 xml에 쓰는 어노테이션들 

 

 

 

사이트에 관련 설명 참고

xml에 태그로 우측처럼 쓰고 위에 어노테이션 붙임~~
.

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

마이바티스에서 쓰는 타입

 

 


SQL 태그~~~

댓글