이전 글에는 문제가 있다. 현재 DDB Table에는 이미 3천개 이상의 데이터가 쌓여있고, 앞으로 꾸준히 데이터가 쌓일 예정이다. 그런데 조회 쿼리 ScanCommand를 사용했다. 이 조회 방식은 언젠가 문제를 일으킬 것이다. 어떤 문제인지는, AWS의 DDB 스캔 사용 모범사례를 보면 알 수 있다. 일반적으로 Scan 작업은 DynamoDB의 다른 작업보다 비효율적입니다. Scan 작업은 항상 전체 테이블이나 보조 인덱스를 스캔합니다. 그런 후 값을 필터링하여 원하는 결과를 얻기 때문에 결과 세트에서 데이터를 제거해야 하는 단계가 추가됩니다. 가능한 경우, 대용량 테이블 또는 인덱스에서 필터를 사용해 다수의 결과를 제거해야 하는 경우에는 Scan 작업을 최대한 피하는 것이 좋습니다. 여기에 테이블이..
상용 배포를 앞두고, dev 서버에서 잘 동작하던 Lambda에서 문제가 발생했다. Dynamo DB(이하 DDB) 조회해서 데이터의 존재여부를 검증하는데, 분명 조회 데이터가 존재하는데도 Count가 계속 0으로 찍히는 문제였다. dev에선 분명히 잘 동작했고 prod에서도 에러가 나지 않았기 때문에, 오류를 찾기가 너무 힘들었다. 커넥션이 올바르게 되고 있는지부터 쿼리가 올바른지, 로직에 문제가 없는지 다 검증해봤는데, 의외의 곳에서 실마리를 얻었다. prd DDB에 저장된 데이터는 3000개 이상이었는데, 위 조회 방법으로 조회하니 ScannedCount가 709개로 나왔다. 여기서부터 문제가 있음을 인지하게 되었다. 조회 쿼리를 날렸을 때 결과물이 아래와 같이 나왔다. { '$metadata': ..
이전 글에서 Open AI의 Assistant API를 사용해봤다. 이전 글에서의 사용법대로 차례대로 포스트맨 요청으로 사용하면 타이밍만 잘 맞추면, 큰 문제가 발생하지 않는다.(그래도 간간히 빈 문자열이 날아오는 경우가 생긴다.) 만약 실사용하게 된다면 아래와 같이 구성되게 될 것이다.// 쓰레드 생성val threads = assistantsClient.createThreads()// 메시지 생성assistantsClient.createMessages(threads.id, MessagesRequestDto("user", "PREP이 뭐야"))// run 생성val run = assistantsClient.createRuns(threads.id, RunsRequestDto(assistantId))// ..
이전에 GPT 웹사이트에서 Assistants(챗봇)를 구축하는 방식에 대해 알아봤었다. 이게... 당시에는 API가 없다고 했는데, Beta로 나와 있었다. (API reference는 주기적으로 열어보는데, Document와 Beta에 있어서 못찾았다) 근데... 이게 뭐가 하고싶은지는 알겠는데 구조가 조금 복잡하다. 각각의 구성요소에 대해서는 나중에 소개하겠지만, 일단 OpenAI 쪽에서 하고 싶은건 Thread라는 저장소를 사용자별로 만들어 주고 싶었던 것 같다. 그래서 그런지 Assistant 밑에 Thread들이 있지 않다. 구조가 그림만봐도 어려운데, 일단은 세부요소 소개와 구현을 해볼 생각이다. Assistants API란? 어시스턴트 API를 사용하면 자체 애플리케이션 내에서 AI 어시스..
키나 환경변수를 관리하는 툴은 정말 많다. AWS에서 자체적으로 제공하는 경우도 있고, GitHub에서 심어줄 수도 있고 다양한 방법이 있다. 가장 최악의 경우는 Application.yaml 파일에 실수로 그냥 실어버리고 GitHub에 배포하는 경우다. (OpenAI의 경우, 이 부분을 어떻게 캐치해서 강제로 키를 새로 발급해버린다.) 개인적으로 이것저것 써봤을 때, 가장 맘에 들었던게 DotEnv다. 간단하게 사용법을 안내하자면, src아래에 .env 파일에 키를 저장해놓고, 쓰면 되고 .gitignore에 등록해놓고 쓰면 된다. 파일을 만들어놓고 gitignore에 설정해놓으면, 다시 볼일이 없어서 관리하기 편했기 때문에 사용하기 편했다. 이제 설정하는 법을 알아보자. build.gradle.kts..
단일 AWS의 리소스를 사용할 때는 몰랐던 것들이 있다. (루트 사용자로서 EC2만 하나 덜렁 사용할 때는 다른것들을 고려할 필요가 없었다.) AWS 리소스가 다른 AWS 리소스를 사용하려면, 리소스를 사용할 수 있다는 것을 명시해야 한다는 것이다. 그리고 AWS에서는 루트 사용자로 AWS 리소스 접근을 권장하지 않는다. AWS 사용자 별로 역할을 부여해 AWS 리소스에 대한 권한을 주고 사용하길 권장한다. (실수 방지, 모니터링 등 많은 이유가 있다) 이 두 가지는 IAM(AWS Identity and Access Management)이라는 이름으로 관리된다. 해당 페이지에 진입해보면 생소한 내용이 많은데, 하나씩 알아보자. IAM 이란? AWS Identity and Access Management(..
10월 5일에 쓴 글이다. 아래 통계를 보면 뭔가 이상한걸 느낄 수 있다. 두 달 전에 작성한 글인데, 검색을 통해 들어온게 하나도 없다. 흔한 주제라고해도 이건 좀 이상하다. 그래서 구글 서치콘솔로가서 해당 글을 검색해봤다. URL이 검색 인덱스에 등록되지 않았다. 구글님.... 글 쓴지 두달이나 됐는데 너무한거 아닌가요? 그래서 그동안 미뤄왔던 sitemap을 등록하기로 했다. 구글에서 sitemap을 설명한 내용을 봐보자. https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview?hl=ko 사이트맵은 사이트에 있는 페이지, 동영상 및 기타 파일과 그 관계에 관한 정보를 제공하는 파일입니다. Google과 같은 검색엔진..
이전 글들에서 람다와 람다를 사용하기 위해서 Serverless 프레임워크를 사용해봤다. 이 상태로도 사용할 수 있지만 사용 편의를 위해서 Serverless에서는 더 다양한 기능을 제공한다. 진짜 많은 기능들이 있는데, 내가 사용했던 기능들을 순차적으로 알아보려고 한다. 1. yarn 설정 2. 스테이지 설정 가져와서 쓰기 3. 파일 정보 읽어오기(yaml) 4. 환경변수 설정 5. tag 설정 6. 이미 존재하는 API Gateway 가져와서 사용하기 하나씩 알아보자. 1. yarn 설정 가장 첫 글에서 serverless를 설치하면서 yarn도 같이 설치했었는데, 여기서 사용하기 위해서다. package.json에 yarn설정을 해뒀다. { "name": "serverless-options", "v..
- Total
- Today
- Yesterday
- docker
- 스프링부트
- AWS
- OpenAI
- 후쿠오카
- 티스토리챌린지
- springboot
- cache
- 오블완
- OpenFeign
- java
- lambda
- elasticsearch
- AWS EC2
- openAI API
- S3
- serverless
- MySQL
- AOP
- ChatGPT
- Kotlin
- Spring
- CloudFront
- 람다
- EKS
- terraform
- JWT
- Elastic cloud
- GIT
- Log
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |