국내 AI 인공지능 회사인 업스테이지에서 ChatGPT 서비스인 AskUp 채널을 카카오톡에 출시했어요.
출시 3일인 오늘 벌써 카카오톡 채널 친구가 현재 5만 명을 넘었어요. 업스테이지는 OCR 기술까지 더해 이미지를 보내면 바로 이미지에 존재하는 글자 수를 계산해 주고, 텍스트로 변환해주는 등의 기술도 제공해주고 있어 인기가 많아요.
한글 번역해주는 확장 프로그램을 설치해서 사용하고 있었는데, 굉장히 편해서 그런지 인기가 엄청나네요.
그럼 바로 사용해보도록 할게요.
AskUp 사용하기
먼저 카카오톡 채널 친구로 등록하기 위해 하단의 링크를 통해 접속이 필요해요.
오른쪽 상단에 ch+ 버튼을 눌러 채널 등록 한 후에 바로 왼쪽 우주선 같이 생긴 버튼을 누르면 대화를 시작할 수 있어요.
대화를 시작하면 다음과 같이 AskUp 채널과 대화를 할 수 있어요.
AskUp과 대화하는 내용과 이미지는 분석에 사용된다고 하며, 발생하는 손해에 대해 책임을 지지 않는다고 하네요. 먼저 가장 궁금한 OCR 기술을 테스트해 보도록 할게요.
XML 관련 이미지를 마침 공부하고 있었는데, 이미지를 보내고 텍스트로 변환해달라고 요청을 해봤어요.
5초도 안 돼서 바로 답장이 왔네요. 정말 정확하게 텍스트로 변환이 되었을까요?
놀랍게도 정확하게 변환해주네요.. 그렇다면 이 XML을 가지고 코딩해달라고 하면 어떻게 될까요?
XML을 HTTP POST 요청으로 보내기 위해 다음과 같은 자바 코드를 사용할 수 있습니다.
```
URL url = new URL("http://example.com/api/data");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
String xml = "insert your XML data here"; // 위의 CATALOG XML을 여기에 입력해주세요.
try (OutputStream os = connection.getOutputStream()) {
byte[] input = xml.getBytes("utf-8");
os.write(input, 0, input.length);
}
int statusCode = connection.getResponseCode();
```
위 코드에서는 URL 클래스를 사용하여 POST 요청을 보내고, HttpURLConnection 클래스를 사용하여 HTTP 연결을 만듭니다. setRequestMethod("POST") 메서드를 사용하여 요청 방법을 POST로 설정한 후, setDoOutput(true) 메서드를 호출하여 요청 본문을 전송합니다. 요청 본문에는 XML 데이터가 포함됩니다.
XML 데이터를 받는 스프링 컨트롤러를 작성하려면 다음과 같이 작성할 수 있습니다.
```
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
@RestController
public class MyController {
@PostMapping(path = "/myendpoint", consumes = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity<String> handleXmlRequest(@RequestBody String requestBody) throws JAXBException {
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Catalog.class).createUnmarshaller();
Catalog catalog = (Catalog) jaxbUnmarshaller.unmarshal(new StreamSource(new StringReader(requestBody)));
// Do something with the catalog object
return new ResponseEntity<>("Success", HttpStatus.OK);
}
}
```
위 코드에서는 @PostMapping 어노테이션으로 "/myendpoint" 엔드포인트에 대한 POST 요청을 처리합니다. consumes 속성을 사용하여 요청이 XML임을 나타내며, @RequestBody 어노테이션으로 요청 본문을 받습니다.
JAXB 라이브러리를 사용하여 XML 데이터를 Catalog 객체로 역직렬화합니다. 그런 다음 Catalog 객체를 이용하여 작업을 수행합니다. 이 예제에서는 Catalog 객체를 단순히 반환하지만, 실제로는 데이터베이스에 저장하거나 다른 시스템과 통신하여 처리할 수 있습니다. 마지막으로 ResponseEntity 객체를 사용하여 응답을 생성합니다.
- 놀랍게도 정말 그럴싸한 코드를 만들어서 대답해주네요. 요청에 빠진 부분과 직접 개발해야 할 부분만 고쳐주면 실제 동작할 코드라고 생각이 들어요.
이번에 사용하게 된 알뜰교통카드 적립 금액이 얼만지 물어봤어요. 저도 모르고, 질문이 애매하니 앱의 공지사항과 혜택 안내를 참고하라고 유도하네요. 혹시나 해서 최소 금액을 정보는 확실히 알고 있네요.
지금도 계속해서 학습하면서 데이터 모델들의 정확도를 높이고 있을텐데, 조만간 제 일자리가 사라지지 않을까란 걱정이 들정도로 놀랍네요.