MVC2 패턴 구조 잡기
- JDBC 제대로, 예쁘게 사용하기
- View - Java - DB
- Java [ Controller + Service + Dao ]
이론 먼저 체크
- 현재 MEMBER 클래스 – JOIN 메서드를 살펴보면
- 여러 가지 작업들이 한 메서드 안에 있으면서, 코드의 내용 역시 모두 포함하고 있다.
- - 별개의 작업들이 한 메서드 안에 있다.
- - 상관없는 것이 한 메서드 안에 섞여있다.
- - 값을 검사하는 부분 : DB랑 상관있나? - 없다.
## 메서드 안에 코드는 = 그 메서드의 기능과 관련된 코드만 존재하도록 해주자.
## 관련 없는 부분, 자주 사용하는 도구는 메서드를 만들어서 호출해서 사용해주자.
구조 리빌딩
- JOIN 메서드로 실습
입력받고 / 유효성 검사하고 / DB 작업하고 하는 부분을
모두 JOIN메서드에 넣어 놓는 것이 아니라..
- 입력받는 부분 // Controller
- 체크하는 부분 // Service
- DB 연결하는 부분 // Dao로
나눠 서 작업하도록 해 줄 것이다.
- Controller / Service / Dao -
- 3개를 분리해서 JOIN 메서드를 호출하게 해 줄 것이다.
2번 메서드는
- 예외 던질 수도 있고 / 3번 메소드를 호출했다면 – 회원가입 성공 여부를 1번 메서드에게 리턴
3번 메서드는
- DB에 인서트 해주고 / 결과를 가지고 자신을 호출했던 2번 메서드로 돌아간다.
# 이렇게 구조를 짜주는 이유는?
- #나누는 이유는 역할 분담 !
- # 객체 지향 프로그래밍 !
- # 보기 어려운 구조의 코드는 – 유지 보수가 힘들다! + 감당이 안된다!
흐름 파악
Java 부분을 세분화하였다.
- [ 컨트롤러 레이어, 서비스 레이어, dao 레이어 ] 라고 부른다.
정방향 흐름 순서
- controller = ( view에서 정보 받아오는 역할만 )
- service = ( 이번 프로젝트에서, 우리 회사에서 적용할 비즈니스 로직 판단 )
- dao = ( service부분에서 가공 완료된(검사끝난) 데이터를 db에서 받고, 넣고 하는 작업만 하는 공간 )
이제 역순으로 흐름 순서
- dao = ( DB 관련 CRUD - 작업의 결과를 서비스 레이어에게 다시 전달. )
- service = ( Dao레이어로부터 전달받은 결과 값에 따라서 데이터에 대한 판단 및 처리 )
- controller = ( service로부터받은 결과 값에 따라 맞는 화면 처리를 view에 전달해준다.)
# 실습하기
- MVC2 패턴에 맞춰서 CRUD 진행
- MEMBER클래스 – JOIN 메서드에 실습
- 오늘 한 걸 바탕으로 [ 도메인 ( 게시판, 상품, 구매 ) 추가해서 해보기 ]
기본 세팅
1. 기본 구조 세팅
화면도 로그인화면/컨트롤화면 각각 따로 있으면 좋겠지만. 메서드로 대체
2. db 준비하기
3. main . Main 클래스 세팅
- main에서 선택하면 // Memberview로 화면 보여주기
4. 자주 사용하는 [ 도구 // 작업들 ] 메서드 미리 만들어 놓기
4 - 1 util패키지 - JdbcTemplate 클래스에 -
- [ 커넥션 얻어오는 메서드, close작업필요한 애들 close메서드, commit-rollback메서드 생성해 줌 ]
4 - 2 util패키지 - InputUtil 클래스에 -
- [ 스캐너 도구, 숫자 입력받으면 버퍼에 있는 엔터키까지 처리하는 함수, 같은 기능 실수 처리 함수 생성 ]
기본 세팅 끝!
# 실습 시작
1. member . MemberView 구성 - ( 웹 화면으로 생각 )
- view는 화면을 보여주는 역할을 담당한다.
- view는 프론트엔드 화면이라고 생각
- 메인에서 선택하면 화면으로 보여주도록 연결
- 아직 화면 배우기 전이므로 콘솔 창으로 보여주고 선택- 입력받도록 설정
- 화면에서 선택된 데이터는 Controller에게 전달된다.
- view에서 java로 전달한다고 가정하고 해 보는 것이다!
- 콘솔 창이 아닌 마우스 클릭으로 들어왔다는 가정
2. member . MemberController 구성
- Controller 역할
- 정방향 - view에서 정보 받아오는 역할만 수행
- 역방향 - service 레이어에서 받은 결과에 맞는 화면을 view에게 전달만 해준다.
# View에서 화면 보여주고 // 사용자가 마우스 클릭으로 선택하면
- ( 우리는 콘솔 창에서 일단 선택하는 것으로 대체하지만 )
# Controller를 이용하여 선택한 / 입력한 데이터를 받는 작업 하는 공간이 Controller 레이어
- ( Service 레이어로 전달 )
view에서 1번 선택하면 데이터 받는 작업을 controller 가 할 것이다.
controller는 이 작업만 할 것이다.
## 우리는 회원가입 부분만 일단 구현해보기
- controller 레이어에서 필요한 데이터들을 선택 / 입력받고
- 그 데이터들을 판단하기 위해서 service 레이어로 전달!
- service레이어에서 판단이 끝난 값으로 결과에 따라, view로 전달
+++ @ Check
1. 여러 개 인자 값 넘기는 거 좋지 않다. - 객체 만들어서 해주자.
2. 값 덩어리 클래스 생성
3. 이 클래스에 어떤 거를 써야 할까요??
- 입력받은 정보들! - private – get-set / toString / Constructor using Fields
3. member . MemberService 구성
service 레이어 역할
- getConnection conn - 커넥션 얻어오는 레이어
- 이번 프로젝트에서, 우리 회사에서 적용할 비즈니스 로직 판단
- DB의 자료가 불필요한 경우 service레이어에서 판단해서 처리
- DB의 자료가 필요한 경우 - Dao레이어를 이용 결과 값 가지고 온 다음 판단해서 처리 -
- 처리 결과 controller로 전달
회원 가입의 로직 중 -- 총 3개의 작업이 실행될 것인데 그 중
- java 코드로 처리 가능한 1번과 2번 작업만 Service에서 작업!
- db관련 데이터가 필요한 3번 작업은 - Dao레이어로 넘겨서 필요한 결과 값 얻어오기
- 그 결과 값을 바탕으로 데이터 판단은 다시 service 레이어에서 진행!
+++ @ Check -
- 커넥션 접근제한자 private 해준 이유?
- conn = null; 로 직접 값을 변경해버리는 상황 대비 private 로 설정
- + 다른 협업자나, 신입의 실수 방지
- 왜 dao에서 안 하고 service에서 굳이 하나?
- service에서 해야 한다 - 트랜잭션 처리를 위하여
4. member . MemberDao 구성
dao 레이어
- Service 레이어에서 connection과 java 부분 가공 완료된(검사끝난) 데이터를 이용
- DB에 접근해서 데이터를 받아오고, 넣어주고 하는 작업만 하는 공간
- DB의 CRUD 결과를 Service레이어에게 전달
# dao가 하는 일은 DB에 접근해서 데이터 crud 하는 작업이 끝!
# 작업의 실행 결과만 service레이어로 다시 전달 - ( 작업의 유효성 X, 성공여부,실행개수 O )
# 그 이후의 판단은 service 레이어에서 하는 일
이제 역순으로 진행
5. member . MemberService 에서 처리
- dao레이어에서 넘어온 실행 결과를 가지고 로직 판단
- 유효성 검사 / 로직 처리의 결과를 가지고 controller 레이어에게 돌아간다.
# DB 작업은 dao레이어에게 담당
- db 인서트 작업도 - dao레이어에게 맡기고 - insert 잘되었나 성공 여부 값만 받아온다.
- 다시 service레이어에서 - 실행 결과받아온 값에 따라서 로직 처리
6. member . MemberController 처리
- service레이어에서 넘어온 유효성 검사 / 로직 처리의 결과에 따라서
- 처리해주고, 결과에 맞는 화면 보여주도록 전달
- 컨트롤러로 리턴되는 값( 서비스 레이어에서 검사가 끝난 값 )
- 이용해서 화면 처리해주기 ( 우리는 화면이 없어서 출력문으로 )
review
View - Java - DB
흐름을 파악할 수 있는 시간이었다.
java부분을 세분화하여
Controller - Service - Dao 레이어로 나누어서
각각의 레이어에 맞는 일만 하도록 구분해주었다.
실습을 따라 하면서는
이곳저곳 왔다 갔다 하느라 정신이 없었는데
복습을 진행하며 하나하나 진행해보니
어떤 작업을 담당하는 레이어인지 알 수 있었고
자신이 담당하는 작업을 하고 다른 레이어로는
그 작업의 결과만을 전달하고 있음을 파악하였다.
아직 front 쪽을 배우지 않고, 부족한 내용들이 있지만
점점 실무 쪽 코드에 가까워지고 있다는 말씀에
더 이해하고 구조를 잘 짜고 싶어 졌다.
이번 주말과 현충일을 이용하여
로그인 부분과 다른 게시판도
MVC2 패턴으로 구조를 짜는 과제를 내주셨다.
후훗 이제 구조도 생각하는 수준까지 업업됐다!
화이팅!
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 6월' 카테고리의 다른 글
22.06.08 - HTML5 여러가지 태그와 속성들 : [ 영역분할, Media, HyperLink, list, input ] (0) | 2022.06.11 |
---|---|
22. 06. 07 - 브라우저의 역사, HTML 여러가지 태그와 속성 [ 텍스트 태그, 테이블 태그 ] (0) | 2022.06.10 |
22.06.06 - 현충일 - [ MVC2 패턴 연습 ] (0) | 2022.06.09 |
22. 06. 02 - [ 4차 시험! - SQL활용 TEST ], [ DB 모델링 관련 TIP ] (0) | 2022.06.03 |
22.06.01 - 제8회 전국동시지방선거로 - 휴강 (0) | 2022.06.03 |