JUnit5 이란 ?
자바 개발자가 가장 많이 사용하는 테스팅 기반 프레임워크
도서관리 프로그램 만들기 과정 수업.
CRUD 적용 MVC 패턴 JDBC사용
MVC 패턴 구조 동작 순서
※ MVC 패턴의 구성
- MODEL : 프로그램 데이터와,비즈니스 로직을 담당
- domain.dto : 데이터 전송객체 ex)bookDto는 도서 정보를 담는 클래스
- domain.dao : db와의 상호작용을 담당하는 클래스. CRUD 작업을 수행한다.
- domain.service : 비즈니스 로직을 처리하는 계층. dao를 호출하여 데이터를 처리하고, 필요한 비즈니스 규칙을 적용한다.
- VIEW : user에게 정보를 표시, 입력을 받는 ui 계층
- view : UI를 구성하는 패키지
- CONTROLLER : user 입력을 처리하고 모델과 뷰를 연결하는 계층. 사용자의 요청을 받아서 적절한 모델을 호출하고 결과를 뷰에 전달.
- controller : user로부터 입력을 받고 , 이를 처리하기 위해 domain.service를 호출. 처리 결과를 view에 전달한다.
! 추가 패키지 :
- Document : 프로그램의 문서화 또는 문서 처리와 관련된 기능을 담당.
- property : 각종 설정이나 환경 변수를 관리한다
- Test : 단위 테스트와 통합테스트를 포함하는 패키지. 각 계층의 기능이 올바르게 동작하는지 검증.
일단 간단히 정리하면 위 MVC 패턴의 구성이 주된 웹이나 프로그램의 동작 구성이고 밑에는 부가적인 역할의 담당을 따로 나눈 것이다.
이제 보니까 각 분야에서 해야 할 일을 각 역할별로 나누어 놓은 것 같다.
동작 및 순서 흐름
- 사용자 상호작용 (View)
- 사용자가 입력창을 통해 도서 정보를 입력하거나 조회등의 작업을 요청한다.
- view 패키지의 클래스가 사용자 입력을 받는다.
- 요청 처리 (Controller)
- Controller 패키지의 클래스가 사용자 요청을 받아 처리한다.
- ex , 도서 추가 요청이 들어오면 BookController가 여기를 처리함.
- (여기서 BookController가 특정기능을 수행하는 subController이다.)
- 비즈니스 로직 처리( Service)
- 컨트롤러가 domain.service 클래스를 호출하여 비즈니스 로직을 수행한다.
- 오늘 한 수업에서는 BookService 클래스가 도서 추가 로직을 처리한다.
- 그리고 비즈니스 로직을 수행하기 전에 유효성 검사를 실시한다.(예를 들어 insert를 하는데 bookCode가 0이라거나 bookName이 null이라면 false를 반환해서
- 데이터 접근 (DAO)
- BookService가 domain.dao 의 DAO 클래스를 호출해서 DB와 상호작용한다.
- ex , BookDao 클래스가 INSERT 쿼리를 실행하여 도서 정보를 DB에 저장한다.
- 데이터 전송(DTO)
- BookDao는 domain.dto 의 DTO 객체를 사용해서 DB에서 가져온 데이터를 서비스계층에 전달하거나 받은 데이터를 저장한다.
- 결과 및 반환 표시 (Controller & View)
- BookService 가 처리 결과를 컨트롤러에 반환한다.
- 컨트롤러는 이 결과를 view에 전달하여 사용자에게 결과를 표시한다.
- ex, 도서 추가 성공 ! 이런느낌으로 사용자에게 알린다.
- 그리고 DB 테이블에 저장된다.
각 패키지관의 연결 관계
view → CONTROLLER → domain.service → domain.dao → domain.dto → 데이터베이스
이렇게 역할을 세세하게 나누는 이유:
- 의존성을 줄인다. : 독립적으로 동작할 수 있게 해야 하겠지.
- 단위 테스트의 정확성을 높인다. : 테스트 할때 분야별로 정확히 테스트가 가능하겠지.
- 가독성이 좋아진다. : 읽기가 편하겠지 확실히.
- 유지보수성이 좋다 : 나중에 코드 고치기에 편하다는 뜻인듯.
- 협업할 때 원할해진다.
- 디버깅에 좋음.
컨트롤러를 FrontController 와 SubController , BookController , userController로 나눠서 처리한 이유 ?
뭔가 더 세세하게 역할을 나누는것 같기는 한데 어떻게 나뉘는건지 알아보자.
- FrontController 모든 요청을 중앙집중식으로 처리하는 컨트롤러.
- SubController 는 특정 기능에 집중하는 역할.
- subcontroller 를 interface로 한 이유? : 동일한 메서드를 구현하고 FrontController를 일관된 방식으로 Subcontroller를 호출하기 위해.
그러면 컨트롤러를 요약하자면 큰 뿌리로 FrontController , SubController로 나누고
BookController는 특정 기능을 수행하기위해 Subcontroller를 implements해서 사용하는 것 같다.
BookController는 도서 관리자의 기능을 수행하는 클래스.
※엔드포인트 ? : user가 서버에 요청을 보낼 때 그 요청의 목적지를 지정하는 식별자 .
/book 이라는 엔드포인트에 도착한다면 ? subcontroller 기능을 implements 한 bookController 기능을 수행한다 뭐 이런거인듯하다.
get() 메서드 : 특정 키 값에 대응하는 값을 반환하는 메서드
put() 메서드 : 키와 값을 맵에 저장. 존재하면 새값으로 대체.
- DAO: DB에 접근하는 역할 하는 객체
- DTO : 데이터를 전달하기 위한 객체
결론적으러 그래서 오늘한게 뭐냐 ?
도서관리 프로그램이다. 인데 ,
코드들을 보고 이게 어떤 프로그램인지 파악해보자면 도서관리 프로그램인데 user(사용자) 와 /book(관리자)를 따로 구분해서 역할을 나누고 CRUD 즉 뭐 조회 , 수정 , 삭제 , 등록 을 하기위한 그런 시스템을 만드는 구조이다. 근데 그 구조가 MVC 패턴을 기반으로 한 구조인것이다.
그림대로면 웹브라우저에서 도서 등록이라던가 , 조회 등 요청함. -> 컨트롤러에서 요청을 받음
→ 서비스에서 비지니스 로직을 수행(DAO를 이용해서 쿼리문을 받아옴) → DAO 에서 서비스로 호출당할때 필요한 쿼리문을 갖다줌 → 데이터베이스에서 알맞는 쿼리문을 실행하고 결과를 반환.
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 10월 14일 (0) | 2024.10.21 |
---|---|
24년 10월 11일 (0) | 2024.10.21 |
24년 10월 7일 (0) | 2024.10.09 |
24년 10월 4일 (0) | 2024.10.08 |
24년 10월 2일 (0) | 2024.10.08 |