일반적으로 API 어플리케이션(REST API)을 만들 때 가장 먼저 시작하는 작업이
요청과 응답객체를 생성하는 부분입니다.
API Endpoint 수에 따라 적게는 수십 개 , 많게는 몇백 개 이상의 요청/응답 객체 - 일반적으로 DTO로 불리는 객체-를
POJO 클래스로 만들어야 하는데요.
설계된 문서 또는 JSON - 이제 거의 모든 REST API의 요청/응답유형은 JSON구조를 사용합니다 - 텍스트를 보고
일일이 타이핑으로 수많은 요청/응답객체를 만드다는 게 매우 비효율적인 작업입니다.
단순 반복작업인데다가 휴먼 오류(오타)의 가능성도 크기 때문입니다.
이런 작업들을 줄일 수 있는 인텔리J의 플러그인을 하나 소개합니다.
인텔리 J 마켓플레이스에서 JSON 구조의 텍스트를 POJO로 Generation 해주는 플러그인은 몇 가지가 있는데요,
그중에서 사용법이 가장 단순하면서 오류가 적다고 느꼈던 Tool입니다.
RoboPOJOGenerator - Plugins | JetBrains
설치 및 사용방법은 너무 간단합니다.
- 프로젝트의 설정화면으로 들어갑니다. ( 단축기: Command + , )
- PlugIns 메뉴의 마켓플레이스로 들어가서 JSON to POJO 검색하면 관련 플러그인들이 몇 개 검색됩니다.
- 그중에서 RoboPOJO Generator를 선택하고 설치합니다.
- 설치가 완료되면 메뉴> File > New에 ‘Generatoe POJO from JSON ‘이라는 메뉴가 추가되고, 아래와 같이 오른쪽 마우스 버튼 메뉴에도 추가가 됩니다.
- POJO를 만들 패키지(디렉토리)를 선택하고 클릭하면 아래의 Generation 창이 정상적으로 열립니다. 참고로 패키지를 선택하지 않은 상태에서 클릭하면 오류가 발생하니 꼭 생성할 패키지를 지정하고 사용하셔야 합니다.
- 기능에 대한 설명을 굳이 따로 설명을 하지 않아도 될 정도로 쉽고, 직관적으로 되어 있습니다.
다양한 JSON 관련 라이브러리를 지원하는데,
저는 Springboot기반이라 기본적으로 jackson 라이브러리가 사용되고 있어 none 으로 설정하고 사용합니다.
참고로 lombok으로 선택하고 사용하게 되면
클래스레벨에 lombok의 @Data 어노테이션이 붙어서 생성되게 됩니다.
실제로 아래의 샘플 JSON으로 POJO를 만들어 보면 중첩 구조라
POJO클래스가 두 개 생성됩니다.
{
"resultStatus": 1,
"resultMessage": "성공",
"siteInfoList": [
{
"siteId": 8,
"siteName": "Test",
"siteAddress": "Test",
"siteType": "Test",
"inScheduleYmd": "Test",
"installState": "Test",
"accessIp": "Test2",
"developerCorp": "Test",
"builderCorp": "Test",
"homepageDomain": "Test",
"etcDesc": "Test",
"ipUpdateTime": 1608022056000,
"poscoYn": "N"
}
]
}
기본적으로 depth를 가지는 중첩 구조의 JSON 일 경우, 이 플러그인은 각 각의 개별 클래스로 생성시켜 줍니다.
메인 POJO 클래스의 이름은 생성할 때 입력한 이름으로 생성되고,
중첩 JSON으로 만들어진 POJO클래스의 이름은 해당 JSON 프로퍼티명 + ‘Item’의 이름으로 생성되게 됩니다.
inner class로 생성될 필요가 있을 때는 추가 작업이 필요해서,
이 부분을 옵션으로 지원하지 않는 부분은 살짝 아쉬운 점이라고 생각됩니다.
package com.ht.parasite.core.dto;
import java.util.List;
import lombok.Data;
public @Data class SiteInfoRes{
private int resultStatus;
private List<SiteInfoListItem> siteInfoList;
private String resultMessage;
}
package com.ht.parasite.core.dto;
import lombok.Data;
public @Data class SiteInfoListItem{
private String accessIp;
private long ipUpdateTime;
private String siteName;
private String siteAddress;
private String homepageDomain;
private String inScheduleYmd;
private String developerCorp;
private String installState;
private String poscoYn;
private int siteId;
private String builderCorp;
private String etcDesc;
private String siteType;
}
생성된 POJO 클래스 코드입니다.
lombok으로 지정하고 생성했기 때문에 @Data 어노테이션이 붙어 있습니다.
즉, getter, setter, contructor 메서드 코드가 필요 없기 때문에 생성되지 않았습니다.
POJO를 생성할 때 멤버 변수의 데이터 타입은 json 코드의 value 값으로 판단해서 적용됩니다.
참고로 value가 null로 되어 있는 상태에서 생성하게 되면,
어떤 타입인지 판단할 수 없기 때문에 Object 타입으로 생성됩니다.
단순한 기능이지만
반복 작업과 휴면 오류를 많이 줄여줄 수 있는 유용한 도구인 것 같아 포스팅해 보았습니다.
동일 기능을 제공하는 다른 플러그인도 많이 있으니,
사용해보면서 자기에게 맞는 것을 선택해서 사용하시면 좋을 것 같습니다.
최근댓글