Call Server To Server
포스트
취소

Call Server To Server

서버 호출 방식 (공통)

  1. 서버를 호출할 서비스 Class를 만든다.
  2. 원하는 기능을 호출할 메소드를 만든다.
  3. 해당 메소드의 반환형은 서버를 호출해서 전달받을 결과물의 형태와 같게 지정한다.
  4. UriComponentsBuilder Class를 통해서 호출할 서버의 URI를 생성한다.
  5. RestTemplate의 메소드를 호출 방식에 따라 설정하여 서버와 통신하여 결과물 받기
  6. 해당 결과물을 반환하기

URI 생성

URI uri = UriComponentsBuilder
.fromUriString("호출할 서버 주소") //예시 : http://localhost:8093
.queryParam(name, values) //정의 : uri에서 쓰는 query 값을 설정하는 메소드, 예시 : queryParam("name", "HongGilDong")
.path("호출할 path") //예시 : /api/server/hello
.encode() //정의 : uri의 기본 문자 set을 UTF-8로 변경
.build() //정의 : UriComponents로 변환
.toUri(); //정의 : uri로 변환

//.expand(값) : path의 값에서 중간에 {name}처럼 Path Value를 쓸 수 있는데 그 값을 차례대로 채워준다.
//({}가 두 번이면 expand()도 두 번)
//xxx.replaceQueryParam("name", "{name}").build().expand("홍길동").encode();

※ RestTemplate의 메소드로 파라미터로 사용될 값에 URI 대신에 String으로 주소를 직접 써도 된다.

RestTemplate를 통한 서버 호출 - GET 방식

  • getForObject
    • GET 요청을 보내고 Java Object로 매핑받아서 반환받음
    • 장점
      • 각각의 필드의 대한 값을 개별적으로 볼 수 있다.
    • 기본 형식
      • getForObject(URI, ResponseType)
    • 사용 예시
        RestTemplate restTemplate = new RestTemplate();
        UserVO result = restTemplate.getForObject(uri, UserVO.class);
        return result;
        
  • getForEntity
    • GET 요청을 보내고 ResponseEntity로 반환받음
    • 장점
      • HttpHeader나 HttpBody나 HttpStatus같은 정보들을 볼 수 있음
    • 기본 형식
      • getForEntity(URI, ResponseType)
    • 사용 예시
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<UserVO> result = restTemplate.getForEntity(uri, UserVO.class);
        return result.getBody();
        

RestTemplate를 통한 서버 호출 - POST 방식

  • postForLocation
    • POST 요청을 보내고 java.net.URI 로 반환받음
    • 기본 형식
      • postForLocation(URI, Request Object)
      • 결과값 : URI
    • 사용 예시
        UserVO user
            = UserVO.builder()
            .name("HongGilDong").age(25).email("hong@naver.com")
            .birthday("19970229").phoneNumber("0001112222")
            .build();
        RestTemplate restTemplate = new RestTemplate();
        URI result = restTemplate.postForLocation(uri, user);
        return result;
        
  • postForObject
    • POST 요청을 보내고 Java Object로 매핑받아서 반환받음
    • 장점
      • 각각의 필드의 대한 값을 개별적으로 볼 수 있다.
    • 기본 형식
      • postForObject(URI, Request Object, ResponseType)
    • 사용 예시
        UserVO user
            = UserVO.builder()
            .name("HongGilDong").age(25).email("hong@naver.com")
            .birthday("19970229").phoneNumber("0001112222")
            .build();
        RestTemplate restTemplate = new RestTemplate();
        UserVO result = restTemplate.postForObject(uri, user, UserVO.class);
        return result;
        
  • postForEntity
    • POST 요청을 보내고 ResponseEntity로로 매핑받아서 반환받음
      • 장점
        • HttpHeader나 HttpBody나 HttpStatus같은 정보들을 볼 수 있음
    • 기본 형식
      • postForEntity(URI, Request Object, ResponseType)
    • 사용 예시
        UserVO user
            = UserVO.builder()
            .name("HongGilDong").age(25).email("hong@naver.com")
            .birthday("19970229").phoneNumber("0001112222")
            .build();
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<UserVO> result = restTemplate.postForEntity(uri, user, UserVO.class);
        return result.getBody();
        

RestTemplate를 통한 서버 호출 - PUT 방식

  • put
    • POST 요청을 보내고 java.net.URI 로 반환받음
    • 기본 형식
      • put(URI, Request Object)
    • 사용 예시
        UserVO user
            = UserVO.builder()
            .name("HongGilDong").age(25).email("hong@naver.com")
            .birthday("19970229").phoneNumber("0003334444")
            .build();
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.put(uri, user);
        

RestTemplate를 통한 서버 호출 - DELETE 방식

  • delete
    • POST 요청을 보내고 java.net.URI 로 반환받음
    • 기본 형식
      • delete(URI)
    • 사용 예시
        //uri에 .queryParam("name", "HongGilDong") 추가
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.delete(uri);
        

RestTemplate를 통한 서버 호출 - HTTP Method에 상관없이 호출하기

  • exchange
    • POST 요청을 보내고 java.net.URI 로 반환받음
    • 장점
      • Http Header를 수정할 수 있다.
    • 기본 형식
      • exchange(URI, HttpMethod, HttpEntity, responseType)
      • exchange(RequestEntity, responseType)

        ※ RequestEntity와 ResponseEntity가 HttpEntity Class를 상속받고 있다.

    • 사용 예시
        //s:예시 1
            UserVO user
                = UserVO.builder()
                .name("HongGilDong").age(25).email("hong@naver.com")
                .birthday("19970229").phoneNumber("0001112222")
                .build();
            RequestEntity<UserVO> request = RequestEntity
                    .post(uri) //요청할 API 서버의 주소 설정
                    .contentType(MediaType.APPLICATION_JSON) //contentType 설정, org.springframework.http.MediaType
                    .header("x-authorization","my-header") //헤더 설정
                    .body(user); //몸체 설정 (= 전달할 데이터)
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<UserVO> response = restTemplate.exchange(uri, HttpMethod.POST, request, UserVO.class); //org.springframework.core.ParameterizedTypeReference
        //e:예시 1

        //s:예시 2
            UserVO user
                = UserVO.builder()
                .name("HongGilDong").age(25).email("hong@naver.com")
                .birthday("19970229").phoneNumber("0001112222")
                .build();
            RequestEntity<UserVO> request = RequestEntity
                    .post(uri) //요청할 API 서버의 주소 설정
                    .contentType(MediaType.APPLICATION_JSON) //contentType 설정, org.springframework.http.MediaType
                    .header("x-authorization","my-header") //헤더 설정
                    .body(user); //몸체 설정 (= 전달할 데이터)
            RestTemplate restTemplate = new RestTemplate();

            //org.springframework.core.ParameterizedTypeReference
            ResponseEntity<UserVO> response = restTemplate.exchange(request, new ParameterizedTypeReference<>(){});
        //e:예시 2
        
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.