VO 작성 가이드

단일 VO 작성 규칙, Lombok 사용법, 시간 필드 처리

마지막 수정: 2026-05

VO 작성 가이드

기본 원칙

  • 단일 [업무명]Vo로 통일한다 — Request/Response 구분 없이 하나의 VO 사용
  • Lombok @Getter @Setter @ToString 필수
  • GeneralVO를 상속한다
  • 소팅이 필요한 경우 SortFormRqVo를 상속한다

VO 작성 예시

@Getter
@Setter
@ToString
public class UserVo extends GeneralVO {

    private Long   userSn;       // 사용자 일련번호
    private String userId;       // 사용자 ID
    private String userNm;       // 사용자 명
    private String userEmail;    // 이메일
    private String roleCode;     // 권한 코드

    private OffsetDateTime regDt;   // 등록일시
    private OffsetDateTime updDt;   // 수정일시
}

소팅이 필요한 VO

@Getter
@Setter
@ToString
public class BoardVo extends SortFormRqVo {

    private Long   boardSn;     // 게시판 일련번호
    private String title;       // 제목
    private String content;     // 내용
    private String writerSn;    // 작성자 일련번호

    private OffsetDateTime regDt;   // 등록일시
}

시간 필드 규칙

시간 필드는 반드시 OffsetDateTime 타입을 사용한다.

  • SYSDATE 사용 금지 → SYSTIMESTAMP 사용
  • Java 타입: java.time.OffsetDateTime
  • MyBatis 타입: javaType=java.time.OffsetDateTime, jdbcType=TIMESTAMP_WITH_TIMEZONE
// 올바른 예
private OffsetDateTime regDt;   // OffsetDateTime 사용

// 잘못된 예
private Date regDt;             // java.util.Date 사용 금지
private LocalDateTime regDt;    // LocalDateTime 사용 금지 (타임존 미지원)

GeneralVO 주요 필드

GeneralVO는 공통 필드를 포함하는 기본 VO다. 상속받은 VO는 아래 필드를 자동으로 사용할 수 있다:

필드명타입설명
pageNoint현재 페이지 번호
rowPerPageint페이지당 행 수
offsetint페이징 offset
searchKeywordString검색 키워드
searchTypeString검색 타입

Lombok 사용 규칙

// 필수 어노테이션
@Getter
@Setter
@ToString
public class ExampleVo extends GeneralVO {
    // ...
}

금지 패턴

// @Data 사용 금지 — equals/hashCode 오버라이드 위험
@Data  // 금지!
public class ExampleVo extends GeneralVO { ... }

중첩 VO (List 포함)

@Getter
@Setter
@ToString
public class OrderVo extends GeneralVO {

    private Long   orderSn;      // 주문 일련번호
    private String orderStatus;  // 주문 상태

    // 주문 상세 목록 (1:N 관계)
    private List<OrderDetailVo> detailList;

    private OffsetDateTime orderDt;  // 주문일시
}

@Getter
@Setter
@ToString
public class OrderDetailVo extends GeneralVO {
    private Long   detailSn;     // 상세 일련번호
    private Long   orderSn;      // 주문 일련번호 (FK)
    private String itemNm;       // 상품명
    private int    qty;          // 수량
}

체크리스트

  • [ ] 단일 [업무명]Vo 클래스 사용 (Request/Response 분리 금지)
  • [ ] @Getter @Setter @ToString 어노테이션 필수
  • [ ] GeneralVO 상속
  • [ ] 소팅 필요 시 SortFormRqVo 상속
  • [ ] 시간 필드: OffsetDateTime 타입 사용
  • [ ] @Data 사용 금지