LeeGitaek / Spring_Java_Board

Web Board Development Using Spring,Java
MIT License
1 stars 0 forks source link

Service DAO VO (DTO) / 도메인 주도 설계 #2

Open LeeGitaek opened 4 years ago

LeeGitaek commented 4 years ago

SDV 패턴 / 도메인 주도 설계 파악 이슈

LeeGitaek commented 4 years ago

Spring Framework의 MVC에서 Model은 Service, DAO, DTO로 나눌 수 있음.

Data Access Object의 줄임말이다. DB를 사용해 데이터를 조회하거나 조작하는 기능을 담당하는 것들을 DAO라고 부른다. domain logic (비즈니스 로직이나 DB와 관련없는 코드들)을 persistence mechanism과 분리하기 위해 사용한다.

** persistence layer: Database에 data를 CRUD(Create, Read, Update, Drop)하는 계층

HTTP Request를 Web Application이 받게 되면 Thread를 생성하게 되는데 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 일어나므로 DAO를 하나 만들어 DB 전용 객체로만 쓰는 것이다. 이러면 부담이 줄어들게 된다.

LeeGitaek commented 4 years ago

DTO => Data Transfer Object VO => Value Object

LeeGitaek commented 4 years ago
  1. DB 서버 접속을 위해 JDBC 드라이버를 로드한다.
  2. DB 접속 정보와 DriverManager.getConnection() Method를 통해 DB Connection 객체를 얻는다.
  3. Connection 객체로 부터 쿼리를 수행하기 위한 PreparedStatement 객체를 받는다.
  4. executeQuery를 수행하여 그 결과로 ResultSet 객체를 받아서 데이터를 처리한다.
  5. 처리가 완료되면 처리에 사용된 리소스들을 close하여 반환한다.

DBCP? DBCP(Database Connection Pool)은 HTTP 요청에 매번 위의 1-5의 단계를 거치치 않기 위한 방법이다. Connection Pool을 이용하면 다수의 HTTP 요청에 대한 Thread를 효율적으로 처리할 수 있게 된다.

LeeGitaek commented 4 years ago

Connection Pool의 구현체의 역할:

  1. WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool 이라는 공간에 저장해 둔다.
  2. HTTP 요청에 따라 필요할 때 Pool에서 Connection 객체를 가져다 쓰고 반환한다.
  3. 이와 같은 방식으로 HTTP 요청 마다 DB Driver를 로드하고 물리적인 연결에 의한 Connection 객체를 생성하는 비용이 줄어들게 된다.
LeeGitaek commented 4 years ago
스크린샷 2020-07-20 오전 1 13 57

Connection Pool를 효율적으로 관리하기 위한 값들이 존재하는데 이러한 값들은 DBCP 구현체를 제공하는 라이브러리를 통해 설정

스크린샷 2020-07-20 오전 1 14 22
LeeGitaek commented 4 years ago

Pool에 Connection 을 Idle(대기) 상태로 두었다고, 실제 사용하는(Active) 모습인데 DBCP를 관리하기 위한 올바른 설정 값에 대해 살펴 보도록 하자.

스크린샷 2020-07-20 오전 1 15 50