7533ymh
117
2021-05-18 21:08:26 작성 2021-05-18 21:09:03 수정됨
4
291

스프링부트 dao , domain , mapper 등 개념 질문입니다.


안녕하세요 현재 스프링부트로 졸업작품을 진행하고 있는 대학생입니다. 

스프링부트로 REST API 구현중에 DTO, MAPPER , DOMAIN 등 궁금한 점이 생겨 질문합니다. 

현재 프로젝트는 mybatis 를 통해 데이터베이스에 접근하고 가져오는 식으로 하고 있습니다. 


현재 저의 프로젝트 폴더입니다. mapper를 통해 데이터베이스에 접속하여 정보를 가져와서 domain에 있는 객체와 매핑하여 service에서 가공하여 값만 바꾸고 controller에 넘겨주는 식입니다.

이런 프로젝트를 본다면 mapper가 DAO  , domain이 DTO로 봐도 되는 건가요? 

그리고 만약 게시판을 예로 든다면 데이터베이스 상의 게시판 정보를 모두 가지고 있는 것이 Entity이자 DTO이고 그중 제목과 작성자 정보만을 전달해주는 것이 VO라고 봐도 되는 건가요? 

계속 찾아보며 공부중이지만 먼가 명확한 느낌이 안와 질문드립니다.

0
  • 답변 4

  • 제타건담
    7k
    2021-05-18 21:20:29 작성 2021-05-18 21:21:00 수정됨

    Entity는 DB 테이블과 1:1로 매핑되는 클래스입니다..

    즉 DB 테이블을 자바 클래스로 만들었다고 보면 되죠..

    그러나 DTO는 Data Transafer Ojbect 라는 말 그대로 데이터 전송을 위해 만들어지는 클래스입니다..

    데이터 전송..이 반드시 DB 테이블과 동일하게 설계되는것은 아닙니다..

    DB 테이블에는 없는 Data을 DTO에서는 다뤄야 할 경우도 있죠..

    상황에 따라서는 여러개의 Entity 클래스의 일부 멤버변수들을 섞어서 설계할 수도 있습니다..

    DTO와 VO는 비슷하기는 하지만 엄밀하게 따지면 다른 부분도 있습니다..

    DTO 라는 것은 계층간의 데이터 전송되는 것을 담아가는 클래스라면..

    VO(Value Object)는 단어 그대로 값을 담는 클래스입니다..

    값..이기 때문에 같은 성격의 VO 객체를 비교하는 함수들도 포함해서 구현해야 할 부분도 있죠..

    이걸 이해시킬려면 이런 비유로 하면 좋을듯 하네요..

    쇼핑몰을 구현했을때 상품과 장바구니..를 생각하면 어떨까 합니다..

    상품은 개개의 상품..즉 값을 의미하지만..

    이것들을 전송할때는 장바구니에 담아서 전송하겠죠..

    상품을 VO, 장바구니를 DTO라고 보시면 이해하시기 쉬울듯 하네요..

  • 7533ymh
    117
    2021-05-18 21:29:24

    제타건

    그렇다면 저의 프로젝트에서는 현재 mapper가 dao 이고 domain이 entity, dto , vo를 모두 혼용하고 있다고 보면 될까요?

  • d487bb
    134
    2021-05-21 17:23:33

    domain을 뭐로 쓰고 있냐에 따라 entity가 될지, dto가 될지, vo가 될지인데, 보통 저런식으로 하나의 퉁치는 객체는 dto로 사용하고 있을 가능성이 높습니다.


  • 제타건담
    7k
    2021-05-22 01:09:08

    mybatis의 경우는 entity 라고 하지는 않습니다..

    실제 JPA가 이용하는 Entity 클래스를 보게 되면 @Entity 어노테이션을 통해 DB 테이블과의 매핑작업이 발생하구요

    mybatis 의 경우에는 이러한 기능이 없기 땜에 entity라고 보지는 않습니다..

    머 논리적인 개념까지만으로 접근하면 entity라 말할수는 있겠지만 mybatis를 사용하는 프로젝트에서는 entity라 호칭하지는 않습니다..

    대신 DTO나 VO는 됩니다..mybatis에서는 DB 레코드의 값을 담는 객체로서의 용도로 사용되기 때문이죠..

  • 로그인을 하시면 답변을 등록할 수 있습니다.