Spring Framework _ 2

ayleen·2022년 1월 12일
1

DB연결



xml파일이 두 개가 있다. 스프링 설정 파일이다.
두 파일 중, root-context.xml파일이 Database를 연결하는 역할을 한다.


HikariCP


히카리는 DB를 연결해주는 API이다.
Spring에서 제공하는 API는 아니다.
히카리는 zero-overhead로 홍보할 정도로 성능이 좋은 API이다.
(*overhead : 유저가 많아질수록 delay가 생기는 현상 => 전체적인 시스템의 성능이 떨어지는 원인이 된다. connection을 맺는 과정은 복잡할 뿐 아니라 컴퓨터의 자원을 많이 소모하는 작업이기 때문에 전체적인 시스템의 성능이 떨어지는 원인이 된다.)


HikariCP는 DBCP기법(Database Connection Pool)을 사용한다.
(*connection pool : 커넥션을 관리하는 재활용 가능한 메모리 공간)

만약 JDBC에서 DB를 연결하려면 1.connection 2. SQL전송 3.close 단계를 계속 반복하게 된다.
사용자의 요청에 따라서 연결을 하고 쿼리문을 보내고 연결을 없앴는데, 요청이 다시 들어오면 close해줬던 것을 다시 연결해야한다.
그래서 Hikari API는 만들어진 connection을 close하지 말고 재활용하는 방식으로 데이터베이스를 연결한다. 이 기법이 DBCP의 핵심 기법이다.
(이 때 connection은 한 개가 아니라 여러 개이다.)
connection은 이미 만들어져 있고, 다시 연결할 필요가 없으니까 성능이 개선되는 것이다.
-> 사용 후 close로 connection을 반납한다.(없애는게 아니라 반납하는 개념)



▲ pom.xml에 HikariCP dependency를 복사해서 다운로드 해준다.


이제 root-content.xml 파일에서 객체를 생성해준다.

보통 자바에서 A class가 있다고 가정하면 A a = new A(); 하고 객체를 생성해주겠지만 xml에서는 로 생성해준다. (같은 의미) ▼

property 안의 value값들을 내가 사용할 값들로 바꿔준다.

DBCP를 만들어주는 역할 : HikariDataSource
connection pool을 만들어내는 역할 : constructor-arg


  1. HikariCP가 드라이버를 통해 mysql과 연결해줌.

    근데 여기서 드라이버를 찾을 수 없음.


    다운로드해서 pom.xml에 붙여넣어주면 끝.

  2. 이제 Spring과 mysql을 연결해 줄 드라이버가 필요하다.

    사용하고 있는 Spring과 동일한 버전으로

  3. connection에서 SQL을 가져와서 DB에 알리는 역할이 필요하다.
    API구현체가 있어야 한다. 구현체를 다운로드 받는다.
    Mapper interface는 Spring에서 지원하고 SqlSessionFactoryBean은 mybatis에서 지원한다.
    두 가지를 연결시키는 브릿지 역할을 하는 API를 다운받자.

    ▲ Spring bridge for MyBatis sql mapping framework.



▲ 필요한 구현체(SqlSessionFactoryBean)가 들어있는 것을 확인할 수 있다.


▲ 구현 클래스 생성해주기

  1. 마지막으로 mybatis를 다운받아준다.


Scan


구현체가 늘어나면 이 너무 많아질 수 있다.
Scan을 사용하면 여러 개의 mapper들을 한 번에 올릴 수 있다.(부모자식관계)

이대로 저장하면 에러가 난다.
-> scan이라는 태그를 사용할 수 없어서
-> xml은 정해진 태그만 사용 가능. 그 태그들은 DTD/XSD에 정의되어 있음. 그 안에 없다는 뜻임.
-> 별도로 namespace를 추가해줘야한다.


▲ mybatis-spring 이라는 이름으로 치환해줌(접두사).


▲ 접두사를 붙여주면 오류가 사라진다.

=> 같은 주소가 들어있어서 충돌이 날 수도 있기 때문에 접두사로 분류해줌.




profile
asdf

3개의 댓글

comment-user-thumbnail
2022년 1월 12일
  1. SqlSessionFactoryBean은 mybatis-spring 안에 존재하는데 mybatis는 왜 또 설치해줍니까?
    mybatis API의 역할은?
  2. 구현체가 무엇인가요?
1개의 답글