중복되는 지역 데이터 문제, 중첩객체를 활용하기

Jeong Choi(최현정)·2024년 3월 20일
0

중복되는 지역 데이터

내가 생각했던 것 보다 지역 데이터들의 중복이 많았다. 그 중 특정 데이터로 예시를 들어보겠다.

지역 데이터 중, 읍/면/리 에 ‘오리’ 라는 동네가 있다. Region 테이블을 조회해본 결과 총 대구, 부산, 경기도, 전라남도 4개의 ‘오리’ 가 존재한다는 것을 확인할 수 있다.

Request Body를 아래와 같이 설정해보자. “region” : “오리” 라고 요청을 보낼경우 어떤 지역의 ‘오리’인지 확인할 수 없어 4개의 지역구 중 랜덤 지역구가 데이터베이스에 저장이 된다.

중첩 객체로 만들자

여러 방법으로 해결할 수 있겠지만, 나는 상위 지역명도 request body 포함하는 방법으로 해결했다.

Dto 설계

위의 Request Body에 맞게 Dto도 바꿔보자.

먼저 지역 데이터인 parentRegionName과 하위 데이터인 RegionName을 넣은 RegionDto를 만들었다.

export class RegionDto{

    @ApiProperty({ example: '강남구', description: '사용자가 거주하는 구/군의 상위 지역 정보' })
    @IsNotEmptyAndString()
    parentRegionName!: string;

    @ApiProperty({ example: '역삼동', description: '사용자가 거주하는 구/군' })
    @IsNotEmptyAndString()
    RegionName!: string;
}

그 다음, CreateUserDto의 region type을 RegionDto로 설정했다.

export class CreateUserDto extends AuthCredentialsDto{

    @ApiProperty({type: String, description: '사용자 닉네임', required: true, example: '야망있는최필규'})
    @IsNotEmptyAndString(1, 15)
    nickname!: string;

    @ApiProperty({type: String, description: '사용자가 거주하는 지역 정보', required: true})
    @Type(() => RegionDto) // region 객체를 RegionDto 클래스의 인스턴스로 변환
    @ValidateNested() // RegionDto 클래스 유효성 검사
    region!: RegionDto;

}

@ValidateNested()를 사용하면 CreateUserDto내에 중첩된 RegionDto 객체가 있을 경우, RegionDto 내에서 정의된 유효성 검사 규칙(@IsNotEmpty, @IsString…)이 수행된다.

profile
Node와 DB를 사랑하는 백엔드 개발자입니다:)

0개의 댓글