프로젝트

[SpringBoot package] 패키지 객체 도메인 가이드

nineDeveloper 2020. 6. 20.
728x90

패키지 객체 도메인 가이드

참조: https://github.com/cheese10yun/spring-guide/blob/master/docs/domain-guide.md

domain

패키지 명칭은 entity 혹은 domain 으로 표기하며
온전히 DB 처리용으로 DB 테이블 컬럼과 완전 동일한 객체의 클래스를 관리하는 package
domain 객체는 반드시 DB 처리용으로만 사용해야 한다

* 주의 - 어쩔수 없는 경우를 제외하고는 domain 패키지의 객체를 DB 처리 이외에 사용하면 안되며
domain 객체에 **DB
컬럼 에 없는 컬럼을 추가하는 것도 권장하지 않는다
되도록이면 DB 컬럼과 동일하게 유지하기를 권장**

dto

https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

백오피스팀에서는 공식적으로 정의된 의미와 조금 다르게 사용한다

dtoAPI 내부에서만 사용하도록 하고 외부와의 통신packet으로 분리해서 쓰는 것이 더 깔끔해 보이므로

백오피스팀 벡앤드 API 는 아래와 같이 dto를 정의하여 사용한다

API 서버 내에서 데이터 주고 받고 처리할떄 사용하는 dto 객체
JPA를 사용하지 않는다면 dto 객체로 DB 처리를 해도 무관하다

DB 컬럼과 동일 하지 않아도 되며 아래와 같이 domain 객체를 상속 받아서 사용 해도 된다

객체 생성시 suffixDto 추가

dto객체 생성시 반드시 suffixDto 를 추가하여 해당 객체가 dto 객체임을 명시

dto 객체 작성예시

dto 객체 overloading

dto 객체를 오버로딩 하여 packet 객체나 다른 객체의 데이터를 Mapping 한다

model

주로 다른 객체에서 공통적으로 사용되는 객체를 model 패키지로 구분하여 관리한다

아래와 같이 modelAddress 객체를 domain 객체에서 사용하는 것과 같이 어디에 속하지 않고 공통적으로 사용할 수 있거나 처리해야되는 객체들을 관리하는 용도로 사용한다

model 패키지에 정의된 Address 객체

domain 객체에서 사용

아래와 같이 domain 객체나 여타 다른 객체에서 공통적으로 사용할 수 있다

packet

packet 객체는 외부에 API를 제공하기 위한 외부 통신 전용 객체이다

Swagger API Docs 로 사용하는 파라메터에 대한 API Spec만을 표시하기 위해 API에 제공되는 파라메터들만 추가하여야 한다

단순한 API 서비스의 경우 packet 객체를 API 내부에서도 사용하며 DB 처리 용도로 까지 사용할 수 있다

객체 생성시 prifix 추가 ( 요청(Req), 응답(Res) )

요청(Req)인지 응답(Res)인지 구분할 수 있도록 반드시 prifixReq, Res 붙여야 한다

Res 객체에 DB 처리 결과를 담아서 리턴

Res 객체에 DB 처리 결과를 담아서 외부 요청에 응답할 수 있도록 한다

set으로 Jooq fetchInto의 값을 변환하여 셋팅할 수 있다

Swagger API Docs 정보 설정

https://springfox.github.io/springfox/docs/current/#overriding-descriptions-via-properties

외부 제공용 객체이므로 Swagger API Docs 에 올바른 정보가 나올 수 있도록 셋팅을 해야 한다

  • @ApiModel - 설정된 명칭으로 Swagger API Docs Model 정보에 표시된다
  • @ApiModelProperty - 제공되는 파라메터 명과 파라메터 정보를 설정할 수 있다
    • value - Swagger API Docs에 설정된 명칭으로 파라메터 명이 표시된다
                부가 설명 표기도 이곳에 하면 좋다 \n을 통해 줄 변경을 할 수 있다
    • name - 지정된 형태로 Swagger API 파라메터가 변경된다 camel 표기 형태의 파라메터 변수를 snake 표기 형태로 변경하는 용도로 사용
    • notes - 파라메터에 대한 추가 상세 정보를 기록하는 용도
    • example - 지정된 값을 예제 값으로 사용한다

GET 처리 packet 객체

@ParamName - GET방식으로 처리시 어떠한 파라메터 명으로 받을 지 지정한다

아래와 같이 camel 표기 형태의 파라메터를 @ParamName을 설정하여 snake 표기 형태로 파라메터를 받도록 설정할 수 있다

POST 처리 packet 객체

https://github.com/FasterXML/jackson-annotations

@JsonProperty - Jackson Library에서 제공되는 어노테이션 POST방식으로 처리시 어떠한 파라메터 명으로 받을 지 지정한다

  • @JsonInclude - Json 객체를 어떤 방식으로 받을 지 지정할 수 있다
    • JsonInclude.Include.ALWAYS - (기본값) 항상 모든 파라메터를 받는다
    • JsonInclude.Include.NON_EMPTY - 빈 값을 제외한 파라메터만 받는다
    • JsonInclude.Include.NON_NULL - null 값을 제외한 파라메터만 받는다

아래와 같이 camel 표기 형태의 파라메터를 @JsonProperty를 설정하여 snake 표기 형태로 파라메터를 받도록 설정할 수 있다

728x90

댓글

💲 추천 글