[Jersey] 1. Jersey 프로젝트 생성하기

2022. 5. 10. 16:55Spring/Jersey

반응형
  1. JAX-RS? Jersey?
  2. Jersey 프로젝트 생성
    1. Project 설정
    2. Spring Boot 버전 및 Dependencies 추가
    3. build.gradle에 lombok관련 dependencies 직접 추가
  3. 간단한 조회 API 테스트
    1. 프로퍼티 설정
    2. Endpoint 설정
    3. 컴포넌트 등록
    4. 실행 결과

1. JAX-RS? Jersey?

JAX-RX는 Java API for RESTful Web Services의 약자로, Java 플랫폼에서 경량화된 REST 웹 애플리케이션 구현을 지원하는 Java API 입니다.

Jersey는 JAX-RS 요구사항에 맞게 구현된 프레임워크로, Spring MVC 보다 경량화 되어있어, api 정의가 매우 간결합니다.

Spring Boot 에서는 jersey를 쉽게 이용할 수 있도록 starter를 제공하고 있습니다.

Jersey 프로젝트에서는 spring-boot-starter-jersey를 이용하여 RESTful API를 구성하는 방법을 알아볼 것입니다.

OpenJDK 17Gradle을 이용하며, IDE는 IntelliJ를 이용합니다.


2. Jersey 프로젝트 생성

2.1. Project 설정

Spring Initializr를 이용하여 jsrsey 프로젝트를 생성합니다.

타입은 Gradle을 선택하고, 프로젝트 SDK및 Java 버전는 17로 설정했습니다.

01-2


2.2. Spring Boot 버전 및 Dependencies 추가

JAX-RS와 Jersey를 사용한 RESTful 웹 애플리케이션을 만들기 위한 Starter 와 DevTools를 프로젝트 생성시 미리 추가합니다.

01-3


2.3. build.gradle에 lombok관련 dependencies 직접 추가

프로젝트를 생성한 후, build.gradle를 열어보면 dependencies에 spring boot jersey 스타터와 devtools가 추가된것을 확인할 수 있습니다.

프로젝트 내에서 Lombok을 사용하기 위해 dependencies에 lombok관련 의존성 라이브러리를 추가한 후 Gradle을 reload합니다.

implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

※ 이 후 과정에서도 build.gradle 의 dependencies 정보가 수정되었을 때에는 반드시 Gradle reload를 해야합니다.

01-4


아래는 lombok관련 설정을 추가한 dependencies 입니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jersey'
    implementation 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
}

참고. Maven

만일 Maven 을 사용한다면 dependencies에 추가해주면 됩니다.

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
  </dependency>

  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
  </dependency>
</dependencies>

3. 간단한 조회 API 테스트

3.1. 프로퍼티 설정

src/main/resources 아래에 application.yml 프로퍼티 파일을 생성하고(기존의 application.properties 파일은 제거했습니다.)

01-1


아래와 같이 프로젝트에 대한 기본 설정을 추가했습니다.

spring:
  application:
    name: jersey
  profiles:
    active: local

3.2. Endpoint 설정

request에 대한 uri 경로를 설정할 Endpoint(Spring Web식의 표현법으로는 Controller라고 부릅니다.)를 설정해봅니다.

JAX-RX에서는 @RestController 나 @Controller 대신 @Component로 설정합니다.

또, 경로 설정은 @PATH 에 설정하고, http method는 @GET, @POST, @PUT, @DELETE 로 별도의 annotation으로 설정합니다.

아래의 코드는 hello jersey project! 를 출력하는 api 입니다.

import org.springframework.stereotype.Component;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Component
@Path("")
public class IndexEndpoint {

    @GET
    public String index() {
        return "hello jersey project!";
    }
}


3.3. 컴포넌트 등록

api들을 서비스 하기 위해 ResourceConfig에 등록하는 과정이 필요합니다.

ResourceConfig의 register 메서드를 이용하여 조금전에 생성했던 IndexEndpoint 컴포넌트를 등록합니다.

그리고, api의 공통 prefix를 /v1 로 설정했습니다.

import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;
import xyz.applebox.jersey.endpoint.IndexEndpoint;

import javax.ws.rs.ApplicationPath;

@Component
@ApplicationPath("/v1")
public class ResourceV1Config extends ResourceConfig {

    public ResourceV1Config() {
        register(IndexEndpoint.class);
    }
}


3.4. 실행 결과

01-5

※ GitHub에서 jersey 프로젝트(v1.0.0)를 다운받아 볼 수 있습니다.


++

  • REST API with Jersey and Spring Boot 2
  • How to create JAX-RX APIs in Spring Boot 2
728x90
반응형