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는 아래 필드를 자동으로 사용할 수 있다:
| 필드명 | 타입 | 설명 |
|---|---|---|
pageNo | int | 현재 페이지 번호 |
rowPerPage | int | 페이지당 행 수 |
offset | int | 페이징 offset |
searchKeyword | String | 검색 키워드 |
searchType | String | 검색 타입 |
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사용 금지