[RestAPI] Restful service 기능 확장

wony·2024년 4월 29일

Spring

목록 보기
24/33

개요. 스프링 부트를 이용한 RESTful

  • section0 : Web Service & Web Application
  • section1 : Spring Boot로 개발하는 RESTful API
  • section2 : User Service API 추가
  • section3 : Restful service 기능 확장
  • section4 : Spring Boot API 사용
  • section5 : JPA 사용
  • section6 : REST API 설계 가이드

섹션3. RestfulService 기능 확장

Validation-API 혹은 hibernate-validation을 사용해서 유효성 검증을 할 예정

1) 유효성 체크를 위한 Validation API 사용

  • createUser 메소드에 @Valid라는 어노테이션을 넣어주게 되면 입력하게 된 데이터에 대해서( User ) 유효성 검사를 하게 될 것이고 User 도메인 클래스에 유효성 체크를 하는 @Size, @Past 와 같은 기능을 넣을 수 있다.

  • 1) dependency 추가해주기(pom.xml 에 추가)
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-validation</artifactId>
		<version>3.0.2</version>
</dependency>
  • 2) 위와 같이 @size, @PastUserControllercreateUser 메소드에 @Valid 추가
  • 3) 그러나, 문제가 발생시 정확히 어디서 문제가 발생했는지 나오지 않는다.
  • 4) CustomizedResponseEntityExceptionHandler 클래스 수정하기
  • 5) 이 클래스 handMethodArgumentNotValid 메서드 추가해주기

2) 다국어 처리

다국어 처리는 하나의 처리 값을 여러가지 언어로 표시해주는 것

1) HelloWorldController에 추가

2) 생성자 주입

3) MyRestfulServiceApplication에 LocaleResolver 메소드 작성

4) application.yml에 message 추가

5) messages.properties 추가

3) XML Format

  • 우리가 만들고 있는 api의 반환 값을 json 데이터 포맷에서 xml 데이터 포맷으로 바꿔본다.
  • XML Format을 처리하기 위해서 pom.xml에서 dependency 추가

4) Response 데이터 제어를 위한 Filtering

  • 클라이언트에게 전달해주는 정보를 제어하기 위한 방법
  • 먼저 우리가 작성한 유저 도메인 클래스에 사용자 주민번호와 같은 중요한 필드를 추가한다고 가정해 봅시다.
  • 이러한 정보는 굉장히 중요하므로 외부에 노출시키고 싶지 않은 정보입니다.
  • 스프링 부트에서는 json 데이터를 보여주거나 보여지지 않거나 하는 식의 작업을 제공합니다.
    • @JsonIgnore 라는 어노테이션을 추가하게 되면 이러한 정보가 보이지 않게 막을 수 있습니다.

  • 추가 : @JsonIgnoreProperties 를 사용하면 value 값으로 묶어서 한번에 보이지 않도록 처리할 수 있습니다.(@JsonIgnore 주석 처리)
@JsonIgnoreProperties(value = {"password", "ssn"})

5) 프로그래밍으로 제어하는 Filtering - 개별 사용자 조회

  • 클라이언트에게 제공하려는 데이터의 필드를 조금 더 프로그래밍적으로 해결
  • 1) AdminUser 클래스 추가 후, @JsonFilter 라는 어노테이션을 추가 ( 나머지 동일)
  • 2) AdminUserController 클래스 추가 후, retrieveUseradmin 메서드만 사용

6) 프로그래밍으로 제어하는 Filtering – 전체 사용자 조회

  • 5에서 봤던 관리자를 위한 사용자 목록조회 API를 전체 사용자 목록을 가져오는 메소드로 하나 더 추가해서 작성해보자.
  • RetrieveAllUsers 라는 메서드에서 MappingJacksonValue 로 반환값을 바꿔서 실행해주면 된다.

7) Version 관리 – URI를 이용한 버전관리

1. URI를 이용한 버전관리

  • 우리가 생성한 사용자 관리 API의 버전 관리 기능에 대해서 살펴보자.
  • 아래와 같이 adminusers 사이에 v1 을 추가해준다.

  • 추가로, 지금까지 사용했던 유저 도메인을 복사를 해서 우리가 어드민 유저라는 이 도메인 클래스를 사용을 했었는데 이 부분도 v2를 위해서 AdminUserV2 라는 새로운 클래스를 만들어준다.
  • 여기에 필요한 @JsonFilter 값을 필터링 같이 적용할 것이기 때문에 @JsonFilter를 만들어준다.
  • 추가로, retrieveUserV2라는 메서드를 만들어준다. 기존에 만들었던 데이터에다가 새롭게 VIP라고 되어 있는 grade 값을 추가해준다. 기존 v1 에는 ssn이 있었다고 하면 v2에는 얘를 빼고 grade 를 추가해준다.

8) Version 관리 – Parameter와 Header를 이용한 버전관리

  • 이번에는 Request parameter와 헤더 정보를 이용해서 버전 관리를 해 보겠습니다.

2. 파라미터 값을 이용해서 확인

  • 기존에 사용했던 버전 정보(v1, v2) 와 같은 것들을 삭제하고 새로운 버전 관리 기능을 넣습니다.
  • 파라미터 값 중에서 version="1" , version="2" 이라는 값이 전달되도록 하겠습니다.

3. 헤더 값을 이용해서 확인

4. Mime 타입 or accept header versioning을 통해 확인

  • 마임 타입이라는 것은 multipurpose internet mail extension 의 약자로서 이메일 데이터와 함께 전송 파일을 텍스트 문자로 변환을 해서 이메일 서버에 전송하는 것을 파일 형태로 주고 받는 형태로 바꾼 것입니다.

정리(총 4가지 방법 존재)

profile
안녕하세요. wony입니다.

0개의 댓글