본문 바로가기
클라우드 활용 자바개발자 양성과정/02-2. JDBC

2. JDBC에 MVC 패턴 적용하기

by moca7 2024. 7. 29.

 

 

ㅁ MVC 흐름 (서비스 없는 경우)

 

- 컨트롤러와 Dao 사이에 Service라는 단계를 하나 추가한다.

- Service는 비즈니스 로직을 처리하는 클래스.

근데 아직은 제대로된 비즈니스 로직을 작성할 건 없다. 나중 웹개발 때.

 

 

ㅁ MVC 흐름 (서비스 있는 경우)

 

- service는 com.br.service로 빼기도 하고 com.br.model.service로 빼기도 한다.

 

 

ㅁ Service는 Dao의 역할을 분담한다.

 

  (1) jdbc driver 등록
  (2) Connection 객체 생성
  (3) Statement 객체 생성
  (4), (5) select문을 전달하면서 실행 후 결과(ResultSet) 받기

              or insert, update, delete문을 전달하면서 실행 후 결과(int형) 받기
  (6) 트랜잭션 처리 or ResultSet에 담겨있는 데이터값(컬럼값)들을 뽑아서 vo 객체의 각 필드에 옮겨담기
  (7) 자원 반납( Connection ) ( ResultSet과 Statement )
  (8) 결과 리턴

 

- 파란색은 Service, 빨간색은 Dao

- Dao는 sql문 실행만 집중한다.

 

 

ㅁ 모듈화 (Service에서 JDBCTemplate에 모듈화 한 메소드들을 사용한다)

- Connection 객체 생성 후 리턴하는 메소드 (jdbc driver 등록, Connection 객체 생성)

- commit 메소드 if( conn != null && !conn.isClosed() )

- rollback 메소드 if( conn != null && !conn.isClosed() )

- Connection 객체를 반납(close) 처리하는 메소드        if( conn != null && !conn.isClosed() )

 

- ResultSet 객체를 반납(close) 처리하는 메소드           if( rset != null && !rset.isClosed() )

- PreparedSet 객체를 반납(close) 처리하는 메소드       if( stmt != null && !stmt.isClosed() )

 

 

 

ㅁ MVC패턴으로 클래스마다 역할을 분담해서 코드를 따로따로 작성한다. 

- 실행 클래스 프로그램 실행만 함. (뷰 클래스의 메인 메뉴 실행)

- view사용자가 보는 화면. 입력 & 출력을 담당한다.

- controller요청처리 응답화면을 결정한다.

- DaoJDBC를 통해 sql문 실행을 담당.

 

 

- 실행클래스 -> view -> controller -> service -> dao -> DB

                                  <-                <-              <-        <-

 

 

ㅁ 정리2

- 입력(Scanner)과 출력(print문) 구문은 view에만 있어야 한다.

sql문은 Dao. 전반적인 jdbc는 오로지 Dao에서 한다.

 

- 뷰에서 컨트롤러로, 컨트롤러에서 service로 전달되는 데이터가 있는 경우,

데이터 가공이 필요하면 컨트롤러에서 한다.

(필드 자료형 변환처리, 그 밖의 연산처리 + json 데이터 가공처리 등)

 

- Dao(Data Access Object)는 실제 DB에 select 혹은 insert, update, delete 하고 그 결과를 받는다. (JDBC 과정)

결과를 service를 거쳐 컨트롤러로 보낸다.

- 컨트롤러는 반환 받은 결과에 따라서 조회 결과가 있는지(성공), 없는지(실패)를 판단해서

응답화면(view 메소드)을 결정한다.

- (항상 요청이 있으면 리턴이 있다)

 

 

 

controller에서 MemberView를 전역변수로 선언하지 않는 이유

- controller에서 성공했는지 실패했는지를 판단하고 응답화면을 호출하는데,

매번 MemberView 객체를 생성해서 사용한다. 

- 전역변수로 MemberView 객체를 만들어놓고 쓰지 않는 이유는 프로그램 실행하다가 뻗기 대문이다.

StackOverflowError 발생함. 

- 실행 클래스에서 멤버뷰 생성. 멤버 뷰에서 스캐너와 멤버컨트롤러 생성. 

멤버 컨트롤러에서 멤버뷰도 생성하면, 서로가 서로를 계속 생성해서 무한반복하다가 뻗어버린다.

- MemberDao는 미리 만들어놔도 되는데 매번 생성하는 이유는 JDBC 마지막 쯤에 설명. 이유가 있음.

 

 


ㅁ 조회결과를 담을 그릇인 VO 클래스 만들기.

VO(Value Object)를 DTD(Data Transfer Object)라고도 함.

- 보통 테이블당 하나씩 만든다.

 

- sql developer의 컬럼명을 가져와서 자세한 의미를 가지도록 변경한다.

자료형은 int, String, Date

- 필드는 기본적으로 DB 컬럼명과 유사하게 만든다.

복붙해서 가져와서 낙타표기법으로 바꾼다. 

 

 

- Date 자료형을 쓰려면 Date를 import해야 한다.

이때까지는 java.util.Date를 import했는데,

DB에서 DATE 타입의 값을 담기 위해서는 java.sql.Date를 import 해야 한다.

웬만한건 다 java.sql 패키지에서 import 한다.

 

 

ㅁ view의 mainMenu()의 switch문에서

- 어떤 case는 컨트롤러의 메소드를 호출하고 어떤 case는 이 클래스의 메소드를 호출함.

- 이 클래스에 있는 메소드는 두 종류.

(1) 여기서만 쓰이는 메소드

- inputMemberId, inputMemberName

(2) 사용자에게서 입력받고, 그 입력받은 데이터들로 결국 컨트롤러의 메소드를 호출하는 메소드

- inputMember, modifyMember

- switch의 모든 메소드는 후자다. 사용자의 요청에 맞게 결국 컨트롤러 메소드를 호출함.

(종료나 잘못입력한 경우 제외)

 

 

ㅁ 또 view는 응답화면을 가지고 있다. (출력문 있음) 

- insert, update, delete 후 성공한 경우 사용자가 보게될 응답화면

- insert, update, delete 후 실패한 경우 사용자가 보게될 응답화면

- select 후 조회결과가 없을 경우 사용자가 보게될 응답화면

- select 후 조회결과가 한 행인 경우 사용자가 보게될 응답화면

- select 후 조회결과가 여러 행인 경우 사용자가 보게될 응답화면 ( for 반복문 출력 )

 

 

'클라우드 활용 자바개발자 양성과정 > 02-2. JDBC' 카테고리의 다른 글

7. JDBC MVC패턴 실습문제 & 최종정리  (0) 2024.08.01
5. Properties  (0) 2024.08.01
4. 모듈화 작업 & static import  (0) 2024.07.31
3. PreparedStatement  (0) 2024.07.30
1. JDBC 기본  (0) 2024.07.29