Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 3.34 KB

002.SpringBoot,Kotlin,MongoDB_Project_Naming_Configuration.md

File metadata and controls

47 lines (34 loc) · 3.34 KB

002. Spring Boot, Kotlin, MongoDB 프로젝트 네이밍 설정 방식

최근 Spring WebFlux, Kotlin, MongoDB를 사용해 개발하면서 네이밍 관련 문제를 마주하게 되었습니다. 어떠한 방식으로 네이밍을 설정했는지 공유드리려고 합니다.

1. HTTP 요청/응답을 Snake Case로 설정하기

Spring Boot에서 DTO(JSON) 필드 이름을 스네이크 케이스로 직렬화/역직렬화하기 위해 다음과 같이 application.yml에 Jackson의 프로퍼티 네이밍 전략을 설정할 수 있습니다.

jackson:
    property-naming-strategy: SNAKE_CASE

이 설정은 클라이언트와 서버 간의 데이터 교환에서 필드 이름 변환을 도와줍니다. 예를 들어, 클라이언트가 { "member_id": "123" }와 같은 JSON 데이터를 전송하면, 서버는 memberId라는 필드에 자동으로 매핑하여 DTO로 변환합니다.

이렇게 설정하면 DTO 클래스에 있는 카멜 케이스 필드(memberId, createdAt 등)가 JSON에서 스네이크 케이스(member_id, created_at)로 자동 변환됩니다. 이를 통해 클라이언트와 서버 간에 일관된 네이밍 규칙을 유지할 수 있습니다.

2. MongoDB에 필드 저장 시 스네이크 케이스 사용하기

Jackson의 property-naming-strategy: SNAKE_CASE 설정은 HTTP 요청/응답에만 영향을 미치며, MongoDB에 데이터를 저장할 때는 적용되지 않습니다. Spring Data MongoDB는 Jackson의 설정을 사용하지 않고 자체적인 매핑 로직을 사용합니다. 따라서 MongoDB에 데이터를 저장할 때 스네이크 케이스를 적용하려면 각 필드에 @Field 어노테이션을 사용하여 명시적으로 이름을 설정해야 합니다.

예를 들어, 다음과 같이 @Field 어노테이션을 사용하여 MongoDB에서 사용될 필드 이름을 지정할 수 있습니다:

@Document(collection = "post")
data class Post(
    @Id
    val id: String? = null,
    @Field("member_id")
    val memberId: String,
    val content: String,
    val photos: List<String>,
    @CreatedDate @Field("created_at")
    var createdAt: LocalDateTime? = null,
    @LastModifiedDate @Field("updated_at")
    var updatedAt: LocalDateTime? = null
)

위 코드에서는 MongoDB에 데이터를 저장할 때 필드 이름을 스네이크 케이스로 지정하기 위해 @Field 어노테이션을 사용했습니다. 예를 들어, memberId 필드는 MongoDB에 member_id로 저장됩니다. 이를 통해 JSON과 MongoDB 간의 네이밍 규칙을 일관되게 유지할 수 있습니다.

정리

  • HTTP 요청/응답 시 네이밍 전략 설정: application.ymljackson.property-naming-strategy: SNAKE_CASE를 설정하여 클라이언트와 서버 간의 JSON 필드 이름을 자동으로 변환합니다.
  • MongoDB 필드 이름 설정: MongoDB에 데이터를 저장할 때 필드 이름을 스네이크 케이스로 저장하기 위해 @Field 어노테이션을 사용해 명시적으로 이름을 설정합니다.

이와 같은 설정을 통해 JSON 데이터와 MongoDB 필드 간의 네이밍 불일치를 해결하고, 클라이언트-서버-데이터베이스 간의 일관성을 유지할 수 있습니다. 이를 통해 개발 과정에서 발생할 수 있는 불필요한 오류를 줄이고 유지보수성을 높일 수 있습니다.