Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/6월

22. 06. 03 - [ MVC2 패턴 ] - Java 부분 세분화 구조 잡기 - Controller, Service, Dao

giggs 2022. 6. 8. 11:33

 

MVC2 패턴 구조 잡기

  • JDBC 제대로, 예쁘게 사용하기
  • View - Java - DB
  • Java [ Controller + Service + Dao ]

 

 

 


 

 

 

이론 먼저 체크

  • 현재 MEMBER 클래스 – JOIN 메서드를 살펴보면
  • 여러 가지 작업들이 한 메서드 안에 있으면서, 코드의 내용 역시 모두 포함하고 있다.

 

 

 

 

 

  • - 별개의 작업들이 한 메서드 안에 있다. 
  • - 상관없는 것이 한 메서드 안에 섞여있다.
  • - 값을 검사하는 부분 : DB랑 상관있나? - 없다.

 

 

 

## 메서드 안에 코드는 = 그 메서드의 기능과 관련된 코드만 존재하도록 해주자.

## 관련 없는 부분, 자주 사용하는 도구는 메서드를 만들어서 호출해서 사용해주자.

 

 

 

 

 


 

 

 

 

구조 리빌딩

  • JOIN 메서드로 실습

 

 

 

 

 

 

 

 

 

DB 커넥션은 service 레이어에서 진행

 

 

 

 

 

 

입력받고 / 유효성 검사하고 / DB 작업하고 하는 부분을 

모두 JOIN메서드에 넣어 놓는 것이 아니라..

 

  • 입력받는 부분 // Controller
  • 체크하는 부분 // Service
  • DB 연결하는 부분 // Dao로

 

나눠 서 작업하도록 해 줄 것이다.

 

 

 

 

 


 

 

 

 

- Controller / Service / Dao -

- 3개를 분리해서 JOIN 메서드를 호출하게 해 줄 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2번 메서드는

  • 예외 던질 수도 있고 / 3번 메소드를 호출했다면 – 회원가입 성공 여부를 1번 메서드에게 리턴

 

3번 메서드는

  • DB에 인서트 해주고 / 결과를 가지고 자신을 호출했던 2번 메서드로 돌아간다.

 

 

 

 

# 이렇게 구조를 짜주는 이유는?

  • #나누는 이유는 역할 분담 !
  • # 객체 지향 프로그래밍 !
  • #  보기 어려운 구조의 코드는 – 유지 보수가 힘들다! + 감당이 안된다!

 

 

 

 

 


 

 

 

 

흐름 파악

 

 

 

View - Java (controller/service/dao) - DB

 

 

 

 

Java 부분을 세분화하였다.

  • [ 컨트롤러 레이어, 서비스 레이어, dao 레이어 ] 라고 부른다.

 

 

 

정방향 흐름 순서

  1. controller = ( view에서 정보 받아오는 역할만 )
  2. service = ( 이번 프로젝트에서, 우리 회사에서 적용할 비즈니스 로직 판단 )
  3. dao = ( service부분에서 가공 완료된(검사끝난) 데이터를 db에서 받고, 넣고 하는 작업만 하는 공간 )

 

 

 

이제 역순으로 흐름 순서

  1. dao = ( DB 관련 CRUD - 작업의 결과를 서비스 레이어에게 다시 전달. )
  2. service = ( Dao레이어로부터 전달받은 결과 값에 따라서 데이터에 대한 판단 및 처리 )
  3. 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는 프론트엔드 화면이라고 생각
  • 메인에서 선택하면 화면으로 보여주도록 연결 
  • 아직 화면 배우기 전이므로 콘솔 창으로 보여주고 선택- 입력받도록 설정

 

 

 

여력이 된다면 if문으로 로그인 필요/불필요 나누면 되겠죠?

 

 

 

 

  • 화면에서 선택된 데이터는 Controller에게 전달된다.
  • view에서 java로 전달한다고 가정하고 해 보는 것이다!
  • 콘솔 창이 아닌 마우스 클릭으로 들어왔다는 가정

 

 

 

 


 

 

 

 

2. member . MemberController 구성

  • Controller 역할
  • 정방향 - view에서 정보 받아오는 역할만 수행
  • 역방향 - service 레이어에서 받은 결과에 맞는 화면을 view에게 전달만 해준다.

 

 

 

 

# View에서 화면 보여주고 // 사용자가 마우스 클릭으로 선택하면

  • ( 우리는 콘솔 창에서 일단 선택하는 것으로 대체하지만 )

# Controller를 이용하여 선택한 / 입력한 데이터를 받는 작업 하는 공간이 Controller 레이어

  • ( Service 레이어로 전달 )

 

 

 

view에서 1번 선택하면 데이터 받는 작업을 controller 가 할 것이다.

controller는 이 작업만 할 것이다.

 

 

 

 

 

 

 


 

 

 

 

## 우리는 회원가입 부분만 일단 구현해보기

 

 

 

 

 

 

 

 

  1. controller 레이어에서 필요한 데이터들을 선택 / 입력받고 
  2. 그 데이터들을 판단하기 위해서 service 레이어로 전달! 
  3. service레이어에서 판단이 끝난 값으로 결과에 따라, view로 전달

 

 

 

 


 

 

+++ @ Check

 

 

1. 여러 개 인자 값 넘기는 거 좋지 않다. - 객체 만들어서 해주자.


2. 값 덩어리 클래스 생성


3. 이 클래스에 어떤 거를 써야 할까요??

  • 입력받은 정보들! - private – get-set / toString / Constructor using Fields

 

 

 

 

 


 

 

 

 

 

3. member . MemberService 구성

 

 

service 레이어 역할

  1. getConnection conn - 커넥션 얻어오는 레이어
  2. 이번 프로젝트에서, 우리 회사에서 적용할 비즈니스 로직 판단
  3. DB의 자료가 불필요한 경우 service레이어에서 판단해서 처리
  4. DB의 자료가 필요한 경우 - Dao레이어를 이용 결과 값 가지고 온 다음 판단해서 처리 - 
  5. 처리 결과 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 패턴으로 구조를 짜는 과제를 내주셨다.
후훗 이제 구조도 생각하는 수준까지 업업됐다!

화이팅!