728x90
반응형

개요

  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

 

결론은 섞어서 쓰지 말고 설계를 잘하고 스프링이 편하라고 제공해준 것을 잘 쓰자.

728x90
반응형

+ Recent posts