본문 바로가기
Project/소경관

[소경관] : 프로젝트 패키지 구조 고민 및 Entity와 DTO의 분리

by 오주현 2022. 4. 8.
반응형
  • 프로젝트 패키지 구조 고민
    • 학교에서 사용하던 패키지 구조
      • Controller
      • Service
        • IService
      • Mapper
        • IMapper
      • DTO
    • 프로젝트 패키지 구조를 저번에 공부했을 때(🔗 ← Click! 참고) 작은 단위에서 크게 확장할 수 있는 구조로 짜는 게 중요하다고 했는데 사실 내가 경험이 많지 않아서 어떻게 해야 할 지 감이 안 잡힌다.
    • 다만 위와 같은 구조에서 Entity를 DTO와 나누어 새로 만들어 주었다.
  • Entity와 DTO의 차이?
    • Entity는 실제 테이블과 매핑이 된다.
      • Setter를 사용하지 않는 게 좋다.
        • 왜?
          • 객체 값을 쉽게 변경할 수 있게 되면 일관성을 유지하기 어려워진다.
          • 일관성을 잃으면 유지 보수가 어려워진다.
        • 그럼 어떻게?
          • Setter 대신에 생성자를 생성해 준다.
          • 더 좋은 방법은 Builder Patter으로 객체 생성을 제한하는 방법이 있다고 하는데 아직은 잘 모르겠다.
            • @Builder 어노테이션을 활용해 만들 수 있다.
        • 내 프로젝트는 어떻게?
          • Setter를 지우고 생성자를 만들어 줬다.
          • 일단은 이렇게 다 넣고 생성했지만 추후에 필요에 따라 추가 생성자를 만들어 사용할 계획이다.
        • /** * setter 사용을 지양하기 위해 만든 생성자. * * @param userNo 시퀸스 넘버 * @param userName 이름 * @param userPn 핸드폰 번호 * @param userEmail 이메일 * @param userId 아이디 * @param userPw 비밀번호 * @param userAddr 근무 주소 */ public void changeUserInfo(Long userNo, String userName, String userPn, String userEmail, String userId, String userPw, String userAddr) { this.userNo = userNo; this.userName = userName; this.userPn = userPn; this.userEmail = userEmail; this.userId = userId; this.userPw = userPw; this.userAddr = userAddr; }
    • DTO는?
      • Data Transfer Object로 데이터 전송 객체이다.
      • 비동기 처리에 주로 사용된다.
      • 로직을 가지고 있지 않고 Getter와 Setter를 사용한다.
      • 그냥 쉽게 말해 단순 Data 송, 수신용도로 사용된다고 보면 된다.

 

 

오늘은 프로젝트를 많이 하지는 못 했다. 오후에 간단한 인터뷰도 하고, 강의도 듣고, 생각 정리도 했다.

반응형

댓글