Developer Note/국비과정 수업내용 정리&저장

24년 10월 10일

DH_PARK 2024. 10. 10. 22:58

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 패턴의 구성이 주된 웹이나 프로그램의 동작 구성이고 밑에는 부가적인 역할의 담당을 따로 나눈 것이다.

이제 보니까 각 분야에서 해야 할 일을 각 역할별로 나누어 놓은 것 같다.

동작 및 순서 흐름

  1. 사용자 상호작용 (View)
    1. 사용자가 입력창을 통해 도서 정보를 입력하거나 조회등의 작업을 요청한다.
    2. view 패키지의 클래스가 사용자 입력을 받는다.
  2. 요청 처리 (Controller)
    1. Controller 패키지의 클래스가 사용자 요청을 받아 처리한다.
    2. ex , 도서 추가 요청이 들어오면 BookController가 여기를 처리함.
    3. (여기서 BookController가 특정기능을 수행하는 subController이다.)
  3. 비즈니스 로직 처리( Service)
    1. 컨트롤러가 domain.service 클래스를 호출하여 비즈니스 로직을 수행한다.
    2. 오늘 한 수업에서는 BookService 클래스가 도서 추가 로직을 처리한다.
    3. 그리고 비즈니스 로직을 수행하기 전에 유효성 검사를 실시한다.(예를 들어 insert를 하는데 bookCode가 0이라거나 bookName이 null이라면 false를 반환해서
  4. 데이터 접근 (DAO)
    1. BookService가 domain.dao 의 DAO 클래스를 호출해서 DB와 상호작용한다.
    2. ex , BookDao 클래스가 INSERT 쿼리를 실행하여 도서 정보를 DB에 저장한다.
  5. 데이터 전송(DTO)
    1. BookDao는 domain.dto 의 DTO 객체를 사용해서 DB에서 가져온 데이터를 서비스계층에 전달하거나 받은 데이터를 저장한다.
  6. 결과 및 반환 표시 (Controller & View)
    1. BookService 가 처리 결과를 컨트롤러에 반환한다.
    2. 컨트롤러는 이 결과를 view에 전달하여 사용자에게 결과를 표시한다.
    3. ex, 도서 추가 성공 ! 이런느낌으로 사용자에게 알린다.
    4. 그리고 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 패턴을 기반으로 한 구조인것이다.

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