입사 후 온프레미스 환경에서 클라우드 환경으로 넘어오면서 AWS 인프라를 많이 활용해 보고 있다. 그 중에서도 리소스를 저장하기 위해 S3를 가장 많이 사용하고 있는데, 스프링부트에서 연동해서 사용하는 법을 알아보자. 주의!! 이 글은 S3 버킷을 생성하는 부분은 따로 언급하지 않았습니다. AWS S3란? Amazon Simple Storage Service(Amazon S3)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다. 모든 규모와 업종의 고객은 Amazon S3를 사용하여 데이터 레이크, 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 다양한 사용 사례에서 원하는 양의 데이터를..
그동안 서버에서 비동기 처리를 할 일이 많지 않았었는데 이번에 멀티쓰레드를 처음 사용해볼 기회가 생겼다. 다행히 스프링 부트는 멀티쓰레드 개발의 초심자인 사람도 편하게 사용할 수 있게끔 다양한 기능을 제공해 주고 있었다. 이 내용을 소개해 보려고 한다. 비동기(Asynchorous)란? 멀티 쓰레드가 필요한 이유. 비동기는 다른 곳에서도 많이 다루기 때문에 간단히 말하고 넘어가려고한다. 한줄 요약하면, 앞선 작업이 끝나기를 대기하며 수행(동기적)되는게 아니라 앞선 작업의 종료까지 대기하지 않고, 다음 작업을 바로 수행(비동기)한다는 의미이다. 다들 한번쯤 봤을 만한 그림을 첨부한다. @Async 이 어노테이션 하나면 비동기적으로 동작하게 코드를 구현할 수 있다. 자바에서 Thread를 상속받거나 Runn..
JPA를 사용해 DB insert를 하던 중 뜬금없이 아래와 같은 에러가 났다. java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement 흠 DB가 어떤 이유에서인지 read-only 설정이 되어 있군. 인프라 개발자에게 연락해야지. 라고 끝났으면 좋았겠지만, 인프라는 DB 설정을 변경한게 없다고 한다. 웃긴건, 같은 프로젝트의 다른 서비스 내에서의 DB insert는 정상적으로 수행되고 있다는 점이다. 다른 서비스와 차이점을 뜯어보던 중 @Transactional 이 빠져 있는걸 확인했다. @Transactional 어노테이션을 붙이니까 정상 동작했다. 그..
이직 후 맡은 첫 작업은 LOG 였다. 서비스 분석을 위해 코드를 처음 까봤을 때 굉장히 당황스러웠던 게 몇가지 있었는데, 그중 대표적인게 로그 부분이었다. 당황스럽게도, 남기고 있는 로그들은 전부 디버그 수준에서 남길만한 정보들만 남기고 있었다. if (oldUser != null) { log.info("이미 존재하는 사용자입니다. user : {} oldUser : {} ", user, oldUser); userResponseDTO.setCode(-1); userResponseDTO.setErrorMsg("이미 존재하는 사용자입니다."); return userResponseDTO; } 위와 같은 메시지들이 json 형태도 아닌 일반 cout 형태로 출력되고 있었다. 이런 로그들은 서비스를 운영하고 모..
"This model's maximum context length is 4097 tokens. However, you requested 4162 tokens (66 in the messages, 4096 in the completion). Please reduce the length of the messages or completion." GPT를 쓰다보면 이런 에러를 만나는 경우가 있을 것이다. 이 에러는 왜 나는 걸까? 모델에 입력할 수 있는 최대 토큰 수를 초과했기 때문에 나는 에러이다. 토큰 수는 일반적으로 텍스트의 길이를 비율을 정해서 본다면, 어느정도는 맞을 수 있다. 다만, 토큰 수 = 텍스트 길이는 참이 아니다. 그렇다면 토큰 수는 어떻게 세면 될까? OpenAI에서는 공식적으로 토큰 수를..
이 글은 이 전에 작성한, Chat API에서 stream 설정의 연장선상의 글이다. 먼저 SSE(Server-Sent Events)에 대해 알아보기 전에 서버-클라이언트의 통신 방식에 대해 간단히 짚고 넘어가는게 좋을 것 같다. 일반적인 서버-클라이언트 네트워크는 폴링(Polling) 방식을 이용한다. 폴링(Polling) 이란? 클라이언트가 서버에 요청을 보내고 응답을 받는 가장 일반적인 형태의 네트워크 방식이다. HTTP 프로토콜 기반으로 주로 구현되면서 사용되고, 서버의 데이터의 업데이트 속도가 느리거나 실시간성이 요구되지 않는 경우에 유용하게 사용할 수 있다. 다만, 데이터가 업데이트 되지 않았는데 불필요한 요청이 발생하는 경우가 있을 수 있으며, 실시간으로 데이터를 주고 받는데 어려움이 있다는..
이전 글에서 https://api.openai.com/v1/chat/completions API에 대해 간단히 다뤄보았다. 그런데 앞선 글이 너무 겉핥기라 정작 중요한 부분을 몇 가지를 놓친 것 같아서 추가적으로 정리해보려고 한다. 크게 두 가지 부분이 아쉬워서 내용을 보강해보려고 한다. 첫 번째는 GPT 프롬프트(Prompt)라고 알려진 메시지 프롬프트가 들어가는 message 배열 부분과 두 번째는 현재 GPT가 답변을 주는 것처럼 한 글자씩 내려주는 stream 부분이다. 하나씩 알아보자. 1. message 배열 먼저, user는 일반적인 사용자를 의미한다. 우리가 평소에 GPT를 사용할 때처럼 아래와 같이 작성하고 보내도, GPT는 정상적으로 답변을 보내준다. "messages": [ { "ro..
이전 글에서 EC2 환경을 구축하고 Docker를 설치한 후 Tomcat을 통해 웹 서버를 배포까지 진행 해봤다. 그런데, EC2에 Docker를 설치 후 Dockerfile로 Build하는 과정에서 정상적으로 진행되지 않고 자꾸 프리징이 발생했다. 여기서 부터 2편을 시작해 보려고 한다. 1편과의 간격이 너무 길었지만 3편과의 간격이 더 길 수도 있다. 1. 스왑 메모리(swap memory) 적용 EC2에서 제공하는 t2.micro 인스턴스는 램의 크기가 1GB이다. 여기에 리눅스를 올리고 Docker 까지 설치하고, Docker 내부에서 Gradle 빌드까지하기엔, t2.micro의 메모리는 매우매우 부족하다, 그래서 프리징 현상이 발생하게 되고, 이를 해결하기 위해서 스왑 메모리라는 기법을 사용했..
- Total
- Today
- Yesterday
- chat GPT
- openAI API
- lambda
- 인프런
- serverless
- AWS EC2
- MySQL
- AWS
- AOP
- Spring
- S3
- Log
- ChatGPT
- 코딩테스트
- Kotlin
- JWT
- springboot
- java
- GIT
- elasticsearch
- cache
- docker
- OpenAI
- Elastic cloud
- 스프링부트
- OpenFeign
- awskrug
- terraform
- EKS
- 람다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |