1. Snake Case
Snake Case는 프로그래밍에서 변수, 함수, 파일명 등 이름을 작성할 때
단어 사이를 밑줄('_')로 구분하는 네이밍 규칙이다.
모든 문자를 소문자로 작성하며, 공백 대신 밑줄을 사용하는 것이 특징인데,
예를 들어,
user_name
phone_number
위와 같이 작성하면 Snake Case 를 따른 것이다.
일반적으로 JSON 데이터 포맷, 데이터베이스에서 주로 사용되는데,
Java를 주로 쓰는 나로서는 Java의 기본 규칙인 Came Case와 충돌(?)하게 되어 문제가 될 때가 있다.
물론, 문제라고 할 것 까지는 없는데,
팀 프로젝트를 진행할 때는 코드 스타일을 정확하게 짚고 넘어가는 것이 협업하는 데 좋긴 할 것이다.
2. 팀 프로젝트
식당 예약, 줄서기 프로그램을 개발하는 팀프로젝트를 진행중이다.
https://github.com/BobJool/Waiting-Reservation-Service
팀 프로젝트를 진행할 때는 코드 스타일을 정하고 정확하게 준수하는 것이 중요하다.
우리 팀은 API 명세서를 작성하면서,
API endpoint, query parameter, path variable, JSON 형식에 대해서 규칙을 정했다.
- API endpoint: 하이픈('-') 사용(Kebab Case)
- query parameter: Camel Case 사용
- path variable: Camel Case 사용
- JSON: Snake Case
아래는 내가 맡은 결제 도메인의 모습이다.
`paymentId`
path variable은 Camel Case로 로 작성했고
`userId`
query parameter 도 마찬가지로 Camel Case 로 작성했다.
아래는 레스토랑 도메인의 모습인데
`is-reservation`
엔드 포인트가 Kebab Case 로 작성된 모습이다.
JSON의 경우는
POST /api/v1/payments
Authorization: Bearer jwt_token_string
Content-Type: application/json
{
"revercation_id": "uuid",
"user_id": 1,
"amount": 20000,
"method": "CARD",
"pg_name": "TOSS",
}
이런 식으로 `reservation_id`, `user_id` 처럼 내려주기로 했다.
3. Spring Boot 에서 Snake Case 로 JSON 응답 내려주기
찾아보니까 여러 가지 방식이 있는 것 같다.
그 중 가장 간단한 방법이 application.yml에 global 로 지정하는 것이다.
아래 처럼 작성해주면 된다.
spring:
jackson:
property-naming-strategy: SNAKE_CASE
아주 간단하다.
서버에서는 Java의 규칙대로 Camel Case로 작성하고 JSON으로 변환할 때,
Jackson 라이브러리가 해당 설정을 보고 Snake Case로 바꿔준다.
너무 편리한걸?
그러니까 아래의 Java 객체가 내려줄 정보라면
package com.bobjool.reservation.application.dto.payment;
import com.bobjool.reservation.domain.entity.Payment;
import java.time.LocalDateTime;
import java.util.UUID;
public record PaymentResDto(
UUID PaymentId,
UUID reservationId,
Long userId,
Integer amount,
String method,
String pgName,
String status,
LocalDateTime createdAt,
LocalDateTime updatedAt
) {
public static PaymentResDto from(Payment payment) {
return new PaymentResDto(
payment.getId(),
payment.getReservationId(),
payment.getUserId(),
payment.getAmount(),
payment.getMethod().name(),
payment.getPgName().name(),
payment.getStatus().name(),
payment.getCreatedAt(),
payment.getUpdatedAt()
);
}
}
Camel Case로 작성되어 있어도 아래 처럼 JSON으로 응답이 내려갈 때는 Snake Case가 되는 것이다.
마무리
Spring이 편리하게 지원해준 덕분에 개발하기가 참 편하다.
References
https://docs.spring.io/spring-boot/appendix/application-properties/index.html
'Spring' 카테고리의 다른 글
LocalDateTime Jackson 직렬화 오류 해결하기 (1) | 2025.01.22 |
---|---|
운영 환경에서 Spring Cloud Config Server를 의존하지 않으려면 (0) | 2025.01.21 |