흔히 볼 수 있는 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS) 에러... CORS를 간단히 정리하면 아래와 같다. CORS는 다른 도메인 간에 리소스를 공유할 때 발생하는 보안상의 이슈를 해결하기 위해 만들어진 매커니즘. 웹 브라우저에서는 보안상의 이유로 다른 출처(Origin)에 있는 리소스를 직접 요청할 수 없다. 자세히 정리된 곳은 많으니 따로 정리하진 않겠다. 스프링 프레임워크에서는 간단히 해결이 가능하다. @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registr..
매번 데이터를 저장하기 위해 데이터베이스를 거치는 것은 번거롭고 오버헤드가 발생하는 작업이다. 때문에, DB의 부하도 줄일 겸해서 인메모리에 짧은 시간, 작은 크기의 데이터를 저장해서 사용하는 경우가 많다. 대표적인 예가 Redis를 사용해서 캐싱을 하는건데, 스프링 자체에서도 캐시 기능을 제공한다. 이전에 비슷한 내용의 글을 작성했는데, 스프링부트에서 굉장히 쉽게 구현이 가능해서 정리해봤다. 사용법 별도의 gradle 설정이 필요 없다. 라이브러리도 딱히 받을 필요없음. 1. Config 설정 - Map형식으로 사용하고 싶어서 ConcurrentMapCacheManager 사용함 @Configuration @EnableCaching public class CacheConfig { @Bean public..
에러 원인 요약 : 요청을 받을 때, 요청 객체에 디폴트 생성자가 없어서 발생하는 문제 분명 요청을 보낼 때는 문제가 없는데, 서버에서 받을 때 아래와 같은 에러가 발생하는 경우가 있다. { "timestamp": "2023-04-26T08:26:19.146+00:00", "status": 400, "error": "Bad Request", "path": "/v1/message" } 대충 이렇게 생긴 객체가 하나 있다. 요청 객체로 쓰기에 별 문제가 없어보인다. @AllArgsConstructor @Getter @Setter public class RequestMessageDto { @NotNull @NotEmpty private String message; } 하지만 이 요청 객체도 위 에러를 발생시킨..
Chat API란? https://platform.openai.com/docs/api-reference/chat 정확히는 OPEN API에서 제공하는 GPT 모델과 chat을 할 수 있게끔 요청하는 API다. 얼마전만해도 completion만을 이용해서 GPT에게 질문하고 결과를 받아올 수 있었는데, 조금 더 다양한 기능을 제공하는 API가 생겼다. 기존에 제공하던 completion보다 더 많은 파라미터를 전달 받고, 조금 더 다양한 데이터를 response에 담아준다. 이전에는 GPT와 메시지를 주고 받는 API로는 Completion만 제공했었다. 그런데 Completion API는 간단한 질답은 가능하지만, 바로 직전의 대화도 기억하지 못한다는 단점이 있었다. 웹에서 제공하는 ChatGPT는 이전..
RestTemplate이란? 이 전에 썼던 글을 참고 다른 매서드에서도 반복적으로 RestTemplate을 사용한다면? RestTemplate 예시를 보면 아래와 같이 매번 객체를 새로 생성해서 사용한다. RestTemplate restTemplate = new RestTemplate(); String url = "http://example.com/users/{id}"; Map params = new HashMap(); params.put("id", "123"); User user = restTemplate.getForObject(url, User.class, params); 이렇게 사용하게 되면 모든 매서드에서 new를 써서 RestTemplate 객체를 생성해서 사용해야 한다. 트래픽이 작은 작업들에..
12월 초에 chatGPT를 처음 안 이후 꾸준히 써왔는데, 최근 갑자기 주목받으면서 특정 시간대 사람들이 몰려서 접속하기도 힘들고 자주 연결이 끊어지기 시작했다. 편하게 쓰고 싶은 마음에, 무슨 방법이 없을까 하다가 OpenAI에서 제공하는 API를 찾게 되었고, 바로 사용해봤다. 이런 저런 문제가 있어 오래걸렸지만, 결과도 괜찮게 나오고, EC2에 배포했는데도 생각보다는 응답이 빨랐다. 처음 설계는 AWS EC2 + Docker로 배포하려고 했지만, 어떤 이유에서인지 Docker에 코드를 올린 후, Tomcat에서 배포가 안됐다. 그래서 일단 AWS EC2만으로 배포해 사용해봤다. 제목에는 ChatGPT API라 작성했지만, 정확히는 OpenAI에서 제공하는 통합 API다. 때문에 학습 관련 API도..
이전 글에 이어서 서버에서 HTTP 요청을 하는 방법에 대한 정리 글이다. 이전 글에선 JAVA에서 사용되는 API를 살펴봤다면, 이번에는 Spring에서 제공하는 방식에 대해 알아보려 한다. Spring Framework 에서는 HTTP 요청을 위해 대표적으로 세 가지 API를 지원한다. RestTemplate Spring 3부터 지원, 전통적인 blocking/동기식 HTTP request 기능 제공 AsyncRestTemplate Spring 4에 추가된 RestTemplate에 비동기 기능을 추가한 방식 WebClient Spring 5에 추가된 RestTemplate을 보완하기 위한 HTTP requests non-blocking/reactive 클라이언트 크게 RestTemplate/WebCl..
- Total
- Today
- Yesterday
- Log
- terraform
- java
- ChatGPT
- EKS
- Elastic cloud
- 스프링부트
- springboot
- AOP
- AWS
- awskrug
- jenkins
- lambda
- AWS EC2
- Spring
- openAI API
- S3
- cache
- CloudFront
- OpenAI
- MySQL
- GIT
- serverless
- chat GPT
- JWT
- 람다
- 코딩테스트
- elasticsearch
- docker
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |