Full Stack Web Developer.
Syaku (샤쿠)

Java, JS (ES6+), Spring, Spring security, jQuery, Reactjs, Bootstrap.

        

07-12 08:23


Spring Boot 2 보기 Front-end 보기 DevOps 보기 Spring 3 보기 Spring Security 3 보기

IntelliJ 에서 snakecase 를 camelcase 변경작업 정리

IntelliJ 에서 snake_case 를 camelCase 변경작업 정리

front-end 의 뷰(view)단에서 서버로 전송하기 위한 파라메터명 즉 폼 데이터 네이밍에는 _ (underbar) 를 사용하고

back-end 즉 컨트롤러(controller) 단에서는 _ 사용하지 않고 데이터를 바인딩하기 위한 작업을 정리하였다.

나같은 경우 모든 레이어(form, model, domain)에 snake_case (underbar 사용한 네이밍)를 사용하고 있는 터라 한번에 많은 파일을 수정해야 했다.

json 은 jackson 라이브러리를 사용하고 있다.

jackson 에서 네이밍을 변경해주는 어노테이션이 @JsonNaming(value = PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)있는 데 자식에게도 영향이 가기때문에 사용을 추천하지 않는 데.

위 어노테이션은 아래와 같이 작동된다.


user_name => userName

userName => user_name

대상의 네이밍에 의해 적용되는 결과가 틀려진다. 그래서 모든 네이밍이 일치하지 않는 다면 사용하지 않는 것이 좋다. 그렇다면 아래와 같이 JsonProperty 사용하여 일괄적으로 수정해야 한다.

class Foo {
    @JsonProperty("user_name")
    private String userName;

    @JsonProperty("fooList")    
    private List<Foo2> fooList;
    
    getter ... 
    setter ...

}

model or domain 의 필드를 snakecase -> camelcase 일괄 변경하기.

< / > 원본소스

class Foo {
    private String user_name;
    
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    
    public String getUser_name() {
        return this.user_name;
    }
}

위의 소스를 아래와 같이 수정된다.

class Foo {
    private String userName;
    
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    public String getUserName() {
        return this.userName;
    }
}

개발툴은 IntelliJ 를 기반으로 설명한다.

commend + shift + r 누르면 검색창이 실행된다.

검색할때 중요한것은 model 이나 domain 클래스만 찾을 수 있는 패턴이 있어야 정확한 처리가 가능해진다.

Text to find : 검색 패턴을 입력한다. 여기에 아래와 같이 작성한다.

_([a-zA-Z0-9]+)

Replace with : 검색된 문구를 치환할 패턴을 입력한다.

\u$1

IntelliJ 나 sublime 등의 정규식 치환시에 동일하게 사용되는 키워드다.

\u : 첫글자만 대문자로 치환한다.
\l : 첫글자만 소문자로 치환한다. 

_를 가진 문자를 찾아 _는 제거하고 첫글자를 대문자로 수정해준다.

즉 Foo 클래스에서 _name 모두 찾아 Name 으로 변경한다.

Generl에서 Case sensitive 와 Regular expression 체크한다. (Help 를 클릭하면 정규식에 대한 도움말을 볼 수 있다.)

Scope 에서 대상 파일을 설정하는 데 패턴을 이용하여 model 과 domain 만 검색할 수 있게 해줘야 한다.

그래서 Custom 을 선태하고 ... 확장 버튼을 누른다.

+ 눌러 대상을 추가한다.

Name 는 다음에도 쉽게 알아볼 수 있게 이름을 정한다.

폴더 트리에서 적당한 최상위 경로를 선택하고 Include 버튼을 클릭한다. (Exclude 는 제외할 수 있다.)

include 하면 패턴에 file[eGovMEI2]:src/main/java/egovmei/* 이런식으로 등록될 것 이다.

나는 도메인만 검색할 수 있게 뒤에 패턴을 더 추가해줬다.

file[eGovMEI2]:src/main/java/egovmei/*/domain/*.java 이런식이 된다. 그리고 ok 를 클릭한다.

그렇게 검색된 결과를 preview 에서 볼 수 있다. Find 클릭하면 치환을 어떻게 할 것인지 물어본다. all files 를 선택하면 된다.


model or domain 에 @JsonProperty 넣기

commend + shift + r 다음에 패턴을 아래와 같이 입력한다.

Text to find : (private )([A-Za-z<>]+) ([a-z0-9]+)([A-Z][a-z0-9]+);

Replace with : @JsonProperty("$3_\l$4") $0

이렇게 일괄적으로 치환이 되면 IntelliJ 에서 친절하게 오류사항을 알려준다. 하나하나 수정을 해야하는 데...

이건 IntelliJ에 플러그인을 사용하면 된다.

String Manipulation 플러그인을 설치한다.

그리고 설정의 keymap 에서 To snake_case (or to camelCase) 찾아서 사용이 편한 단축키로 변경한다.

나는 ctrl + option + 마우스중간버튼 으로 설정했다.

이제 오류가 발생하는 곳은 위 단축키로 하나식 정리해주면 된다.

더 좋은 방법을 찾기보다 급하게 해결해야되서 이렇게 당장 할 수 있는 방법을 정리해보았다. 아직 작업이 진행중이라... 더 좋은 방법을 찾게된다면 내용을 추가할 것 이다.

댓글 남기기
◀ PREV 12345···20 NEXT ▶