ㅁ 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는 요청처리 후 응답화면을 결정한다.
- Dao는 JDBC를 통해 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 |