개요
Next.js 서버 | 기존 Node.js 서버 | 마이그레이션 Java 서버 | DB | |
State | Camel | |||
Request | Snake | Snake | Snake | |
Response | Snake | Snake | Snake | |
Model | Snake | Camel | ||
Column | Snake |
Node.js 서버에서는 Request를 있는 그대로 받아서 사용하였기에 별 상관이 없었지만
Java 서버에서는 Dto 객체를 만들고 Dto를 토대로 Entity에 대한 Query를 해야 하기 때문에 결국 Camel을 한 번 거쳐서 가야 했다.
문제점
결론부터 얘기하자면
'insurance_JikJongCd' <-- 이런 애들이 문제다
그 당시에는 외부 api를 쓰면서 해당 Request 형식에 맞춰 이렇게 만들었었고 Node.js 에서 사용할 때는 문제가 없었지만
Spring에서 Entity를 사용하면서 문제가 발생했다.
아래와 같이 테이블에 설정해주면 Snake 표기법으로 된 Request를 Camel 표기법으로 된 엔티티 필드와 매칭시킬 수 있다.
또한 Response 또한 snake case 로 반환할 수 있다.
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class User {
또한 Spring은 똑똑해서 별다른 설정을 해주지 않아도 Camel 표기법으로 된 엔티티 필드랑 Snake 표기법으로 된 Db Column이랑 매칭을 시켜준다.
// Entity
@Column(name="user_name")
private String userName;
근데 'insurance_JikJongCd' <-- 이런 애들이 문제다
Request로 받을 경우 insurance_Jik_jong_cd 이런 식으로 읽기 때문에 인식을 하지 못한다.
JsonProperty Annotation을 쓰면 Response를 Snake 표기법으로 보낼 수도 있다.
// Entity
@Column(name="user_name")
@JsonProperty(value="user_name")
private String userName;
// Response
user_name : "teepo"
참고1
PropertyNamingStrategies 구성 요소들이 Deprecated 되면서 application.properties에서 다음과 같이 Request, Response를
Snake 표기법으로 통신할수 있다.
spring.jackson.property-naming-strategy = SNAKE_CASE
이 방법으로 @JsonProperty, @JsonNaming 어노테이션을 사용하지 않아도 된다.
참고
appication.properties 에서 지원해주는 카멜표기법을 사용하지않고 사용자 임의로 설정하는 것이 있다.
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
결론은 섞어서 쓰지 말고 설계를 잘하고 스프링이 편하라고 제공해준 것을 잘 쓰자.
'Back-End > Spring Boot' 카테고리의 다른 글
Sping Boot | Backend Project | File Upload (0) | 2022.11.01 |
---|---|
Sping Boot | Backend Project | JWT in Cookie (0) | 2022.10.05 |
Sping Boot | Backend Project | Redis 적용하기 (1) | 2022.09.28 |
Sping Boot | Backend Project | RetryAspect (0) | 2022.09.28 |
Sping Boot | Backend Project | 사용자 정의 에러 핸들링 ( Custom Excepton Handling with Controller Advice) (0) | 2022.09.28 |