[Spring] DeepL API를 사용하여 번역 api 만들기

밤새·2024년 1월 23일
1

Back/Front

목록 보기
2/12

1. DeepL api 인증키 받기

DeepL사이트

먼저 위의 DeepL 공식 사이트에서 회원가입을 한 후 api 플랜을 선택해주면 됩니다.
저는 무료 플랜을 사용하였습니다.

그 후 신용카드를 추가하고 플랜에 가입을 됐다면 프로필에서 계정을 클린 한 후 api 인증키를 찾아줍니다.



위의 API 인증키를 복사해주시면 됩니다!

2. API 코드 작성하기

https://www.deepl.com/ko/docs-api/translate-text/translate-text
공식 api 문서를 참고하며 코드를 작성하겠습니다.

2-1. 요청 DTO 만들기

request에서 필수로 요구되는 파라미터는 texttarget_lang인데요.

각 파라미터의 설명에 대해 살펴보면

  • text array : 이 매개변수는 텍스트를 번역하기 위한 것으로, 최대 50개의 텍스트를 포함할 수 있고, UTF-8로 인코딩된 일반 텍스트만 지원합니다. 요청된 텍스트는 요청된 순서대로 번역되어 반환됩니다.
  • target_lang string : 목표 언어로 번역할 언어를 지정합니다.


이제 필수로 요구되는 값들을 dto로 만들어 보도록 하겠습니다!

TranslationRequest

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class TranslationRequest {
    private List<String> text;
    private String target_lang;
}

2-2. 응답 DTO 만들기

response에서는 두가지 property가 존재하네요.

  • detected_source_language (탐지된 원본 언어): 원본 텍스트에서 감지된 언어. source_lang 매개변수가 지정된 경우에만 해당 값이 반영
  • text (번역된 텍스트) : 번역된 텍스트

위의 property를 토대로 dto를 만들어보겠습니다!

TranslationResponse

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class TranslationResponse {
    private List<Translation> translations;
}

Translation

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Translation {
    private String detected_source_language;
    private String text;
}

2-3. 컨트롤러 만들기

TranslationController

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Collections;

@RestController
@RequestMapping("/api")
class TranslationController {

    private final String deeplApiUrl = "https://api-free.deepl.com/v2/translate";
    private final String authKey = "[API인증키]"

    @PostMapping("/translate")
    public ResponseEntity<TranslationResponse> translate(@RequestBody TranslationRequest request) {
        String targetLang = request.getTarget_lang();

        String apiUrl = deeplApiUrl + "?target_lang=" + targetLang;
        RestTemplate restTemplate = new RestTemplate();

        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("Authorization", "DeepL-Auth-Key " + authKey);

        TranslationResponse response = restTemplate.postForObject(apiUrl, createHttpEntity(request, headers), TranslationResponse.class);

        return ResponseEntity.ok(response);
    }

    private HttpEntity<TranslationRequest> createHttpEntity(TranslationRequest request, HttpHeaders headers) {
        return new HttpEntity<>(request, headers);
    }
}

authKey 변수에 아까 복사해둔 api key를 넣으면 됩니다!

3.PostMan으로 테스트 해보기

이제 postman을 이용하여 테스트를 해보도록 하겠습니다.

3-1. request Body에 값 설정

POST : http://localhost:8080/api/translate

request

  "text": [
    "What's your name?"
  ],
  "target_lang": "KO"
}

3-2. 응답 결과

response

    "translations": [
        {
            "detected_source_language": "EN",
            "text": "이름이 어떻게 되시나요?"
        }
    ]
}

3-3. 총 테스트 결과


profile
프로젝트를 통해 배운 개념이나 겪은 문제점들을 정리하고, 회고록을 작성하며 성장해나가는 곳입니다 😊

0개의 댓글

관련 채용 정보